@agent-native/core 0.117.0 → 0.117.2
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 +2 -2
- package/corpus/core/CHANGELOG.md +16 -0
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/cli/context-xray-local.ts +1 -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/org/OrgSwitcher.tsx +25 -1
- package/corpus/core/src/client/settings/SettingsPanel.tsx +102 -10
- package/corpus/core/src/client/sharing/ShareButton.tsx +7 -6
- package/corpus/core/src/db/client.ts +13 -10
- package/corpus/core/src/deploy/workspace-deploy.ts +14 -4
- 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 +23 -6
- 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/sharing/actions/share-resource.ts +1 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -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/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- 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/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/assets/app/global.css +1 -1
- 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 +6 -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/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 +6 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +6 -2
- 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 +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- 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 +6 -0
- 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/global.css +1 -1
- package/corpus/templates/clips/app/root.tsx +7 -2
- 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-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-quieter-permissions-and-rewind-controls.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +86 -52
- 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 +98 -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 +1 -1
- 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/server/plugins/db.ts +6 -2
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -3
- package/corpus/templates/content/app/global.css +1 -1
- 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/crm/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/crm/app/global.css +1 -1
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- 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/layout/Sidebar.tsx +2 -2
- 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 +6 -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 +2 -2
- package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- 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/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 +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- 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 +6 -0
- 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/global.css +1 -1
- 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 +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
- 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 +6 -0
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -2
- 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 +6 -0
- package/corpus/templates/tasks/app/global.css +1 -1
- package/dist/cli/context-xray-local.js +1 -1
- package/dist/cli/context-xray-local.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/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/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +37 -4
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +3 -4
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -2
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +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/deploy/workspace-deploy.js +14 -4
- package/dist/deploy/workspace-deploy.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 +16 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +22 -6
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- 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/agent-engine-api-key-route.d.ts +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/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/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- 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 +6 -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/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- 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/package.json +2 -1
- package/src/cli/context-xray-local.ts +1 -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/org/OrgSwitcher.tsx +25 -1
- package/src/client/settings/SettingsPanel.tsx +102 -10
- package/src/client/sharing/ShareButton.tsx +7 -6
- package/src/db/client.ts +13 -10
- package/src/deploy/workspace-deploy.ts +14 -4
- 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 +23 -6
- 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/sharing/actions/share-resource.ts +1 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- 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 +6 -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/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- 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
|
@@ -2,6 +2,8 @@ import {
|
|
|
2
2
|
IconAlertTriangle,
|
|
3
3
|
IconArrowLeft,
|
|
4
4
|
IconCalendarEvent,
|
|
5
|
+
IconChevronDown,
|
|
6
|
+
IconChevronRight,
|
|
5
7
|
IconCircleCheck,
|
|
6
8
|
IconCopy,
|
|
7
9
|
IconDownload,
|
|
@@ -345,6 +347,8 @@ const CAM_ON_KEY = "clips:camera-on";
|
|
|
345
347
|
const MIC_ON_KEY = "clips:mic-on";
|
|
346
348
|
const SYSTEM_AUDIO_KEY = "clips:system-audio";
|
|
347
349
|
const READINESS_REVIEWED_KEY = "clips:readiness-reviewed";
|
|
350
|
+
const REWIND_DOCS_URL =
|
|
351
|
+
"https://www.agent-native.com/docs/template-clips#agent-readable-clips";
|
|
348
352
|
|
|
349
353
|
// Sensible defaults so the user never has to type a URL on first launch.
|
|
350
354
|
// Dev builds point at the local dev server; production builds point at the
|
|
@@ -936,6 +940,7 @@ export function App() {
|
|
|
936
940
|
const [readinessOpen, setReadinessOpen] = useState<boolean>(
|
|
937
941
|
() => !loadBool(READINESS_REVIEWED_KEY, false),
|
|
938
942
|
);
|
|
943
|
+
const [rewindHomeOpen, setRewindHomeOpen] = useState(false);
|
|
939
944
|
const [recorder, setRecorder] = useState<RecorderHandle | null>(null);
|
|
940
945
|
const [recError, setRecError] = useState<string | null>(null);
|
|
941
946
|
const [cameraError, setCameraError] = useState<string | null>(null);
|
|
@@ -969,6 +974,9 @@ export function App() {
|
|
|
969
974
|
config: featureConfig?.screenMemory ?? DEFAULT_SCREEN_MEMORY_CONFIG,
|
|
970
975
|
clipRecordingActive: isRecording || recordingFlowActive,
|
|
971
976
|
});
|
|
977
|
+
const homeRewindOn =
|
|
978
|
+
featureConfig?.screenMemory?.enabled === true &&
|
|
979
|
+
featureConfig.screenMemory.paused !== true;
|
|
972
980
|
const refreshHomeScreenMemoryStatus = useCallback(() => {
|
|
973
981
|
const version = ++homeScreenMemoryRefreshVersionRef.current;
|
|
974
982
|
invoke<ScreenMemoryStatus>("screen_memory_status")
|
|
@@ -2551,6 +2559,12 @@ export function App() {
|
|
|
2551
2559
|
});
|
|
2552
2560
|
}
|
|
2553
2561
|
|
|
2562
|
+
function openRewindDocs() {
|
|
2563
|
+
openExternal(REWIND_DOCS_URL).catch((err) => {
|
|
2564
|
+
console.error("[clips-tray] open Rewind docs failed:", err);
|
|
2565
|
+
});
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2554
2568
|
async function retryPendingUpload(upload: PendingDesktopUpload) {
|
|
2555
2569
|
if (retryingUploadId || exportingUploadId || dismissingUploadId) return;
|
|
2556
2570
|
const targetServerUrl = serverUrlForPendingUpload(upload, serverUrl);
|
|
@@ -3679,59 +3693,79 @@ export function App() {
|
|
|
3679
3693
|
onOpenPermission={openPrivacySettings}
|
|
3680
3694
|
/>
|
|
3681
3695
|
|
|
3682
|
-
<section className="rewind-home-card" aria-label="Rewind
|
|
3683
|
-
<
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3696
|
+
<section className="rewind-home-card" aria-label="Rewind">
|
|
3697
|
+
<button
|
|
3698
|
+
type="button"
|
|
3699
|
+
className="rewind-home-summary"
|
|
3700
|
+
aria-expanded={rewindHomeOpen}
|
|
3701
|
+
onClick={() => setRewindHomeOpen((open) => !open)}
|
|
3702
|
+
>
|
|
3703
|
+
<span className="rewind-home-title">Rewind</span>
|
|
3704
|
+
<span className="rewind-home-state">
|
|
3705
|
+
{homeRewindOn ? "On" : "Off"}
|
|
3706
|
+
{rewindHomeOpen ? (
|
|
3707
|
+
<IconChevronDown size={13} stroke={2} />
|
|
3708
|
+
) : (
|
|
3709
|
+
<IconChevronRight size={13} stroke={2} />
|
|
3710
|
+
)}
|
|
3711
|
+
</span>
|
|
3712
|
+
</button>
|
|
3713
|
+
{rewindHomeOpen ? (
|
|
3714
|
+
<div className="rewind-home-details">
|
|
3715
|
+
<p>{homeRewindPresentation.detail}</p>
|
|
3716
|
+
<div className="rewind-home-detail-actions">
|
|
3717
|
+
<div className="rewind-home-controls">
|
|
3718
|
+
<Tooltip>
|
|
3719
|
+
<TooltipTrigger asChild>
|
|
3720
|
+
<button
|
|
3721
|
+
type="button"
|
|
3722
|
+
className="rewind-agent-prompt-copy"
|
|
3723
|
+
onClick={() => void copyRewindAgentPrompt()}
|
|
3724
|
+
aria-label={
|
|
3725
|
+
rewindAgentPromptCopied
|
|
3726
|
+
? "Setup prompt copied — paste it into your agent once"
|
|
3727
|
+
: "Copy setup prompt for your agent"
|
|
3728
|
+
}
|
|
3729
|
+
>
|
|
3730
|
+
{rewindAgentPromptCopied ? (
|
|
3731
|
+
<IconCircleCheck size={15} stroke={2} />
|
|
3732
|
+
) : (
|
|
3733
|
+
<IconCopy size={15} stroke={1.9} />
|
|
3734
|
+
)}
|
|
3735
|
+
</button>
|
|
3736
|
+
</TooltipTrigger>
|
|
3737
|
+
<TooltipContent>
|
|
3738
|
+
{rewindAgentPromptCopied
|
|
3739
|
+
? "Setup prompt copied"
|
|
3740
|
+
: "Copy setup prompt for your agent"}
|
|
3741
|
+
</TooltipContent>
|
|
3742
|
+
</Tooltip>
|
|
3743
|
+
<Switch
|
|
3744
|
+
on={homeRewindOn}
|
|
3745
|
+
disabled={
|
|
3746
|
+
homeScreenMemoryBusy || isRecording || recordingFlowActive
|
|
3747
|
+
}
|
|
3748
|
+
onChange={(remembering) =>
|
|
3749
|
+
void setHomeRewindRemembering(remembering)
|
|
3750
|
+
}
|
|
3751
|
+
label={
|
|
3752
|
+
featureConfig?.screenMemory?.enabled === true
|
|
3753
|
+
? "Remember with Rewind"
|
|
3754
|
+
: "Set up Rewind"
|
|
3755
|
+
}
|
|
3756
|
+
/>
|
|
3757
|
+
</div>
|
|
3758
|
+
<button
|
|
3759
|
+
type="button"
|
|
3760
|
+
className="rewind-docs-link"
|
|
3761
|
+
onClick={openRewindDocs}
|
|
3762
|
+
>
|
|
3763
|
+
Learn about Rewind
|
|
3764
|
+
<IconExternalLink size={13} stroke={1.9} />
|
|
3765
|
+
</button>
|
|
3766
|
+
</div>
|
|
3733
3767
|
</div>
|
|
3734
|
-
|
|
3768
|
+
) : null}
|
|
3735
3769
|
</section>
|
|
3736
3770
|
|
|
3737
3771
|
{!isRecording ? (
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { invoke } from "@tauri-apps/api/core";
|
|
2
|
+
|
|
3
|
+
export interface DismissibleMeetingNotification {
|
|
4
|
+
type: "calendar" | "adhoc";
|
|
5
|
+
meetingId: string;
|
|
6
|
+
platform?: string | null;
|
|
7
|
+
scheduledStart?: string | null;
|
|
8
|
+
scheduledEnd?: string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type NativeInvoke = (
|
|
12
|
+
command: string,
|
|
13
|
+
args: Record<string, unknown>,
|
|
14
|
+
) => Promise<unknown>;
|
|
15
|
+
|
|
16
|
+
export async function dismissMeetingNotification(
|
|
17
|
+
notification: DismissibleMeetingNotification,
|
|
18
|
+
nativeInvoke: NativeInvoke = invoke,
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
try {
|
|
21
|
+
await nativeInvoke("dismiss_meeting_notification", {
|
|
22
|
+
meetingId: notification.meetingId,
|
|
23
|
+
notificationType: notification.type,
|
|
24
|
+
platform: notification.platform ?? null,
|
|
25
|
+
scheduledStart: notification.scheduledStart ?? null,
|
|
26
|
+
scheduledEnd: notification.scheduledEnd ?? null,
|
|
27
|
+
});
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.warn("[clips-meeting-notif] dismissal sync failed", error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -114,7 +114,6 @@ const LIVE_UPLOAD_CHUNK_MS = 2_000;
|
|
|
114
114
|
const NATIVE_FULLSCREEN_SEGMENT_MS = 5 * 60_000;
|
|
115
115
|
const NATIVE_FULLSCREEN_MIME_TYPE = "video/mp4";
|
|
116
116
|
const MEDIA_RECORDER_STOP_TIMEOUT_MS = 15_000;
|
|
117
|
-
const THUMBNAIL_UPLOAD_TIMEOUT_MS = 8_000;
|
|
118
117
|
// GCS resumable uploads require every non-final chunk to be a multiple of
|
|
119
118
|
// 256 KiB. MediaRecorder emits arbitrary blob sizes, so on the streaming path
|
|
120
119
|
// we buffer raw blobs and only PUT aligned slices; the unaligned remainder is
|
|
@@ -1462,146 +1461,6 @@ async function saveRecordingTranscriptFailure(
|
|
|
1462
1461
|
}
|
|
1463
1462
|
}
|
|
1464
1463
|
|
|
1465
|
-
const THUMBNAIL_PROBE_WIDTH = 40;
|
|
1466
|
-
const THUMBNAIL_MIN_MEAN_LUMA = 8;
|
|
1467
|
-
const THUMBNAIL_MIN_MAX_LUMA = 28;
|
|
1468
|
-
const THUMBNAIL_MIN_VISIBLE_PIXEL_RATIO = 0.005;
|
|
1469
|
-
|
|
1470
|
-
function canvasHasVisibleContent(canvas: HTMLCanvasElement): boolean {
|
|
1471
|
-
if (!canvas.width || !canvas.height) return false;
|
|
1472
|
-
|
|
1473
|
-
const width = THUMBNAIL_PROBE_WIDTH;
|
|
1474
|
-
const height = Math.max(
|
|
1475
|
-
1,
|
|
1476
|
-
Math.round((canvas.height / canvas.width) * width),
|
|
1477
|
-
);
|
|
1478
|
-
const probe = document.createElement("canvas");
|
|
1479
|
-
probe.width = width;
|
|
1480
|
-
probe.height = height;
|
|
1481
|
-
|
|
1482
|
-
const ctx = probe.getContext("2d", { willReadFrequently: true });
|
|
1483
|
-
if (!ctx) return true;
|
|
1484
|
-
|
|
1485
|
-
try {
|
|
1486
|
-
ctx.drawImage(canvas, 0, 0, width, height);
|
|
1487
|
-
const data = ctx.getImageData(0, 0, width, height).data;
|
|
1488
|
-
let totalLuma = 0;
|
|
1489
|
-
let maxLuma = 0;
|
|
1490
|
-
let visiblePixels = 0;
|
|
1491
|
-
const pixels = data.length / 4;
|
|
1492
|
-
|
|
1493
|
-
for (let i = 0; i < data.length; i += 4) {
|
|
1494
|
-
const alpha = data[i + 3] / 255;
|
|
1495
|
-
const luma =
|
|
1496
|
-
(0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2]) *
|
|
1497
|
-
alpha;
|
|
1498
|
-
totalLuma += luma;
|
|
1499
|
-
maxLuma = Math.max(maxLuma, luma);
|
|
1500
|
-
if (luma >= THUMBNAIL_MIN_MAX_LUMA) visiblePixels++;
|
|
1501
|
-
}
|
|
1502
|
-
|
|
1503
|
-
const meanLuma = totalLuma / Math.max(1, pixels);
|
|
1504
|
-
const visibleRatio = visiblePixels / Math.max(1, pixels);
|
|
1505
|
-
return (
|
|
1506
|
-
meanLuma >= THUMBNAIL_MIN_MEAN_LUMA ||
|
|
1507
|
-
(maxLuma >= THUMBNAIL_MIN_MAX_LUMA &&
|
|
1508
|
-
visibleRatio >= THUMBNAIL_MIN_VISIBLE_PIXEL_RATIO)
|
|
1509
|
-
);
|
|
1510
|
-
} catch {
|
|
1511
|
-
return true;
|
|
1512
|
-
}
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
async function waitForVideoDimensions(
|
|
1516
|
-
video: HTMLVideoElement,
|
|
1517
|
-
timeoutMs = 1600,
|
|
1518
|
-
): Promise<boolean> {
|
|
1519
|
-
const startedAt = Date.now();
|
|
1520
|
-
while (Date.now() - startedAt < timeoutMs) {
|
|
1521
|
-
if (video.videoWidth > 0 && video.videoHeight > 0) return true;
|
|
1522
|
-
await new Promise((resolve) => window.setTimeout(resolve, 80));
|
|
1523
|
-
}
|
|
1524
|
-
return video.videoWidth > 0 && video.videoHeight > 0;
|
|
1525
|
-
}
|
|
1526
|
-
|
|
1527
|
-
async function captureStreamThumbnailBlob(
|
|
1528
|
-
stream: MediaStream | null,
|
|
1529
|
-
): Promise<Blob | null> {
|
|
1530
|
-
if (!stream?.getVideoTracks().some((track) => track.readyState === "live")) {
|
|
1531
|
-
return null;
|
|
1532
|
-
}
|
|
1533
|
-
|
|
1534
|
-
const video = document.createElement("video");
|
|
1535
|
-
video.muted = true;
|
|
1536
|
-
video.playsInline = true;
|
|
1537
|
-
video.autoplay = true;
|
|
1538
|
-
video.srcObject = stream;
|
|
1539
|
-
video.style.position = "fixed";
|
|
1540
|
-
video.style.left = "-10000px";
|
|
1541
|
-
video.style.top = "0";
|
|
1542
|
-
video.style.width = "1px";
|
|
1543
|
-
video.style.height = "1px";
|
|
1544
|
-
video.style.opacity = "0";
|
|
1545
|
-
|
|
1546
|
-
try {
|
|
1547
|
-
document.body.appendChild(video);
|
|
1548
|
-
await video.play().catch(() => {});
|
|
1549
|
-
if (!(await waitForVideoDimensions(video))) return null;
|
|
1550
|
-
|
|
1551
|
-
const canvas = document.createElement("canvas");
|
|
1552
|
-
canvas.width = video.videoWidth;
|
|
1553
|
-
canvas.height = video.videoHeight;
|
|
1554
|
-
const ctx = canvas.getContext("2d");
|
|
1555
|
-
if (!ctx) return null;
|
|
1556
|
-
|
|
1557
|
-
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
|
|
1558
|
-
if (!canvasHasVisibleContent(canvas)) return null;
|
|
1559
|
-
|
|
1560
|
-
return await new Promise<Blob | null>((resolve) => {
|
|
1561
|
-
canvas.toBlob((blob) => resolve(blob), "image/jpeg", 0.85);
|
|
1562
|
-
});
|
|
1563
|
-
} finally {
|
|
1564
|
-
video.pause();
|
|
1565
|
-
video.srcObject = null;
|
|
1566
|
-
video.remove();
|
|
1567
|
-
}
|
|
1568
|
-
}
|
|
1569
|
-
|
|
1570
|
-
async function captureAndUploadRecordingThumbnail(params: {
|
|
1571
|
-
serverUrl: string;
|
|
1572
|
-
recordingId: string;
|
|
1573
|
-
stream: MediaStream | null;
|
|
1574
|
-
authToken?: string;
|
|
1575
|
-
}): Promise<void> {
|
|
1576
|
-
const blob = await captureStreamThumbnailBlob(params.stream);
|
|
1577
|
-
if (!blob) {
|
|
1578
|
-
console.warn("[clips-recorder] no visible thumbnail frame captured");
|
|
1579
|
-
return;
|
|
1580
|
-
}
|
|
1581
|
-
|
|
1582
|
-
const url = `${params.serverUrl.replace(
|
|
1583
|
-
/\/+$/,
|
|
1584
|
-
"",
|
|
1585
|
-
)}/api/recordings/${params.recordingId}/thumbnail`;
|
|
1586
|
-
const res = await fetch(url, {
|
|
1587
|
-
method: "POST",
|
|
1588
|
-
headers: buildRetryHeaders(blob.type || "image/jpeg", params.authToken),
|
|
1589
|
-
credentials: "include",
|
|
1590
|
-
body: blob,
|
|
1591
|
-
signal: AbortSignal.timeout(THUMBNAIL_UPLOAD_TIMEOUT_MS),
|
|
1592
|
-
});
|
|
1593
|
-
if (!res.ok) {
|
|
1594
|
-
const body = await res.text().catch(() => "");
|
|
1595
|
-
throw new Error(
|
|
1596
|
-
`Thumbnail upload failed (${res.status}): ${body.slice(0, 200)}`,
|
|
1597
|
-
);
|
|
1598
|
-
}
|
|
1599
|
-
console.log("[clips-recorder] thumbnail uploaded", {
|
|
1600
|
-
recordingId: params.recordingId,
|
|
1601
|
-
bytes: blob.size,
|
|
1602
|
-
});
|
|
1603
|
-
}
|
|
1604
|
-
|
|
1605
1464
|
/**
|
|
1606
1465
|
* Counter of in-flight chunk POSTs. The bubble frame pump reads
|
|
1607
1466
|
* `window.clipsChunkBusy` and SKIPS frame encoding while it's truthy,
|
|
@@ -3120,18 +2979,8 @@ async function startNativeFullscreenRecording(
|
|
|
3120
2979
|
err,
|
|
3121
2980
|
),
|
|
3122
2981
|
);
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
recordingId: id,
|
|
3126
|
-
authToken: params.authToken ?? "",
|
|
3127
|
-
cookie: params.cookie ?? "",
|
|
3128
|
-
}).catch((err) => {
|
|
3129
|
-
console.warn(
|
|
3130
|
-
"[clips-recorder] native thumbnail capture/upload failed:",
|
|
3131
|
-
err,
|
|
3132
|
-
);
|
|
3133
|
-
});
|
|
3134
|
-
|
|
2982
|
+
// The owner player captures the poster from decoded recording media.
|
|
2983
|
+
// Never screen-capture this post-stop window: it may show upload UI.
|
|
3135
2984
|
try {
|
|
3136
2985
|
uploadResult = await uploadPromise;
|
|
3137
2986
|
} catch (err) {
|
|
@@ -4294,8 +4143,8 @@ async function startRecordingInner(
|
|
|
4294
4143
|
stopped = true;
|
|
4295
4144
|
// Stamped right after the recorder fully stops below (see stoppedAt).
|
|
4296
4145
|
// Duration must measure recorded content — through the final flushed
|
|
4297
|
-
// chunk — but NOT the transcript-finalize +
|
|
4298
|
-
//
|
|
4146
|
+
// chunk — but NOT the transcript-finalize + upload awaits that follow,
|
|
4147
|
+
// which add ~seconds and would overstate the saved duration.
|
|
4299
4148
|
let stoppedAt = 0;
|
|
4300
4149
|
const viewUrl = `/r/${id}`;
|
|
4301
4150
|
const absoluteViewUrl = `${params.serverUrl.replace(/\/+$/, "")}${viewUrl}`;
|
|
@@ -4412,18 +4261,6 @@ async function startRecordingInner(
|
|
|
4412
4261
|
}
|
|
4413
4262
|
|
|
4414
4263
|
if (!recorderStopTimedOut) {
|
|
4415
|
-
void captureAndUploadRecordingThumbnail({
|
|
4416
|
-
serverUrl: params.serverUrl,
|
|
4417
|
-
recordingId: id,
|
|
4418
|
-
stream: primaryVideo,
|
|
4419
|
-
authToken: params.authToken,
|
|
4420
|
-
}).catch((err) => {
|
|
4421
|
-
console.warn(
|
|
4422
|
-
"[clips-recorder] thumbnail capture/upload failed:",
|
|
4423
|
-
err,
|
|
4424
|
-
);
|
|
4425
|
-
});
|
|
4426
|
-
|
|
4427
4264
|
const capturedTranscript = await transcriptionCapture
|
|
4428
4265
|
?.stop()
|
|
4429
4266
|
.catch((err) => {
|
|
@@ -11,6 +11,7 @@ import { emit, listen } from "@tauri-apps/api/event";
|
|
|
11
11
|
import { getCurrentWindow } from "@tauri-apps/api/window";
|
|
12
12
|
import { useEffect, useRef, useState } from "react";
|
|
13
13
|
|
|
14
|
+
import { dismissMeetingNotification } from "../lib/meeting-notification-dismissal";
|
|
14
15
|
import {
|
|
15
16
|
detectMeetingJoinProvider,
|
|
16
17
|
joinProviderLabel,
|
|
@@ -308,6 +309,14 @@ export function MeetingNotification() {
|
|
|
308
309
|
dataRef.current = null;
|
|
309
310
|
}
|
|
310
311
|
|
|
312
|
+
function dismissNotification() {
|
|
313
|
+
const current = dataRef.current;
|
|
314
|
+
hideNotification();
|
|
315
|
+
if (current) {
|
|
316
|
+
void dismissMeetingNotification(current);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
311
320
|
async function takeNotes() {
|
|
312
321
|
if (!data || pending) return;
|
|
313
322
|
setPending(true);
|
|
@@ -447,7 +456,7 @@ export function MeetingNotification() {
|
|
|
447
456
|
{showClose ? (
|
|
448
457
|
<button
|
|
449
458
|
className="meeting-notification-close"
|
|
450
|
-
onClick={
|
|
459
|
+
onClick={dismissNotification}
|
|
451
460
|
aria-label="Dismiss"
|
|
452
461
|
data-no-drag
|
|
453
462
|
>
|
|
@@ -889,19 +889,16 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
889
889
|
/* ------------------------------------------------------------------------- */
|
|
890
890
|
|
|
891
891
|
.readiness {
|
|
892
|
-
border:
|
|
893
|
-
border-radius:
|
|
894
|
-
background:
|
|
892
|
+
border: none;
|
|
893
|
+
border-radius: 0;
|
|
894
|
+
background: transparent;
|
|
895
895
|
overflow: hidden;
|
|
896
896
|
flex-shrink: 0;
|
|
897
|
-
transition:
|
|
898
|
-
border-color 120ms,
|
|
899
|
-
background 120ms;
|
|
900
897
|
}
|
|
901
898
|
|
|
902
899
|
.readiness-open {
|
|
903
|
-
border-color:
|
|
904
|
-
background:
|
|
900
|
+
border-color: transparent;
|
|
901
|
+
background: transparent;
|
|
905
902
|
}
|
|
906
903
|
|
|
907
904
|
.readiness-summary {
|
|
@@ -922,7 +919,7 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
922
919
|
}
|
|
923
920
|
|
|
924
921
|
.readiness-summary:hover {
|
|
925
|
-
|
|
922
|
+
color: var(--fg-muted);
|
|
926
923
|
}
|
|
927
924
|
|
|
928
925
|
.readiness-summary:focus-visible {
|
|
@@ -932,10 +929,9 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
932
929
|
|
|
933
930
|
.readiness-open .readiness-summary {
|
|
934
931
|
min-height: 42px;
|
|
935
|
-
border-radius:
|
|
932
|
+
border-radius: var(--radius-sm);
|
|
936
933
|
padding: 10px 12px;
|
|
937
|
-
background:
|
|
938
|
-
border-bottom: 1px solid var(--border);
|
|
934
|
+
background: transparent;
|
|
939
935
|
}
|
|
940
936
|
|
|
941
937
|
.readiness-title {
|
|
@@ -1332,37 +1328,110 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1332
1328
|
/* Rewind is a calm everyday status first; configuration is a drill-in. */
|
|
1333
1329
|
.rewind-home-card {
|
|
1334
1330
|
display: grid;
|
|
1335
|
-
gap:
|
|
1336
|
-
padding:
|
|
1337
|
-
border:
|
|
1338
|
-
border-radius:
|
|
1339
|
-
background:
|
|
1331
|
+
gap: 0;
|
|
1332
|
+
padding: 0;
|
|
1333
|
+
border: none;
|
|
1334
|
+
border-radius: 0;
|
|
1335
|
+
background: transparent;
|
|
1340
1336
|
}
|
|
1341
1337
|
|
|
1342
|
-
.rewind-home-
|
|
1338
|
+
.rewind-home-summary {
|
|
1343
1339
|
display: grid;
|
|
1344
|
-
grid-template-columns:
|
|
1340
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1345
1341
|
align-items: center;
|
|
1346
|
-
gap:
|
|
1342
|
+
gap: 8px;
|
|
1343
|
+
width: 100%;
|
|
1344
|
+
min-height: 42px;
|
|
1345
|
+
padding: 10px 12px;
|
|
1346
|
+
border: none;
|
|
1347
|
+
border-radius: var(--radius-sm);
|
|
1348
|
+
background: transparent;
|
|
1349
|
+
color: var(--fg);
|
|
1350
|
+
cursor: pointer;
|
|
1351
|
+
text-align: left;
|
|
1352
|
+
transition: color 120ms;
|
|
1347
1353
|
}
|
|
1348
1354
|
|
|
1349
|
-
.rewind-
|
|
1355
|
+
.rewind-home-summary:hover {
|
|
1356
|
+
color: var(--fg-muted);
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.rewind-home-summary:focus-visible {
|
|
1360
|
+
outline: none;
|
|
1361
|
+
box-shadow: 0 0 0 3px var(--brand-ring);
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
.rewind-home-title {
|
|
1365
|
+
font-size: 13px;
|
|
1366
|
+
font-weight: 500;
|
|
1367
|
+
line-height: 1;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
.rewind-home-state {
|
|
1371
|
+
display: inline-flex;
|
|
1372
|
+
align-items: center;
|
|
1373
|
+
gap: 4px;
|
|
1374
|
+
color: var(--fg-muted);
|
|
1375
|
+
font-size: 11px;
|
|
1376
|
+
font-weight: 600;
|
|
1377
|
+
line-height: 1;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
.rewind-home-details {
|
|
1350
1381
|
display: grid;
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
gap: 9px;
|
|
1382
|
+
gap: 10px;
|
|
1383
|
+
padding: 0 12px 10px;
|
|
1354
1384
|
}
|
|
1355
1385
|
|
|
1356
|
-
.rewind-home-
|
|
1357
|
-
margin:
|
|
1386
|
+
.rewind-home-details p {
|
|
1387
|
+
margin: 0;
|
|
1358
1388
|
color: var(--fg-muted);
|
|
1359
1389
|
font-size: 11px;
|
|
1360
1390
|
line-height: 1.4;
|
|
1361
1391
|
}
|
|
1362
1392
|
|
|
1363
|
-
.rewind-home-
|
|
1364
|
-
|
|
1365
|
-
|
|
1393
|
+
.rewind-home-detail-actions {
|
|
1394
|
+
display: flex;
|
|
1395
|
+
align-items: center;
|
|
1396
|
+
justify-content: space-between;
|
|
1397
|
+
gap: 10px;
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
.rewind-home-controls {
|
|
1401
|
+
display: inline-flex;
|
|
1402
|
+
align-items: center;
|
|
1403
|
+
gap: 8px;
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
.rewind-docs-link {
|
|
1407
|
+
display: inline-flex;
|
|
1408
|
+
align-items: center;
|
|
1409
|
+
gap: 4px;
|
|
1410
|
+
padding: 0;
|
|
1411
|
+
border: none;
|
|
1412
|
+
background: transparent;
|
|
1413
|
+
color: var(--fg-muted);
|
|
1414
|
+
cursor: pointer;
|
|
1415
|
+
font-size: 11px;
|
|
1416
|
+
font-weight: 600;
|
|
1417
|
+
white-space: nowrap;
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
.rewind-docs-link:hover {
|
|
1421
|
+
color: var(--fg);
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
.rewind-docs-link:focus-visible {
|
|
1425
|
+
outline: none;
|
|
1426
|
+
box-shadow: 0 0 0 3px var(--brand-ring);
|
|
1427
|
+
border-radius: 4px;
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
.rewind-settings-entry-main {
|
|
1431
|
+
display: grid;
|
|
1432
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
1433
|
+
align-items: start;
|
|
1434
|
+
gap: 9px;
|
|
1366
1435
|
}
|
|
1367
1436
|
|
|
1368
1437
|
.rewind-home-lock-note,
|
|
@@ -1379,12 +1448,6 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1379
1448
|
background: var(--surface);
|
|
1380
1449
|
}
|
|
1381
1450
|
|
|
1382
|
-
.rewind-home-controls {
|
|
1383
|
-
display: inline-flex;
|
|
1384
|
-
align-items: center;
|
|
1385
|
-
gap: 8px;
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
1451
|
.rewind-agent-prompt-copy {
|
|
1389
1452
|
width: 28px;
|
|
1390
1453
|
height: 28px;
|
|
@@ -1399,7 +1462,6 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
1399
1462
|
}
|
|
1400
1463
|
|
|
1401
1464
|
.rewind-agent-prompt-copy:hover {
|
|
1402
|
-
background: var(--surface-hover);
|
|
1403
1465
|
color: var(--fg);
|
|
1404
1466
|
}
|
|
1405
1467
|
|