@agent-native/core 0.115.4 → 0.117.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-native.eject.json +1 -0
- package/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +43 -0
- package/corpus/core/agent-native.eject.json +1 -0
- package/corpus/core/docs/AGENTS.md +1 -1
- package/corpus/core/docs/content/agent-mentions.mdx +2 -2
- package/corpus/core/docs/content/{workspace.mdx → agent-resources.mdx} +1 -7
- package/corpus/core/docs/content/agent-teams.mdx +4 -4
- package/corpus/core/docs/content/dispatch.mdx +10 -10
- package/corpus/core/docs/content/drop-in-agent.mdx +4 -4
- package/corpus/core/docs/content/external-agents.mdx +1 -1
- package/corpus/core/docs/content/frames.mdx +1 -1
- package/corpus/core/docs/content/integrations.mdx +13 -2
- package/corpus/core/docs/content/key-concepts.mdx +2 -2
- package/corpus/core/docs/content/mcp-clients.mdx +7 -1
- package/corpus/core/docs/content/multi-app-workspace.mdx +3 -3
- package/corpus/core/docs/content/real-time-collaboration.mdx +33 -15
- package/corpus/core/docs/content/recurring-jobs.mdx +7 -7
- package/corpus/core/docs/content/skills-guide.mdx +4 -4
- package/corpus/core/docs/content/template-brain.mdx +1 -1
- package/corpus/core/docs/content/toolkit-collaboration.mdx +1 -1
- package/corpus/core/docs/content/using-your-agent.mdx +1 -1
- package/corpus/core/docs/content/what-is-agent-native.mdx +4 -4
- package/corpus/core/docs/content/workspace-management.mdx +4 -4
- package/corpus/core/package.json +4 -1
- package/corpus/core/src/agent/production-agent.ts +13 -3
- package/corpus/core/src/cli/doctor.ts +6 -1
- package/corpus/core/src/client/AgentPanel.tsx +79 -41
- package/corpus/core/src/client/AssistantChat.tsx +71 -25
- package/corpus/core/src/client/FeedbackButton.tsx +33 -7
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +6 -8
- package/corpus/core/src/client/agent-chat-adapter.ts +11 -2
- package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +22 -3
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +34 -19
- package/corpus/core/src/client/analytics.ts +7 -0
- package/corpus/core/src/client/chat/message-components.tsx +43 -16
- package/corpus/core/src/client/chat/tool-call-display.tsx +30 -18
- package/corpus/core/src/client/chat/tool-render-registry.tsx +2 -0
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +19 -2
- package/corpus/core/src/client/resources/ResourceTree.tsx +7 -10
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +33 -70
- package/corpus/core/src/client/resources/mcp-connection-resume.ts +107 -0
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +65 -12
- package/corpus/core/src/client/resources/mcp-integration-logos.ts +4 -0
- package/corpus/core/src/client/sse-event-processor.ts +50 -14
- package/corpus/core/src/client/use-db-sync.ts +370 -21
- package/corpus/core/src/collab/client.ts +26 -2
- package/corpus/core/src/connections/catalog.ts +7 -1
- package/corpus/core/src/db/ddl-guard.ts +49 -10
- package/corpus/core/src/deploy/build.ts +25 -2
- package/corpus/core/src/eject/remote-mcp-presets.ts +37 -5
- package/corpus/core/src/guards/explicit-collab-access.ts +229 -0
- package/corpus/core/src/guards/index.ts +1 -0
- package/corpus/core/src/localization/default-messages.ts +54 -5
- package/corpus/core/src/mcp/connect-route.ts +34 -51
- package/corpus/core/src/provider-api/index.ts +1 -1
- package/corpus/core/src/realtime-protocol.ts +92 -0
- package/corpus/core/src/server/collab-plugin.ts +137 -18
- package/corpus/core/src/server/core-routes-plugin.ts +7 -0
- package/corpus/core/src/server/index.ts +2 -0
- package/corpus/core/src/server/poll-events.ts +29 -8
- package/corpus/core/src/server/poll.ts +1123 -865
- package/corpus/core/src/server/realtime-token.ts +106 -0
- package/corpus/core/src/server/sentry-config.ts +40 -0
- package/corpus/core/src/server/short-lived-token.ts +156 -0
- package/corpus/core/src/server/sse.ts +15 -0
- package/corpus/core/src/server/ssr-handler.ts +9 -3
- package/corpus/core/src/styles/agent-native.css +40 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/analytics/AGENTS.md +7 -2
- package/corpus/templates/analytics/actions/export-dashboard-panel-to-google-sheet.ts +144 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -88
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +34 -37
- package/corpus/templates/analytics/app/global.css +0 -4
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +2 -7
- package/corpus/templates/analytics/app/i18n-data.ts +107 -0
- package/corpus/templates/analytics/app/lib/data-source-status.ts +9 -0
- package/corpus/templates/analytics/app/lib/sql-query.ts +1 -2
- package/corpus/templates/analytics/app/pages/Ask.tsx +2 -7
- package/corpus/templates/analytics/app/pages/DataSources.tsx +48 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +59 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +3 -1
- package/corpus/templates/analytics/changelog/2026-07-22-clear-background-chat-progress.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-daily-dashboard-email-query-batches.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-export-table-panels-directly-to-google-sheets.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-recent-chats-can-expand-in-the-sidebar.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +8 -8
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +31 -0
- package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +3 -5
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +12 -0
- package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +3 -5
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +150 -21
- package/corpus/templates/analytics/server/lib/google-sheets-export.ts +188 -0
- package/corpus/templates/analytics/server/lib/provider-api.ts +7 -2
- package/corpus/templates/analytics/server/plugins/collab.ts +6 -3
- package/corpus/templates/analytics/shared/sql-query-limits.ts +1 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/assets/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +54 -62
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -6
- package/corpus/templates/assets/app/routes/_index.tsx +8 -5
- package/corpus/templates/assets/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-22-recent-chats-expand-from-a-compact-list.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/brain/actions/rotate-source-ingest-token.ts +77 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +5 -1
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +38 -51
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/brain/app/i18n-data.ts +120 -0
- package/corpus/templates/brain/app/routes/sources.tsx +156 -5
- package/corpus/templates/brain/changelog/2026-07-22-chat-runs-always-end-with-an-answer.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-clear-background-chat-progress.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-long-chat-titles-stay-inside-the-sidebar.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-new-clips-and-webhook-sources-now-show-their-secure-connecti.md +6 -0
- package/corpus/templates/brain/jobs/emit-netlify-brain-queue-cron.ts +125 -0
- package/corpus/templates/brain/netlify.toml +5 -1
- package/corpus/templates/brain/scripts/configure-prod-clips-source.ts +50 -0
- package/corpus/templates/brain/server/lib/capture-sanitization.ts +64 -6
- package/corpus/templates/brain/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/brain/server/plugins/brain-jobs.ts +1 -0
- package/corpus/templates/brain/server/routes/api/brain/queue/run.post.ts +55 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/corpus/templates/chat/app/routes/_index.tsx +8 -5
- package/corpus/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/clips/AGENTS.md +9 -1
- package/corpus/templates/clips/actions/export-to-brain.ts +82 -6
- package/corpus/templates/clips/actions/request-transcript.ts +25 -14
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +12 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
- package/corpus/templates/clips/changelog/2026-07-22-clips-transcripts-now-retry-brain-export.md +5 -0
- package/corpus/templates/clips/changelog/2026-07-22-german-umlauts-and-other-non-ascii-characters-now-paste-corr.md +6 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +26 -3
- package/corpus/templates/clips/jobs/emit-netlify-brain-export-cron.ts +118 -0
- package/corpus/templates/clips/netlify.toml +4 -1
- package/corpus/templates/clips/scripts/configure-prod-brain-export.ts +92 -0
- package/corpus/templates/clips/server/jobs/brain-export.ts +182 -0
- package/corpus/templates/clips/server/lib/brain-export-state.ts +42 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +5 -1
- package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
- package/corpus/templates/clips/server/register-secrets.ts +42 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +10 -1
- package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +45 -0
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +566 -299
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +14 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -1
- package/corpus/templates/content/app/i18n-data.ts +90 -0
- package/corpus/templates/content/server/plugins/collab.ts +1 -1
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/crm/actions/_crm-data-program-actions.ts +15 -0
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +2 -0
- package/corpus/templates/crm/actions/run.ts +2 -6
- package/corpus/templates/crm/actions/update-crm-record.ts +4 -2
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +4 -1
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/design/server/plugins/collab.ts +11 -8
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/forms/app/root.tsx +1 -6
- package/corpus/templates/forms/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -1
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +57 -72
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/plan/app/lib/create-plan-routing.ts +2 -2
- package/corpus/templates/plan/app/pages/PlanChatPage.tsx +0 -1
- package/corpus/templates/plan/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-22-recent-chats-and-sidebar-controls-are-more-compact.md +6 -0
- package/corpus/templates/plan/server/plugins/collab.ts +5 -2
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/slides/server/plugins/collab.ts +11 -8
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/tasks/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +5 -22
- package/corpus/templates/tasks/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +7 -0
- package/corpus/toolkit/README.md +12 -3
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +89 -0
- package/corpus/toolkit/src/chat-history/index.ts +5 -0
- package/corpus/toolkit/src/chat-history.css +59 -0
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +106 -36
- package/corpus/toolkit/src/composer/VoiceButton.tsx +49 -0
- package/corpus/toolkit/src/composer/realtime-voice-audio-level.ts +2 -1
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +5 -3
- package/corpus/toolkit/src/styles.css +35 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +13 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +5 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +1 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +38 -18
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +55 -20
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts +4 -2
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +18 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +2 -3
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +11 -3
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts +3 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.js +3 -2
- package/dist/client/agent-page/AgentTabFrame.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts +2 -0
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +26 -15
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/analytics.d.ts +10 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +6 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +17 -11
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +11 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +16 -17
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/tool-render-registry.d.ts +2 -0
- package/dist/client/chat/tool-render-registry.d.ts.map +1 -1
- package/dist/client/chat/tool-render-registry.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +15 -1
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +3 -3
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +34 -20
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/mcp-connection-resume.d.ts +11 -0
- package/dist/client/resources/mcp-connection-resume.d.ts.map +1 -0
- package/dist/client/resources/mcp-connection-resume.js +95 -0
- package/dist/client/resources/mcp-connection-resume.js.map +1 -0
- 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 +63 -8
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/mcp-integration-logos.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-logos.js +4 -0
- package/dist/client/resources/mcp-integration-logos.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +5 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +39 -13
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +4 -3
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +332 -21
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +26 -2
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +1 -1
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +7 -1
- package/dist/connections/catalog.js.map +1 -1
- package/dist/db/ddl-guard.d.ts +7 -2
- package/dist/db/ddl-guard.d.ts.map +1 -1
- package/dist/db/ddl-guard.js +21 -9
- package/dist/db/ddl-guard.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +25 -2
- package/dist/deploy/build.js.map +1 -1
- package/dist/eject/remote-mcp-presets.d.ts.map +1 -1
- package/dist/eject/remote-mcp-presets.js +33 -3
- package/dist/eject/remote-mcp-presets.js.map +1 -1
- package/dist/guards/explicit-collab-access.d.ts +8 -0
- package/dist/guards/explicit-collab-access.d.ts.map +1 -0
- package/dist/guards/explicit-collab-access.js +214 -0
- package/dist/guards/explicit-collab-access.js.map +1 -0
- package/dist/guards/index.d.ts +1 -0
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +1 -0
- package/dist/guards/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +43 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +48 -5
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +34 -48
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.js +1 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/realtime-protocol.d.ts +40 -0
- package/dist/realtime-protocol.d.ts.map +1 -0
- package/dist/realtime-protocol.js +69 -0
- package/dist/realtime-protocol.js.map +1 -0
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/collab-plugin.d.ts +34 -3
- package/dist/server/collab-plugin.d.ts.map +1 -1
- package/dist/server/collab-plugin.js +65 -12
- package/dist/server/collab-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +3 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/poll-events.d.ts +7 -1
- package/dist/server/poll-events.d.ts.map +1 -1
- package/dist/server/poll-events.js +24 -7
- package/dist/server/poll-events.js.map +1 -1
- package/dist/server/poll.d.ts +223 -42
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +849 -737
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-token.d.ts +34 -0
- package/dist/server/realtime-token.d.ts.map +1 -0
- package/dist/server/realtime-token.js +85 -0
- package/dist/server/realtime-token.js.map +1 -0
- package/dist/server/sentry-config.d.ts +12 -0
- package/dist/server/sentry-config.d.ts.map +1 -1
- package/dist/server/sentry-config.js +34 -0
- package/dist/server/sentry-config.js.map +1 -1
- package/dist/server/short-lived-token.d.ts +46 -0
- package/dist/server/short-lived-token.d.ts.map +1 -1
- package/dist/server/short-lived-token.js +104 -0
- package/dist/server/short-lived-token.js.map +1 -1
- package/dist/server/sse.d.ts +1 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +4 -0
- package/dist/server/sse.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +5 -3
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +40 -0
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/dist/templates/chat/app/routes/_index.tsx +8 -5
- package/dist/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/dist/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/dist/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
- package/docs/AGENTS.md +1 -1
- package/docs/content/agent-mentions.mdx +2 -2
- package/docs/content/{workspace.mdx → agent-resources.mdx} +1 -7
- package/docs/content/agent-teams.mdx +4 -4
- package/docs/content/dispatch.mdx +10 -10
- package/docs/content/drop-in-agent.mdx +4 -4
- package/docs/content/external-agents.mdx +1 -1
- package/docs/content/frames.mdx +1 -1
- package/docs/content/integrations.mdx +13 -2
- package/docs/content/key-concepts.mdx +2 -2
- package/docs/content/mcp-clients.mdx +7 -1
- package/docs/content/multi-app-workspace.mdx +3 -3
- package/docs/content/real-time-collaboration.mdx +33 -15
- package/docs/content/recurring-jobs.mdx +7 -7
- package/docs/content/skills-guide.mdx +4 -4
- package/docs/content/template-brain.mdx +1 -1
- package/docs/content/toolkit-collaboration.mdx +1 -1
- package/docs/content/using-your-agent.mdx +1 -1
- package/docs/content/what-is-agent-native.mdx +4 -4
- package/docs/content/workspace-management.mdx +4 -4
- package/package.json +6 -3
- package/src/agent/production-agent.ts +13 -3
- package/src/cli/doctor.ts +6 -1
- package/src/client/AgentPanel.tsx +79 -41
- package/src/client/AssistantChat.tsx +71 -25
- package/src/client/FeedbackButton.tsx +33 -7
- package/src/client/MultiTabAssistantChat.tsx +6 -8
- package/src/client/agent-chat-adapter.ts +11 -2
- package/src/client/agent-page/AgentTabFrame.tsx +22 -3
- package/src/client/agent-page/AgentTabsPage.tsx +34 -19
- package/src/client/analytics.ts +7 -0
- package/src/client/chat/message-components.tsx +43 -16
- package/src/client/chat/tool-call-display.tsx +30 -18
- package/src/client/chat/tool-render-registry.tsx +2 -0
- package/src/client/resources/McpConnectionSuggestion.tsx +19 -2
- package/src/client/resources/ResourceTree.tsx +7 -10
- package/src/client/resources/ResourcesPanel.tsx +33 -70
- package/src/client/resources/mcp-connection-resume.ts +107 -0
- package/src/client/resources/mcp-integration-catalog.ts +65 -12
- package/src/client/resources/mcp-integration-logos.ts +4 -0
- package/src/client/sse-event-processor.ts +50 -14
- package/src/client/use-db-sync.ts +370 -21
- package/src/collab/client.ts +26 -2
- package/src/connections/catalog.ts +7 -1
- package/src/db/ddl-guard.ts +49 -10
- package/src/deploy/build.ts +25 -2
- package/src/eject/remote-mcp-presets.ts +37 -5
- package/src/guards/explicit-collab-access.ts +229 -0
- package/src/guards/index.ts +1 -0
- package/src/localization/default-messages.ts +54 -5
- package/src/mcp/connect-route.ts +34 -51
- package/src/provider-api/index.ts +1 -1
- package/src/realtime-protocol.ts +92 -0
- package/src/server/collab-plugin.ts +137 -18
- package/src/server/core-routes-plugin.ts +7 -0
- package/src/server/index.ts +2 -0
- package/src/server/poll-events.ts +29 -8
- package/src/server/poll.ts +1123 -865
- package/src/server/realtime-token.ts +106 -0
- package/src/server/sentry-config.ts +40 -0
- package/src/server/short-lived-token.ts +156 -0
- package/src/server/sse.ts +15 -0
- package/src/server/ssr-handler.ts +9 -3
- package/src/styles/agent-native.css +40 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/src/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/src/templates/chat/app/routes/_index.tsx +8 -5
- package/src/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/src/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/src/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
|
@@ -629,6 +629,11 @@ const enUS = {
|
|
|
629
629
|
refresh: "Refresh",
|
|
630
630
|
refreshing: "Refreshing...",
|
|
631
631
|
downloadCsv: "Download CSV",
|
|
632
|
+
exportToGoogleSheets: "Export to Google Sheets",
|
|
633
|
+
exportingToGoogleSheets: "Exporting to Google Sheets...",
|
|
634
|
+
googleSheetsExported: "Exported to Google Sheets",
|
|
635
|
+
openGoogleSheet: "Open sheet",
|
|
636
|
+
googleSheetsExportFailed: "Couldn't export to Google Sheets: {{message}}",
|
|
632
637
|
viewSql: "View SQL",
|
|
633
638
|
dragToReorder: "Drag to reorder",
|
|
634
639
|
deleteSectionTitle: "Delete section?",
|
|
@@ -814,6 +819,11 @@ const enUS = {
|
|
|
814
819
|
},
|
|
815
820
|
dataSources: {
|
|
816
821
|
uploadFile: "Upload file",
|
|
822
|
+
googleSheetsExport: "Google Sheets export",
|
|
823
|
+
googleSheetsExportDescription:
|
|
824
|
+
"Export dashboard reports to Google Sheets through a shared Google connection.",
|
|
825
|
+
connected: "Connected",
|
|
826
|
+
googleSheets: "Google Sheets",
|
|
817
827
|
open: "Open",
|
|
818
828
|
savedValueHint:
|
|
819
829
|
"A value is already saved. Leave blank to keep it, or enter a new value to replace it.",
|
|
@@ -1274,6 +1284,11 @@ const analyticsSliceTranslations: {
|
|
|
1274
1284
|
},
|
|
1275
1285
|
dataSources: {
|
|
1276
1286
|
uploadFile: "上传文件",
|
|
1287
|
+
googleSheetsExport: "Google Sheets 导出",
|
|
1288
|
+
googleSheetsExportDescription:
|
|
1289
|
+
"通过共享的 Google 连接将仪表板报告导出到 Google Sheets。",
|
|
1290
|
+
connected: "已连接",
|
|
1291
|
+
googleSheets: "Google Sheets",
|
|
1277
1292
|
open: "打开",
|
|
1278
1293
|
savedValueHint: "值已保存。留空以保留它,或输入新值以替换它。",
|
|
1279
1294
|
githubOAuth: "GitHub OAuth",
|
|
@@ -1557,6 +1572,11 @@ const analyticsSliceTranslations: {
|
|
|
1557
1572
|
},
|
|
1558
1573
|
dataSources: {
|
|
1559
1574
|
uploadFile: "Subir archivo",
|
|
1575
|
+
googleSheetsExport: "Exportación a Google Sheets",
|
|
1576
|
+
googleSheetsExportDescription:
|
|
1577
|
+
"Exporte informes del panel a Google Sheets mediante una conexión de Google compartida.",
|
|
1578
|
+
connected: "Conectado",
|
|
1579
|
+
googleSheets: "Google Sheets",
|
|
1560
1580
|
open: "Abierto",
|
|
1561
1581
|
savedValueHint:
|
|
1562
1582
|
"Ya hay un valor guardado. Déjelo en blanco para conservarlo o ingrese un nuevo valor para reemplazarlo.",
|
|
@@ -1862,6 +1882,11 @@ const analyticsSliceTranslations: {
|
|
|
1862
1882
|
},
|
|
1863
1883
|
dataSources: {
|
|
1864
1884
|
uploadFile: "Télécharger le fichier",
|
|
1885
|
+
googleSheetsExport: "Export Google Sheets",
|
|
1886
|
+
googleSheetsExportDescription:
|
|
1887
|
+
"Exportez les rapports du tableau de bord vers Google Sheets grâce à une connexion Google partagée.",
|
|
1888
|
+
connected: "Connecté",
|
|
1889
|
+
googleSheets: "Google Sheets",
|
|
1865
1890
|
open: "Ouvrir",
|
|
1866
1891
|
savedValueHint:
|
|
1867
1892
|
"Une valeur est déjà enregistrée. Laissez vide pour le conserver ou saisissez une nouvelle valeur pour le remplacer.",
|
|
@@ -2163,6 +2188,11 @@ const analyticsSliceTranslations: {
|
|
|
2163
2188
|
},
|
|
2164
2189
|
dataSources: {
|
|
2165
2190
|
uploadFile: "Datei hochladen",
|
|
2191
|
+
googleSheetsExport: "Google-Sheets-Export",
|
|
2192
|
+
googleSheetsExportDescription:
|
|
2193
|
+
"Exportieren Sie Dashboard-Berichte über eine gemeinsame Google-Verbindung nach Google Sheets.",
|
|
2194
|
+
connected: "Verbunden",
|
|
2195
|
+
googleSheets: "Google Sheets",
|
|
2166
2196
|
open: "Offen",
|
|
2167
2197
|
savedValueHint:
|
|
2168
2198
|
"Ein Wert ist bereits gespeichert. Lassen Sie das Feld leer, um es beizubehalten, oder geben Sie einen neuen Wert ein, um es zu ersetzen.",
|
|
@@ -2463,6 +2493,11 @@ const analyticsSliceTranslations: {
|
|
|
2463
2493
|
},
|
|
2464
2494
|
dataSources: {
|
|
2465
2495
|
uploadFile: "ファイルをアップロードする",
|
|
2496
|
+
googleSheetsExport: "Google スプレッドシートへのエクスポート",
|
|
2497
|
+
googleSheetsExportDescription:
|
|
2498
|
+
"共有 Google 接続を使用してダッシュボードレポートを Google スプレッドシートにエクスポートします。",
|
|
2499
|
+
connected: "接続済み",
|
|
2500
|
+
googleSheets: "Google Sheets",
|
|
2466
2501
|
open: "開ける",
|
|
2467
2502
|
savedValueHint:
|
|
2468
2503
|
"値はすでに保存されています。空白のままにして保持するか、新しい値を入力して置き換えます。",
|
|
@@ -2758,6 +2793,11 @@ const analyticsSliceTranslations: {
|
|
|
2758
2793
|
},
|
|
2759
2794
|
dataSources: {
|
|
2760
2795
|
uploadFile: "파일 업로드",
|
|
2796
|
+
googleSheetsExport: "Google Sheets 내보내기",
|
|
2797
|
+
googleSheetsExportDescription:
|
|
2798
|
+
"공유 Google 연결을 통해 대시보드 보고서를 Google Sheets로 내보냅니다.",
|
|
2799
|
+
connected: "연결됨",
|
|
2800
|
+
googleSheets: "Google Sheets",
|
|
2761
2801
|
open: "열려 있는",
|
|
2762
2802
|
savedValueHint:
|
|
2763
2803
|
"값이 이미 저장되어 있습니다. 유지하려면 비워두고, 바꾸려면 새 값을 입력하세요.",
|
|
@@ -3049,6 +3089,11 @@ const analyticsSliceTranslations: {
|
|
|
3049
3089
|
},
|
|
3050
3090
|
dataSources: {
|
|
3051
3091
|
uploadFile: "Carregar arquivo",
|
|
3092
|
+
googleSheetsExport: "Exportação para o Google Sheets",
|
|
3093
|
+
googleSheetsExportDescription:
|
|
3094
|
+
"Exporte relatórios do painel para o Google Sheets por meio de uma conexão Google compartilhada.",
|
|
3095
|
+
connected: "Conectado",
|
|
3096
|
+
googleSheets: "Google Sheets",
|
|
3052
3097
|
open: "Abrir",
|
|
3053
3098
|
savedValueHint:
|
|
3054
3099
|
"Um valor já está salvo. Deixe em branco para mantê-lo ou insira um novo valor para substituí-lo.",
|
|
@@ -3345,6 +3390,11 @@ const analyticsSliceTranslations: {
|
|
|
3345
3390
|
},
|
|
3346
3391
|
dataSources: {
|
|
3347
3392
|
uploadFile: "फ़ाइल अपलोड करें",
|
|
3393
|
+
googleSheetsExport: "Google Sheets निर्यात",
|
|
3394
|
+
googleSheetsExportDescription:
|
|
3395
|
+
"साझा Google कनेक्शन के माध्यम से डैशबोर्ड रिपोर्ट को Google Sheets में निर्यात करें।",
|
|
3396
|
+
connected: "कनेक्टेड",
|
|
3397
|
+
googleSheets: "Google Sheets",
|
|
3348
3398
|
open: "खुला",
|
|
3349
3399
|
savedValueHint:
|
|
3350
3400
|
"एक मान पहले से ही सहेजा गया है. इसे रखने के लिए खाली छोड़ दें, या इसे बदलने के लिए एक नया मान दर्ज करें।",
|
|
@@ -3632,6 +3682,11 @@ const analyticsSliceTranslations: {
|
|
|
3632
3682
|
},
|
|
3633
3683
|
dataSources: {
|
|
3634
3684
|
uploadFile: "تحميل الملف",
|
|
3685
|
+
googleSheetsExport: "تصدير Google Sheets",
|
|
3686
|
+
googleSheetsExportDescription:
|
|
3687
|
+
"صدّر تقارير لوحة المعلومات إلى Google Sheets من خلال اتصال Google مشترك.",
|
|
3688
|
+
connected: "متصل",
|
|
3689
|
+
googleSheets: "Google Sheets",
|
|
3635
3690
|
open: "يفتح",
|
|
3636
3691
|
savedValueHint:
|
|
3637
3692
|
"تم حفظ القيمة بالفعل. اتركه فارغًا للاحتفاظ به، أو أدخل قيمة جديدة لاستبداله.",
|
|
@@ -6059,6 +6114,11 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6059
6114
|
discardChanges: "放弃更改",
|
|
6060
6115
|
dismissDemoIntro: "关闭演示介绍",
|
|
6061
6116
|
downloadCsv: "下载CSV",
|
|
6117
|
+
exportToGoogleSheets: "导出到 Google Sheets",
|
|
6118
|
+
exportingToGoogleSheets: "正在导出到 Google Sheets...",
|
|
6119
|
+
googleSheetsExported: "已导出到 Google Sheets",
|
|
6120
|
+
openGoogleSheet: "打开表格",
|
|
6121
|
+
googleSheetsExportFailed: "无法导出到 Google Sheets:{{message}}",
|
|
6062
6122
|
dragToReorder: "拖动以重新排序",
|
|
6063
6123
|
expandFilters: "展开过滤器",
|
|
6064
6124
|
failedToFormatSql: "无法格式化 SQL",
|
|
@@ -6271,6 +6331,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6271
6331
|
discardChanges: "Descartar cambios",
|
|
6272
6332
|
dismissDemoIntro: "Descartar la introducción de la demostración",
|
|
6273
6333
|
downloadCsv: "Descargar CSV",
|
|
6334
|
+
exportToGoogleSheets: "Exportar a Google Sheets",
|
|
6335
|
+
exportingToGoogleSheets: "Exportando a Google Sheets...",
|
|
6336
|
+
googleSheetsExported: "Exportado a Google Sheets",
|
|
6337
|
+
openGoogleSheet: "Abrir hoja",
|
|
6338
|
+
googleSheetsExportFailed:
|
|
6339
|
+
"No se pudo exportar a Google Sheets: {{message}}",
|
|
6274
6340
|
dragToReorder: "Arrastra para reordenar",
|
|
6275
6341
|
expandFilters: "Ampliar filtros",
|
|
6276
6342
|
failedToFormatSql: "No se pudo formatear SQL",
|
|
@@ -6488,6 +6554,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6488
6554
|
discardChanges: "Ignorer les modifications",
|
|
6489
6555
|
dismissDemoIntro: "Ignorer l'intro de la démo",
|
|
6490
6556
|
downloadCsv: "Télécharger CSV",
|
|
6557
|
+
exportToGoogleSheets: "Exporter vers Google Sheets",
|
|
6558
|
+
exportingToGoogleSheets: "Exportation vers Google Sheets...",
|
|
6559
|
+
googleSheetsExported: "Exporté vers Google Sheets",
|
|
6560
|
+
openGoogleSheet: "Ouvrir la feuille",
|
|
6561
|
+
googleSheetsExportFailed:
|
|
6562
|
+
"Impossible d’exporter vers Google Sheets : {{message}}",
|
|
6491
6563
|
dragToReorder: "Faites glisser pour réorganiser",
|
|
6492
6564
|
expandFilters: "Développer les filtres",
|
|
6493
6565
|
failedToFormatSql: "Échec du formatage de SQL",
|
|
@@ -6706,6 +6778,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6706
6778
|
discardChanges: "Änderungen verwerfen",
|
|
6707
6779
|
dismissDemoIntro: "Demo-Intro schließen",
|
|
6708
6780
|
downloadCsv: "Laden Sie CSV herunter",
|
|
6781
|
+
exportToGoogleSheets: "Nach Google Sheets exportieren",
|
|
6782
|
+
exportingToGoogleSheets: "Export nach Google Sheets...",
|
|
6783
|
+
googleSheetsExported: "Nach Google Sheets exportiert",
|
|
6784
|
+
openGoogleSheet: "Tabelle öffnen",
|
|
6785
|
+
googleSheetsExportFailed:
|
|
6786
|
+
"Export nach Google Sheets fehlgeschlagen: {{message}}",
|
|
6709
6787
|
dragToReorder: "Zum Neuanordnen ziehen",
|
|
6710
6788
|
expandFilters: "Filter erweitern",
|
|
6711
6789
|
failedToFormatSql: "SQL konnte nicht formatiert werden",
|
|
@@ -6919,6 +6997,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6919
6997
|
discardChanges: "変更を破棄する",
|
|
6920
6998
|
dismissDemoIntro: "デモのイントロを閉じる",
|
|
6921
6999
|
downloadCsv: "CSVをダウンロード",
|
|
7000
|
+
exportToGoogleSheets: "Google スプレッドシートにエクスポート",
|
|
7001
|
+
exportingToGoogleSheets: "Google スプレッドシートにエクスポート中...",
|
|
7002
|
+
googleSheetsExported: "Google スプレッドシートにエクスポートしました",
|
|
7003
|
+
openGoogleSheet: "シートを開く",
|
|
7004
|
+
googleSheetsExportFailed:
|
|
7005
|
+
"Google スプレッドシートへのエクスポートに失敗しました: {{message}}",
|
|
6922
7006
|
dragToReorder: "ドラッグして並べ替えます",
|
|
6923
7007
|
expandFilters: "フィルターを展開する",
|
|
6924
7008
|
failedToFormatSql: "SQLのフォーマットに失敗しました",
|
|
@@ -7131,6 +7215,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7131
7215
|
discardChanges: "변경사항 취소",
|
|
7132
7216
|
dismissDemoIntro: "데모 소개 닫기",
|
|
7133
7217
|
downloadCsv: "CSV 다운로드",
|
|
7218
|
+
exportToGoogleSheets: "Google Sheets로 내보내기",
|
|
7219
|
+
exportingToGoogleSheets: "Google Sheets로 내보내는 중...",
|
|
7220
|
+
googleSheetsExported: "Google Sheets로 내보냈습니다",
|
|
7221
|
+
openGoogleSheet: "시트 열기",
|
|
7222
|
+
googleSheetsExportFailed:
|
|
7223
|
+
"Google Sheets로 내보내지 못했습니다: {{message}}",
|
|
7134
7224
|
dragToReorder: "드래그하여 재정렬하세요.",
|
|
7135
7225
|
expandFilters: "필터 확장",
|
|
7136
7226
|
failedToFormatSql: "SQL을 포맷하지 못했습니다.",
|
|
@@ -7347,6 +7437,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7347
7437
|
discardChanges: "Descartar alterações",
|
|
7348
7438
|
dismissDemoIntro: "Ignorar introdução da demonstração",
|
|
7349
7439
|
downloadCsv: "Baixar CSV",
|
|
7440
|
+
exportToGoogleSheets: "Exportar para o Google Sheets",
|
|
7441
|
+
exportingToGoogleSheets: "Exportando para o Google Sheets...",
|
|
7442
|
+
googleSheetsExported: "Exportado para o Google Sheets",
|
|
7443
|
+
openGoogleSheet: "Abrir planilha",
|
|
7444
|
+
googleSheetsExportFailed:
|
|
7445
|
+
"Não foi possível exportar para o Google Sheets: {{message}}",
|
|
7350
7446
|
dragToReorder: "Arraste para reordenar",
|
|
7351
7447
|
expandFilters: "Expandir filtros",
|
|
7352
7448
|
failedToFormatSql: "Falha ao formatar SQL",
|
|
@@ -7559,6 +7655,12 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7559
7655
|
discardChanges: "परिवर्तन त्यागें",
|
|
7560
7656
|
dismissDemoIntro: "डेमो परिचय ख़ारिज करें",
|
|
7561
7657
|
downloadCsv: "CSV डाउनलोड करें",
|
|
7658
|
+
exportToGoogleSheets: "Google Sheets में निर्यात करें",
|
|
7659
|
+
exportingToGoogleSheets: "Google Sheets में निर्यात किया जा रहा है...",
|
|
7660
|
+
googleSheetsExported: "Google Sheets में निर्यात किया गया",
|
|
7661
|
+
openGoogleSheet: "शीट खोलें",
|
|
7662
|
+
googleSheetsExportFailed:
|
|
7663
|
+
"Google Sheets में निर्यात नहीं किया जा सका: {{message}}",
|
|
7562
7664
|
dragToReorder: "पुनः व्यवस्थित करने के लिए खींचें",
|
|
7563
7665
|
expandFilters: "फ़िल्टर का विस्तार करें",
|
|
7564
7666
|
failedToFormatSql: "SQL को प्रारूपित करने में विफल",
|
|
@@ -7770,6 +7872,11 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7770
7872
|
discardChanges: "تجاهل التغييرات",
|
|
7771
7873
|
dismissDemoIntro: "رفض المقدمة التجريبية",
|
|
7772
7874
|
downloadCsv: "تحميل CSV",
|
|
7875
|
+
exportToGoogleSheets: "تصدير إلى Google Sheets",
|
|
7876
|
+
exportingToGoogleSheets: "جارٍ التصدير إلى Google Sheets...",
|
|
7877
|
+
googleSheetsExported: "تم التصدير إلى Google Sheets",
|
|
7878
|
+
openGoogleSheet: "فتح الورقة",
|
|
7879
|
+
googleSheetsExportFailed: "تعذر التصدير إلى Google Sheets: {{message}}",
|
|
7773
7880
|
dragToReorder: "اسحب لإعادة الترتيب",
|
|
7774
7881
|
expandFilters: "قم بتوسيع عوامل التصفية",
|
|
7775
7882
|
failedToFormatSql: "فشل تنسيق SQL",
|
|
@@ -74,6 +74,15 @@ const dataSourceWorkspaceProviderIds: Record<string, string> = {
|
|
|
74
74
|
slack: "slack",
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
+
export function getGoogleDriveConnection(
|
|
78
|
+
data: DataSourceStatusResponse | undefined,
|
|
79
|
+
): WorkspaceConnectionProviderSummary | undefined {
|
|
80
|
+
return data?.workspaceConnections?.providers.find(
|
|
81
|
+
(provider) =>
|
|
82
|
+
provider.provider === "google_drive" || provider.id === "google_drive",
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
77
86
|
const sharedConnectionLabels: Record<SharedConnectionStatusKind, string> = {
|
|
78
87
|
ready: "Ready via workspace",
|
|
79
88
|
needs_grant: "Needs grant",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { callAction } from "@agent-native/core/client/hooks";
|
|
2
|
+
import { MAX_CONCURRENT_SQL_QUERIES } from "@shared/sql-query-limits";
|
|
2
3
|
import { useQuery } from "@tanstack/react-query";
|
|
3
4
|
|
|
4
5
|
import type { DataSourceType } from "@/pages/adhoc/sql-dashboard/types";
|
|
@@ -11,8 +12,6 @@ export interface SqlQueryResult {
|
|
|
11
12
|
schema?: { name: string; type: string }[];
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
const MAX_CONCURRENT_SQL_QUERIES = 4;
|
|
15
|
-
|
|
16
15
|
type PendingSqlQuerySlot = {
|
|
17
16
|
resolve: (release: () => void) => void;
|
|
18
17
|
reject: (reason: unknown) => void;
|
|
@@ -4,12 +4,9 @@ import {
|
|
|
4
4
|
} from "@agent-native/core/client/agent-chat";
|
|
5
5
|
import { useT } from "@agent-native/core/client/i18n";
|
|
6
6
|
import { CreativeContextComposerChip } from "@agent-native/creative-context/client";
|
|
7
|
-
import { useEffect, useMemo
|
|
7
|
+
import { useEffect, useMemo } from "react";
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
ANALYTICS_CHAT_STORAGE_KEY,
|
|
11
|
-
hasRecentAnalyticsChat,
|
|
12
|
-
} from "@/lib/chat-handoff";
|
|
9
|
+
import { ANALYTICS_CHAT_STORAGE_KEY } from "@/lib/chat-handoff";
|
|
13
10
|
import { TAB_ID } from "@/lib/tab-id";
|
|
14
11
|
|
|
15
12
|
const DASHBOARD_CONTEXT_KEYS = new Set([
|
|
@@ -19,7 +16,6 @@ const DASHBOARD_CONTEXT_KEYS = new Set([
|
|
|
19
16
|
|
|
20
17
|
export default function AskPage() {
|
|
21
18
|
const t = useT();
|
|
22
|
-
const [restoreActiveThread] = useState(() => hasRecentAnalyticsChat());
|
|
23
19
|
const { items: chatContextItems, remove: removeChatContextItem } =
|
|
24
20
|
useAgentChatContext();
|
|
25
21
|
const staleDashboardContextKey = useMemo(
|
|
@@ -43,7 +39,6 @@ export default function AskPage() {
|
|
|
43
39
|
className="analytics-chat-panel"
|
|
44
40
|
defaultMode="chat"
|
|
45
41
|
storageKey={ANALYTICS_CHAT_STORAGE_KEY}
|
|
46
|
-
restoreActiveThread={restoreActiveThread}
|
|
47
42
|
browserTabId={TAB_ID}
|
|
48
43
|
showHeader={false}
|
|
49
44
|
showTabBar={false}
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
IconCopy,
|
|
29
29
|
IconDotsVertical,
|
|
30
30
|
IconBrandGithub,
|
|
31
|
+
IconBrandGoogle,
|
|
31
32
|
IconPlugConnected,
|
|
32
33
|
} from "@tabler/icons-react";
|
|
33
34
|
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
@@ -69,6 +70,7 @@ import { getIdToken } from "@/lib/auth";
|
|
|
69
70
|
import {
|
|
70
71
|
getOptionalCredentialKeys,
|
|
71
72
|
getSharedConnectionStatus,
|
|
73
|
+
getGoogleDriveConnection,
|
|
72
74
|
isSourceReady,
|
|
73
75
|
isSourceLocallyConfigured,
|
|
74
76
|
credentialRowsFromStatus,
|
|
@@ -479,6 +481,50 @@ function WorkspaceOAuthView({
|
|
|
479
481
|
);
|
|
480
482
|
}
|
|
481
483
|
|
|
484
|
+
function GoogleSheetsExportCard({
|
|
485
|
+
statusData,
|
|
486
|
+
}: {
|
|
487
|
+
statusData: DataSourceStatusResponse | undefined;
|
|
488
|
+
}) {
|
|
489
|
+
const t = useT();
|
|
490
|
+
const connection = getGoogleDriveConnection(statusData);
|
|
491
|
+
const connected = connection?.grantState === "connected";
|
|
492
|
+
|
|
493
|
+
return (
|
|
494
|
+
<Card className="data-source-card bg-card border-border/50">
|
|
495
|
+
<CardContent className="space-y-4 p-5">
|
|
496
|
+
<div className="flex items-start justify-between gap-4">
|
|
497
|
+
<div className="flex min-w-0 items-start gap-3">
|
|
498
|
+
<div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary">
|
|
499
|
+
<IconBrandGoogle className="h-5 w-5" />
|
|
500
|
+
</div>
|
|
501
|
+
<div className="min-w-0 space-y-1">
|
|
502
|
+
<p className="text-sm font-medium">
|
|
503
|
+
{t("dataSources.googleSheetsExport")}
|
|
504
|
+
</p>
|
|
505
|
+
<p className="text-xs text-muted-foreground">
|
|
506
|
+
{t("dataSources.googleSheetsExportDescription")}
|
|
507
|
+
</p>
|
|
508
|
+
</div>
|
|
509
|
+
</div>
|
|
510
|
+
<span
|
|
511
|
+
className={`shrink-0 text-xs font-medium ${connected ? "text-emerald-500" : "text-muted-foreground"}`}
|
|
512
|
+
>
|
|
513
|
+
{connected
|
|
514
|
+
? t("dataSources.connected")
|
|
515
|
+
: t("dataSources.notConfigured")}
|
|
516
|
+
</span>
|
|
517
|
+
</div>
|
|
518
|
+
<WorkspaceOAuthView
|
|
519
|
+
provider="google_drive"
|
|
520
|
+
label={t("dataSources.googleSheets")}
|
|
521
|
+
connected={connected}
|
|
522
|
+
/>
|
|
523
|
+
</CardContent>
|
|
524
|
+
</Card>
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
|
|
482
528
|
function SharedConnectionBadge({ status }: { status: SharedConnectionStatus }) {
|
|
483
529
|
const tone =
|
|
484
530
|
status.kind === "ready"
|
|
@@ -1708,6 +1754,8 @@ export default function DataSources() {
|
|
|
1708
1754
|
))}
|
|
1709
1755
|
</p>
|
|
1710
1756
|
|
|
1757
|
+
<GoogleSheetsExportCard statusData={statusData} />
|
|
1758
|
+
|
|
1711
1759
|
{/* Search bar + Add Data Source */}
|
|
1712
1760
|
<div className="data-sources-toolbar">
|
|
1713
1761
|
<div className="relative min-w-0 flex-1">
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useActionMutation } from "@agent-native/core/client/hooks";
|
|
1
2
|
import { useT } from "@agent-native/core/client/i18n";
|
|
2
3
|
import { useDraggable } from "@dnd-kit/core";
|
|
3
4
|
import {
|
|
@@ -11,10 +12,12 @@ import {
|
|
|
11
12
|
IconCode,
|
|
12
13
|
IconDownload,
|
|
13
14
|
IconMessageCircle,
|
|
15
|
+
IconBrandGoogle,
|
|
14
16
|
} from "@tabler/icons-react";
|
|
15
17
|
import { useIsFetching, useQueryClient } from "@tanstack/react-query";
|
|
16
18
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
19
|
import { useNavigate } from "react-router";
|
|
20
|
+
import { toast } from "sonner";
|
|
18
21
|
|
|
19
22
|
import { ChartFillHeight, SqlChart } from "@/components/dashboard/SqlChart";
|
|
20
23
|
import {
|
|
@@ -68,6 +71,8 @@ interface SqlChartCardProps {
|
|
|
68
71
|
selectedForChat?: boolean;
|
|
69
72
|
onSelectForChat?: (options?: SelectDashboardPanelOptions) => void;
|
|
70
73
|
extensionContext?: Record<string, unknown> | null;
|
|
74
|
+
dashboardId?: string;
|
|
75
|
+
filters?: Record<string, string>;
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
const PanelDragHandle = memo(function PanelDragHandle({
|
|
@@ -124,9 +129,14 @@ export function SqlChartCard({
|
|
|
124
129
|
selectedForChat = false,
|
|
125
130
|
onSelectForChat,
|
|
126
131
|
extensionContext,
|
|
132
|
+
dashboardId,
|
|
133
|
+
filters,
|
|
127
134
|
}: SqlChartCardProps) {
|
|
128
135
|
const t = useT();
|
|
129
136
|
const queryClient = useQueryClient();
|
|
137
|
+
const exportToGoogleSheets = useActionMutation(
|
|
138
|
+
"export-dashboard-panel-to-google-sheet",
|
|
139
|
+
);
|
|
130
140
|
|
|
131
141
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
132
142
|
const [expanded, setExpanded] = useState(false);
|
|
@@ -175,6 +185,40 @@ export function SqlChartCard({
|
|
|
175
185
|
});
|
|
176
186
|
}, [chartQueryKey, queryClient]);
|
|
177
187
|
|
|
188
|
+
const handleExportToGoogleSheets = useCallback(async () => {
|
|
189
|
+
if (!dashboardId || panel.chartType !== "table") return;
|
|
190
|
+
|
|
191
|
+
try {
|
|
192
|
+
const result = (await exportToGoogleSheets.mutateAsync({
|
|
193
|
+
dashboardId,
|
|
194
|
+
panelId: panel.id,
|
|
195
|
+
filters: filters ?? {},
|
|
196
|
+
})) as { spreadsheetUrl?: string };
|
|
197
|
+
if (result.spreadsheetUrl) {
|
|
198
|
+
toast.success(t("sqlDashboard.googleSheetsExported"), {
|
|
199
|
+
action: {
|
|
200
|
+
label: t("sqlDashboard.openGoogleSheet"),
|
|
201
|
+
onClick: () => {
|
|
202
|
+
window.open(
|
|
203
|
+
result.spreadsheetUrl,
|
|
204
|
+
"_blank",
|
|
205
|
+
"noopener,noreferrer",
|
|
206
|
+
);
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
} else {
|
|
211
|
+
toast.success(t("sqlDashboard.googleSheetsExported"));
|
|
212
|
+
}
|
|
213
|
+
} catch (error) {
|
|
214
|
+
toast.error(
|
|
215
|
+
t("sqlDashboard.googleSheetsExportFailed", {
|
|
216
|
+
message: error instanceof Error ? error.message : String(error),
|
|
217
|
+
}),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
}, [dashboardId, exportToGoogleSheets, filters, panel, t]);
|
|
221
|
+
|
|
178
222
|
const handleCardClick = useCallback(
|
|
179
223
|
(event: React.MouseEvent<HTMLDivElement>) => {
|
|
180
224
|
const target = event.target;
|
|
@@ -337,6 +381,8 @@ export function SqlChartCard({
|
|
|
337
381
|
style={isDragSource ? { zIndex: 50 } : undefined}
|
|
338
382
|
data-dragging={isDragSource ? "true" : undefined}
|
|
339
383
|
data-chat-selected={selectedForChat ? "true" : undefined}
|
|
384
|
+
data-dashboard-report-panel-id={panel.id}
|
|
385
|
+
data-dashboard-report-panel-title={panel.title}
|
|
340
386
|
className={cn(
|
|
341
387
|
"dashboard-extension-card group relative h-full rounded-lg border border-transparent transition-colors",
|
|
342
388
|
selectedForChat && "border-foreground/35 ring-1 ring-foreground/10",
|
|
@@ -492,6 +538,8 @@ export function SqlChartCard({
|
|
|
492
538
|
style={isDragSource ? { zIndex: 50 } : undefined}
|
|
493
539
|
data-dragging={isDragSource ? "true" : undefined}
|
|
494
540
|
data-chat-selected={selectedForChat ? "true" : undefined}
|
|
541
|
+
data-dashboard-report-panel-id={panel.id}
|
|
542
|
+
data-dashboard-report-panel-title={panel.title}
|
|
495
543
|
className="dashboard-chart-card group relative h-full hover:z-20 focus-within:z-20"
|
|
496
544
|
>
|
|
497
545
|
<Card
|
|
@@ -582,6 +630,17 @@ export function SqlChartCard({
|
|
|
582
630
|
{t("sqlDashboard.downloadCsv")}
|
|
583
631
|
</DropdownMenuItem>
|
|
584
632
|
)}
|
|
633
|
+
{panel.chartType === "table" && dashboardId ? (
|
|
634
|
+
<DropdownMenuItem
|
|
635
|
+
disabled={exportToGoogleSheets.isPending}
|
|
636
|
+
onSelect={() => void handleExportToGoogleSheets()}
|
|
637
|
+
>
|
|
638
|
+
<IconBrandGoogle className="h-4 w-4 mr-2" />
|
|
639
|
+
{exportToGoogleSheets.isPending
|
|
640
|
+
? t("sqlDashboard.exportingToGoogleSheets")
|
|
641
|
+
: t("sqlDashboard.exportToGoogleSheets")}
|
|
642
|
+
</DropdownMenuItem>
|
|
643
|
+
) : null}
|
|
585
644
|
{editable && panel.chartType === "table" ? (
|
|
586
645
|
<DropdownMenuSeparator />
|
|
587
646
|
) : null}
|
|
@@ -351,6 +351,8 @@ const PanelCell = memo(function PanelCell({
|
|
|
351
351
|
isDragSource={isDragSource}
|
|
352
352
|
selectedForChat={selectedForChat}
|
|
353
353
|
onSelectForChat={handleSelectForChat}
|
|
354
|
+
dashboardId={String(dashboardExtensionContext.dashboardId ?? "")}
|
|
355
|
+
filters={vars}
|
|
354
356
|
extensionContext={
|
|
355
357
|
panel.chartType === "extension"
|
|
356
358
|
? {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { MAX_CONCURRENT_SQL_QUERIES } from "@shared/sql-query-limits";
|
|
2
|
+
|
|
1
3
|
import type { SqlPanel } from "./types";
|
|
2
4
|
|
|
3
|
-
export const REPORT_PANEL_CHUNK_SIZE =
|
|
5
|
+
export const REPORT_PANEL_CHUNK_SIZE = MAX_CONCURRENT_SQL_QUERIES;
|
|
4
6
|
|
|
5
7
|
export function listReportablePanelIds(panels: SqlPanel[]): string[] {
|
|
6
8
|
return panels
|