@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
|
@@ -888,20 +888,23 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
888
888
|
/* Readiness disclosure */
|
|
889
889
|
/* ------------------------------------------------------------------------- */
|
|
890
890
|
|
|
891
|
+
.recorder-disclosures {
|
|
892
|
+
display: flex;
|
|
893
|
+
flex-direction: column;
|
|
894
|
+
gap: 0;
|
|
895
|
+
}
|
|
896
|
+
|
|
891
897
|
.readiness {
|
|
892
|
-
border:
|
|
893
|
-
border-radius:
|
|
894
|
-
background:
|
|
898
|
+
border: none;
|
|
899
|
+
border-radius: 0;
|
|
900
|
+
background: transparent;
|
|
895
901
|
overflow: hidden;
|
|
896
902
|
flex-shrink: 0;
|
|
897
|
-
transition:
|
|
898
|
-
border-color 120ms,
|
|
899
|
-
background 120ms;
|
|
900
903
|
}
|
|
901
904
|
|
|
902
905
|
.readiness-open {
|
|
903
|
-
border-color:
|
|
904
|
-
background:
|
|
906
|
+
border-color: transparent;
|
|
907
|
+
background: transparent;
|
|
905
908
|
}
|
|
906
909
|
|
|
907
910
|
.readiness-summary {
|
|
@@ -922,7 +925,7 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
922
925
|
}
|
|
923
926
|
|
|
924
927
|
.readiness-summary:hover {
|
|
925
|
-
|
|
928
|
+
color: var(--fg-muted);
|
|
926
929
|
}
|
|
927
930
|
|
|
928
931
|
.readiness-summary:focus-visible {
|
|
@@ -932,10 +935,9 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
932
935
|
|
|
933
936
|
.readiness-open .readiness-summary {
|
|
934
937
|
min-height: 42px;
|
|
935
|
-
border-radius:
|
|
938
|
+
border-radius: var(--radius-sm);
|
|
936
939
|
padding: 10px 12px;
|
|
937
|
-
background:
|
|
938
|
-
border-bottom: 1px solid var(--border);
|
|
940
|
+
background: transparent;
|
|
939
941
|
}
|
|
940
942
|
|
|
941
943
|
.readiness-title {
|
|
@@ -959,6 +961,12 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
959
961
|
line-height: 1;
|
|
960
962
|
}
|
|
961
963
|
|
|
964
|
+
.readiness-action svg,
|
|
965
|
+
.rewind-home-state svg {
|
|
966
|
+
width: 11px;
|
|
967
|
+
height: 11px;
|
|
968
|
+
}
|
|
969
|
+
|
|
962
970
|
.readiness-open .readiness-action {
|
|
963
971
|
color: var(--fg-muted);
|
|
964
972
|
}
|
|
@@ -1332,37 +1340,111 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1332
1340
|
/* Rewind is a calm everyday status first; configuration is a drill-in. */
|
|
1333
1341
|
.rewind-home-card {
|
|
1334
1342
|
display: grid;
|
|
1335
|
-
gap:
|
|
1336
|
-
padding:
|
|
1337
|
-
border:
|
|
1338
|
-
border-radius:
|
|
1339
|
-
background:
|
|
1343
|
+
gap: 0;
|
|
1344
|
+
padding: 0;
|
|
1345
|
+
border: none;
|
|
1346
|
+
border-radius: 0;
|
|
1347
|
+
background: transparent;
|
|
1340
1348
|
}
|
|
1341
1349
|
|
|
1342
|
-
.rewind-home-
|
|
1350
|
+
.rewind-home-summary {
|
|
1343
1351
|
display: grid;
|
|
1344
|
-
grid-template-columns:
|
|
1352
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1345
1353
|
align-items: center;
|
|
1346
|
-
gap:
|
|
1354
|
+
gap: 8px;
|
|
1355
|
+
width: 100%;
|
|
1356
|
+
min-height: 42px;
|
|
1357
|
+
padding: 10px 12px;
|
|
1358
|
+
border: none;
|
|
1359
|
+
border-radius: var(--radius-sm);
|
|
1360
|
+
background: transparent;
|
|
1361
|
+
color: var(--fg);
|
|
1362
|
+
cursor: pointer;
|
|
1363
|
+
text-align: left;
|
|
1364
|
+
transition: color 120ms;
|
|
1347
1365
|
}
|
|
1348
1366
|
|
|
1349
|
-
.rewind-
|
|
1367
|
+
.rewind-home-summary:hover {
|
|
1368
|
+
color: var(--fg-muted);
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
.rewind-home-summary:focus-visible {
|
|
1372
|
+
outline: none;
|
|
1373
|
+
box-shadow: 0 0 0 3px var(--brand-ring);
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
.rewind-home-title {
|
|
1377
|
+
font-size: 13px;
|
|
1378
|
+
font-weight: 500;
|
|
1379
|
+
line-height: 1;
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
.rewind-home-state {
|
|
1383
|
+
display: inline-flex;
|
|
1384
|
+
align-items: center;
|
|
1385
|
+
gap: 4px;
|
|
1386
|
+
color: var(--fg-muted);
|
|
1387
|
+
font-size: 11px;
|
|
1388
|
+
font-weight: 600;
|
|
1389
|
+
line-height: 1;
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
.rewind-home-details {
|
|
1350
1393
|
display: grid;
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
gap: 9px;
|
|
1394
|
+
gap: 10px;
|
|
1395
|
+
padding: 0 12px 10px;
|
|
1354
1396
|
}
|
|
1355
1397
|
|
|
1356
|
-
.rewind-home-
|
|
1357
|
-
margin:
|
|
1398
|
+
.rewind-home-details p {
|
|
1399
|
+
margin: 0;
|
|
1358
1400
|
color: var(--fg-muted);
|
|
1359
1401
|
font-size: 11px;
|
|
1360
1402
|
line-height: 1.4;
|
|
1361
1403
|
}
|
|
1362
1404
|
|
|
1363
|
-
.rewind-home-
|
|
1364
|
-
|
|
1365
|
-
|
|
1405
|
+
.rewind-home-detail-actions {
|
|
1406
|
+
display: flex;
|
|
1407
|
+
align-items: center;
|
|
1408
|
+
justify-content: space-between;
|
|
1409
|
+
gap: 10px;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
.rewind-home-controls {
|
|
1413
|
+
display: inline-flex;
|
|
1414
|
+
align-items: center;
|
|
1415
|
+
gap: 8px;
|
|
1416
|
+
margin-left: auto;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
.rewind-docs-link {
|
|
1420
|
+
display: inline-flex;
|
|
1421
|
+
align-items: center;
|
|
1422
|
+
gap: 4px;
|
|
1423
|
+
padding: 0;
|
|
1424
|
+
border: none;
|
|
1425
|
+
background: transparent;
|
|
1426
|
+
color: var(--fg-muted);
|
|
1427
|
+
cursor: pointer;
|
|
1428
|
+
font-size: 11px;
|
|
1429
|
+
font-weight: 600;
|
|
1430
|
+
white-space: nowrap;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
.rewind-docs-link:hover {
|
|
1434
|
+
color: var(--fg);
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
.rewind-docs-link:focus-visible {
|
|
1438
|
+
outline: none;
|
|
1439
|
+
box-shadow: 0 0 0 3px var(--brand-ring);
|
|
1440
|
+
border-radius: 4px;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
.rewind-settings-entry-main {
|
|
1444
|
+
display: grid;
|
|
1445
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
1446
|
+
align-items: start;
|
|
1447
|
+
gap: 9px;
|
|
1366
1448
|
}
|
|
1367
1449
|
|
|
1368
1450
|
.rewind-home-lock-note,
|
|
@@ -1379,12 +1461,6 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1379
1461
|
background: var(--surface);
|
|
1380
1462
|
}
|
|
1381
1463
|
|
|
1382
|
-
.rewind-home-controls {
|
|
1383
|
-
display: inline-flex;
|
|
1384
|
-
align-items: center;
|
|
1385
|
-
gap: 8px;
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
1464
|
.rewind-agent-prompt-copy {
|
|
1389
1465
|
width: 28px;
|
|
1390
1466
|
height: 28px;
|
|
@@ -1399,7 +1475,6 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1399
1475
|
}
|
|
1400
1476
|
|
|
1401
1477
|
.rewind-agent-prompt-copy:hover {
|
|
1402
|
-
background: var(--surface-hover);
|
|
1403
1478
|
color: var(--fg);
|
|
1404
1479
|
}
|
|
1405
1480
|
|
|
@@ -56,6 +56,38 @@ struct AdhocMeetingsWatcherInner {
|
|
|
56
56
|
session_notified: HashMap<String, bool>,
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
impl AdhocMeetingsWatcherInner {
|
|
60
|
+
fn refresh_suppression(&mut self, platform: &str, now_ts: i64) {
|
|
61
|
+
self.session_notified.insert(platform.to_string(), true);
|
|
62
|
+
self.cooldown_until
|
|
63
|
+
.insert(platform.to_string(), now_ts + COOLDOWN_SECS);
|
|
64
|
+
self.dwell_platform = None;
|
|
65
|
+
self.dwell_since = None;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fn is_suppressed(&self, platform: &str, now_ts: i64) -> bool {
|
|
69
|
+
self.cooldown_until.get(platform).copied().unwrap_or(0) > now_ts
|
|
70
|
+
|| self
|
|
71
|
+
.session_notified
|
|
72
|
+
.get(platform)
|
|
73
|
+
.copied()
|
|
74
|
+
.unwrap_or(false)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
pub fn refresh_dismissal_suppression(app: &AppHandle, platform: &str) -> Result<(), String> {
|
|
79
|
+
let platform = platform.trim().to_lowercase();
|
|
80
|
+
if platform.is_empty() {
|
|
81
|
+
return Ok(());
|
|
82
|
+
}
|
|
83
|
+
let state = app
|
|
84
|
+
.try_state::<AdhocMeetingsWatcherState>()
|
|
85
|
+
.ok_or_else(|| "no AdhocMeetingsWatcherState".to_string())?;
|
|
86
|
+
let mut g = state.inner.lock().map_err(|e| e.to_string())?;
|
|
87
|
+
g.refresh_suppression(&platform, chrono::Utc::now().timestamp());
|
|
88
|
+
Ok(())
|
|
89
|
+
}
|
|
90
|
+
|
|
59
91
|
/// Spawn the long-running adhoc watcher. Idempotent — gated by OnceLock.
|
|
60
92
|
pub fn spawn_watcher(app: AppHandle) {
|
|
61
93
|
use std::sync::OnceLock;
|
|
@@ -170,10 +202,7 @@ async fn tick_macos(
|
|
|
170
202
|
// Prune expired cooldowns.
|
|
171
203
|
g.cooldown_until.retain(|_, until| *until > now_ts);
|
|
172
204
|
|
|
173
|
-
if g.
|
|
174
|
-
return Ok(());
|
|
175
|
-
}
|
|
176
|
-
if g.session_notified.get(platform).copied().unwrap_or(false) {
|
|
205
|
+
if g.is_suppressed(platform, now_ts) {
|
|
177
206
|
return Ok(());
|
|
178
207
|
}
|
|
179
208
|
|
|
@@ -263,6 +292,40 @@ async fn tick_macos(
|
|
|
263
292
|
Ok(())
|
|
264
293
|
}
|
|
265
294
|
|
|
295
|
+
#[cfg(test)]
|
|
296
|
+
mod tests {
|
|
297
|
+
use super::*;
|
|
298
|
+
|
|
299
|
+
#[test]
|
|
300
|
+
fn dismissal_refreshes_the_existing_cooldown_and_clears_dwell() {
|
|
301
|
+
let now_ts = 1_000;
|
|
302
|
+
let mut state = AdhocMeetingsWatcherInner {
|
|
303
|
+
dwell_platform: Some("zoom".to_string()),
|
|
304
|
+
dwell_since: Some(Instant::now()),
|
|
305
|
+
..Default::default()
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
state.refresh_suppression("zoom", now_ts);
|
|
309
|
+
state.session_notified.remove("zoom");
|
|
310
|
+
|
|
311
|
+
assert!(state.is_suppressed("zoom", now_ts + COOLDOWN_SECS - 1));
|
|
312
|
+
assert!(!state.is_suppressed("zoom", now_ts + COOLDOWN_SECS));
|
|
313
|
+
assert_eq!(state.dwell_platform, None);
|
|
314
|
+
assert_eq!(state.dwell_since, None);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
#[test]
|
|
318
|
+
fn dismissal_suppression_remains_platform_scoped() {
|
|
319
|
+
let now_ts = 1_000;
|
|
320
|
+
let mut state = AdhocMeetingsWatcherInner::default();
|
|
321
|
+
|
|
322
|
+
state.refresh_suppression("zoom", now_ts);
|
|
323
|
+
|
|
324
|
+
assert!(state.is_suppressed("zoom", now_ts));
|
|
325
|
+
assert!(!state.is_suppressed("teams", now_ts));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
266
329
|
fn reset_dwell(app: &AppHandle) {
|
|
267
330
|
if let Some(state) = app.try_state::<AdhocMeetingsWatcherState>() {
|
|
268
331
|
if let Ok(mut g) = state.inner.lock() {
|
|
@@ -147,7 +147,6 @@ pub fn run() {
|
|
|
147
147
|
native_screen::native_fullscreen_claim_upload_open,
|
|
148
148
|
native_screen::native_fullscreen_recording_warm,
|
|
149
149
|
native_screen::native_fullscreen_recording_begin,
|
|
150
|
-
native_screen::native_fullscreen_capture_thumbnail,
|
|
151
150
|
native_screen::native_fullscreen_recording_stop_and_upload,
|
|
152
151
|
native_screen::native_fullscreen_recording_stop_and_save,
|
|
153
152
|
native_screen::native_fullscreen_recording_cancel,
|
|
@@ -204,6 +203,7 @@ pub fn run() {
|
|
|
204
203
|
// notifications
|
|
205
204
|
notifications::take_pending_meeting_notification,
|
|
206
205
|
notifications::notify_meeting_starting,
|
|
206
|
+
notifications::dismiss_meeting_notification,
|
|
207
207
|
// meetings watcher (background poller)
|
|
208
208
|
meetings_watcher::meetings_watcher_set_server_url,
|
|
209
209
|
meetings_watcher::meetings_watcher_set_session,
|
|
@@ -458,7 +458,16 @@ pub fn run() {
|
|
|
458
458
|
// login (tagged with `--autostart`) so it doesn't pop up every boot.
|
|
459
459
|
let launched_at_login = std::env::args().any(|arg| arg == "--autostart");
|
|
460
460
|
if !launched_at_login {
|
|
461
|
-
|
|
461
|
+
let app_handle = app.handle().clone();
|
|
462
|
+
tauri::async_runtime::spawn(async move {
|
|
463
|
+
for _ in 0..8 {
|
|
464
|
+
tokio::time::sleep(std::time::Duration::from_millis(25)).await;
|
|
465
|
+
if tray::refresh_tray_anchor(&app_handle) {
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
clips::force_show_popover(&app_handle);
|
|
470
|
+
});
|
|
462
471
|
}
|
|
463
472
|
|
|
464
473
|
Ok(())
|
|
@@ -145,6 +145,8 @@ struct MeetingItem {
|
|
|
145
145
|
join_url: Option<String>,
|
|
146
146
|
#[serde(default)]
|
|
147
147
|
platform: Option<String>,
|
|
148
|
+
#[serde(default)]
|
|
149
|
+
source: Option<String>,
|
|
148
150
|
}
|
|
149
151
|
|
|
150
152
|
#[derive(Debug, Deserialize)]
|
|
@@ -345,6 +347,9 @@ async fn tick_once(app: &AppHandle, client: &reqwest::Client) -> Result<(), Stri
|
|
|
345
347
|
let now = chrono::Utc::now();
|
|
346
348
|
let now_ts = now.timestamp();
|
|
347
349
|
for m in meetings {
|
|
350
|
+
if !is_calendar_reminder_candidate(&m) {
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
348
353
|
let Some(start_str) = m.scheduled_start.as_deref() else {
|
|
349
354
|
continue;
|
|
350
355
|
};
|
|
@@ -445,6 +450,10 @@ async fn tick_once(app: &AppHandle, client: &reqwest::Client) -> Result<(), Stri
|
|
|
445
450
|
Ok(())
|
|
446
451
|
}
|
|
447
452
|
|
|
453
|
+
fn is_calendar_reminder_candidate(meeting: &MeetingItem) -> bool {
|
|
454
|
+
meeting.source.as_deref() != Some("adhoc")
|
|
455
|
+
}
|
|
456
|
+
|
|
448
457
|
fn parse_meetings(body: &serde_json::Value) -> Vec<MeetingItem> {
|
|
449
458
|
if let Ok(parsed) = serde_json::from_value::<ListMeetingsResponse>(body.clone()) {
|
|
450
459
|
if let Some(v) = parsed.upcoming {
|
|
@@ -462,3 +471,45 @@ fn parse_meetings(body: &serde_json::Value) -> Vec<MeetingItem> {
|
|
|
462
471
|
}
|
|
463
472
|
Vec::new()
|
|
464
473
|
}
|
|
474
|
+
|
|
475
|
+
#[cfg(test)]
|
|
476
|
+
mod tests {
|
|
477
|
+
use super::{is_calendar_reminder_candidate, parse_meetings};
|
|
478
|
+
|
|
479
|
+
#[test]
|
|
480
|
+
fn excludes_adhoc_meetings_from_calendar_reminders() {
|
|
481
|
+
let meetings = parse_meetings(&serde_json::json!({
|
|
482
|
+
"meetings": [
|
|
483
|
+
{
|
|
484
|
+
"id": "adhoc-meeting",
|
|
485
|
+
"scheduledStart": "2026-07-22T19:10:00Z",
|
|
486
|
+
"source": "adhoc"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"id": "calendar-meeting",
|
|
490
|
+
"scheduledStart": "2026-07-22T19:10:00Z",
|
|
491
|
+
"source": "calendar"
|
|
492
|
+
}
|
|
493
|
+
]
|
|
494
|
+
}));
|
|
495
|
+
|
|
496
|
+
assert_eq!(meetings.len(), 2);
|
|
497
|
+
assert!(!is_calendar_reminder_candidate(&meetings[0]));
|
|
498
|
+
assert!(is_calendar_reminder_candidate(&meetings[1]));
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
#[test]
|
|
502
|
+
fn keeps_meetings_without_source_eligible_for_legacy_payloads() {
|
|
503
|
+
let meetings = parse_meetings(&serde_json::json!({
|
|
504
|
+
"meetings": [
|
|
505
|
+
{
|
|
506
|
+
"id": "legacy-meeting",
|
|
507
|
+
"scheduledStart": "2026-07-22T19:10:00Z"
|
|
508
|
+
}
|
|
509
|
+
]
|
|
510
|
+
}));
|
|
511
|
+
|
|
512
|
+
assert_eq!(meetings.len(), 1);
|
|
513
|
+
assert!(is_calendar_reminder_candidate(&meetings[0]));
|
|
514
|
+
}
|
|
515
|
+
}
|
|
@@ -2629,7 +2629,11 @@ fn decode_samples_to_f32(bytes: &[u8], is_float: bool, bits: u32) -> Vec<f32> {
|
|
|
2629
2629
|
.map(|c| {
|
|
2630
2630
|
// Reconstruct a 24-bit little-endian signed integer and sign-extend to i32.
|
|
2631
2631
|
let raw = (c[0] as i32) | ((c[1] as i32) << 8) | ((c[2] as i32) << 16);
|
|
2632
|
-
let signed = if raw & 0x800000 != 0 {
|
|
2632
|
+
let signed = if raw & 0x800000 != 0 {
|
|
2633
|
+
raw | !0x00FF_FFFFi32
|
|
2634
|
+
} else {
|
|
2635
|
+
raw
|
|
2636
|
+
};
|
|
2633
2637
|
signed as f32 / 8_388_608.0
|
|
2634
2638
|
})
|
|
2635
2639
|
.collect(),
|
|
@@ -155,10 +155,6 @@ const FFMPEG_CANDIDATE_PATHS: &[&str] = &[
|
|
|
155
155
|
];
|
|
156
156
|
const PENDING_UPLOADS_DIR: &str = "pending-recording-uploads";
|
|
157
157
|
const CLIP_DRAFTS_DIR: &str = "Drafts";
|
|
158
|
-
const THUMBNAIL_MIME_TYPE: &str = "image/jpeg";
|
|
159
|
-
const THUMBNAIL_MAX_BYTES: u64 = 2 * 1024 * 1024;
|
|
160
|
-
const THUMBNAIL_WIDTH: &str = "1280";
|
|
161
|
-
const SIPS_PATH: &str = "/usr/bin/sips";
|
|
162
158
|
// Minimum free space required to start recording; below this we hard-block.
|
|
163
159
|
pub(crate) const DISK_SPACE_BLOCK_BYTES: u64 = 500 * 1024 * 1024;
|
|
164
160
|
// Free space below this at start time is logged as a warning but not blocked.
|
|
@@ -2018,31 +2014,6 @@ pub async fn native_fullscreen_recording_stop_and_save(
|
|
|
2018
2014
|
save_finalized_native_artifact_to_local_export(&app, &artifact, &folder_name, &file_role)
|
|
2019
2015
|
}
|
|
2020
2016
|
|
|
2021
|
-
#[tauri::command]
|
|
2022
|
-
pub async fn native_fullscreen_capture_thumbnail(
|
|
2023
|
-
app: AppHandle,
|
|
2024
|
-
server_url: String,
|
|
2025
|
-
recording_id: String,
|
|
2026
|
-
auth_token: Option<String>,
|
|
2027
|
-
cookie: Option<String>,
|
|
2028
|
-
) -> Result<(), String> {
|
|
2029
|
-
let bytes = capture_thumbnail_bytes(&app, &recording_id)?;
|
|
2030
|
-
tauri::async_runtime::spawn(async move {
|
|
2031
|
-
if let Err(err) = upload_thumbnail_bytes(
|
|
2032
|
-
server_url,
|
|
2033
|
-
recording_id.clone(),
|
|
2034
|
-
auth_token.unwrap_or_default(),
|
|
2035
|
-
cookie.unwrap_or_default(),
|
|
2036
|
-
bytes,
|
|
2037
|
-
)
|
|
2038
|
-
.await
|
|
2039
|
-
{
|
|
2040
|
-
eprintln!("[clips-tray] native thumbnail upload failed for {recording_id}: {err}");
|
|
2041
|
-
}
|
|
2042
|
-
});
|
|
2043
|
-
Ok(())
|
|
2044
|
-
}
|
|
2045
|
-
|
|
2046
2017
|
/// Called from the app's exit path (tray Quit / Cmd+Q) so a live `screencapture`
|
|
2047
2018
|
/// fallback process doesn't survive the app quitting. `app.exit()` triggers
|
|
2048
2019
|
/// `std::process::exit` under the hood, which does not run Rust destructors,
|
|
@@ -3455,117 +3426,6 @@ fn saved_recording_metadata_path(app: &AppHandle, recording_id: &str) -> Result<
|
|
|
3455
3426
|
Ok(pending_uploads_dir(app)?.join(format!("{safe_id}.json")))
|
|
3456
3427
|
}
|
|
3457
3428
|
|
|
3458
|
-
fn thumbnail_path(app: &AppHandle, recording_id: &str) -> Result<PathBuf, String> {
|
|
3459
|
-
let safe_id = sanitize_recording_id(recording_id);
|
|
3460
|
-
pending_recording_path(app, &format!("{safe_id}-thumb"), "jpg")
|
|
3461
|
-
}
|
|
3462
|
-
|
|
3463
|
-
fn resized_thumbnail_path(path: &Path) -> PathBuf {
|
|
3464
|
-
let stem = path
|
|
3465
|
-
.file_stem()
|
|
3466
|
-
.and_then(|value| value.to_str())
|
|
3467
|
-
.unwrap_or("thumbnail");
|
|
3468
|
-
path.with_file_name(format!("{stem}-1280.jpg"))
|
|
3469
|
-
}
|
|
3470
|
-
|
|
3471
|
-
fn thumbnail_file_for_upload(path: &Path) -> Result<PathBuf, String> {
|
|
3472
|
-
let original_bytes = std::fs::metadata(path)
|
|
3473
|
-
.map_err(|e| format!("thumbnail metadata unavailable: {e}"))?
|
|
3474
|
-
.len();
|
|
3475
|
-
if original_bytes <= THUMBNAIL_MAX_BYTES || !std::path::Path::new(SIPS_PATH).exists() {
|
|
3476
|
-
return Ok(path.to_path_buf());
|
|
3477
|
-
}
|
|
3478
|
-
|
|
3479
|
-
let resized_path = resized_thumbnail_path(path);
|
|
3480
|
-
let _ = std::fs::remove_file(&resized_path);
|
|
3481
|
-
let status = Command::new(SIPS_PATH)
|
|
3482
|
-
.arg("--resampleWidth")
|
|
3483
|
-
.arg(THUMBNAIL_WIDTH)
|
|
3484
|
-
.arg("--setProperty")
|
|
3485
|
-
.arg("format")
|
|
3486
|
-
.arg("jpeg")
|
|
3487
|
-
.arg("--setProperty")
|
|
3488
|
-
.arg("formatOptions")
|
|
3489
|
-
.arg("85")
|
|
3490
|
-
.arg(path)
|
|
3491
|
-
.arg("--out")
|
|
3492
|
-
.arg(&resized_path)
|
|
3493
|
-
.stdin(Stdio::null())
|
|
3494
|
-
.stdout(Stdio::null())
|
|
3495
|
-
.stderr(Stdio::null())
|
|
3496
|
-
.status()
|
|
3497
|
-
.map_err(|e| format!("thumbnail resize failed: {e}"))?;
|
|
3498
|
-
|
|
3499
|
-
if !status.success() {
|
|
3500
|
-
let _ = std::fs::remove_file(&resized_path);
|
|
3501
|
-
return Ok(path.to_path_buf());
|
|
3502
|
-
}
|
|
3503
|
-
|
|
3504
|
-
let resized_bytes = std::fs::metadata(&resized_path)
|
|
3505
|
-
.map_err(|e| format!("resized thumbnail metadata unavailable: {e}"))?
|
|
3506
|
-
.len();
|
|
3507
|
-
if resized_bytes == 0 || resized_bytes > original_bytes {
|
|
3508
|
-
let _ = std::fs::remove_file(&resized_path);
|
|
3509
|
-
return Ok(path.to_path_buf());
|
|
3510
|
-
}
|
|
3511
|
-
|
|
3512
|
-
Ok(resized_path)
|
|
3513
|
-
}
|
|
3514
|
-
|
|
3515
|
-
fn capture_thumbnail_bytes(app: &AppHandle, recording_id: &str) -> Result<Vec<u8>, String> {
|
|
3516
|
-
#[cfg(not(target_os = "macos"))]
|
|
3517
|
-
{
|
|
3518
|
-
let _ = (app, recording_id);
|
|
3519
|
-
Err("Native full-screen thumbnails are currently macOS-only.".into())
|
|
3520
|
-
}
|
|
3521
|
-
|
|
3522
|
-
#[cfg(target_os = "macos")]
|
|
3523
|
-
{
|
|
3524
|
-
if !std::path::Path::new("/usr/sbin/screencapture").exists() {
|
|
3525
|
-
return Err("macOS screencapture is unavailable on this machine.".into());
|
|
3526
|
-
}
|
|
3527
|
-
|
|
3528
|
-
let path = thumbnail_path(app, recording_id)?;
|
|
3529
|
-
let _ = std::fs::remove_file(&path);
|
|
3530
|
-
let thumb_display_flag = tray_display_id(app)
|
|
3531
|
-
.and_then(|id| {
|
|
3532
|
-
CGDisplay::active_displays().ok().and_then(|ids| {
|
|
3533
|
-
ids.iter()
|
|
3534
|
-
.position(|&aid| aid == id)
|
|
3535
|
-
.map(|p| format!("-D{}", p + 1))
|
|
3536
|
-
})
|
|
3537
|
-
})
|
|
3538
|
-
.unwrap_or_else(|| "-D1".to_string());
|
|
3539
|
-
let status = Command::new("/usr/sbin/screencapture")
|
|
3540
|
-
.arg("-x")
|
|
3541
|
-
.arg("-t")
|
|
3542
|
-
.arg("jpg")
|
|
3543
|
-
.arg(thumb_display_flag)
|
|
3544
|
-
.arg(&path)
|
|
3545
|
-
.stdin(Stdio::null())
|
|
3546
|
-
.stdout(Stdio::null())
|
|
3547
|
-
.stderr(Stdio::null())
|
|
3548
|
-
.status()
|
|
3549
|
-
.map_err(|e| format!("thumbnail capture failed: {e}"))?;
|
|
3550
|
-
if !status.success() {
|
|
3551
|
-
let _ = std::fs::remove_file(&path);
|
|
3552
|
-
return Err(format!("thumbnail capture exited with {status}"));
|
|
3553
|
-
}
|
|
3554
|
-
|
|
3555
|
-
let upload_path = thumbnail_file_for_upload(&path)?;
|
|
3556
|
-
let bytes =
|
|
3557
|
-
std::fs::read(&upload_path).map_err(|e| format!("thumbnail read failed: {e}"))?;
|
|
3558
|
-
if upload_path != path {
|
|
3559
|
-
let _ = std::fs::remove_file(&upload_path);
|
|
3560
|
-
}
|
|
3561
|
-
let _ = std::fs::remove_file(&path);
|
|
3562
|
-
if bytes.is_empty() {
|
|
3563
|
-
return Err("Thumbnail capture produced an empty file.".into());
|
|
3564
|
-
}
|
|
3565
|
-
Ok(bytes)
|
|
3566
|
-
}
|
|
3567
|
-
}
|
|
3568
|
-
|
|
3569
3429
|
fn saved_recording_from_session(
|
|
3570
3430
|
session: &NativeFullscreenSession,
|
|
3571
3431
|
server_url: &str,
|
|
@@ -4767,55 +4627,6 @@ async fn reset_upload_chunks(
|
|
|
4767
4627
|
Ok(NativeUploadMode::from_reset_response(&body))
|
|
4768
4628
|
}
|
|
4769
4629
|
|
|
4770
|
-
async fn upload_thumbnail_bytes(
|
|
4771
|
-
server_url: String,
|
|
4772
|
-
recording_id: String,
|
|
4773
|
-
auth_token: String,
|
|
4774
|
-
cookie: String,
|
|
4775
|
-
bytes: Vec<u8>,
|
|
4776
|
-
) -> Result<(), String> {
|
|
4777
|
-
let url = thumbnail_upload_url(&server_url, &recording_id)?;
|
|
4778
|
-
let client = reqwest::Client::builder()
|
|
4779
|
-
.timeout(Duration::from_secs(30))
|
|
4780
|
-
.build()
|
|
4781
|
-
.map_err(|e| format!("thumbnail upload client failed: {e}"))?;
|
|
4782
|
-
let mut request = client
|
|
4783
|
-
.post(url)
|
|
4784
|
-
.header("Content-Type", THUMBNAIL_MIME_TYPE)
|
|
4785
|
-
.header("X-Request-Source", "clips-desktop")
|
|
4786
|
-
.body(bytes);
|
|
4787
|
-
let trimmed_token = auth_token.trim();
|
|
4788
|
-
if !trimmed_token.is_empty() {
|
|
4789
|
-
request = request.bearer_auth(trimmed_token);
|
|
4790
|
-
}
|
|
4791
|
-
let trimmed_cookie = cookie.trim();
|
|
4792
|
-
if !trimmed_cookie.is_empty() {
|
|
4793
|
-
request = request.header("Cookie", trimmed_cookie);
|
|
4794
|
-
}
|
|
4795
|
-
|
|
4796
|
-
let response = request
|
|
4797
|
-
.send()
|
|
4798
|
-
.await
|
|
4799
|
-
.map_err(|e| format!("native thumbnail upload failed: {e}"))?;
|
|
4800
|
-
let status = response.status();
|
|
4801
|
-
let body = response.text().await.unwrap_or_default();
|
|
4802
|
-
if !status.is_success() {
|
|
4803
|
-
return Err(format!(
|
|
4804
|
-
"native thumbnail upload returned {status}: {}",
|
|
4805
|
-
body.chars().take(400).collect::<String>()
|
|
4806
|
-
));
|
|
4807
|
-
}
|
|
4808
|
-
Ok(())
|
|
4809
|
-
}
|
|
4810
|
-
|
|
4811
|
-
fn thumbnail_upload_url(server_url: &str, recording_id: &str) -> Result<url::Url, String> {
|
|
4812
|
-
let base = server_url.trim_end_matches('/');
|
|
4813
|
-
url::Url::parse(&format!(
|
|
4814
|
-
"{base}/api/recordings/{recording_id}/thumbnail?replace=auto"
|
|
4815
|
-
))
|
|
4816
|
-
.map_err(|e| format!("invalid thumbnail upload URL: {e}"))
|
|
4817
|
-
}
|
|
4818
|
-
|
|
4819
4630
|
async fn send_upload_post(
|
|
4820
4631
|
client: &reqwest::Client,
|
|
4821
4632
|
server_url: &str,
|