@agent-native/core 0.117.1 → 0.118.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/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +40 -0
- package/corpus/core/docs/content/custom-design-system.mdx +445 -0
- package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/a2a/types.ts +1 -0
- package/corpus/core/src/agent/types.ts +1 -1
- package/corpus/core/src/cli/context-xray-local.ts +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +90 -107
- package/corpus/core/src/client/AssistantChat.tsx +30 -13
- package/corpus/core/src/client/CommandMenu.tsx +68 -178
- package/corpus/core/src/client/agent-chat-adapter.ts +3 -1
- package/corpus/core/src/client/app-providers.tsx +1 -1
- package/corpus/core/src/client/chat/message-components.tsx +116 -10
- package/corpus/core/src/client/chat/tool-call-display.tsx +26 -5
- package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
- package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +4 -4
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/corpus/core/src/client/extensions/delete-extension.ts +2 -2
- package/corpus/core/src/client/i18n.tsx +22 -0
- package/corpus/core/src/client/index.ts +17 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +25 -1
- package/corpus/core/src/client/org/TeamPage.tsx +257 -153
- package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +5 -2
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +13 -0
- package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -18
- package/corpus/core/src/client/settings/SecretsSection.tsx +97 -52
- package/corpus/core/src/client/settings/SettingsPanel.tsx +302 -254
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/corpus/core/src/client/settings/index.ts +7 -0
- package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/corpus/core/src/client/setup-connections/index.ts +10 -0
- package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +71 -592
- package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
- package/corpus/core/src/client/sharing/index.ts +42 -0
- package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
- package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
- package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
- package/corpus/core/src/client/sse-event-processor.ts +23 -0
- package/corpus/core/src/client/tool-display.ts +71 -0
- package/corpus/core/src/client/use-agent-engine-configured.ts +12 -19
- package/corpus/core/src/client/use-chat-threads.ts +33 -12
- package/corpus/core/src/db/client.ts +13 -10
- package/corpus/core/src/extensions/actions.ts +13 -5
- package/corpus/core/src/extensions/local.ts +1 -0
- package/corpus/core/src/extensions/routes.ts +10 -5
- package/corpus/core/src/extensions/schema.ts +5 -0
- package/corpus/core/src/extensions/slots/store.ts +14 -4
- package/corpus/core/src/extensions/store.ts +55 -19
- package/corpus/core/src/extensions/theme.ts +1 -1
- package/corpus/core/src/file-upload/registry.ts +9 -0
- package/corpus/core/src/index.browser.ts +5 -0
- package/corpus/core/src/index.ts +1 -0
- package/corpus/core/src/localization/default-messages.ts +28 -6
- package/corpus/core/src/mcp-client/oauth-routes.ts +16 -2
- package/corpus/core/src/scripts/call-agent.ts +5 -1
- package/corpus/core/src/server/action-discovery.ts +8 -0
- package/corpus/core/src/server/better-auth-instance.ts +7 -2
- package/corpus/core/src/server/email-template.ts +18 -0
- package/corpus/core/src/server/email-templates.ts +3 -0
- package/corpus/core/src/server/email.ts +40 -4
- package/corpus/core/src/server/realtime-voice.ts +1 -1
- package/corpus/core/src/sharing/actions/share-resource.ts +1 -0
- package/corpus/core/src/styles/agent-native.css +0 -24
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/corpus/core/src/templates/default/app/design-system.ts +3 -0
- package/corpus/core/src/templates/default/app/global.css +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -7
- package/corpus/core/src/templates/default/app/root.tsx +5 -2
- package/corpus/core/src/templates/default/package.json +1 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/user-profile/actions/get-user-profile.ts +16 -0
- package/corpus/core/src/user-profile/actions/update-user-profile.ts +24 -0
- package/corpus/core/src/user-profile/index.ts +5 -0
- package/corpus/core/src/user-profile/shared.ts +14 -0
- package/corpus/core/src/user-profile/store.ts +50 -0
- package/corpus/core/src/vite/client.ts +39 -0
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/analytics/app/design-system.ts +3 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
- package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/assets/app/design-system.ts +3 -0
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
- package/corpus/templates/assets/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/brain/app/design-system.ts +3 -0
- package/corpus/templates/brain/app/global.css +2 -2
- package/corpus/templates/brain/app/lib/brain.ts +2 -2
- package/corpus/templates/brain/app/root.tsx +2 -2
- package/corpus/templates/brain/app/routes/sources.tsx +8 -8
- package/corpus/templates/brain/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +6 -2
- package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/calendar/app/design-system.ts +3 -0
- package/corpus/templates/calendar/app/global.css +1 -1
- package/corpus/templates/calendar/app/root.tsx +2 -2
- package/corpus/templates/calendar/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/chat/app/design-system.ts +3 -0
- package/corpus/templates/chat/app/global.css +1 -1
- package/corpus/templates/chat/app/root.tsx +2 -2
- package/corpus/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/clips/actions/export-to-brain.ts +1 -1
- package/corpus/templates/clips/actions/invite-member.ts +1 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -2
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +20 -11
- package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/clips/app/design-system.ts +3 -0
- package/corpus/templates/clips/app/global.css +1 -1
- package/corpus/templates/clips/app/root.tsx +7 -2
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/record.tsx +2 -88
- package/corpus/templates/clips/changelog/2026-07-22-builder-connected-recordings-start-resumable-upload-sessions.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clip-thumbnails-now-come-from-the-recording-instead-of-the-p.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clips-emails-now-render-the-agent-native-logo-in-gmail-and-o.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-dismissed-zoom-and-teams-meeting-note-prompts-now-stay-dismi.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-fixed-windows-recordings-aborting-during-the-countdown.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-quieter-permissions-and-rewind-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +100 -62
- package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +31 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -167
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +10 -1
- package/corpus/templates/clips/desktop/src/styles.css +111 -36
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +67 -4
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +11 -2
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +51 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +5 -1
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +0 -189
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -0
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
- package/corpus/templates/clips/server/plugins/db.ts +6 -2
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +41 -41
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +2 -1
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +2 -1
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +9 -9
- package/corpus/templates/content/app/components/editor/database/sidebar.tsx +7 -7
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +11 -11
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -3
- package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
- package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
- package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/content/app/design-system.ts +3 -0
- package/corpus/templates/content/app/global.css +30 -4
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/content/changelog/2026-07-22-page-actions-are-grouped-into-the-three-dots-menu-for-a-clea.md +6 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +10 -10
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +1 -6
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +3 -2
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +13 -12
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +17 -17
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +8 -8
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +3 -8
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +2 -1
- package/corpus/templates/crm/app/components/crm/Surface.tsx +3 -2
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +2 -2
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +7 -7
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -1
- package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/crm/app/design-system.ts +3 -0
- package/corpus/templates/crm/app/global.css +1 -1
- package/corpus/templates/crm/app/root.tsx +9 -6
- package/corpus/templates/crm/app/routes/dashboard.tsx +1 -1
- package/corpus/templates/crm/app/routes/proposals.tsx +13 -13
- package/corpus/templates/crm/app/routes/setup.tsx +9 -9
- package/corpus/templates/crm/app/routes/tasks.tsx +14 -14
- package/corpus/templates/crm/app/routes/views.tsx +16 -16
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +19 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -1
- package/corpus/templates/design/app/components/design/EditPanel.tsx +177 -52
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +179 -59
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +74 -27
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +2 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/design/app/components/ui/command.tsx +1 -0
- package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/design/app/design-system.ts +3 -0
- package/corpus/templates/design/app/global.css +1 -1
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -5
- package/corpus/templates/design/app/root.tsx +2 -2
- package/corpus/templates/design/changelog/2026-07-22-design-owners-can-keep-editing-their-designs-after-switching.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-inspector-tabs-keep-their-text-labels-at-narrow-widths.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-narrow-breakpoint-previews-keep-their-device-labels-readable.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-removed-the-draft-status-chip-from-the-design-editor.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-breakpoint-controls-stay-within-narrow-sidebars.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-peers-now-use-a-softer-selection-highlight-withou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-rotate-from-context-menu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-the-selection-outline-now-stays-attached-while-moving-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-view-only-designs-now-support-figma-style-layer-inspection-w.md +6 -0
- package/corpus/templates/design/server/db/index.ts +4 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
- package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/dispatch/app/design-system.ts +3 -0
- package/corpus/templates/dispatch/app/dispatch-extensions.tsx +2 -2
- package/corpus/templates/dispatch/app/global.css +1 -1
- package/corpus/templates/dispatch/app/root.tsx +12 -9
- package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/forms/app/design-system.ts +3 -0
- package/corpus/templates/forms/app/global.css +1 -1
- package/corpus/templates/forms/app/hooks/use-forms.ts +55 -2
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +3 -3
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +23 -6
- package/corpus/templates/forms/app/root.tsx +2 -2
- package/corpus/templates/forms/changelog/2026-07-22-forms-now-archive-with-optimistic-feedback.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/macros/app/design-system.ts +3 -0
- package/corpus/templates/macros/app/root.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
- package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +3 -3
- package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +2 -2
- package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
- package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/mail/app/design-system.ts +3 -0
- package/corpus/templates/mail/app/global.css +1 -1
- package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
- package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/plan/app/design-system.ts +3 -0
- package/corpus/templates/plan/app/global.css +1 -1
- package/corpus/templates/plan/app/root.tsx +2 -2
- package/corpus/templates/plan/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/slides/app/design-system.ts +3 -0
- package/corpus/templates/slides/app/root.tsx +2 -2
- package/corpus/templates/slides/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-slides-no-longer-fail-intermittently-on-fresh-server-instances.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-uploaded-screenshots-can-now-be-analyzed-and-recreated-as-ed.md +6 -0
- package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -3
- package/corpus/templates/slides/server/plugins/db.ts +44 -17
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/tasks/app/design-system.ts +3 -0
- package/corpus/templates/tasks/app/global.css +1 -1
- package/corpus/templates/tasks/app/root.tsx +5 -2
- package/corpus/toolkit/CHANGELOG.md +14 -0
- package/corpus/toolkit/agent-native.eject.json +71 -0
- package/corpus/toolkit/package.json +31 -1
- package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +100 -39
- package/corpus/toolkit/src/chat-history/index.ts +9 -0
- package/corpus/toolkit/src/chat-history/useChatHistoryRailController.ts +76 -0
- package/corpus/toolkit/src/chat-history.css +2 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +11 -8
- package/corpus/toolkit/src/composer/PromptComposer.tsx +27 -6
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +107 -22
- package/corpus/toolkit/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
- package/corpus/toolkit/src/conformance/index.ts +3 -0
- package/corpus/toolkit/src/conformance/runner.tsx +710 -0
- package/corpus/toolkit/src/conformance/types.ts +45 -0
- package/corpus/toolkit/src/conformance/version.ts +22 -0
- package/corpus/toolkit/src/design-system/components.tsx +146 -0
- package/corpus/toolkit/src/design-system/context.tsx +31 -0
- package/corpus/toolkit/src/design-system/default-adapter.tsx +915 -0
- package/corpus/toolkit/src/design-system/definition.ts +14 -0
- package/corpus/toolkit/src/design-system/error-boundary.tsx +37 -0
- package/corpus/toolkit/src/design-system/index.ts +7 -0
- package/corpus/toolkit/src/design-system/theme.ts +145 -0
- package/corpus/toolkit/src/design-system/types.ts +363 -0
- package/corpus/toolkit/src/provider.tsx +98 -5
- package/corpus/toolkit/src/ui/button.tsx +95 -6
- package/corpus/toolkit/src/ui/dialog.tsx +48 -23
- package/corpus/toolkit/src/ui/popover.tsx +16 -2
- package/corpus/toolkit/src/ui/select.tsx +7 -3
- package/corpus/toolkit/src/ui/sidebar.tsx +47 -48
- package/corpus/toolkit/src/ui/tooltip.tsx +7 -3
- package/dist/a2a/types.d.ts +1 -1
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/context-xray-local.js +1 -1
- package/dist/cli/context-xray-local.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +14 -14
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +26 -15
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +18 -106
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +2 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +1 -1
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +9 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +62 -7
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +20 -5
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.js +9 -12
- package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
- package/dist/client/components/ui/message-scroller.d.ts +1 -1
- package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
- package/dist/client/components/ui/message-scroller.js +4 -3
- package/dist/client/components/ui/message-scroller.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +2 -2
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +11 -11
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
- package/dist/client/extensions/delete-extension.d.ts +1 -1
- package/dist/client/extensions/delete-extension.d.ts.map +1 -1
- package/dist/client/extensions/delete-extension.js +1 -1
- package/dist/client/extensions/delete-extension.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +9 -0
- package/dist/client/i18n.js.map +1 -1
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +3 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +12 -4
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +41 -33
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +9 -10
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +5 -4
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +10 -8
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +13 -0
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +2 -5
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +18 -6
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +87 -119
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +16 -1
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
- package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
- package/dist/client/settings/useSettingsPanelController.js +103 -0
- package/dist/client/settings/useSettingsPanelController.js.map +1 -0
- package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
- package/dist/client/setup-connections/index.d.ts +2 -1
- package/dist/client/setup-connections/index.d.ts.map +1 -1
- package/dist/client/setup-connections/index.js +2 -1
- package/dist/client/setup-connections/index.js.map +1 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +5 -5
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +19 -464
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts +6 -6
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +69 -283
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/index.d.ts +3 -0
- package/dist/client/sharing/index.d.ts.map +1 -1
- package/dist/client/sharing/index.js +3 -0
- package/dist/client/sharing/index.js.map +1 -1
- package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
- package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
- package/dist/client/sharing/share-controller-helpers.js +224 -0
- package/dist/client/sharing/share-controller-helpers.js.map +1 -0
- package/dist/client/sharing/useShareButtonController.d.ts +91 -0
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
- package/dist/client/sharing/useShareButtonController.js +397 -0
- package/dist/client/sharing/useShareButtonController.js.map +1 -0
- package/dist/client/sharing/useShareDialogController.d.ts +109 -0
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
- package/dist/client/sharing/useShareDialogController.js +348 -0
- package/dist/client/sharing/useShareDialogController.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +21 -0
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tool-display.d.ts +16 -0
- package/dist/client/tool-display.d.ts.map +1 -1
- package/dist/client/tool-display.js +52 -0
- package/dist/client/tool-display.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +3 -2
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +7 -19
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +21 -8
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/db/client.d.ts +7 -7
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +13 -10
- package/dist/db/client.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +8 -5
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/local.d.ts.map +1 -1
- package/dist/extensions/local.js +1 -0
- package/dist/extensions/local.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +9 -4
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +23 -2
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +5 -0
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/slots/store.d.ts +1 -1
- package/dist/extensions/slots/store.d.ts.map +1 -1
- package/dist/extensions/slots/store.js +4 -4
- package/dist/extensions/slots/store.js.map +1 -1
- package/dist/extensions/store.d.ts +1 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +38 -21
- package/dist/extensions/store.js.map +1 -1
- package/dist/extensions/theme.js +1 -1
- package/dist/extensions/theme.js.map +1 -1
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +9 -0
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -0
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +20 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +26 -6
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/oauth-routes.d.ts +2 -0
- package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
- package/dist/mcp-client/oauth-routes.js +12 -2
- package/dist/mcp-client/oauth-routes.js.map +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/actions/custom-provider-registration.d.ts +3 -3
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +5 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +7 -2
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/email-template.d.ts +3 -0
- package/dist/server/email-template.d.ts.map +1 -1
- package/dist/server/email-template.js +13 -0
- package/dist/server/email-template.js.map +1 -1
- package/dist/server/email-templates.d.ts.map +1 -1
- package/dist/server/email-templates.js +3 -0
- package/dist/server/email-templates.js.map +1 -1
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +27 -4
- package/dist/server/email.js.map +1 -1
- package/dist/server/realtime-voice.js +1 -1
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/sharing/actions/share-resource.js +1 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/styles/agent-native.css +0 -24
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/dist/templates/chat/app/design-system.ts +3 -0
- package/dist/templates/chat/app/global.css +1 -1
- package/dist/templates/chat/app/root.tsx +2 -2
- package/dist/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/dist/templates/default/app/design-system.ts +3 -0
- package/dist/templates/default/app/global.css +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -6
- package/dist/templates/default/app/i18n/de-DE.ts +6 -6
- package/dist/templates/default/app/i18n/en-US.ts +6 -6
- package/dist/templates/default/app/i18n/es-ES.ts +6 -6
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -6
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -6
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -6
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -6
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -6
- package/dist/templates/default/app/i18n/zh-CN.ts +7 -7
- package/dist/templates/default/app/i18n/zh-TW.ts +7 -7
- package/dist/templates/default/app/root.tsx +5 -2
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/user-profile/actions/get-user-profile.d.ts +4 -0
- package/dist/user-profile/actions/get-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/get-user-profile.js +14 -0
- package/dist/user-profile/actions/get-user-profile.js.map +1 -0
- package/dist/user-profile/actions/update-user-profile.d.ts +6 -0
- package/dist/user-profile/actions/update-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/update-user-profile.js +20 -0
- package/dist/user-profile/actions/update-user-profile.js.map +1 -0
- package/dist/user-profile/index.d.ts +2 -0
- package/dist/user-profile/index.d.ts.map +1 -0
- package/dist/user-profile/index.js +2 -0
- package/dist/user-profile/index.js.map +1 -0
- package/dist/user-profile/shared.d.ts +7 -0
- package/dist/user-profile/shared.d.ts.map +1 -0
- package/dist/user-profile/shared.js +6 -0
- package/dist/user-profile/shared.js.map +1 -0
- package/dist/user-profile/store.d.ts +4 -0
- package/dist/user-profile/store.d.ts.map +1 -0
- package/dist/user-profile/store.js +38 -0
- package/dist/user-profile/store.js.map +1 -0
- package/dist/vite/client.d.ts +3 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +31 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/custom-design-system.mdx +445 -0
- package/docs/content/toolkit-ui.mdx +16 -0
- package/package.json +3 -2
- package/src/a2a/types.ts +1 -0
- package/src/agent/types.ts +1 -1
- package/src/cli/context-xray-local.ts +1 -1
- package/src/client/AgentPanel.tsx +90 -107
- package/src/client/AssistantChat.tsx +30 -13
- package/src/client/CommandMenu.tsx +68 -178
- package/src/client/agent-chat-adapter.ts +3 -1
- package/src/client/app-providers.tsx +1 -1
- package/src/client/chat/message-components.tsx +116 -10
- package/src/client/chat/tool-call-display.tsx +26 -5
- package/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
- package/src/client/components/ui/message-scroller.tsx +15 -1
- package/src/client/extensions/ExtensionViewer.tsx +4 -4
- package/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/src/client/extensions/delete-extension.ts +2 -2
- package/src/client/i18n.tsx +22 -0
- package/src/client/index.ts +17 -0
- package/src/client/org/OrgSwitcher.tsx +25 -1
- package/src/client/org/TeamPage.tsx +257 -153
- package/src/client/progress/RunsTray.tsx +89 -88
- package/src/client/resources/McpConnectionSuggestion.tsx +5 -2
- package/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/src/client/resources/mcp-integration-catalog.ts +13 -0
- package/src/client/settings/DemoModeSection.tsx +6 -18
- package/src/client/settings/SecretsSection.tsx +97 -52
- package/src/client/settings/SettingsPanel.tsx +302 -254
- package/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/src/client/settings/index.ts +7 -0
- package/src/client/settings/useSettingsPanelController.ts +155 -0
- package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/src/client/setup-connections/index.ts +10 -0
- package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/src/client/sharing/ShareButton.tsx +71 -592
- package/src/client/sharing/ShareDialog.tsx +299 -633
- package/src/client/sharing/index.ts +42 -0
- package/src/client/sharing/share-controller-helpers.ts +318 -0
- package/src/client/sharing/useShareButtonController.ts +600 -0
- package/src/client/sharing/useShareDialogController.ts +559 -0
- package/src/client/sse-event-processor.ts +23 -0
- package/src/client/tool-display.ts +71 -0
- package/src/client/use-agent-engine-configured.ts +12 -19
- package/src/client/use-chat-threads.ts +33 -12
- package/src/db/client.ts +13 -10
- package/src/extensions/actions.ts +13 -5
- package/src/extensions/local.ts +1 -0
- package/src/extensions/routes.ts +10 -5
- package/src/extensions/schema.ts +5 -0
- package/src/extensions/slots/store.ts +14 -4
- package/src/extensions/store.ts +55 -19
- package/src/extensions/theme.ts +1 -1
- package/src/file-upload/registry.ts +9 -0
- package/src/index.browser.ts +5 -0
- package/src/index.ts +1 -0
- package/src/localization/default-messages.ts +28 -6
- package/src/mcp-client/oauth-routes.ts +16 -2
- package/src/scripts/call-agent.ts +5 -1
- package/src/server/action-discovery.ts +8 -0
- package/src/server/better-auth-instance.ts +7 -2
- package/src/server/email-template.ts +18 -0
- package/src/server/email-templates.ts +3 -0
- package/src/server/email.ts +40 -4
- package/src/server/realtime-voice.ts +1 -1
- package/src/sharing/actions/share-resource.ts +1 -0
- package/src/styles/agent-native.css +0 -24
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/src/templates/chat/app/design-system.ts +3 -0
- package/src/templates/chat/app/global.css +1 -1
- package/src/templates/chat/app/root.tsx +2 -2
- package/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/src/templates/default/app/design-system.ts +3 -0
- package/src/templates/default/app/global.css +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/src/templates/default/app/i18n/en-US.ts +6 -6
- package/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/src/templates/default/app/i18n/zh-TW.ts +7 -7
- package/src/templates/default/app/root.tsx +5 -2
- package/src/templates/default/package.json +1 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +43 -2
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/user-profile/actions/get-user-profile.ts +16 -0
- package/src/user-profile/actions/update-user-profile.ts +24 -0
- package/src/user-profile/index.ts +5 -0
- package/src/user-profile/shared.ts +14 -0
- package/src/user-profile/store.ts +50 -0
- package/src/vite/client.ts +39 -0
- package/corpus/templates/analytics/app/components/ui/calendar.tsx +0 -70
- package/corpus/templates/analytics/app/components/ui/chart.tsx +0 -386
- package/corpus/templates/calendar/app/components/ui/sonner.tsx +0 -58
- package/corpus/templates/forms/app/components/ui/calendar.tsx +0 -214
- package/corpus/templates/forms/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/forms/app/components/ui/command.tsx +0 -153
- package/corpus/templates/forms/app/components/ui/context-menu.tsx +0 -198
- package/corpus/templates/forms/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/macros/app/components/ui/menubar.tsx +0 -238
- package/corpus/templates/macros/app/components/ui/progress.tsx +0 -26
- package/corpus/templates/mail/app/components/ui/calendar.tsx +0 -211
- package/corpus/templates/mail/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/mail/app/components/ui/command.tsx +0 -153
- package/corpus/templates/mail/app/components/ui/context-menu.tsx +0 -198
- package/corpus/templates/mail/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/tasks/app/components/ui/accordion.tsx +0 -56
- package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +0 -5
- package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +0 -115
- package/corpus/templates/tasks/app/components/ui/calendar.tsx +0 -70
- package/corpus/templates/tasks/app/components/ui/carousel.tsx +0 -260
- package/corpus/templates/tasks/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/tasks/app/components/ui/form.tsx +0 -177
- package/corpus/templates/tasks/app/components/ui/hover-card.tsx +0 -27
- package/corpus/templates/tasks/app/components/ui/input-otp.tsx +0 -69
- package/corpus/templates/tasks/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +0 -128
- package/corpus/templates/tasks/app/components/ui/pagination.tsx +0 -121
- package/corpus/templates/tasks/app/components/ui/resizable.tsx +0 -43
- package/corpus/templates/tasks/app/components/ui/sidebar.tsx +0 -782
- package/corpus/templates/tasks/app/components/ui/toggle.tsx +0 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconChevronDown,\n IconPlus,\n IconFilter,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconPencil,\n IconGripVertical,\n IconTool,\n IconEye,\n IconEyeOff,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\n\nimport { extensionPath, isExtensionPathname } from \"../../extensions/path.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"../components/ui/hover-card.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { PromptComposer } from \"../composer/index.js\";\nimport { DEFAULT_LOCALE, useOptionalLocale, type LocaleCode } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport { ExtensionQueryErrorState } from \"./ExtensionQueryErrorState.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n globallyHidden?: boolean;\n source?: {\n mode?: \"database\" | \"local-files\";\n entryPath?: string;\n };\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\ntype ExtensionsCopy = {\n title: string;\n description: string;\n open: string;\n learnMore: string;\n sortOptions: string;\n sortTooltip: string;\n sortBy: string;\n mostUsed: string;\n alphabetical: string;\n manualOrder: string;\n showHidden: string;\n newExtension: string;\n createPlaceholder: string;\n collapse: string;\n expand: string;\n reorder: (name: string) => string;\n dragToReorder: string;\n hiddenFromEveryone: string;\n file: string;\n unfavorite: string;\n favorite: string;\n actions: string;\n editInFiles: string;\n rename: string;\n unhideForEveryone: string;\n hideFromEveryone: string;\n removeFromMyList: string;\n delete: string;\n showLess: string;\n showMore: string;\n loadError: string;\n};\n\nconst EXTENSIONS_COPY: Record<LocaleCode, ExtensionsCopy> = {\n \"en-US\": {\n title: \"Extensions\",\n description:\n \"Build small sandboxed apps that can read app data, call actions, and save their own state.\",\n open: \"Open extensions\",\n learnMore: \"Learn more\",\n sortOptions: \"Extensions sort options\",\n sortTooltip: \"Extensions sort\",\n sortBy: \"Sort by\",\n mostUsed: \"Most used\",\n alphabetical: \"Alphabetical\",\n manualOrder: \"Manual order\",\n showHidden: \"Show hidden\",\n newExtension: \"New extension\",\n createPlaceholder: \"Describe what you'd like to build...\",\n collapse: \"Collapse extensions\",\n expand: \"Expand extensions\",\n reorder: (name) => `Reorder ${name}`,\n dragToReorder: \"Drag to reorder\",\n hiddenFromEveryone: \"Hidden from everyone\",\n file: \"File\",\n unfavorite: \"Unfavorite\",\n favorite: \"Favorite\",\n actions: \"Extension actions\",\n editInFiles: \"Edit in files\",\n rename: \"Rename\",\n unhideForEveryone: \"Unhide for everyone\",\n hideFromEveryone: \"Hide from everyone\",\n removeFromMyList: \"Remove from my list\",\n delete: \"Delete\",\n showLess: \"show less\",\n showMore: \"show more\",\n loadError: \"Couldn't load extensions.\",\n },\n \"zh-CN\": {\n title: \"扩展\",\n description: \"构建可读取应用数据、调用操作并保存自身状态的小型沙盒应用。\",\n open: \"打开扩展\",\n learnMore: \"了解更多\",\n sortOptions: \"扩展排序选项\",\n sortTooltip: \"扩展排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"按字母顺序\",\n manualOrder: \"手动排序\",\n showHidden: \"显示隐藏项\",\n newExtension: \"新建扩展\",\n createPlaceholder: \"描述你想构建的内容...\",\n collapse: \"收起扩展\",\n expand: \"展开扩展\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖动以重新排序\",\n hiddenFromEveryone: \"已对所有人隐藏\",\n file: \"文件\",\n unfavorite: \"取消收藏\",\n favorite: \"收藏\",\n actions: \"扩展操作\",\n editInFiles: \"在文件中编辑\",\n rename: \"重命名\",\n unhideForEveryone: \"对所有人取消隐藏\",\n hideFromEveryone: \"对所有人隐藏\",\n removeFromMyList: \"从我的列表中移除\",\n delete: \"删除\",\n showLess: \"收起\",\n showMore: \"显示更多\",\n loadError: \"无法加载扩展。\",\n },\n \"zh-TW\": {\n title: \"擴充功能\",\n description:\n \"建立可讀取應用程式資料、呼叫動作並儲存自身狀態的小型沙盒應用程式。\",\n open: \"開啟擴充功能\",\n learnMore: \"了解更多\",\n sortOptions: \"擴充功能排序選項\",\n sortTooltip: \"擴充功能排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"依字母排序\",\n manualOrder: \"手動排序\",\n showHidden: \"顯示隱藏項目\",\n newExtension: \"新增擴充功能\",\n createPlaceholder: \"描述你想建立的內容...\",\n collapse: \"收合擴充功能\",\n expand: \"展開擴充功能\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖曳以重新排序\",\n hiddenFromEveryone: \"已對所有人隱藏\",\n file: \"檔案\",\n unfavorite: \"取消最愛\",\n favorite: \"加入最愛\",\n actions: \"擴充功能動作\",\n editInFiles: \"在檔案中編輯\",\n rename: \"重新命名\",\n unhideForEveryone: \"對所有人取消隱藏\",\n hideFromEveryone: \"對所有人隱藏\",\n removeFromMyList: \"從我的清單移除\",\n delete: \"刪除\",\n showLess: \"顯示較少\",\n showMore: \"顯示更多\",\n loadError: \"無法載入擴充功能。\",\n },\n \"es-ES\": {\n title: \"Extensiones\",\n description:\n \"Crea pequeñas apps aisladas que pueden leer datos de la app, llamar acciones y guardar su propio estado.\",\n open: \"Abrir extensiones\",\n learnMore: \"Más información\",\n sortOptions: \"Opciones de orden de extensiones\",\n sortTooltip: \"Orden de extensiones\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Más usadas\",\n alphabetical: \"Alfabético\",\n manualOrder: \"Orden manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nueva extensión\",\n createPlaceholder: \"Describe lo que quieres crear...\",\n collapse: \"Contraer extensiones\",\n expand: \"Expandir extensiones\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arrastra para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Archivo\",\n unfavorite: \"Quitar de favoritos\",\n favorite: \"Favorito\",\n actions: \"Acciones de extensión\",\n editInFiles: \"Editar en archivos\",\n rename: \"Renombrar\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Quitar de mi lista\",\n delete: \"Eliminar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar más\",\n loadError: \"No se pudieron cargar las extensiones.\",\n },\n \"fr-FR\": {\n title: \"Extensions\",\n description:\n \"Créez de petites apps sandboxées capables de lire les données de l'app, d'appeler des actions et d'enregistrer leur propre état.\",\n open: \"Ouvrir les extensions\",\n learnMore: \"En savoir plus\",\n sortOptions: \"Options de tri des extensions\",\n sortTooltip: \"Tri des extensions\",\n sortBy: \"Trier par\",\n mostUsed: \"Les plus utilisées\",\n alphabetical: \"Alphabétique\",\n manualOrder: \"Ordre manuel\",\n showHidden: \"Afficher les masquées\",\n newExtension: \"Nouvelle extension\",\n createPlaceholder: \"Décrivez ce que vous voulez créer...\",\n collapse: \"Replier les extensions\",\n expand: \"Déplier les extensions\",\n reorder: (name) => `Réordonner ${name}`,\n dragToReorder: \"Faire glisser pour réordonner\",\n hiddenFromEveryone: \"Masquée pour tout le monde\",\n file: \"Fichier\",\n unfavorite: \"Retirer des favoris\",\n favorite: \"Favori\",\n actions: \"Actions de l'extension\",\n editInFiles: \"Modifier dans les fichiers\",\n rename: \"Renommer\",\n unhideForEveryone: \"Afficher pour tout le monde\",\n hideFromEveryone: \"Masquer pour tout le monde\",\n removeFromMyList: \"Retirer de ma liste\",\n delete: \"Supprimer\",\n showLess: \"afficher moins\",\n showMore: \"afficher plus\",\n loadError: \"Impossible de charger les extensions.\",\n },\n \"de-DE\": {\n title: \"Erweiterungen\",\n description:\n \"Erstelle kleine Sandbox-Apps, die App-Daten lesen, Aktionen aufrufen und ihren eigenen Zustand speichern können.\",\n open: \"Erweiterungen öffnen\",\n learnMore: \"Mehr erfahren\",\n sortOptions: \"Sortieroptionen für Erweiterungen\",\n sortTooltip: \"Erweiterungen sortieren\",\n sortBy: \"Sortieren nach\",\n mostUsed: \"Am häufigsten genutzt\",\n alphabetical: \"Alphabetisch\",\n manualOrder: \"Manuelle Reihenfolge\",\n showHidden: \"Ausgeblendete anzeigen\",\n newExtension: \"Neue Erweiterung\",\n createPlaceholder: \"Beschreibe, was du erstellen möchtest...\",\n collapse: \"Erweiterungen einklappen\",\n expand: \"Erweiterungen ausklappen\",\n reorder: (name) => `${name} neu anordnen`,\n dragToReorder: \"Zum Neuordnen ziehen\",\n hiddenFromEveryone: \"Für alle ausgeblendet\",\n file: \"Datei\",\n unfavorite: \"Aus Favoriten entfernen\",\n favorite: \"Favorisieren\",\n actions: \"Erweiterungsaktionen\",\n editInFiles: \"In Dateien bearbeiten\",\n rename: \"Umbenennen\",\n unhideForEveryone: \"Für alle einblenden\",\n hideFromEveryone: \"Für alle ausblenden\",\n removeFromMyList: \"Aus meiner Liste entfernen\",\n delete: \"Löschen\",\n showLess: \"weniger anzeigen\",\n showMore: \"mehr anzeigen\",\n loadError: \"Erweiterungen konnten nicht geladen werden.\",\n },\n \"ja-JP\": {\n title: \"拡張機能\",\n description:\n \"アプリデータを読み取り、アクションを呼び出し、独自の状態を保存できる小さなサンドボックスアプリを作成します。\",\n open: \"拡張機能を開く\",\n learnMore: \"詳しく見る\",\n sortOptions: \"拡張機能の並べ替えオプション\",\n sortTooltip: \"拡張機能の並べ替え\",\n sortBy: \"並べ替え\",\n mostUsed: \"よく使う順\",\n alphabetical: \"アルファベット順\",\n manualOrder: \"手動順\",\n showHidden: \"非表示を表示\",\n newExtension: \"新しい拡張機能\",\n createPlaceholder: \"作りたいものを説明してください...\",\n collapse: \"拡張機能を折りたたむ\",\n expand: \"拡張機能を展開\",\n reorder: (name) => `${name} を並べ替え`,\n dragToReorder: \"ドラッグして並べ替え\",\n hiddenFromEveryone: \"全員に非表示\",\n file: \"ファイル\",\n unfavorite: \"お気に入り解除\",\n favorite: \"お気に入り\",\n actions: \"拡張機能の操作\",\n editInFiles: \"ファイルで編集\",\n rename: \"名前を変更\",\n unhideForEveryone: \"全員に表示\",\n hideFromEveryone: \"全員に非表示\",\n removeFromMyList: \"自分のリストから削除\",\n delete: \"削除\",\n showLess: \"少なく表示\",\n showMore: \"さらに表示\",\n loadError: \"拡張機能を読み込めませんでした。\",\n },\n \"ko-KR\": {\n title: \"확장\",\n description:\n \"앱 데이터를 읽고, 액션을 호출하고, 자체 상태를 저장할 수 있는 작은 샌드박스 앱을 만듭니다.\",\n open: \"확장 열기\",\n learnMore: \"자세히 알아보기\",\n sortOptions: \"확장 정렬 옵션\",\n sortTooltip: \"확장 정렬\",\n sortBy: \"정렬 기준\",\n mostUsed: \"가장 많이 사용\",\n alphabetical: \"가나다순\",\n manualOrder: \"수동 순서\",\n showHidden: \"숨김 항목 표시\",\n newExtension: \"새 확장\",\n createPlaceholder: \"만들고 싶은 것을 설명하세요...\",\n collapse: \"확장 접기\",\n expand: \"확장 펼치기\",\n reorder: (name) => `${name} 순서 변경`,\n dragToReorder: \"드래그하여 순서 변경\",\n hiddenFromEveryone: \"모두에게 숨김\",\n file: \"파일\",\n unfavorite: \"즐겨찾기 해제\",\n favorite: \"즐겨찾기\",\n actions: \"확장 작업\",\n editInFiles: \"파일에서 편집\",\n rename: \"이름 변경\",\n unhideForEveryone: \"모두에게 표시\",\n hideFromEveryone: \"모두에게 숨기기\",\n removeFromMyList: \"내 목록에서 제거\",\n delete: \"삭제\",\n showLess: \"덜 보기\",\n showMore: \"더 보기\",\n loadError: \"확장 프로그램을 불러올 수 없습니다.\",\n },\n \"pt-BR\": {\n title: \"Extensões\",\n description:\n \"Crie pequenos apps isolados que podem ler dados do app, chamar ações e salvar o próprio estado.\",\n open: \"Abrir extensões\",\n learnMore: \"Saiba mais\",\n sortOptions: \"Opções de ordenação das extensões\",\n sortTooltip: \"Ordenação das extensões\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Mais usadas\",\n alphabetical: \"Alfabética\",\n manualOrder: \"Ordem manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nova extensão\",\n createPlaceholder: \"Descreva o que você quer criar...\",\n collapse: \"Recolher extensões\",\n expand: \"Expandir extensões\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arraste para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Arquivo\",\n unfavorite: \"Remover dos favoritos\",\n favorite: \"Favoritar\",\n actions: \"Ações da extensão\",\n editInFiles: \"Editar em arquivos\",\n rename: \"Renomear\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Remover da minha lista\",\n delete: \"Excluir\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar mais\",\n loadError: \"Não foi possível carregar as extensões.\",\n },\n \"hi-IN\": {\n title: \"एक्सटेंशन\",\n description:\n \"छोटे सैंडबॉक्स ऐप बनाएं जो ऐप डेटा पढ़ सकते हैं, कार्रवाइयां चला सकते हैं और अपना स्टेट सहेज सकते हैं।\",\n open: \"एक्सटेंशन खोलें\",\n learnMore: \"और जानें\",\n sortOptions: \"एक्सटेंशन क्रम विकल्प\",\n sortTooltip: \"एक्सटेंशन क्रम\",\n sortBy: \"इसके अनुसार क्रमबद्ध करें\",\n mostUsed: \"सबसे अधिक उपयोग\",\n alphabetical: \"वर्णानुक्रम\",\n manualOrder: \"मैन्युअल क्रम\",\n showHidden: \"छिपे हुए दिखाएं\",\n newExtension: \"नया एक्सटेंशन\",\n createPlaceholder: \"बताएं कि आप क्या बनाना चाहते हैं...\",\n collapse: \"एक्सटेंशन समेटें\",\n expand: \"एक्सटेंशन फैलाएं\",\n reorder: (name) => `${name} का क्रम बदलें`,\n dragToReorder: \"क्रम बदलने के लिए खींचें\",\n hiddenFromEveryone: \"सभी से छिपा हुआ\",\n file: \"फ़ाइल\",\n unfavorite: \"पसंदीदा से हटाएं\",\n favorite: \"पसंदीदा\",\n actions: \"एक्सटेंशन कार्रवाइयां\",\n editInFiles: \"फ़ाइलों में संपादित करें\",\n rename: \"नाम बदलें\",\n unhideForEveryone: \"सभी के लिए दिखाएं\",\n hideFromEveryone: \"सभी से छिपाएं\",\n removeFromMyList: \"मेरी सूची से हटाएं\",\n delete: \"हटाएं\",\n showLess: \"कम दिखाएं\",\n showMore: \"और दिखाएं\",\n loadError: \"एक्सटेंशन लोड नहीं हो सके।\",\n },\n \"ar-SA\": {\n title: \"الإضافات\",\n description:\n \"أنشئ تطبيقات صغيرة معزولة يمكنها قراءة بيانات التطبيق واستدعاء الإجراءات وحفظ حالتها الخاصة.\",\n open: \"فتح الإضافات\",\n learnMore: \"معرفة المزيد\",\n sortOptions: \"خيارات ترتيب الإضافات\",\n sortTooltip: \"ترتيب الإضافات\",\n sortBy: \"ترتيب حسب\",\n mostUsed: \"الأكثر استخدامًا\",\n alphabetical: \"أبجديًا\",\n manualOrder: \"ترتيب يدوي\",\n showHidden: \"إظهار المخفية\",\n newExtension: \"إضافة جديدة\",\n createPlaceholder: \"صف ما تريد إنشاءه...\",\n collapse: \"طي الإضافات\",\n expand: \"توسيع الإضافات\",\n reorder: (name) => `إعادة ترتيب ${name}`,\n dragToReorder: \"اسحب لإعادة الترتيب\",\n hiddenFromEveryone: \"مخفية عن الجميع\",\n file: \"ملف\",\n unfavorite: \"إزالة من المفضلة\",\n favorite: \"إضافة إلى المفضلة\",\n actions: \"إجراءات الإضافة\",\n editInFiles: \"تحرير في الملفات\",\n rename: \"إعادة تسمية\",\n unhideForEveryone: \"إظهار للجميع\",\n hideFromEveryone: \"إخفاء عن الجميع\",\n removeFromMyList: \"إزالة من قائمتي\",\n delete: \"حذف\",\n showLess: \"إظهار أقل\",\n showMore: \"إظهار المزيد\",\n loadError: \"تعذر تحميل الإضافات.\",\n },\n};\n\nfunction useExtensionsCopy() {\n const locale = useOptionalLocale()?.locale ?? DEFAULT_LOCALE;\n return EXTENSIONS_COPY[locale] ?? EXTENSIONS_COPY[DEFAULT_LOCALE];\n}\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n showHidden,\n onShowHiddenChange,\n copy,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n showHidden: boolean;\n onShowHiddenChange: (next: boolean) => void;\n copy: ExtensionsCopy;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label={copy.sortOptions}\n >\n <IconFilter className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>{copy.sortTooltip}</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>{copy.sortBy}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n {copy.mostUsed}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n {copy.alphabetical}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"manual\">\n {copy.manualOrder}\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n <DropdownMenuSeparator />\n <DropdownMenuCheckboxItem\n checked={showHidden}\n onCheckedChange={(checked) => onShowHiddenChange(Boolean(checked))}\n >\n {copy.showHidden}\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const copy = useExtensionsCopy();\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n const [showGloballyHidden, setShowGloballyHidden] = useState(false);\n\n const extensionsQuery = useQuery<Extension[]>({\n queryKey: [\"extensions\", { includeGloballyHidden: showGloballyHidden }],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\n showGloballyHidden\n ? \"/_agent-native/extensions?includeGloballyHidden=true\"\n : \"/_agent-native/extensions\",\n ),\n );\n if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);\n return res.json();\n },\n });\n const extensions = extensionsQuery.data;\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (isExtensionPathname(location.pathname, extensionId)) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const handleGlobalHide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-hide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const handleGlobalUnhide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-unhide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find((extension) =>\n isExtensionPathname(location.pathname, extension.id),\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-[opacity,color,background-color] hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n />\n <div className=\"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-2 px-3 py-1.5 pr-20\">\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <HoverCard openDelay={1200} closeDelay={200}>\n <HoverCardTrigger asChild>\n <span\n className=\"pointer-events-auto min-w-0 select-none truncate\"\n onClick={toggleExtensionsOpen}\n >\n {copy.title}\n </span>\n </HoverCardTrigger>\n <HoverCardContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.title}\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {copy.description}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n {copy.open}\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n {copy.learnMore}\n </a>\n </div>\n </HoverCardContent>\n </HoverCard>\n </div>\n <div className=\"absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n showHidden={showGloballyHidden}\n onShowHiddenChange={setShowGloballyHidden}\n copy={copy}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-none inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-accent-foreground focus-visible:pointer-events-auto focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/extensions-section:pointer-events-auto group-hover/extensions-section:opacity-100 group-focus-within/extensions-section:pointer-events-auto group-focus-within/extensions-section:opacity-100 data-[state=open]:pointer-events-auto data-[state=open]:opacity-100\"\n aria-label={copy.newExtension}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n collisionPadding={8}\n className=\"relative z-[360] w-[min(420px,calc(100vw-16px))] px-2 pb-2 pt-3\"\n >\n <div className=\"flex items-center justify-between gap-2 ps-1 pb-2\">\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.newExtension}\n </p>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={copy.learnMore}\n >\n <IconHelpCircle className=\"size-4\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>{copy.learnMore}</TooltipContent>\n </Tooltip>\n </div>\n <PromptComposer\n autoFocus\n placeholder={copy.createPlaceholder}\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (extensionsQuery.isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : extensionsQuery.isError ? (\n <ExtensionQueryErrorState\n compact\n message={copy.loadError}\n onRetry={() => void extensionsQuery.refetch()}\n retrying={extensionsQuery.isFetching}\n />\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive = isExtensionPathname(\n location.pathname,\n extension.id,\n );\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const isLocalExtension =\n extension.source?.mode === \"local-files\";\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-[opacity,color] hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={copy.reorder(extension.name)}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{copy.dragToReorder}</TooltipContent>\n </Tooltip>\n <Link\n to={extensionPath(extension.id, extension.name)}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {extension.globallyHidden && (\n <IconEyeOff\n className=\"h-3 w-3 shrink-0 text-muted-foreground/60\"\n aria-label={copy.hiddenFromEveryone}\n />\n )}\n <span className=\"block truncate\">\n {extension.name}\n </span>\n {isLocalExtension && (\n <span className=\"shrink-0 rounded border border-border px-1 text-[9px] font-medium uppercase tracking-wide text-muted-foreground/70\">\n {copy.file}\n </span>\n )}\n </span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? copy.unfavorite : copy.favorite}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label={copy.actions}\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n {isLocalExtension ? (\n <DropdownMenuItem disabled>\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.editInFiles}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.rename}\n </DropdownMenuItem>\n )}\n {!isLocalExtension &&\n extension.canDelete !== false &&\n (extension.globallyHidden ? (\n <DropdownMenuItem\n onSelect={() => handleGlobalUnhide(extension)}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n {copy.unhideForEveryone}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => handleGlobalHide(extension)}\n >\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n {copy.hideFromEveryone}\n </DropdownMenuItem>\n ))}\n {!isLocalExtension && (\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? copy.removeFromMyList\n : copy.delete}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? copy.showLess : copy.showMore}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconChevronDown,\n IconPlus,\n IconFilter,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconPencil,\n IconGripVertical,\n IconTool,\n IconEye,\n IconEyeOff,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\n\nimport { extensionPath, isExtensionPathname } from \"../../extensions/path.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"../components/ui/hover-card.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { PromptComposer } from \"../composer/index.js\";\nimport { DEFAULT_LOCALE, useOptionalLocale, type LocaleCode } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport { ExtensionQueryErrorState } from \"./ExtensionQueryErrorState.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n globallyHidden?: boolean;\n source?: {\n mode?: \"database\" | \"local-files\";\n entryPath?: string;\n };\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\ntype ExtensionsCopy = {\n title: string;\n description: string;\n open: string;\n learnMore: string;\n sortOptions: string;\n sortTooltip: string;\n sortBy: string;\n mostUsed: string;\n alphabetical: string;\n manualOrder: string;\n showHidden: string;\n newExtension: string;\n createPlaceholder: string;\n collapse: string;\n expand: string;\n reorder: (name: string) => string;\n dragToReorder: string;\n hiddenFromEveryone: string;\n file: string;\n unfavorite: string;\n favorite: string;\n actions: string;\n editInFiles: string;\n rename: string;\n unhideForEveryone: string;\n hideFromEveryone: string;\n removeFromMyList: string;\n delete: string;\n showLess: string;\n showMore: string;\n loadError: string;\n};\n\nconst EXTENSIONS_COPY: Record<LocaleCode, ExtensionsCopy> = {\n \"en-US\": {\n title: \"Extensions\",\n description:\n \"Build small sandboxed apps that can read app data, call actions, and save their own state.\",\n open: \"Open extensions\",\n learnMore: \"Learn more\",\n sortOptions: \"Extensions sort options\",\n sortTooltip: \"Extensions sort\",\n sortBy: \"Sort by\",\n mostUsed: \"Most used\",\n alphabetical: \"Alphabetical\",\n manualOrder: \"Manual order\",\n showHidden: \"Show hidden\",\n newExtension: \"New extension\",\n createPlaceholder: \"Describe what you'd like to build...\",\n collapse: \"Collapse extensions\",\n expand: \"Expand extensions\",\n reorder: (name) => `Reorder ${name}`,\n dragToReorder: \"Drag to reorder\",\n hiddenFromEveryone: \"Hidden from everyone\",\n file: \"File\",\n unfavorite: \"Unfavorite\",\n favorite: \"Favorite\",\n actions: \"Extension actions\",\n editInFiles: \"Edit in files\",\n rename: \"Rename\",\n unhideForEveryone: \"Unhide for everyone\",\n hideFromEveryone: \"Hide from everyone\",\n removeFromMyList: \"Remove from my list\",\n delete: \"Archive\",\n showLess: \"show less\",\n showMore: \"show more\",\n loadError: \"Couldn't load extensions.\",\n },\n \"zh-CN\": {\n title: \"扩展\",\n description: \"构建可读取应用数据、调用操作并保存自身状态的小型沙盒应用。\",\n open: \"打开扩展\",\n learnMore: \"了解更多\",\n sortOptions: \"扩展排序选项\",\n sortTooltip: \"扩展排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"按字母顺序\",\n manualOrder: \"手动排序\",\n showHidden: \"显示隐藏项\",\n newExtension: \"新建扩展\",\n createPlaceholder: \"描述你想构建的内容...\",\n collapse: \"收起扩展\",\n expand: \"展开扩展\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖动以重新排序\",\n hiddenFromEveryone: \"已对所有人隐藏\",\n file: \"文件\",\n unfavorite: \"取消收藏\",\n favorite: \"收藏\",\n actions: \"扩展操作\",\n editInFiles: \"在文件中编辑\",\n rename: \"重命名\",\n unhideForEveryone: \"对所有人取消隐藏\",\n hideFromEveryone: \"对所有人隐藏\",\n removeFromMyList: \"从我的列表中移除\",\n delete: \"归档\",\n showLess: \"收起\",\n showMore: \"显示更多\",\n loadError: \"无法加载扩展。\",\n },\n \"zh-TW\": {\n title: \"擴充功能\",\n description:\n \"建立可讀取應用程式資料、呼叫動作並儲存自身狀態的小型沙盒應用程式。\",\n open: \"開啟擴充功能\",\n learnMore: \"了解更多\",\n sortOptions: \"擴充功能排序選項\",\n sortTooltip: \"擴充功能排序\",\n sortBy: \"排序方式\",\n mostUsed: \"最常用\",\n alphabetical: \"依字母排序\",\n manualOrder: \"手動排序\",\n showHidden: \"顯示隱藏項目\",\n newExtension: \"新增擴充功能\",\n createPlaceholder: \"描述你想建立的內容...\",\n collapse: \"收合擴充功能\",\n expand: \"展開擴充功能\",\n reorder: (name) => `重新排序 ${name}`,\n dragToReorder: \"拖曳以重新排序\",\n hiddenFromEveryone: \"已對所有人隱藏\",\n file: \"檔案\",\n unfavorite: \"取消最愛\",\n favorite: \"加入最愛\",\n actions: \"擴充功能動作\",\n editInFiles: \"在檔案中編輯\",\n rename: \"重新命名\",\n unhideForEveryone: \"對所有人取消隱藏\",\n hideFromEveryone: \"對所有人隱藏\",\n removeFromMyList: \"從我的清單移除\",\n delete: \"封存\",\n showLess: \"顯示較少\",\n showMore: \"顯示更多\",\n loadError: \"無法載入擴充功能。\",\n },\n \"es-ES\": {\n title: \"Extensiones\",\n description:\n \"Crea pequeñas apps aisladas que pueden leer datos de la app, llamar acciones y guardar su propio estado.\",\n open: \"Abrir extensiones\",\n learnMore: \"Más información\",\n sortOptions: \"Opciones de orden de extensiones\",\n sortTooltip: \"Orden de extensiones\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Más usadas\",\n alphabetical: \"Alfabético\",\n manualOrder: \"Orden manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nueva extensión\",\n createPlaceholder: \"Describe lo que quieres crear...\",\n collapse: \"Contraer extensiones\",\n expand: \"Expandir extensiones\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arrastra para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Archivo\",\n unfavorite: \"Quitar de favoritos\",\n favorite: \"Favorito\",\n actions: \"Acciones de extensión\",\n editInFiles: \"Editar en archivos\",\n rename: \"Renombrar\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Quitar de mi lista\",\n delete: \"Archivar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar más\",\n loadError: \"No se pudieron cargar las extensiones.\",\n },\n \"fr-FR\": {\n title: \"Extensions\",\n description:\n \"Créez de petites apps sandboxées capables de lire les données de l'app, d'appeler des actions et d'enregistrer leur propre état.\",\n open: \"Ouvrir les extensions\",\n learnMore: \"En savoir plus\",\n sortOptions: \"Options de tri des extensions\",\n sortTooltip: \"Tri des extensions\",\n sortBy: \"Trier par\",\n mostUsed: \"Les plus utilisées\",\n alphabetical: \"Alphabétique\",\n manualOrder: \"Ordre manuel\",\n showHidden: \"Afficher les masquées\",\n newExtension: \"Nouvelle extension\",\n createPlaceholder: \"Décrivez ce que vous voulez créer...\",\n collapse: \"Replier les extensions\",\n expand: \"Déplier les extensions\",\n reorder: (name) => `Réordonner ${name}`,\n dragToReorder: \"Faire glisser pour réordonner\",\n hiddenFromEveryone: \"Masquée pour tout le monde\",\n file: \"Fichier\",\n unfavorite: \"Retirer des favoris\",\n favorite: \"Favori\",\n actions: \"Actions de l'extension\",\n editInFiles: \"Modifier dans les fichiers\",\n rename: \"Renommer\",\n unhideForEveryone: \"Afficher pour tout le monde\",\n hideFromEveryone: \"Masquer pour tout le monde\",\n removeFromMyList: \"Retirer de ma liste\",\n delete: \"Archiver\",\n showLess: \"afficher moins\",\n showMore: \"afficher plus\",\n loadError: \"Impossible de charger les extensions.\",\n },\n \"de-DE\": {\n title: \"Erweiterungen\",\n description:\n \"Erstelle kleine Sandbox-Apps, die App-Daten lesen, Aktionen aufrufen und ihren eigenen Zustand speichern können.\",\n open: \"Erweiterungen öffnen\",\n learnMore: \"Mehr erfahren\",\n sortOptions: \"Sortieroptionen für Erweiterungen\",\n sortTooltip: \"Erweiterungen sortieren\",\n sortBy: \"Sortieren nach\",\n mostUsed: \"Am häufigsten genutzt\",\n alphabetical: \"Alphabetisch\",\n manualOrder: \"Manuelle Reihenfolge\",\n showHidden: \"Ausgeblendete anzeigen\",\n newExtension: \"Neue Erweiterung\",\n createPlaceholder: \"Beschreibe, was du erstellen möchtest...\",\n collapse: \"Erweiterungen einklappen\",\n expand: \"Erweiterungen ausklappen\",\n reorder: (name) => `${name} neu anordnen`,\n dragToReorder: \"Zum Neuordnen ziehen\",\n hiddenFromEveryone: \"Für alle ausgeblendet\",\n file: \"Datei\",\n unfavorite: \"Aus Favoriten entfernen\",\n favorite: \"Favorisieren\",\n actions: \"Erweiterungsaktionen\",\n editInFiles: \"In Dateien bearbeiten\",\n rename: \"Umbenennen\",\n unhideForEveryone: \"Für alle einblenden\",\n hideFromEveryone: \"Für alle ausblenden\",\n removeFromMyList: \"Aus meiner Liste entfernen\",\n delete: \"Archivieren\",\n showLess: \"weniger anzeigen\",\n showMore: \"mehr anzeigen\",\n loadError: \"Erweiterungen konnten nicht geladen werden.\",\n },\n \"ja-JP\": {\n title: \"拡張機能\",\n description:\n \"アプリデータを読み取り、アクションを呼び出し、独自の状態を保存できる小さなサンドボックスアプリを作成します。\",\n open: \"拡張機能を開く\",\n learnMore: \"詳しく見る\",\n sortOptions: \"拡張機能の並べ替えオプション\",\n sortTooltip: \"拡張機能の並べ替え\",\n sortBy: \"並べ替え\",\n mostUsed: \"よく使う順\",\n alphabetical: \"アルファベット順\",\n manualOrder: \"手動順\",\n showHidden: \"非表示を表示\",\n newExtension: \"新しい拡張機能\",\n createPlaceholder: \"作りたいものを説明してください...\",\n collapse: \"拡張機能を折りたたむ\",\n expand: \"拡張機能を展開\",\n reorder: (name) => `${name} を並べ替え`,\n dragToReorder: \"ドラッグして並べ替え\",\n hiddenFromEveryone: \"全員に非表示\",\n file: \"ファイル\",\n unfavorite: \"お気に入り解除\",\n favorite: \"お気に入り\",\n actions: \"拡張機能の操作\",\n editInFiles: \"ファイルで編集\",\n rename: \"名前を変更\",\n unhideForEveryone: \"全員に表示\",\n hideFromEveryone: \"全員に非表示\",\n removeFromMyList: \"自分のリストから削除\",\n delete: \"アーカイブ\",\n showLess: \"少なく表示\",\n showMore: \"さらに表示\",\n loadError: \"拡張機能を読み込めませんでした。\",\n },\n \"ko-KR\": {\n title: \"확장\",\n description:\n \"앱 데이터를 읽고, 액션을 호출하고, 자체 상태를 저장할 수 있는 작은 샌드박스 앱을 만듭니다.\",\n open: \"확장 열기\",\n learnMore: \"자세히 알아보기\",\n sortOptions: \"확장 정렬 옵션\",\n sortTooltip: \"확장 정렬\",\n sortBy: \"정렬 기준\",\n mostUsed: \"가장 많이 사용\",\n alphabetical: \"가나다순\",\n manualOrder: \"수동 순서\",\n showHidden: \"숨김 항목 표시\",\n newExtension: \"새 확장\",\n createPlaceholder: \"만들고 싶은 것을 설명하세요...\",\n collapse: \"확장 접기\",\n expand: \"확장 펼치기\",\n reorder: (name) => `${name} 순서 변경`,\n dragToReorder: \"드래그하여 순서 변경\",\n hiddenFromEveryone: \"모두에게 숨김\",\n file: \"파일\",\n unfavorite: \"즐겨찾기 해제\",\n favorite: \"즐겨찾기\",\n actions: \"확장 작업\",\n editInFiles: \"파일에서 편집\",\n rename: \"이름 변경\",\n unhideForEveryone: \"모두에게 표시\",\n hideFromEveryone: \"모두에게 숨기기\",\n removeFromMyList: \"내 목록에서 제거\",\n delete: \"보관\",\n showLess: \"덜 보기\",\n showMore: \"더 보기\",\n loadError: \"확장 프로그램을 불러올 수 없습니다.\",\n },\n \"pt-BR\": {\n title: \"Extensões\",\n description:\n \"Crie pequenos apps isolados que podem ler dados do app, chamar ações e salvar o próprio estado.\",\n open: \"Abrir extensões\",\n learnMore: \"Saiba mais\",\n sortOptions: \"Opções de ordenação das extensões\",\n sortTooltip: \"Ordenação das extensões\",\n sortBy: \"Ordenar por\",\n mostUsed: \"Mais usadas\",\n alphabetical: \"Alfabética\",\n manualOrder: \"Ordem manual\",\n showHidden: \"Mostrar ocultas\",\n newExtension: \"Nova extensão\",\n createPlaceholder: \"Descreva o que você quer criar...\",\n collapse: \"Recolher extensões\",\n expand: \"Expandir extensões\",\n reorder: (name) => `Reordenar ${name}`,\n dragToReorder: \"Arraste para reordenar\",\n hiddenFromEveryone: \"Oculta para todos\",\n file: \"Arquivo\",\n unfavorite: \"Remover dos favoritos\",\n favorite: \"Favoritar\",\n actions: \"Ações da extensão\",\n editInFiles: \"Editar em arquivos\",\n rename: \"Renomear\",\n unhideForEveryone: \"Mostrar para todos\",\n hideFromEveryone: \"Ocultar para todos\",\n removeFromMyList: \"Remover da minha lista\",\n delete: \"Arquivar\",\n showLess: \"mostrar menos\",\n showMore: \"mostrar mais\",\n loadError: \"Não foi possível carregar as extensões.\",\n },\n \"hi-IN\": {\n title: \"एक्सटेंशन\",\n description:\n \"छोटे सैंडबॉक्स ऐप बनाएं जो ऐप डेटा पढ़ सकते हैं, कार्रवाइयां चला सकते हैं और अपना स्टेट सहेज सकते हैं।\",\n open: \"एक्सटेंशन खोलें\",\n learnMore: \"और जानें\",\n sortOptions: \"एक्सटेंशन क्रम विकल्प\",\n sortTooltip: \"एक्सटेंशन क्रम\",\n sortBy: \"इसके अनुसार क्रमबद्ध करें\",\n mostUsed: \"सबसे अधिक उपयोग\",\n alphabetical: \"वर्णानुक्रम\",\n manualOrder: \"मैन्युअल क्रम\",\n showHidden: \"छिपे हुए दिखाएं\",\n newExtension: \"नया एक्सटेंशन\",\n createPlaceholder: \"बताएं कि आप क्या बनाना चाहते हैं...\",\n collapse: \"एक्सटेंशन समेटें\",\n expand: \"एक्सटेंशन फैलाएं\",\n reorder: (name) => `${name} का क्रम बदलें`,\n dragToReorder: \"क्रम बदलने के लिए खींचें\",\n hiddenFromEveryone: \"सभी से छिपा हुआ\",\n file: \"फ़ाइल\",\n unfavorite: \"पसंदीदा से हटाएं\",\n favorite: \"पसंदीदा\",\n actions: \"एक्सटेंशन कार्रवाइयां\",\n editInFiles: \"फ़ाइलों में संपादित करें\",\n rename: \"नाम बदलें\",\n unhideForEveryone: \"सभी के लिए दिखाएं\",\n hideFromEveryone: \"सभी से छिपाएं\",\n removeFromMyList: \"मेरी सूची से हटाएं\",\n delete: \"संग्रहित करें\",\n showLess: \"कम दिखाएं\",\n showMore: \"और दिखाएं\",\n loadError: \"एक्सटेंशन लोड नहीं हो सके।\",\n },\n \"ar-SA\": {\n title: \"الإضافات\",\n description:\n \"أنشئ تطبيقات صغيرة معزولة يمكنها قراءة بيانات التطبيق واستدعاء الإجراءات وحفظ حالتها الخاصة.\",\n open: \"فتح الإضافات\",\n learnMore: \"معرفة المزيد\",\n sortOptions: \"خيارات ترتيب الإضافات\",\n sortTooltip: \"ترتيب الإضافات\",\n sortBy: \"ترتيب حسب\",\n mostUsed: \"الأكثر استخدامًا\",\n alphabetical: \"أبجديًا\",\n manualOrder: \"ترتيب يدوي\",\n showHidden: \"إظهار المخفية\",\n newExtension: \"إضافة جديدة\",\n createPlaceholder: \"صف ما تريد إنشاءه...\",\n collapse: \"طي الإضافات\",\n expand: \"توسيع الإضافات\",\n reorder: (name) => `إعادة ترتيب ${name}`,\n dragToReorder: \"اسحب لإعادة الترتيب\",\n hiddenFromEveryone: \"مخفية عن الجميع\",\n file: \"ملف\",\n unfavorite: \"إزالة من المفضلة\",\n favorite: \"إضافة إلى المفضلة\",\n actions: \"إجراءات الإضافة\",\n editInFiles: \"تحرير في الملفات\",\n rename: \"إعادة تسمية\",\n unhideForEveryone: \"إظهار للجميع\",\n hideFromEveryone: \"إخفاء عن الجميع\",\n removeFromMyList: \"إزالة من قائمتي\",\n delete: \"أرشفة\",\n showLess: \"إظهار أقل\",\n showMore: \"إظهار المزيد\",\n loadError: \"تعذر تحميل الإضافات.\",\n },\n};\n\nfunction useExtensionsCopy() {\n const locale = useOptionalLocale()?.locale ?? DEFAULT_LOCALE;\n return EXTENSIONS_COPY[locale] ?? EXTENSIONS_COPY[DEFAULT_LOCALE];\n}\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n showHidden,\n onShowHiddenChange,\n copy,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n showHidden: boolean;\n onShowHiddenChange: (next: boolean) => void;\n copy: ExtensionsCopy;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label={copy.sortOptions}\n >\n <IconFilter className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>{copy.sortTooltip}</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>{copy.sortBy}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n {copy.mostUsed}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n {copy.alphabetical}\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"manual\">\n {copy.manualOrder}\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n <DropdownMenuSeparator />\n <DropdownMenuCheckboxItem\n checked={showHidden}\n onCheckedChange={(checked) => onShowHiddenChange(Boolean(checked))}\n >\n {copy.showHidden}\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const copy = useExtensionsCopy();\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n const [showGloballyHidden, setShowGloballyHidden] = useState(false);\n\n const extensionsQuery = useQuery<Extension[]>({\n queryKey: [\"extensions\", { includeGloballyHidden: showGloballyHidden }],\n queryFn: async () => {\n const res = await fetch(\n agentNativePath(\n showGloballyHidden\n ? \"/_agent-native/extensions?includeGloballyHidden=true\"\n : \"/_agent-native/extensions\",\n ),\n );\n if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);\n return res.json();\n },\n });\n const extensions = extensionsQuery.data;\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (isExtensionPathname(location.pathname, extensionId)) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const handleGlobalHide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-hide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const handleGlobalUnhide = useCallback(\n async (extension: Extension) => {\n setMenuOpenId(null);\n try {\n await fetch(\n agentNativePath(\n `/_agent-native/extensions/${extension.id}/global-unhide`,\n ),\n { method: \"POST\" },\n );\n } finally {\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n }\n },\n [queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find((extension) =>\n isExtensionPathname(location.pathname, extension.id),\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-[opacity,color,background-color] hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n />\n <div className=\"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-2 px-3 py-1.5 pr-20\">\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <HoverCard openDelay={1200} closeDelay={200}>\n <HoverCardTrigger asChild>\n <span\n className=\"pointer-events-auto min-w-0 select-none truncate\"\n onClick={toggleExtensionsOpen}\n >\n {copy.title}\n </span>\n </HoverCardTrigger>\n <HoverCardContent\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.title}\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {copy.description}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n {copy.open}\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n {copy.learnMore}\n </a>\n </div>\n </HoverCardContent>\n </HoverCard>\n </div>\n <div className=\"absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n showHidden={showGloballyHidden}\n onShowHiddenChange={setShowGloballyHidden}\n copy={copy}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-none inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 opacity-0 transition-[opacity,color,background-color] hover:bg-accent hover:text-accent-foreground focus-visible:pointer-events-auto focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/extensions-section:pointer-events-auto group-hover/extensions-section:opacity-100 group-focus-within/extensions-section:pointer-events-auto group-focus-within/extensions-section:opacity-100 data-[state=open]:pointer-events-auto data-[state=open]:opacity-100\"\n aria-label={copy.newExtension}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n collisionPadding={8}\n className=\"relative z-[360] w-[min(420px,calc(100vw-16px))] px-2 pb-2 pt-3\"\n >\n <div className=\"flex items-center justify-between gap-2 ps-1 pb-2\">\n <p className=\"text-sm font-semibold text-foreground\">\n {copy.newExtension}\n </p>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={copy.learnMore}\n >\n <IconHelpCircle className=\"size-4\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>{copy.learnMore}</TooltipContent>\n </Tooltip>\n </div>\n <PromptComposer\n autoFocus\n placeholder={copy.createPlaceholder}\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={extensionsOpen ? copy.collapse : copy.expand}\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (extensionsQuery.isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : extensionsQuery.isError ? (\n <ExtensionQueryErrorState\n compact\n message={copy.loadError}\n onRetry={() => void extensionsQuery.refetch()}\n retrying={extensionsQuery.isFetching}\n />\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive = isExtensionPathname(\n location.pathname,\n extension.id,\n );\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const isLocalExtension =\n extension.source?.mode === \"local-files\";\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-[opacity,color] hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={copy.reorder(extension.name)}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{copy.dragToReorder}</TooltipContent>\n </Tooltip>\n <Link\n to={extensionPath(extension.id, extension.name)}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {extension.globallyHidden && (\n <IconEyeOff\n className=\"h-3 w-3 shrink-0 text-muted-foreground/60\"\n aria-label={copy.hiddenFromEveryone}\n />\n )}\n <span className=\"block truncate\">\n {extension.name}\n </span>\n {isLocalExtension && (\n <span className=\"shrink-0 rounded border border-border px-1 text-[9px] font-medium uppercase tracking-wide text-muted-foreground/70\">\n {copy.file}\n </span>\n )}\n </span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? copy.unfavorite : copy.favorite}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label={copy.actions}\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n {isLocalExtension ? (\n <DropdownMenuItem disabled>\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.editInFiles}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n {copy.rename}\n </DropdownMenuItem>\n )}\n {!isLocalExtension &&\n extension.canDelete !== false &&\n (extension.globallyHidden ? (\n <DropdownMenuItem\n onSelect={() => handleGlobalUnhide(extension)}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n {copy.unhideForEveryone}\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem\n onSelect={() => handleGlobalHide(extension)}\n >\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n {copy.hideFromEveryone}\n </DropdownMenuItem>\n ))}\n {!isLocalExtension && (\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? copy.removeFromMyList\n : copy.delete}\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? copy.showLess : copy.showMore}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-native-extension-runtime.js","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { EXTENSION_IFRAME_META_CSP } from \"../../extensions/html-shell.js\";\n\nexport const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {\n REQUEST: \"agentNative.extension.storage\",\n RESPONSE: \"agentNative.extension.storageResult\",\n SLOT_CONTEXT: \"agentNative.extension.slotContext\",\n RESIZE: \"agentNative.extension.resize\",\n} as const;\n\nexport type AgentNativeExtensionStorageScope = \"user\" | \"org\";\n\nexport type AgentNativeExtensionStorageOperation =\n | \"list\"\n | \"get\"\n | \"set\"\n | \"remove\";\n\nexport interface AgentNativeExtensionDefinition {\n id: string;\n name: string;\n description?: string;\n content: string;\n updatedAt?: string;\n}\n\nexport interface AgentNativeExtensionStorageRequest {\n operation: AgentNativeExtensionStorageOperation;\n extensionId: string;\n collection: string;\n id?: string;\n data?: unknown;\n scope?: AgentNativeExtensionStorageScope;\n limit?: number;\n}\n\nexport interface AgentNativeExtensionStorageContext {\n extensionId: string;\n slotId?: string;\n slotContext?: Record<string, unknown> | null;\n}\n\nexport interface AgentNativeExtensionDataRow {\n id: string;\n extensionId: string;\n collection: string;\n data: unknown;\n scope: AgentNativeExtensionStorageScope;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentNativeExtensionStorage {\n list(\n collection: string,\n options: {\n scope?: AgentNativeExtensionStorageScope | \"all\";\n limit?: number;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow[]>;\n get(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow | null>;\n set(\n collection: string,\n id: string,\n data: unknown,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow>;\n remove(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<{ ok: true }>;\n}\n\nexport interface BuildAgentNativeExtensionHtmlOptions {\n extensionId: string;\n content: string;\n title?: string;\n dark?: boolean;\n themeCss?: string;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\nfunction safeJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nconst defaultThemeCss = `\n:root {\n color-scheme: light;\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --border: 214.3 31.8% 91.4%;\n --primary: 221.2 83.2% 53.3%;\n --primary-foreground: 210 40% 98%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n}\n.dark {\n color-scheme: dark;\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --border: 217.2 32.6% 17.5%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n}\nhtml, body {\n margin: 0;\n min-height: 100%;\n background: transparent;\n color: hsl(var(--foreground));\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\nbody {\n padding: 0;\n}\n`;\n\nexport function buildAgentNativeExtensionHtml(\n options: BuildAgentNativeExtensionHtmlOptions,\n): string {\n const extensionId = safeJson(options.extensionId);\n const storageRequestType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST,\n );\n const storageResponseType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE,\n );\n const slotContextType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT,\n );\n const resizeType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE,\n );\n const themeCss = `${defaultThemeCss}\\n${options.themeCss ?? \"\"}`;\n\n return `<!doctype html>\n<html lang=\"en\"${options.dark ? ' class=\"dark\"' : \"\"}>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"Content-Security-Policy\" content=\"${EXTENSION_IFRAME_META_CSP}\" />\n <title>${escapeHtml(options.title ?? \"Agent Native extension\")}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap\" rel=\"stylesheet\" />\n <script\n src=\"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4\"\n integrity=\"sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml\"\n crossorigin=\"anonymous\"\n ></script>\n <script\n defer\n src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js\"\n integrity=\"sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be\"\n crossorigin=\"anonymous\"\n ></script>\n <style>${themeCss}</style>\n <style type=\"text/tailwindcss\">\n @custom-variant dark (&:where(.dark, .dark *));\n @theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-border: hsl(var(--border));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n }\n </style>\n <script>\n (function() {\n var extensionId = ${extensionId};\n var pending = {};\n var seq = 0;\n var slotContext = {};\n var HOST = {\n READY: \"agentNative.host.ready\",\n GET_CONTEXT: \"agentNative.host.getContext\",\n CONTEXT: \"agentNative.host.context\",\n LIST_ACTIONS: \"agentNative.host.listActions\",\n ACTIONS: \"agentNative.host.actions\",\n RUN_ACTION: \"agentNative.host.runAction\",\n ACTION_RESULT: \"agentNative.host.actionResult\",\n COMMAND: \"agentNative.host.command\",\n COMMAND_RESULT: \"agentNative.host.commandResult\"\n };\n var STORAGE_REQUEST = ${storageRequestType};\n var STORAGE_RESPONSE = ${storageResponseType};\n var SLOT_CONTEXT = ${slotContextType};\n var RESIZE = ${resizeType};\n\n function nextId(prefix) {\n seq += 1;\n return prefix + \"-\" + Date.now() + \"-\" + seq;\n }\n\n function request(type, responseType, payload, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var requestId = nextId(\"extension\");\n var timer = setTimeout(function() {\n delete pending[requestId];\n reject(new Error(\"Extension host request timed out\"));\n }, timeoutMs || 30000);\n pending[requestId] = {\n responseType: responseType,\n resolve: resolve,\n reject: reject,\n timer: timer\n };\n window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), \"*\");\n });\n }\n\n window.addEventListener(\"message\", function(event) {\n if (event.source !== window.parent) return;\n var message = event.data || {};\n if (message.type === SLOT_CONTEXT) {\n slotContext = message.context || {};\n window.slotContext = slotContext;\n window.agentNative.slotContext = slotContext;\n return;\n }\n var item = pending[message.requestId];\n if (!item || message.type !== item.responseType) return;\n clearTimeout(item.timer);\n delete pending[message.requestId];\n if (message.ok === false || message.error) {\n item.reject(new Error(message.error || \"Extension host request failed\"));\n return;\n }\n item.resolve(message);\n });\n\n function storage(operation, payload) {\n return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({\n operation: operation,\n extensionId: extensionId\n }, payload || {})).then(function(message) {\n return message.result;\n });\n }\n\n var api = {\n extensionId: extensionId,\n slotContext: slotContext,\n context: function() {\n return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {\n return message.context || {};\n });\n },\n listActions: function() {\n return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {\n return message.actions || [];\n });\n },\n action: function(name, args) {\n return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {\n name: name,\n args: args || {}\n }).then(function(message) {\n return message.result;\n });\n },\n command: function(command, payload) {\n return request(HOST.COMMAND, HOST.COMMAND_RESULT, {\n command: command,\n payload: payload\n }).then(function(message) {\n return message.result;\n });\n },\n refresh: function(payload) {\n return api.command(\"refreshData\", payload);\n },\n data: {\n list: function(collection, opts) {\n opts = opts || {};\n return storage(\"list\", {\n collection: collection,\n scope: opts.scope,\n limit: opts.limit\n });\n },\n get: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"get\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n },\n set: function(collection, id, data, opts) {\n opts = opts || {};\n return storage(\"set\", {\n collection: collection,\n id: id,\n data: data,\n scope: opts.scope\n });\n },\n remove: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"remove\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n }\n }\n };\n\n window.agentNative = api;\n window.appAction = api.action;\n window.extensionData = api.data;\n window.extensionId = extensionId;\n window.slotContext = slotContext;\n window.toolData = api.data;\n window.toolId = extensionId;\n\n function reportSize() {\n var height = Math.max(\n document.documentElement ? document.documentElement.scrollHeight : 0,\n document.body ? document.body.scrollHeight : 0\n );\n window.parent.postMessage({ type: RESIZE, height: height }, \"*\");\n }\n if (typeof ResizeObserver !== \"undefined\") {\n window.addEventListener(\"DOMContentLoaded\", function() {\n var observer = new ResizeObserver(reportSize);\n observer.observe(document.body);\n reportSize();\n });\n } else {\n window.addEventListener(\"load\", reportSize);\n setInterval(reportSize, 1000);\n }\n\n window.parent.postMessage({ type: HOST.READY, requestId: nextId(\"ready\") }, \"*\");\n })();\n </script>\n</head>\n<body>\n${options.content}\n</body>\n</html>`;\n}\n\nfunction storageKey(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): string {\n return [\n \"agent-native-extension-data\",\n namespace,\n context.extensionId,\n scope,\n collection,\n ]\n .map(encodeURIComponent)\n .join(\":\");\n}\n\nfunction readCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): Record<string, AgentNativeExtensionDataRow> {\n if (typeof localStorage === \"undefined\") return {};\n const raw = localStorage.getItem(\n storageKey(namespace, context, collection, scope),\n );\n if (!raw) return {};\n try {\n return JSON.parse(raw) as Record<string, AgentNativeExtensionDataRow>;\n } catch {\n return {};\n }\n}\n\nfunction writeCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n rows: Record<string, AgentNativeExtensionDataRow>,\n): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(\n storageKey(namespace, context, collection, scope),\n JSON.stringify(rows),\n );\n}\n\nfunction normalizeScope(\n scope: AgentNativeExtensionStorageScope | undefined,\n): AgentNativeExtensionStorageScope {\n return scope === \"org\" ? \"org\" : \"user\";\n}\n\nexport function createLocalStorageAgentNativeExtensionStorage(\n namespace = \"default\",\n): AgentNativeExtensionStorage {\n return {\n async list(collection, options) {\n const scopes =\n options.scope === \"all\"\n ? ([\"user\", \"org\"] as const)\n : ([normalizeScope(options.scope)] as const);\n const rows = scopes.flatMap((scope) =>\n Object.values(\n readCollection(namespace, options.context, collection, scope),\n ),\n );\n return rows\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, options.limit ?? 100);\n },\n async get(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n return rows[id] ?? null;\n },\n async set(collection, id, data, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n const now = new Date().toISOString();\n const row: AgentNativeExtensionDataRow = {\n id,\n extensionId: options.context.extensionId,\n collection,\n data,\n scope,\n createdAt: rows[id]?.createdAt ?? now,\n updatedAt: now,\n };\n rows[id] = row;\n writeCollection(namespace, options.context, collection, scope, rows);\n return row;\n },\n async remove(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n delete rows[id];\n writeCollection(namespace, options.context, collection, scope, rows);\n return { ok: true };\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-native-extension-runtime.js","sourceRoot":"","sources":["../../../src/client/extensions/agent-native-extension-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { EXTENSION_IFRAME_META_CSP } from \"../../extensions/html-shell.js\";\n\nexport const AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES = {\n REQUEST: \"agentNative.extension.storage\",\n RESPONSE: \"agentNative.extension.storageResult\",\n SLOT_CONTEXT: \"agentNative.extension.slotContext\",\n RESIZE: \"agentNative.extension.resize\",\n} as const;\n\nexport type AgentNativeExtensionStorageScope = \"user\" | \"org\";\n\nexport type AgentNativeExtensionStorageOperation =\n | \"list\"\n | \"get\"\n | \"set\"\n | \"remove\";\n\nexport interface AgentNativeExtensionDefinition {\n id: string;\n name: string;\n description?: string;\n content: string;\n updatedAt?: string;\n}\n\nexport interface AgentNativeExtensionStorageRequest {\n operation: AgentNativeExtensionStorageOperation;\n extensionId: string;\n collection: string;\n id?: string;\n data?: unknown;\n scope?: AgentNativeExtensionStorageScope;\n limit?: number;\n}\n\nexport interface AgentNativeExtensionStorageContext {\n extensionId: string;\n slotId?: string;\n slotContext?: Record<string, unknown> | null;\n}\n\nexport interface AgentNativeExtensionDataRow {\n id: string;\n extensionId: string;\n collection: string;\n data: unknown;\n scope: AgentNativeExtensionStorageScope;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface AgentNativeExtensionStorage {\n list(\n collection: string,\n options: {\n scope?: AgentNativeExtensionStorageScope | \"all\";\n limit?: number;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow[]>;\n get(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow | null>;\n set(\n collection: string,\n id: string,\n data: unknown,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<AgentNativeExtensionDataRow>;\n remove(\n collection: string,\n id: string,\n options: {\n scope?: AgentNativeExtensionStorageScope;\n context: AgentNativeExtensionStorageContext;\n },\n ): Promise<{ ok: true }>;\n}\n\nexport interface BuildAgentNativeExtensionHtmlOptions {\n extensionId: string;\n content: string;\n title?: string;\n dark?: boolean;\n themeCss?: string;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\nfunction safeJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nconst defaultThemeCss = `\n:root {\n color-scheme: light;\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --border: 214.3 31.8% 91.4%;\n --primary: 221.2 83.2% 53.3%;\n --primary-foreground: 210 40% 98%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n}\n.dark {\n color-scheme: dark;\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --border: 217.2 32.6% 17.5%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 84% 60%;\n --destructive-foreground: 210 40% 98%;\n}\nhtml, body {\n margin: 0;\n min-height: 100%;\n background: transparent;\n color: hsl(var(--foreground));\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\nbody {\n padding: 0;\n}\n`;\n\nexport function buildAgentNativeExtensionHtml(\n options: BuildAgentNativeExtensionHtmlOptions,\n): string {\n const extensionId = safeJson(options.extensionId);\n const storageRequestType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.REQUEST,\n );\n const storageResponseType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESPONSE,\n );\n const slotContextType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.SLOT_CONTEXT,\n );\n const resizeType = safeJson(\n AGENT_NATIVE_EXTENSION_STORAGE_MESSAGE_TYPES.RESIZE,\n );\n const themeCss = `${defaultThemeCss}\\n${options.themeCss ?? \"\"}`;\n\n return `<!doctype html>\n<html lang=\"en\"${options.dark ? ' class=\"dark\"' : \"\"}>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta http-equiv=\"Content-Security-Policy\" content=\"${EXTENSION_IFRAME_META_CSP}\" />\n <title>${escapeHtml(options.title ?? \"Agent Native extension\")}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300..700&display=swap\" rel=\"stylesheet\" />\n <script\n src=\"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4.2.4\"\n integrity=\"sha384-yNSZBFvuOWcmww494a9+1zNuvgUGEXoWkein7cxP8wHUTi3iXCU4vJ7hr3tzBCml\"\n crossorigin=\"anonymous\"\n ></script>\n <script\n defer\n src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.11/dist/cdn.min.js\"\n integrity=\"sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be\"\n crossorigin=\"anonymous\"\n ></script>\n <style>${themeCss}</style>\n <style type=\"text/tailwindcss\">\n @custom-variant dark (&:where(.dark, .dark *));\n @theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-border: hsl(var(--border));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n }\n </style>\n <script>\n (function() {\n var extensionId = ${extensionId};\n var pending = {};\n var seq = 0;\n var slotContext = {};\n var HOST = {\n READY: \"agentNative.host.ready\",\n GET_CONTEXT: \"agentNative.host.getContext\",\n CONTEXT: \"agentNative.host.context\",\n LIST_ACTIONS: \"agentNative.host.listActions\",\n ACTIONS: \"agentNative.host.actions\",\n RUN_ACTION: \"agentNative.host.runAction\",\n ACTION_RESULT: \"agentNative.host.actionResult\",\n COMMAND: \"agentNative.host.command\",\n COMMAND_RESULT: \"agentNative.host.commandResult\"\n };\n var STORAGE_REQUEST = ${storageRequestType};\n var STORAGE_RESPONSE = ${storageResponseType};\n var SLOT_CONTEXT = ${slotContextType};\n var RESIZE = ${resizeType};\n\n function nextId(prefix) {\n seq += 1;\n return prefix + \"-\" + Date.now() + \"-\" + seq;\n }\n\n function request(type, responseType, payload, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var requestId = nextId(\"extension\");\n var timer = setTimeout(function() {\n delete pending[requestId];\n reject(new Error(\"Extension host request timed out\"));\n }, timeoutMs || 30000);\n pending[requestId] = {\n responseType: responseType,\n resolve: resolve,\n reject: reject,\n timer: timer\n };\n window.parent.postMessage(Object.assign({ type: type, requestId: requestId }, payload || {}), \"*\");\n });\n }\n\n window.addEventListener(\"message\", function(event) {\n if (event.source !== window.parent) return;\n var message = event.data || {};\n if (message.type === SLOT_CONTEXT) {\n slotContext = message.context || {};\n window.slotContext = slotContext;\n window.agentNative.slotContext = slotContext;\n return;\n }\n var item = pending[message.requestId];\n if (!item || message.type !== item.responseType) return;\n clearTimeout(item.timer);\n delete pending[message.requestId];\n if (message.ok === false || message.error) {\n item.reject(new Error(message.error || \"Extension host request failed\"));\n return;\n }\n item.resolve(message);\n });\n\n function storage(operation, payload) {\n return request(STORAGE_REQUEST, STORAGE_RESPONSE, Object.assign({\n operation: operation,\n extensionId: extensionId\n }, payload || {})).then(function(message) {\n return message.result;\n });\n }\n\n var api = {\n extensionId: extensionId,\n slotContext: slotContext,\n context: function() {\n return request(HOST.GET_CONTEXT, HOST.CONTEXT).then(function(message) {\n return message.context || {};\n });\n },\n listActions: function() {\n return request(HOST.LIST_ACTIONS, HOST.ACTIONS).then(function(message) {\n return message.actions || [];\n });\n },\n action: function(name, args) {\n return request(HOST.RUN_ACTION, HOST.ACTION_RESULT, {\n name: name,\n args: args || {}\n }).then(function(message) {\n return message.result;\n });\n },\n command: function(command, payload) {\n return request(HOST.COMMAND, HOST.COMMAND_RESULT, {\n command: command,\n payload: payload\n }).then(function(message) {\n return message.result;\n });\n },\n refresh: function(payload) {\n return api.command(\"refreshData\", payload);\n },\n data: {\n list: function(collection, opts) {\n opts = opts || {};\n return storage(\"list\", {\n collection: collection,\n scope: opts.scope,\n limit: opts.limit\n });\n },\n get: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"get\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n },\n set: function(collection, id, data, opts) {\n opts = opts || {};\n return storage(\"set\", {\n collection: collection,\n id: id,\n data: data,\n scope: opts.scope\n });\n },\n remove: function(collection, id, opts) {\n opts = opts || {};\n return storage(\"remove\", {\n collection: collection,\n id: id,\n scope: opts.scope\n });\n }\n }\n };\n\n window.agentNative = api;\n window.appAction = api.action;\n window.extensionData = api.data;\n window.extensionId = extensionId;\n window.slotContext = slotContext;\n window.toolData = api.data;\n window.toolId = extensionId;\n\n function reportSize() {\n var height = Math.max(\n document.documentElement ? document.documentElement.scrollHeight : 0,\n document.body ? document.body.scrollHeight : 0\n );\n window.parent.postMessage({ type: RESIZE, height: height }, \"*\");\n }\n if (typeof ResizeObserver !== \"undefined\") {\n window.addEventListener(\"DOMContentLoaded\", function() {\n var observer = new ResizeObserver(reportSize);\n observer.observe(document.body);\n reportSize();\n });\n } else {\n window.addEventListener(\"load\", reportSize);\n setInterval(reportSize, 1000);\n }\n\n window.parent.postMessage({ type: HOST.READY, requestId: nextId(\"ready\") }, \"*\");\n })();\n </script>\n</head>\n<body>\n${options.content}\n</body>\n</html>`;\n}\n\nfunction storageKey(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): string {\n return [\n \"agent-native-extension-data\",\n namespace,\n context.extensionId,\n scope,\n collection,\n ]\n .map(encodeURIComponent)\n .join(\":\");\n}\n\nfunction readCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n): Record<string, AgentNativeExtensionDataRow> {\n if (typeof localStorage === \"undefined\") return {};\n const raw = localStorage.getItem(\n storageKey(namespace, context, collection, scope),\n );\n if (!raw) return {};\n try {\n return JSON.parse(raw) as Record<string, AgentNativeExtensionDataRow>;\n } catch {\n return {};\n }\n}\n\nfunction writeCollection(\n namespace: string,\n context: AgentNativeExtensionStorageContext,\n collection: string,\n scope: AgentNativeExtensionStorageScope,\n rows: Record<string, AgentNativeExtensionDataRow>,\n): void {\n if (typeof localStorage === \"undefined\") return;\n localStorage.setItem(\n storageKey(namespace, context, collection, scope),\n JSON.stringify(rows),\n );\n}\n\nfunction normalizeScope(\n scope: AgentNativeExtensionStorageScope | undefined,\n): AgentNativeExtensionStorageScope {\n return scope === \"org\" ? \"org\" : \"user\";\n}\n\nexport function createLocalStorageAgentNativeExtensionStorage(\n namespace = \"default\",\n): AgentNativeExtensionStorage {\n return {\n async list(collection, options) {\n const scopes =\n options.scope === \"all\"\n ? ([\"user\", \"org\"] as const)\n : ([normalizeScope(options.scope)] as const);\n const rows = scopes.flatMap((scope) =>\n Object.values(\n readCollection(namespace, options.context, collection, scope),\n ),\n );\n return rows\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))\n .slice(0, options.limit ?? 100);\n },\n async get(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n return rows[id] ?? null;\n },\n async set(collection, id, data, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n const now = new Date().toISOString();\n const row: AgentNativeExtensionDataRow = {\n id,\n extensionId: options.context.extensionId,\n collection,\n data,\n scope,\n createdAt: rows[id]?.createdAt ?? now,\n updatedAt: now,\n };\n rows[id] = row;\n writeCollection(namespace, options.context, collection, scope, rows);\n return row;\n },\n async remove(collection, id, options) {\n const scope = normalizeScope(options.scope);\n const rows = readCollection(\n namespace,\n options.context,\n collection,\n scope,\n );\n delete rows[id];\n writeCollection(namespace, options.context, collection, scope, rows);\n return { ok: true };\n },\n };\n}\n"]}
|
|
@@ -4,7 +4,7 @@ export interface ExtensionDeleteTarget {
|
|
|
4
4
|
canDelete?: boolean | null;
|
|
5
5
|
}
|
|
6
6
|
export type ExtensionDeleteResult = {
|
|
7
|
-
mode: "
|
|
7
|
+
mode: "archived" | "hidden";
|
|
8
8
|
};
|
|
9
9
|
export declare function hideExtensionForCurrentUser(extensionId: string): Promise<ExtensionDeleteResult>;
|
|
10
10
|
export declare function deleteOrHideExtension(extension: ExtensionDeleteTarget): Promise<ExtensionDeleteResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-extension.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"delete-extension.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAA;CAAE,CAAC;AAsBpE,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
|
|
@@ -33,7 +33,7 @@ export async function deleteOrHideExtension(extension) {
|
|
|
33
33
|
}
|
|
34
34
|
const res = await fetch(agentNativePath(`/_agent-native/extensions/${extension.id}`), { method: "DELETE" });
|
|
35
35
|
if (res.ok)
|
|
36
|
-
return { mode: "
|
|
36
|
+
return { mode: "archived" };
|
|
37
37
|
if (res.status === 403) {
|
|
38
38
|
return hideExtensionForCurrentUser(extension.id);
|
|
39
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-extension.js","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,KAAK,UAAU,gBAAgB,CAC7B,GAAa,EACb,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,WAAW,OAAO,CAAC,EAChE,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,MAAM,gBAAgB,CAAC,GAAG,EAAE,2CAA2C,CAAC,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAgC;IAEhC,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,SAAS,CAAC,EAAE,EAAE,CAAC,EAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;IACF,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"delete-extension.js","sourceRoot":"","sources":["../../../src/client/extensions/delete-extension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,KAAK,UAAU,gBAAgB,CAC7B,GAAa,EACb,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,WAAW,OAAO,CAAC,EAChE,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,MAAM,gBAAgB,CAAC,GAAG,EAAE,2CAA2C,CAAC,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAgC;IAEhC,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,6BAA6B,SAAS,CAAC,EAAE,EAAE,CAAC,EAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;IACF,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAExC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,2BAA2B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAAwB,EACxB,WAAmB;IAEnB,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACpE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9E,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC/D,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\n\nimport { agentNativePath } from \"../api-path.js\";\n\nexport interface ExtensionDeleteTarget {\n id: string;\n canDelete?: boolean | null;\n}\n\nexport type ExtensionDeleteResult = { mode: \"archived\" | \"hidden\" };\n\nasync function readErrorMessage(\n res: Response,\n fallback: string,\n): Promise<string> {\n try {\n const text = await res.text();\n if (!text) return fallback;\n try {\n const parsed = JSON.parse(text);\n if (parsed?.error) return String(parsed.error);\n if (parsed?.message) return String(parsed.message);\n } catch {\n return text.slice(0, 200);\n }\n } catch {\n // Ignore body read failures and use the fallback below.\n }\n return fallback;\n}\n\nexport async function hideExtensionForCurrentUser(\n extensionId: string,\n): Promise<ExtensionDeleteResult> {\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}/hide`),\n { method: \"POST\" },\n );\n if (!res.ok) {\n throw new Error(\n await readErrorMessage(res, \"Could not remove extension from your list\"),\n );\n }\n return { mode: \"hidden\" };\n}\n\nexport async function deleteOrHideExtension(\n extension: ExtensionDeleteTarget,\n): Promise<ExtensionDeleteResult> {\n if (extension.canDelete === false) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n const res = await fetch(\n agentNativePath(`/_agent-native/extensions/${extension.id}`),\n { method: \"DELETE\" },\n );\n if (res.ok) return { mode: \"archived\" };\n\n if (res.status === 403) {\n return hideExtensionForCurrentUser(extension.id);\n }\n\n throw new Error(await readErrorMessage(res, \"Delete failed\"));\n}\n\nexport function invalidateExtensionRemoval(\n queryClient: QueryClient,\n extensionId: string,\n): void {\n queryClient.removeQueries({ queryKey: [\"extension\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension-slots\", extensionId] });\n queryClient.invalidateQueries({ queryKey: [\"slot-installs\"] });\n queryClient.invalidateQueries({ queryKey: [\"slot-available\"] });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":"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"}
|