@agent-native/core 0.115.3 → 0.116.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 +34 -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 +1 -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/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 +16 -6
- package/corpus/core/src/connections/catalog.ts +7 -1
- 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/server/builder-browser.ts +34 -4
- package/corpus/core/src/server/collab-plugin.ts +137 -18
- package/corpus/core/src/server/core-routes-plugin.ts +1 -1
- package/corpus/core/src/server/index.ts +2 -0
- 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/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/desktop/src-tauri/src/native_screen/custom_capture.rs +10 -1
- 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/sidebar/DocumentSidebar.tsx +1 -1
- 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/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 +3 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +17 -6
- package/dist/client/use-db-sync.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/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/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/notifications/routes.d.ts +3 -3
- 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 +11 -11
- 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/secrets/routes.d.ts +9 -9
- package/dist/server/builder-browser.d.ts +1 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +27 -4
- package/dist/server/builder-browser.js.map +1 -1
- 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.js +1 -1
- 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/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 +3 -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/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 +16 -6
- package/src/connections/catalog.ts +7 -1
- 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/server/builder-browser.ts +34 -4
- package/src/server/collab-plugin.ts +137 -18
- package/src/server/core-routes-plugin.ts +1 -1
- package/src/server/index.ts +2 -0
- 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
|
@@ -85,7 +85,10 @@ in the moment of agent use.
|
|
|
85
85
|
approval, generative UI, progress, and screen-state exposure.
|
|
86
86
|
- **Chat history kit**: presentational chat lists and recent-chat rails belong
|
|
87
87
|
in Toolkit; Core keeps thread persistence, agent execution, transport, and
|
|
88
|
-
page-to-sidebar handoff.
|
|
88
|
+
page-to-sidebar handoff. Use Toolkit's `ChatHistoryRail` for the standard
|
|
89
|
+
five-item sidebar preview and a footer row with New chat followed by an
|
|
90
|
+
ellipsis disclosure up to fifteen. Apps inject routing, labels, and domain
|
|
91
|
+
actions.
|
|
89
92
|
- **Agent page kit**: the full-page `/agent` surface (`AgentTabsPage` from
|
|
90
93
|
`@agent-native/core/client`) with Context, Files, Connections, Jobs, and
|
|
91
94
|
Access tabs plus a Personal/Organization scope toggle. The canonical home
|
|
@@ -85,7 +85,10 @@ in the moment of agent use.
|
|
|
85
85
|
approval, generative UI, progress, and screen-state exposure.
|
|
86
86
|
- **Chat history kit**: presentational chat lists and recent-chat rails belong
|
|
87
87
|
in Toolkit; Core keeps thread persistence, agent execution, transport, and
|
|
88
|
-
page-to-sidebar handoff.
|
|
88
|
+
page-to-sidebar handoff. Use Toolkit's `ChatHistoryRail` for the standard
|
|
89
|
+
five-item sidebar preview and a footer row with New chat followed by an
|
|
90
|
+
ellipsis disclosure up to fifteen. Apps inject routing, labels, and domain
|
|
91
|
+
actions.
|
|
89
92
|
- **Agent page kit**: the full-page `/agent` surface (`AgentTabsPage` from
|
|
90
93
|
`@agent-native/core/client`) with Context, Files, Connections, Jobs, and
|
|
91
94
|
Access tabs plus a Personal/Organization scope toggle. The canonical home
|
|
@@ -16,7 +16,7 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
Collaborative editing uses Yjs CRDT via TipTap. The agent and human users are
|
|
18
18
|
equal participants — both edit the same Y.Doc and changes merge cleanly without
|
|
19
|
-
conflicts. Always
|
|
19
|
+
conflicts. Always choose an explicit `access` mode on `createCollabPlugin`.
|
|
20
20
|
|
|
21
21
|
## How It Works
|
|
22
22
|
|
|
@@ -104,7 +104,16 @@ in **different** regions merge fine through the CRDT.
|
|
|
104
104
|
|
|
105
105
|
## Security
|
|
106
106
|
|
|
107
|
-
### Always
|
|
107
|
+
### Always choose an explicit access mode
|
|
108
|
+
|
|
109
|
+
Inspect the schema and sharing registration before configuring collaboration:
|
|
110
|
+
|
|
111
|
+
- For owned or shareable records, use `mode: "resource"` and the resource type
|
|
112
|
+
registered through `registerShareableResource`.
|
|
113
|
+
- For records deliberately visible to every authenticated user on the
|
|
114
|
+
deployment, use `mode: "all-authenticated"`.
|
|
115
|
+
- Never invent a `resourceType` merely to silence a warning. Resource mode is
|
|
116
|
+
correct only when the matching ownership and sharing model exists.
|
|
108
117
|
|
|
109
118
|
```ts
|
|
110
119
|
// server/plugins/collab.ts
|
|
@@ -114,14 +123,23 @@ export default createCollabPlugin({
|
|
|
114
123
|
table: "documents",
|
|
115
124
|
contentColumn: "content",
|
|
116
125
|
idColumn: "id",
|
|
117
|
-
resourceType: "document",
|
|
126
|
+
access: { mode: "resource", resourceType: "document" },
|
|
118
127
|
});
|
|
119
128
|
```
|
|
120
129
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
130
|
+
For intentionally deployment-wide authenticated collaboration:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
createCollabPlugin({
|
|
134
|
+
table: "todos",
|
|
135
|
+
contentColumn: "content",
|
|
136
|
+
access: { mode: "all-authenticated" },
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Omitting `access` is supported only for legacy compatibility and is deprecated.
|
|
141
|
+
It behaves like `all-authenticated`, logs a warning, and is flagged by Doctor.
|
|
142
|
+
Choose the mode explicitly so access intent is reviewable.
|
|
125
143
|
|
|
126
144
|
Non-owner sharees who have explicit access fall back to state-vector catch-up
|
|
127
145
|
(safe, slightly higher latency). Awareness routes require the same viewer
|
|
@@ -133,7 +151,10 @@ Write routes reject payloads exceeding `maxPayloadBytes` (default 2 MB) with
|
|
|
133
151
|
HTTP 413. Override:
|
|
134
152
|
|
|
135
153
|
```ts
|
|
136
|
-
createCollabPlugin({
|
|
154
|
+
createCollabPlugin({
|
|
155
|
+
access: { mode: "resource", resourceType: "document" },
|
|
156
|
+
maxPayloadBytes: 512 * 1024,
|
|
157
|
+
});
|
|
137
158
|
```
|
|
138
159
|
|
|
139
160
|
## Enabling Collaboration
|
|
@@ -144,7 +165,7 @@ createCollabPlugin({ resourceType: "document", maxPayloadBytes: 512 * 1024 });
|
|
|
144
165
|
pnpm add @tiptap/extension-collaboration @tiptap/extension-collaboration-caret @tiptap/y-tiptap @tiptap/core
|
|
145
166
|
```
|
|
146
167
|
|
|
147
|
-
### 2. Add collab server plugin (with
|
|
168
|
+
### 2. Add collab server plugin (with explicit access)
|
|
148
169
|
|
|
149
170
|
```ts
|
|
150
171
|
// server/plugins/collab.ts
|
|
@@ -154,7 +175,7 @@ export default createCollabPlugin({
|
|
|
154
175
|
table: "documents",
|
|
155
176
|
contentColumn: "content",
|
|
156
177
|
idColumn: "id",
|
|
157
|
-
resourceType: "document",
|
|
178
|
+
access: { mode: "resource", resourceType: "document" },
|
|
158
179
|
});
|
|
159
180
|
```
|
|
160
181
|
|
|
@@ -343,9 +364,10 @@ the whole history — external/agent edits must not wipe the user's undo stack.
|
|
|
343
364
|
|
|
344
365
|
## Common Pitfalls
|
|
345
366
|
|
|
346
|
-
- **Missing `
|
|
347
|
-
|
|
348
|
-
|
|
367
|
+
- **Missing `access`** — Legacy omission behaves like `all-authenticated`, logs
|
|
368
|
+
a startup warning, and is flagged by Doctor. Choose `resource` for records
|
|
369
|
+
backed by ownership/sharing, or explicit `all-authenticated` for intentionally
|
|
370
|
+
deployment-wide records. Never invent a resource type to silence the warning.
|
|
349
371
|
- **Don't pass `content` as a TipTap prop** when Collaboration is enabled —
|
|
350
372
|
Yjs owns the content. Seed via `editor.commands.setContent()` only when the
|
|
351
373
|
Y.XmlFragment is empty.
|
|
@@ -72,7 +72,7 @@ The agent modifies data in SQL, but the UI runs in the browser. SSE bridges same
|
|
|
72
72
|
});
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
`useDbSync` and every `subscribeSyncEvents` subscriber share one `EventSource` and one fallback poll loop per tab — this is how collaborative documents receive doc updates and cursor/awareness events.
|
|
75
|
+
`useDbSync` and every `subscribeSyncEvents` subscriber share one `EventSource` and one fallback poll loop per tab — this is how collaborative documents receive doc updates and cursor/awareness events. Hidden tabs keep that shared transport alive by default: SSE stays connected and active fallback polling relaxes to a 10-second floor (idle polling remains once per minute). Pass `pauseWhenHidden: true` only for a consumer that explicitly must stop all hidden-tab sync.
|
|
76
76
|
|
|
77
77
|
## Which sources to depend on
|
|
78
78
|
|
|
@@ -24,9 +24,10 @@ shared agent sidebar.
|
|
|
24
24
|
- **Always show the mic alongside the send button.** Cursor replaces send
|
|
25
25
|
with mic when the composer is empty; their users complain. We keep both
|
|
26
26
|
visible — Lovable does the same.
|
|
27
|
-
- **Ask before switching modes.** The mic opens a shadcn popover
|
|
28
|
-
**
|
|
29
|
-
established dictation behavior.
|
|
27
|
+
- **Ask before switching modes.** The mic opens a compact shadcn popover with
|
|
28
|
+
**Real-time voice** as the primary action and **Dictate** as the secondary;
|
|
29
|
+
never silently replace the established dictation behavior. Users can choose
|
|
30
|
+
**Remember my preference** to skip the chooser on later clicks.
|
|
30
31
|
- **Dictation is click-to-toggle, not push-to-talk.** More forgiving in a sidebar, avoids
|
|
31
32
|
host-app hotkey clashes. Keyboard shortcut is `Cmd/Ctrl+Shift+M` and
|
|
32
33
|
`Escape` cancels mid-recording.
|
|
@@ -100,6 +101,9 @@ action before requesting microphone permission.
|
|
|
100
101
|
`application_state["realtime-voice-prefs"]`. Keep this separate from
|
|
101
102
|
`voice-transcription-prefs`, which configures editable dictation rather than
|
|
102
103
|
the speech-to-speech session.
|
|
104
|
+
- Store the optional remembered chooser selection at
|
|
105
|
+
`application_state["voice-input-preference"]`. Keep it separate from both
|
|
106
|
+
mode-specific preference objects.
|
|
103
107
|
- Missing-key failures should open Settings focused on the user-scoped
|
|
104
108
|
`OPENAI_API_KEY` field. Never send, log, or echo the key to the browser.
|
|
105
109
|
|
|
@@ -147,11 +151,11 @@ Default behavior:
|
|
|
147
151
|
|
|
148
152
|
| File | Purpose |
|
|
149
153
|
| --------------------------------------------------------------------- | --------------------------------------------------- |
|
|
150
|
-
| `packages/
|
|
151
|
-
| `packages/
|
|
152
|
-
| `packages/
|
|
153
|
-
| `packages/
|
|
154
|
-
| `packages/
|
|
154
|
+
| `packages/toolkit/src/composer/useVoiceDictation.ts` | Provider-routing hook (MediaRecorder / Web Speech) |
|
|
155
|
+
| `packages/toolkit/src/composer/VoiceButton.tsx` | Mic button + live amplitude + cancel overlay |
|
|
156
|
+
| `packages/toolkit/src/composer/RealtimeVoiceMode.tsx` | Opt-in popover + persistent speech orb |
|
|
157
|
+
| `packages/toolkit/src/composer/useRealtimeVoiceMode.tsx` | WebRTC lifecycle, provider events, and tool bridge |
|
|
158
|
+
| `packages/toolkit/src/composer/TiptapComposer.tsx` | Wires the hook, insertion, and keyboard shortcut |
|
|
155
159
|
| `packages/core/src/client/settings/VoiceTranscriptionSection.tsx` | Live source + cleanup controls in sidebar settings |
|
|
156
160
|
| `packages/core/src/client/transcription/BuilderTranscriptionCta.tsx` | CTA shown when Builder account isn't connected |
|
|
157
161
|
| `packages/core/src/client/transcription/use-live-transcription.ts` | Web Speech live-transcription hook for recordings |
|
package/docs/AGENTS.md
CHANGED
|
@@ -59,7 +59,7 @@ preserve public action, state, auth, and agent-chat runtime contracts.
|
|
|
59
59
|
| Localize UI copy and language choices | `content/internationalization.md`, `content/client.md` |
|
|
60
60
|
| Build headless or chat-first apps | `content/pure-agent-apps.md`, `content/agent-surfaces.md`, `content/using-your-agent.md` |
|
|
61
61
|
| Add automations or scheduled work | `content/automations.md`, `content/recurring-jobs.md` |
|
|
62
|
-
| Compose apps or call sibling agents | `content/a2a-protocol.md`, `content/multi-app-workspace.md`, `content/
|
|
62
|
+
| Compose apps or call sibling agents | `content/a2a-protocol.md`, `content/multi-app-workspace.md`, `content/agent-resources.mdx` |
|
|
63
63
|
| Expose tools to external agents | `content/external-agents.md`, `content/mcp-protocol.md`, `content/mcp-apps.md`, `content/mcp-clients.md` |
|
|
64
64
|
| Add integrations, setup, or secrets | `content/onboarding.md`, `content/workspace-connections.md`, `content/security.md` |
|
|
65
65
|
| Build extensions or custom widgets | `content/extensions.md`, `content/agent-web-surfaces.md` |
|
|
@@ -154,7 +154,7 @@ model: inherit
|
|
|
154
154
|
You are a focused design agent.
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
See [Agent Resources — Custom Agents](/docs/
|
|
157
|
+
See [Agent Resources — Custom Agents](/docs/agent-resources#custom-agents) for the full format (including `tools`, `delegate-default`, and model overrides).
|
|
158
158
|
|
|
159
159
|
You can create them from the Resources tab using:
|
|
160
160
|
|
|
@@ -240,4 +240,4 @@ Custom mention providers appear alongside the built-in agent and file providers
|
|
|
240
240
|
- [**A2A Protocol**](/docs/a2a-protocol) — how connected-agent mentions are resolved over the wire
|
|
241
241
|
- [**Agent Teams**](/docs/agent-teams) — spawn sub-agents and pass the `agent` profile parameter
|
|
242
242
|
- [**Skills Guide**](/docs/skills-guide) — author the skills referenced with `/`
|
|
243
|
-
- [**Agent Resources**](/docs/
|
|
243
|
+
- [**Agent Resources**](/docs/agent-resources#custom-agents) — the full custom-agent profile format
|
|
@@ -5,12 +5,6 @@ description: "Claude-Code-level customization per user — skills, memory, instr
|
|
|
5
5
|
|
|
6
6
|
# Agent Resources
|
|
7
7
|
|
|
8
|
-
<Callout tone="info">
|
|
9
|
-
|
|
10
|
-
**Which workspace doc?** This page covers **Agent Resources** — the agent customization layer. For the deployment shape (one monorepo, many apps) see [Multi-App Workspaces](/docs/multi-app-workspace); for governance (who reviews, approves, and owns what) see [Workspace Governance](/docs/workspace-management).
|
|
11
|
-
|
|
12
|
-
</Callout>
|
|
13
|
-
|
|
14
8
|
Every agent-native app ships with **agent resources**: the customization layer that makes the agent yours. It contains team instructions (`AGENTS.md`), shared learnings (`LEARNINGS.md`), personal structured memory (`memory/MEMORY.md`), skills the agent pulls in on demand, custom sub-agents, scheduled jobs, and connected MCP servers — everything you'd expect from a Claude Code / Codex setup.
|
|
15
9
|
|
|
16
10
|
The twist: **it's SQL rows, not filesystem files.** Each user gets their own set of agent resources stored in the database. There's no dev-box to spin up, no container per user, no files to mount. A multi-tenant SaaS can give every user a fully-customizable agent for essentially free, because all of it is rows — personal memory, personal MCP servers, personal skills, personal sub-agents — and the shared codebase hosts all of them at once.
|
|
@@ -233,7 +227,7 @@ For example:
|
|
|
233
227
|
- Avoid: unsupported superlatives and vague AI claims
|
|
234
228
|
```
|
|
235
229
|
|
|
236
|
-
## Resources Tab {#
|
|
230
|
+
## Resources Tab {#resources-tab}
|
|
237
231
|
|
|
238
232
|
The agent panel includes a **Resources** tab alongside Chat and CLI. It shows a folder-organized tree of all resources, an inline editor for any text file (Markdown, JSON, YAML, plain text), and the `+` menu's typed creation flows (Files, Skills, Agents, Scheduled Tasks). Users can browse inherited workspace defaults and create/edit/delete personal or organization resources.
|
|
239
233
|
|
|
@@ -14,7 +14,7 @@ Agent Teams runs on the core run-manager: events stream and persist, aborts prop
|
|
|
14
14
|
## The mental model {#mental-model}
|
|
15
15
|
|
|
16
16
|
- **Main chat** — the orchestrator. Reads your request, delegates. Rarely does heavy work itself.
|
|
17
|
-
- **Sub-agents** — run with their own thread, their own system prompt, their own tool set. Each maps to a "custom agent" profile in [Agent Resources](/docs/
|
|
17
|
+
- **Sub-agents** — run with their own thread, their own system prompt, their own tool set. Each maps to a "custom agent" profile in [Agent Resources](/docs/agent-resources).
|
|
18
18
|
- **Chips** — the rich preview card that appears inline in the main chat, showing the sub-agent's current step, streaming output, and final summary. Collapsed by default; expands to the full conversation on click.
|
|
19
19
|
- **Bidirectional messaging** — the main agent can send follow-ups to a running sub-agent; a sub-agent can message back when it hits an ambiguous point.
|
|
20
20
|
|
|
@@ -105,7 +105,7 @@ Three ways to kick off a sub-agent, from least to most explicit:
|
|
|
105
105
|
|
|
106
106
|
The user types `@agent-name` in the chat composer. A dropdown of workspace sub-agents appears. Selecting one inserts a chip; on submit the main agent delegates the message to that sub-agent.
|
|
107
107
|
|
|
108
|
-
Custom agents live in agent resources at `agents/<slug>.md` — a Markdown file with YAML frontmatter. See [Custom Agents](/docs/
|
|
108
|
+
Custom agents live in agent resources at `agents/<slug>.md` — a Markdown file with YAML frontmatter. See [Custom Agents](/docs/agent-resources#custom-agents) for the format.
|
|
109
109
|
|
|
110
110
|
### 2. The main agent delegates automatically {#auto-delegate}
|
|
111
111
|
|
|
@@ -247,7 +247,7 @@ interface AgentTask {
|
|
|
247
247
|
|
|
248
248
|
## Custom agent profiles {#profiles}
|
|
249
249
|
|
|
250
|
-
Sub-agents map to custom agent profiles — Markdown files at `agents/<slug>.md` in agent resources that appear in the `@mention` dropdown and serve as delegation targets. [Agent Resources — Custom Agents](/docs/
|
|
250
|
+
Sub-agents map to custom agent profiles — Markdown files at `agents/<slug>.md` in agent resources that appear in the `@mention` dropdown and serve as delegation targets. [Agent Resources — Custom Agents](/docs/agent-resources#custom-agents) owns the full format (frontmatter, `tools`, `delegate-default`, model overrides).
|
|
251
251
|
|
|
252
252
|
## Delegation depth guard {#depth-guard}
|
|
253
253
|
|
|
@@ -326,6 +326,6 @@ When a sub-agent is at or below the cap, the framework injects a line into its r
|
|
|
326
326
|
|
|
327
327
|
## What's next
|
|
328
328
|
|
|
329
|
-
- [**Agent Resources — Custom Agents**](/docs/
|
|
329
|
+
- [**Agent Resources — Custom Agents**](/docs/agent-resources#custom-agents) — the profile format
|
|
330
330
|
- [**A2A Protocol**](/docs/a2a-protocol) — when the "sub-agent" lives in a different app entirely
|
|
331
331
|
- [**Actions**](/docs/actions) — the tools a sub-agent calls
|
|
@@ -91,15 +91,15 @@ If you're running a single template standalone, you don't need Dispatch — each
|
|
|
91
91
|
|
|
92
92
|
Seven capabilities, all sitting on top of the same workspace database the other apps use:
|
|
93
93
|
|
|
94
|
-
| Capability | What it gives you | Set it up
|
|
95
|
-
| ------------------------ | ------------------------------------------------------------------------------- |
|
|
96
|
-
| **Central inbox** | Slack, email, Telegram, WhatsApp all reach one agent with shared memory + tools | **Settings → Messaging** ([Messaging](/docs/messaging))
|
|
97
|
-
| **Secret vault** | Store each credential once; rotate in one place across every app | **Vault** + access mode (all-apps or manual)
|
|
98
|
-
| **Cross-app delegation** | Routes a request to the right specialist app over A2A and replies in-thread | Automatic ([A2A](/docs/a2a-protocol))
|
|
99
|
-
| **Unified MCP gateway** | One MCP connector for external agents reaches every granted workspace app | [External Agents](/docs/external-agents)
|
|
100
|
-
| **Workspace resources** | Author skills/instructions/profiles once; apps inherit them at runtime | **Resources** ([Agent Resources](/docs/
|
|
101
|
-
| **Dreams** | Reviews past runs/feedback and proposes durable improvements for you to approve | **Dreams** tab
|
|
102
|
-
| **Approval flow** | Gate sensitive runtime changes behind inline admin review | **dispatch approval policy**
|
|
94
|
+
| Capability | What it gives you | Set it up |
|
|
95
|
+
| ------------------------ | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
96
|
+
| **Central inbox** | Slack, email, Telegram, WhatsApp all reach one agent with shared memory + tools | **Settings → Messaging** ([Messaging](/docs/messaging)) |
|
|
97
|
+
| **Secret vault** | Store each credential once; rotate in one place across every app | **Vault** + access mode (all-apps or manual) |
|
|
98
|
+
| **Cross-app delegation** | Routes a request to the right specialist app over A2A and replies in-thread | Automatic ([A2A](/docs/a2a-protocol)) |
|
|
99
|
+
| **Unified MCP gateway** | One MCP connector for external agents reaches every granted workspace app | [External Agents](/docs/external-agents) |
|
|
100
|
+
| **Workspace resources** | Author skills/instructions/profiles once; apps inherit them at runtime | **Resources** ([Agent Resources](/docs/agent-resources#global-resources)) |
|
|
101
|
+
| **Dreams** | Reviews past runs/feedback and proposes durable improvements for you to approve | **Dreams** tab |
|
|
102
|
+
| **Approval flow** | Gate sensitive runtime changes behind inline admin review | **dispatch approval policy** |
|
|
103
103
|
|
|
104
104
|
Each is detailed below.
|
|
105
105
|
|
|
@@ -134,7 +134,7 @@ The single MCP connector URL external agents add (e.g. `https://dispatch.agent-n
|
|
|
134
134
|
|
|
135
135
|
Skills, guardrail instructions, agent profiles, and reference resources can be authored once in Dispatch and inherited by the rest of the workspace. Resources with **All apps** scope are global: Dispatch stores them once at workspace scope, and every app agent reads them at runtime. They are not copied into each app, and there is no manual workspace-resource sync step. App shared resources and personal resources can override or narrow the workspace defaults locally.
|
|
136
136
|
|
|
137
|
-
See [Agent Resources — Global resources](/docs/
|
|
137
|
+
See [Agent Resources — Global resources](/docs/agent-resources#global-resources) for the canonical path table, starter pack, and override model.
|
|
138
138
|
|
|
139
139
|
MCP server resources use JSON and are intentionally HTTP-only. Store tokens in
|
|
140
140
|
Dispatch Vault, grant or sync those keys to the target apps, and reference them
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Drop-in Agent"
|
|
3
|
-
description: "Mount the agent chat +
|
|
3
|
+
description: "Mount the agent chat + resources into any React app with <AgentPanel>, <AgentSidebar>, and sendToAgentChat()."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Drop-in Agent
|
|
@@ -47,7 +47,7 @@ All of these are exported from `@agent-native/core/client`.
|
|
|
47
47
|
</div>
|
|
48
48
|
<div class="diagram-node panel">
|
|
49
49
|
Agent panel<br /><small class="diagram-muted"
|
|
50
|
-
>chat · CLI ·
|
|
50
|
+
>chat · CLI · resources</small
|
|
51
51
|
>
|
|
52
52
|
</div>
|
|
53
53
|
</div>
|
|
@@ -170,7 +170,7 @@ export default function AgentRoute() {
|
|
|
170
170
|
}
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
`<AgentPanel>` gives you the raw tabs (Chat / CLI /
|
|
173
|
+
`<AgentPanel>` gives you the raw tabs (Chat / CLI / Resources) without the sidebar wrapper, the collapse button, or any state persistence. Put it wherever you want; you handle the layout.
|
|
174
174
|
|
|
175
175
|
### Selected props
|
|
176
176
|
|
|
@@ -337,5 +337,5 @@ The user sees a chat button in the header, can open it, and can talk to the agen
|
|
|
337
337
|
|
|
338
338
|
- [**Actions**](/docs/actions) — `defineAction()` and `useActionMutation()`
|
|
339
339
|
- [**Context Awareness**](/docs/context-awareness) — selection, navigation, view-screen
|
|
340
|
-
- [**Agent Resources**](/docs/
|
|
340
|
+
- [**Agent Resources**](/docs/agent-resources) — what the Resources tab contains (skills, memory, MCP servers, scheduled jobs)
|
|
341
341
|
- [**Voice Input**](/docs/voice-input) — the microphone in the chat composer
|
|
@@ -90,7 +90,7 @@ The identity rule is the safety hinge: the link is just `view` + record ids + fi
|
|
|
90
90
|
- **Your own runtime behind Agent-Native chat:** see [Agent Surfaces](/docs/agent-surfaces#byo-agent) and [Native Chat UI](/docs/native-chat-ui#byo-agent-runtimes) when an agent built with another framework should power `<AssistantChat runtime={...}>`.
|
|
91
91
|
- **Your app consuming MCP tools:** see [MCP Clients](/docs/mcp-clients) when an agent-native app needs to call tools exposed by another MCP server.
|
|
92
92
|
- **Another app or agent via A2A:** use [Agent Mentions](/docs/agent-mentions) and [A2A](/docs/a2a-protocol) when agent-native apps should discover and delegate to each other.
|
|
93
|
-
- **Local custom sub-agents:** use [Agent Resources](/docs/
|
|
93
|
+
- **Local custom sub-agents:** use [Agent Resources](/docs/agent-resources) when you want custom agent profiles inside the app's own agent resources.
|
|
94
94
|
|
|
95
95
|
## Easy setup {#easy-setup}
|
|
96
96
|
|
package/docs/content/frames.mdx
CHANGED
|
@@ -79,7 +79,7 @@ component in dev and prod.
|
|
|
79
79
|
|
|
80
80
|
- Exported as `AgentPanel` from `@agent-native/core/client`, with a
|
|
81
81
|
production-only variant `ProductionAgentPanel`.
|
|
82
|
-
- Provides the full Chat / CLI /
|
|
82
|
+
- Provides the full Chat / CLI / Resources surface, so the agent input stays on
|
|
83
83
|
the shared composer stack used everywhere else in the framework.
|
|
84
84
|
- Reads `application_state.navigation` every turn, so it already knows which
|
|
85
85
|
view you're in and what's selected — you don't have to re-explain "this".
|
|
@@ -7,7 +7,7 @@ search: "integrations directory MCP connectors OAuth manual setup restricted pro
|
|
|
7
7
|
# Connect your stack
|
|
8
8
|
|
|
9
9
|
Agent-Native apps can use the tools your team already works in. This directory
|
|
10
|
-
mirrors the framework's current remote MCP catalog:
|
|
10
|
+
mirrors the framework's current remote MCP catalog: 26 provider presets that
|
|
11
11
|
can be discovered from the composer and Workspace Resources surfaces. It also
|
|
12
12
|
explains the separate reusable workspace-connection and provider-API layers so
|
|
13
13
|
you can choose the connection path that matches your product.
|
|
@@ -39,7 +39,7 @@ These self-hosted provider marks keep the directory fast and deployable
|
|
|
39
39
|
without a third-party logo CDN. Connection details and status categories remain
|
|
40
40
|
in the directory table below.
|
|
41
41
|
|
|
42
|
-
<Diagram id="doc-block-integrations-wall" title="Remote MCP integrations" summary="A self-hosted logo wall of the
|
|
42
|
+
<Diagram id="doc-block-integrations-wall" title="Remote MCP integrations" summary="A self-hosted logo wall of the 26 remote MCP presets currently shipped in the Agent-Native framework." frame="hide" renderMode="design">
|
|
43
43
|
|
|
44
44
|
```html
|
|
45
45
|
<div class="integration-wall">
|
|
@@ -67,6 +67,16 @@ in the directory table below.
|
|
|
67
67
|
<div><strong>Notion</strong><small>Knowledge & docs</small></div>
|
|
68
68
|
</div>
|
|
69
69
|
</div>
|
|
70
|
+
<div class="integration-card">
|
|
71
|
+
<div class="integration-head">
|
|
72
|
+
<span class="integration-mark"
|
|
73
|
+
><img src="/integration-logos/granola.svg" alt=""
|
|
74
|
+
/></span>
|
|
75
|
+
<div>
|
|
76
|
+
<strong>Granola</strong><small>Meetings & transcripts</small>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
70
80
|
<div class="integration-card">
|
|
71
81
|
<div class="integration-head">
|
|
72
82
|
<span class="integration-mark"
|
|
@@ -327,6 +337,7 @@ but need provider or administrator setup before a generic connection can work.
|
|
|
327
337
|
| [Context7](https://context7.com/) | No auth | Ready · verified | `https://mcp.context7.com/mcp` | Fetch current library and framework docs. |
|
|
328
338
|
| [Sentry](https://docs.sentry.io/product/sentry-mcp/) | Header / token | Ready · preflight only | `https://mcp.sentry.dev/mcp` | Add a Sentry bearer token as the `Authorization` header. |
|
|
329
339
|
| [Notion](https://developers.notion.com/guides/mcp/get-started-with-mcp) | OAuth | Ready · preflight only | `https://mcp.notion.com/mcp` | User OAuth; enterprise admins can audit or restrict MCP clients. |
|
|
340
|
+
| [Granola](https://docs.granola.ai/help-center/sharing/integrations/mcp) | OAuth | Ready · preflight only | `https://mcp.granola.ai/mcp` | Browser OAuth; review the meeting notes and transcripts the connected Granola account makes available. |
|
|
330
341
|
| [Semgrep](https://github.com/semgrep/mcp#readme) | No auth | Ready · preflight only | `https://mcp.semgrep.ai/mcp` | Scan code for security findings. |
|
|
331
342
|
| [Linear](https://linear.app/docs/mcp) | OAuth | Ready · preflight only | `https://mcp.linear.app/mcp` | Authorize the workspace and issue permissions required by the workflow. |
|
|
332
343
|
| [Atlassian Rovo MCP](https://developer.atlassian.com/cloud/rovo-mcp/guides/getting-started/) | OAuth + provider setup | Restricted | `https://mcp.atlassian.com/v1/mcp/authv2` | Admins may need to trust the app origin and enable Rovo Read, Write, and Search permissions. |
|
|
@@ -418,7 +418,7 @@ Two architectural rules keep apps portable across databases and hosts:
|
|
|
418
418
|
|
|
419
419
|
## Agent Resources {#workspace}
|
|
420
420
|
|
|
421
|
-
Every user gets a personal set of **agent resources** — instructions, skills, memory, custom sub-agents, scheduled jobs, and connected MCP servers — all stored in SQL rather than files. That makes Claude-Code-level customization viable inside multi-tenant SaaS without spinning up a container per user. See [Agent Resources](/docs/
|
|
421
|
+
Every user gets a personal set of **agent resources** — instructions, skills, memory, custom sub-agents, scheduled jobs, and connected MCP servers — all stored in SQL rather than files. That makes Claude-Code-level customization viable inside multi-tenant SaaS without spinning up a container per user. See [Agent Resources](/docs/agent-resources).
|
|
422
422
|
|
|
423
423
|
## Related building blocks {#building-blocks}
|
|
424
424
|
|
|
@@ -433,7 +433,7 @@ These sit on top of the same contract and have their own deep dives:
|
|
|
433
433
|
Adopting the framework is valuable mostly because of what you stop having to build. The moment your app follows the six rules, you inherit:
|
|
434
434
|
|
|
435
435
|
- **One action = every surface.** Every action defined with `defineAction()` is simultaneously an agent tool, a typesafe frontend hook (`useActionQuery` / `useActionMutation`), a framework-owned HTTP transport, a CLI command, an MCP tool for external clients, and an A2A tool for other agent-native apps. Optional `link` and `mcpApp` metadata add deep links and MCP Apps UI without a second implementation.
|
|
436
|
-
- **A full set of agent resources per user.** Skills, shared `LEARNINGS.md`, personal `memory/MEMORY.md`, `AGENTS.md`, custom sub-agents, scheduled jobs, connected MCP servers — all SQL-backed, no dev-box required. See [Agent Resources](/docs/
|
|
436
|
+
- **A full set of agent resources per user.** Skills, shared `LEARNINGS.md`, personal `memory/MEMORY.md`, `AGENTS.md`, custom sub-agents, scheduled jobs, connected MCP servers — all SQL-backed, no dev-box required. See [Agent Resources](/docs/agent-resources).
|
|
437
437
|
- **Drop-in React components.** `<AgentPanel />` and `<AgentSidebar />` render chat + resources anywhere in your app. See [Drop-in Agent](/docs/drop-in-agent).
|
|
438
438
|
- **BYO agent chat runtimes.** The same chat UI can sit on top of OpenAI Agents, OpenAI Responses, Claude Agent SDK, Vercel AI SDK, AG-UI, or your own normalized HTTP stream. See [Native Chat UI](/docs/native-chat-ui#byo-agent-runtimes).
|
|
439
439
|
- **Live sync between agent and UI.** Same-process writes stream immediately over `/_agent-native/events`; a lightweight poll keeps serverless, cron, and cross-process writes convergent. Mutating actions invalidate action-backed queries automatically, so agent-created records appear without a manual refresh. See [Live Sync](#polling-sync) below.
|
|
@@ -275,7 +275,7 @@ export default {
|
|
|
275
275
|
};
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
-
Preset ids are `context7`, `sentry`, `notion`, `semgrep`, `linear`,
|
|
278
|
+
Preset ids are `context7`, `sentry`, `notion`, `granola`, `semgrep`, `linear`,
|
|
279
279
|
`atlassian`, `supabase`, `neon`, `stripe`, `cloudflare`, `gitlab`, `figma`,
|
|
280
280
|
`vercel`, `github`, `slack`, `asana`, `hubspot`, `intercom`, `monday`,
|
|
281
281
|
`webflow`, `paypal`, `box`, `netlify`, and `zapier`.
|
|
@@ -287,6 +287,12 @@ link to their official setup instructions, but do not show a misleading
|
|
|
287
287
|
one-click connect button. Provider restrictions change over time, so verify
|
|
288
288
|
the vendor setup note before enabling one in a production catalog.
|
|
289
289
|
|
|
290
|
+
When a chat request clearly names an unconnected catalog provider, the
|
|
291
|
+
composer and relevant completed responses can show an inline **Connect**
|
|
292
|
+
suggestion. OAuth and direct connections preserve that request in the current
|
|
293
|
+
tab and resume it after setup completes; long or abandoned requests expire
|
|
294
|
+
automatically.
|
|
295
|
+
|
|
290
296
|
### Atlassian / Jira
|
|
291
297
|
|
|
292
298
|
The Atlassian preset uses Atlassian Rovo MCP's OAuth 2.1 endpoint,
|
|
@@ -7,7 +7,7 @@ description: "Host many agent-native apps in one monorepo with shared auth, RBAC
|
|
|
7
7
|
|
|
8
8
|
<Callout tone="info">
|
|
9
9
|
|
|
10
|
-
**Which workspace doc?** This page covers the **deployment shape** — one monorepo, many apps, shared auth and a unified deploy. For the agent customization layer (Agent Resources: `AGENTS.md`, memory, skills, custom agents) see [Agent Resources](/docs/
|
|
10
|
+
**Which workspace doc?** This page covers the **deployment shape** — one monorepo, many apps, shared auth and a unified deploy. For the agent customization layer (Agent Resources: `AGENTS.md`, memory, skills, custom agents) see [Agent Resources](/docs/agent-resources); for governance (who reviews, approves, and owns what) see [Workspace Governance](/docs/workspace-management).
|
|
11
11
|
|
|
12
12
|
</Callout>
|
|
13
13
|
|
|
@@ -222,7 +222,7 @@ Because the shared package is a `workspace:*` dependency, pnpm symlinks it into
|
|
|
222
222
|
|
|
223
223
|
Use `packages/shared` for code-level defaults that should ship with the repo: plugins, shared actions, shared React code, filesystem `AGENTS.md`, and filesystem skills. Use Dispatch workspace resources for runtime-editable global context that admins want to manage without a code change.
|
|
224
224
|
|
|
225
|
-
Dispatch resources are scoped **All apps** (every app inherits them at runtime, no copy or sync step) or **Selected apps** (granted per app for app-specific context). See [Agent Resources](/docs/
|
|
225
|
+
Dispatch resources are scoped **All apps** (every app inherits them at runtime, no copy or sync step) or **Selected apps** (granted per app for app-specific context). See [Agent Resources](/docs/agent-resources#global-resources) for the full resource-model table, path conventions, and the recommended starter pack.
|
|
226
226
|
|
|
227
227
|
## Authentication and RBAC {#auth-and-rbac}
|
|
228
228
|
|
|
@@ -332,7 +332,7 @@ The workspace pattern is intentionally narrow. A few things it deliberately does
|
|
|
332
332
|
|
|
333
333
|
## What's next {#whats-next}
|
|
334
334
|
|
|
335
|
-
- [Agent Resources](/docs/
|
|
335
|
+
- [Agent Resources](/docs/agent-resources) — the customization layer (`AGENTS.md`, `LEARNINGS.md`, personal memory, skills, custom agents) every app in the workspace shares.
|
|
336
336
|
- [Workspace Governance](/docs/workspace-management) — branching, CODEOWNERS, PR review across many apps in one repo.
|
|
337
337
|
- [Multi-Tenancy](/docs/multi-tenancy) — organizations, roles, and per-org data isolation.
|
|
338
338
|
- [Cross-App SSO](/docs/cross-app-sso) — identity federation for separate-domain deploys.
|
|
@@ -240,10 +240,11 @@ export default defineConfig({
|
|
|
240
240
|
|
|
241
241
|
### 3. Add the collab server plugin
|
|
242
242
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
243
|
+
Choose the access mode that matches the data model. Owned or shareable records
|
|
244
|
+
use `mode: "resource"` with the type registered via
|
|
245
|
+
`registerShareableResource`. Records deliberately shared with every
|
|
246
|
+
authenticated user on the deployment use explicit `mode: "all-authenticated"`.
|
|
247
|
+
Never invent a resource type merely to silence a warning.
|
|
247
248
|
|
|
248
249
|
```ts
|
|
249
250
|
// server/plugins/collab.ts
|
|
@@ -253,10 +254,13 @@ export default createCollabPlugin({
|
|
|
253
254
|
table: "documents",
|
|
254
255
|
contentColumn: "content",
|
|
255
256
|
idColumn: "id",
|
|
256
|
-
|
|
257
|
+
access: { mode: "resource", resourceType: "document" },
|
|
257
258
|
});
|
|
258
259
|
```
|
|
259
260
|
|
|
261
|
+
Omitting `access` is a deprecated legacy behavior. It behaves like
|
|
262
|
+
`all-authenticated`, logs a warning, and is flagged by Doctor.
|
|
263
|
+
|
|
260
264
|
### 4. Use the client hook
|
|
261
265
|
|
|
262
266
|
```ts
|
|
@@ -590,23 +594,37 @@ plugin:
|
|
|
590
594
|
|
|
591
595
|
## Security {#security}
|
|
592
596
|
|
|
593
|
-
###
|
|
597
|
+
### Choose the access model explicitly
|
|
598
|
+
|
|
599
|
+
For owned or shareable resources, use the resource type registered through
|
|
600
|
+
`registerShareableResource`:
|
|
594
601
|
|
|
595
602
|
```ts
|
|
596
603
|
createCollabPlugin({
|
|
597
|
-
|
|
604
|
+
access: { mode: "resource", resourceType: "document" },
|
|
598
605
|
});
|
|
599
606
|
```
|
|
600
607
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
608
|
+
For a resource intentionally shared deployment-wide, say so explicitly:
|
|
609
|
+
|
|
610
|
+
```ts
|
|
611
|
+
createCollabPlugin({
|
|
612
|
+
access: { mode: "all-authenticated" },
|
|
613
|
+
});
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
Do not invent a `resourceType` to make a warning disappear: resource mode is
|
|
617
|
+
valid only when the corresponding ownership and sharing model exists. Omitting
|
|
618
|
+
`access` is supported for legacy compatibility, behaves like
|
|
619
|
+
`all-authenticated`, logs a warning, and is flagged by Doctor.
|
|
620
|
+
|
|
621
|
+
Non-owner sharees with explicit access use state-vector catch-up through the
|
|
622
|
+
poll path (safe, higher latency).
|
|
605
623
|
|
|
606
624
|
### Access checks
|
|
607
625
|
|
|
608
|
-
All collab routes require authentication.
|
|
609
|
-
|
|
626
|
+
All collab routes require authentication. In resource mode, reads require at
|
|
627
|
+
least viewer access and writes require editor access, using the
|
|
610
628
|
same `resolveAccess` / `assertAccess` helpers as the sharing system. A 404
|
|
611
629
|
(not 403) is returned on access failures to avoid leaking document existence.
|
|
612
630
|
|
|
@@ -618,7 +636,7 @@ Override per-plugin:
|
|
|
618
636
|
|
|
619
637
|
```ts
|
|
620
638
|
createCollabPlugin({
|
|
621
|
-
resourceType: "document",
|
|
639
|
+
access: { mode: "resource", resourceType: "document" },
|
|
622
640
|
maxPayloadBytes: 512 * 1024, // 512 KB
|
|
623
641
|
});
|
|
624
642
|
```
|
|
@@ -726,7 +744,7 @@ Key properties:
|
|
|
726
744
|
- [Real-Time Sync](/docs/client#usedbsync) — the `useDbSync` + `useChangeVersion`
|
|
727
745
|
system that delivers the `updatedAt` bump driving editor reconciliation.
|
|
728
746
|
- [Security](/docs/security) — `registerShareableResource`, `resolveAccess`,
|
|
729
|
-
and `assertAccess` for
|
|
747
|
+
and `assertAccess` for resource-scoped collaboration.
|
|
730
748
|
- [Sharing](/docs/sharing) — how documents are shared and how access is granted.
|
|
731
749
|
- [Template: Content](/docs/template-content) — reference implementation of
|
|
732
750
|
collaborative rich-text editing.
|