@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
|
@@ -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.
|
|
@@ -9,7 +9,7 @@ A **recurring job** is a prompt that runs on a cron schedule. It's how the agent
|
|
|
9
9
|
|
|
10
10
|
Recurring jobs fire on a clock. To react to _events_ (a booking created, an email received) — same `jobs/` file format plus conditions — see [Automations](/docs/automations).
|
|
11
11
|
|
|
12
|
-
Jobs live in [Agent Resources](/docs/
|
|
12
|
+
Jobs live in [Agent Resources](/docs/agent-resources) at `jobs/<name>.md` — just a Markdown file with YAML frontmatter. No registration, no wiring. Drop the file in and the framework picks it up.
|
|
13
13
|
|
|
14
14
|
## A job file {#job-file}
|
|
15
15
|
|
|
@@ -40,12 +40,12 @@ Jobs live in [Agent Resources](/docs/workspace) at `jobs/<name>.md` — just a M
|
|
|
40
40
|
{
|
|
41
41
|
lines: "7-12",
|
|
42
42
|
label: "The prompt",
|
|
43
|
-
note: "The body is just a prompt — the agent runs it at each firing with all its normal tools and
|
|
43
|
+
note: "The body is just a prompt — the agent runs it at each firing with all its normal tools and agent context.",
|
|
44
44
|
},
|
|
45
45
|
]}
|
|
46
46
|
/>
|
|
47
47
|
|
|
48
|
-
That's it. The body is a prompt the agent runs at each scheduled firing. The agent has access to all the same tools and
|
|
48
|
+
That's it. The body is a prompt the agent runs at each scheduled firing. The agent has access to all the same tools and agent context it has in an interactive chat — actions, skills, memory, connected MCP servers, sub-agents.
|
|
49
49
|
|
|
50
50
|
## Frontmatter {#frontmatter}
|
|
51
51
|
|
|
@@ -54,7 +54,7 @@ That's it. The body is a prompt the agent runs at each scheduled firing. The age
|
|
|
54
54
|
| `schedule` | cron expression | _(required)_ | Standard 5-field cron. `"0 7 * * *"` = every day at 07:00; `"0 */4 * * *"` = every 4 hours. |
|
|
55
55
|
| `enabled` | boolean | `true` | Flip to `false` to pause without deleting the job. |
|
|
56
56
|
| `runAs` | `"creator"` \| `"shared"` | `"creator"` | `"creator"` runs with the job owner's identity and `ANTHROPIC_API_KEY`. `"shared"` uses the org's key. |
|
|
57
|
-
| `createdBy` | email | _(auto)_ | Populated when the job is created through the
|
|
57
|
+
| `createdBy` | email | _(auto)_ | Populated when the job is created through the Agent Resources UI or by the agent. |
|
|
58
58
|
| `orgId` | string | _(auto)_ | Org scope; inherited from the creator's active org. |
|
|
59
59
|
| `lastRun` | ISO timestamp | _(managed)_ | Written by the scheduler after each run. |
|
|
60
60
|
| `lastStatus` | `"success"` \| `"error"` \| … | _(managed)_ | Latest outcome. |
|
|
@@ -211,7 +211,7 @@ The scheduler is a framework plugin (the internal `processRecurringJobs()` routi
|
|
|
211
211
|
|
|
212
212
|
## Debugging a job {#debugging}
|
|
213
213
|
|
|
214
|
-
- Open `jobs/<name>.md` in
|
|
214
|
+
- Open `jobs/<name>.md` in Agent Resources — the frontmatter shows `lastRun`, `lastStatus`, `lastError`, `nextRun`.
|
|
215
215
|
- **Test it without waiting:** there's no force-fire tool. To exercise the same work on demand, either paste the job's prompt into the agent chat and let it run there, or temporarily set the schedule to the next minute so the scheduler picks it up on the next tick (then restore the real cron).
|
|
216
216
|
- **Pause it:** flip `enabled: false`. The file stays put, just stops running.
|
|
217
217
|
|
|
@@ -234,7 +234,7 @@ A single `manage-jobs` tool is registered in every template. The `action` parame
|
|
|
234
234
|
|
|
235
235
|
Don't confuse recurring jobs with `@agent-native/scheduling`:
|
|
236
236
|
|
|
237
|
-
- **Recurring jobs (this page)** — cron-scheduled _prompts_ the agent runs in the background. Framework-level. Lives in
|
|
237
|
+
- **Recurring jobs (this page)** — cron-scheduled _prompts_ the agent runs in the background. Framework-level. Lives in Agent Resources. Runs on any agent-native app.
|
|
238
238
|
- **`@agent-native/scheduling`** — a reusable domain package for building calendar/booking features (event types, availability windows, bookings). Powers the `calendar` template and custom scheduling surfaces.
|
|
239
239
|
|
|
240
240
|
Recurring jobs are "how do I make the agent act on its own?" The scheduling package is "how do I build a calendar app?" Different concerns.
|
|
@@ -242,7 +242,7 @@ Recurring jobs are "how do I make the agent act on its own?" The scheduling pack
|
|
|
242
242
|
## What's next
|
|
243
243
|
|
|
244
244
|
- [**Automations**](/docs/automations) — add event triggers and conditions to the same `jobs/` format
|
|
245
|
-
- [**Agent Resources**](/docs/
|
|
245
|
+
- [**Agent Resources**](/docs/agent-resources) — where jobs live alongside skills, memory, and custom agents
|
|
246
246
|
- [**Actions**](/docs/actions) — the tools a job calls
|
|
247
247
|
- [**MCP Clients**](/docs/mcp-clients) — connect remote or local MCP tools and OAuth grants
|
|
248
248
|
- [**Agent Teams**](/docs/agent-teams) — jobs often spawn sub-agents to do parallel work
|
|
@@ -141,7 +141,7 @@ Create a skill when:
|
|
|
141
141
|
Don't create a skill when:
|
|
142
142
|
|
|
143
143
|
- The guidance already exists in another skill — extend it instead
|
|
144
|
-
- The guidance is a one-off — put it in `AGENTS.md` or
|
|
144
|
+
- The guidance is a one-off — put it in `AGENTS.md` or agent memory instead
|
|
145
145
|
|
|
146
146
|
## Skill format {#skill-format}
|
|
147
147
|
|
|
@@ -299,11 +299,11 @@ This replaces the old hack of relying on Claude Code only reading `.claude/skill
|
|
|
299
299
|
|
|
300
300
|
</Callout>
|
|
301
301
|
|
|
302
|
-
If the knowledge applies to _everyone_ working in the app ("always prefer CTEs over subqueries"), it's a skill or shared `LEARNINGS.md`. If it's about _this particular user_ ("Steve likes concise answers"), it belongs in `memory/MEMORY.md`. See [Agent Resources — Memory](/docs/
|
|
302
|
+
If the knowledge applies to _everyone_ working in the app ("always prefer CTEs over subqueries"), it's a skill or shared `LEARNINGS.md`. If it's about _this particular user_ ("Steve likes concise answers"), it belongs in `memory/MEMORY.md`. See [Agent Resources — Memory](/docs/agent-resources#memory) for the full treatment.
|
|
303
303
|
|
|
304
304
|
## Skills vs SQL resources {#skills-vs-resources}
|
|
305
305
|
|
|
306
|
-
This page frames a skill as a file at `.agents/skills/<name>/SKILL.md`. [Agent Resources](/docs/
|
|
306
|
+
This page frames a skill as a file at `.agents/skills/<name>/SKILL.md`. [Agent Resources](/docs/agent-resources#skills) frames the same skill as a SQL resource at path `skills/<slug>/SKILL.md`, scoped workspace/shared/personal. These are the same concept from two angles: Code mode reads and writes the file directly; App mode stores it as a resource row so it works without a filesystem. Author the content using this page's format either way.
|
|
307
307
|
|
|
308
308
|
## App-backed skills — full details {#app-backed-skills-full}
|
|
309
309
|
|
|
@@ -428,6 +428,6 @@ the same instructions without maintaining a second copy.
|
|
|
428
428
|
## What's next {#whats-next}
|
|
429
429
|
|
|
430
430
|
- [**Writing Agent Instructions**](/docs/writing-agent-instructions) — word skill descriptions and split guidance across AGENTS.md, skills, and memory
|
|
431
|
-
- [**Agent Resources**](/docs/
|
|
431
|
+
- [**Agent Resources**](/docs/agent-resources#skills) — where skills live as SQL resources in App mode
|
|
432
432
|
- [**Agent Mentions**](/docs/agent-mentions) — the `/`-command trigger that invokes a skill in chat
|
|
433
433
|
- [**Plan plugin & marketplace**](/docs/plan-plugin) — a real app-backed skill's end-to-end install and auto-update flow
|
|
@@ -549,7 +549,7 @@ Ask the agent to make changes for you — it can edit its own source. See
|
|
|
549
549
|
|
|
550
550
|
- [**Dispatch**](/docs/dispatch) — the workspace control plane
|
|
551
551
|
- [**Dispatch template**](/docs/template-dispatch) — the scaffolded coordination app
|
|
552
|
-
- [**Agent Resources**](/docs/
|
|
552
|
+
- [**Agent Resources**](/docs/agent-resources) — shared resources across apps
|
|
553
553
|
- [**A2A Protocol**](/docs/a2a-protocol) — cross-app delegation
|
|
554
554
|
- [**Templates**](/docs/cloneable-saas) — the clone-and-own model, and every other domain template to start from
|
|
555
555
|
- [**Getting Started**](/docs/getting-started) — the framework fundamentals: actions, application state, and live sync
|
|
@@ -38,7 +38,7 @@ operations.
|
|
|
38
38
|
import { createCollabPlugin } from "@agent-native/core/server";
|
|
39
39
|
|
|
40
40
|
export default createCollabPlugin({
|
|
41
|
-
resourceType: "document",
|
|
41
|
+
access: { mode: "resource", resourceType: "document" },
|
|
42
42
|
table: "documents",
|
|
43
43
|
contentColumn: "content",
|
|
44
44
|
});
|
|
@@ -89,7 +89,7 @@ The agent isn't a separate app you tab over to. It ships as a handful of React c
|
|
|
89
89
|
|
|
90
90
|
## You can go UI-light {#ui-light}
|
|
91
91
|
|
|
92
|
-
Not every app needs a full dashboard. When the agent _is_ the product, you can skip most of the custom UI: open the app, ask for what you want, and let the agent do the rest. The agent still has its management surface — history,
|
|
92
|
+
Not every app needs a full dashboard. When the agent _is_ the product, you can skip most of the custom UI: open the app, ask for what you want, and let the agent do the rest. The agent still has its management surface — history, agent resources, settings — but the primary interaction is conversation rather than clicks.
|
|
93
93
|
|
|
94
94
|
## You co-edit with it {#you-co-edit}
|
|
95
95
|
|
|
@@ -289,7 +289,7 @@ When the agent creates a draft email, it appears in the UI. When you click "Send
|
|
|
289
289
|
|
|
290
290
|
The reason tools like Claude Code feel so powerful isn't the model — it's the **customization layer**: per-project instructions, skills, memory, sub-agents, connected services. You can shape the agent to your codebase, your preferences, your team.
|
|
291
291
|
|
|
292
|
-
Agent-native gives every user that same customization layer — without ever leaving the app. Each app comes with
|
|
292
|
+
Agent-native gives every user that same customization layer — without ever leaving the app. Each app comes with personal **agent resources** that you (or anyone on your team) can use to:
|
|
293
293
|
|
|
294
294
|
- Edit team-wide rules everyone's agent reads
|
|
295
295
|
- Let the agent remember preferences automatically as you correct it
|
|
@@ -298,9 +298,9 @@ Agent-native gives every user that same customization layer — without ever lea
|
|
|
298
298
|
- Schedule jobs to run on a cron (e.g. "every Monday morning, summarize last week")
|
|
299
299
|
- Connect external services (Gmail, Stripe, Slack, internal APIs) via per-user MCP servers
|
|
300
300
|
|
|
301
|
-
The twist: it's all stored in the database, not the filesystem. There's no dev environment to spin up, no container per user. Every user gets their own full
|
|
301
|
+
The twist: it's all stored in the database, not the filesystem. There's no dev environment to spin up, no container per user. Every user gets their own full set of agent resources — personal memory, personal connections, personal skills — for essentially free, because it's all rows in a table. That's what makes Claude-Code-level flexibility viable inside a real multi-tenant SaaS product.
|
|
302
302
|
|
|
303
|
-
See [Agent Resources](/docs/
|
|
303
|
+
See [Agent Resources](/docs/agent-resources) for the full concept.
|
|
304
304
|
|
|
305
305
|
## What makes it different {#what-makes-it-different}
|
|
306
306
|
|
|
@@ -396,7 +396,7 @@ One action, many surfaces: the agent calls it as a tool, the UI calls it as a ty
|
|
|
396
396
|
- [**Agent Surfaces**](/docs/agent-surfaces) — choose chat, native inline UI, full app pages, embedded sidecar, automation, or external agent access
|
|
397
397
|
- [**Key Concepts**](/docs/key-concepts) — the architecture: SQL, actions, polling sync, context awareness, portability
|
|
398
398
|
- [**Templates**](/docs/cloneable-saas) — templates as complete products you own
|
|
399
|
-
- [**Agent Resources**](/docs/
|
|
399
|
+
- [**Agent Resources**](/docs/agent-resources) — the per-user customization layer (skills, memory, instructions, MCP) backed by SQL, not files
|
|
400
400
|
- [**Dispatch**](/docs/dispatch) — the workspace control plane: secrets vault, Slack/email inbox, cross-app delegation
|
|
401
401
|
- [**Extensions**](/docs/extensions) — sandboxed mini-apps the agent creates instantly without code changes
|
|
402
402
|
- [**Drop-in Agent**](/docs/drop-in-agent) — mount `<AgentPanel>` into any React app
|
|
@@ -7,7 +7,7 @@ description: "Branching, CODEOWNERS, PR review, and how Dispatch handles runtime
|
|
|
7
7
|
|
|
8
8
|
<Callout tone="info">
|
|
9
9
|
|
|
10
|
-
**Which workspace doc?** This page covers **governance** — who reviews, approves, and owns what across many apps in one repo. For the agent customization layer (Agent Resources: `AGENTS.md`, memory, skills, custom agents) see [Agent Resources](/docs/
|
|
10
|
+
**Which workspace doc?** This page covers **governance** — who reviews, approves, and owns what across many apps in one repo. For the agent customization layer (Agent Resources: `AGENTS.md`, memory, skills, custom agents) see [Agent Resources](/docs/agent-resources); for the deployment shape (one monorepo, many apps) see [Multi-App Workspaces](/docs/multi-app-workspace).
|
|
11
11
|
|
|
12
12
|
</Callout>
|
|
13
13
|
|
|
@@ -211,7 +211,7 @@ The [Dispatch](/docs/dispatch) app is the workspace's runtime control plane. It
|
|
|
211
211
|
|
|
212
212
|
Dispatch manages: vault secrets, reusable workspace connections, workspace resources (skills, instructions, agent profiles, MCP servers), approvals, and audit logs. For public app route configuration (`workspaceApp.audience` / `publicPaths` / `protectedPaths`), see [Multi-App Workspaces — Public app routes](/docs/multi-app-workspace#deployment).
|
|
213
213
|
|
|
214
|
-
For the resource model and canonical paths, see [Agent Resources — Global resources](/docs/
|
|
214
|
+
For the resource model and canonical paths, see [Agent Resources — Global resources](/docs/agent-resources#global-resources).
|
|
215
215
|
|
|
216
216
|
## Setup Checklist
|
|
217
217
|
|
|
@@ -232,7 +232,7 @@ For a new workspace, after running `npx @agent-native/core@latest create`:
|
|
|
232
232
|
- [ ] Register reusable workspace connections for shared provider accounts, then
|
|
233
233
|
grant apps such as Brain, Analytics, Mail, or Dispatch only when they need
|
|
234
234
|
that account
|
|
235
|
-
- [ ] Add workspace-wide skills, guardrail instructions, and brand/company reference resources via the Resources page. See [Agent Resources](/docs/
|
|
235
|
+
- [ ] Add workspace-wide skills, guardrail instructions, and brand/company reference resources via the Resources page. See [Agent Resources](/docs/agent-resources#global-resources) for the full resource-model table and the recommended starter pack.
|
|
236
236
|
- [ ] Configure the approval policy and approver emails
|
|
237
237
|
- [ ] Set up SendGrid (`SENDGRID_API_KEY`, `SENDGRID_FROM_EMAIL`) for admin notifications
|
|
238
238
|
- [ ] Connect Slack or Telegram for workspace messaging
|
|
@@ -240,7 +240,7 @@ For a new workspace, after running `npx @agent-native/core@latest create`:
|
|
|
240
240
|
|
|
241
241
|
## What's next {#whats-next}
|
|
242
242
|
|
|
243
|
-
- [**Agent Resources**](/docs/
|
|
243
|
+
- [**Agent Resources**](/docs/agent-resources) — the customization layer this page governs (skills, memory, agents, MCP servers)
|
|
244
244
|
- [**Multi-App Workspaces**](/docs/multi-app-workspace) — the deployment shape: one monorepo, many apps
|
|
245
245
|
- [**Dispatch**](/docs/dispatch) — the runtime control plane referenced throughout this page
|
|
246
246
|
- [**Sharing**](/docs/sharing) — access control for individual resources, complementing repo-level CODEOWNERS
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.117.0",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -68,6 +68,9 @@
|
|
|
68
68
|
"./server/agent-discovery": "./dist/server/agent-discovery.js",
|
|
69
69
|
"./server/request-context": "./dist/server/request-context.js",
|
|
70
70
|
"./server/design-token-utils": "./dist/server/design-token-utils.js",
|
|
71
|
+
"./server/poll": "./dist/server/poll.js",
|
|
72
|
+
"./server/sse": "./dist/server/sse.js",
|
|
73
|
+
"./server/short-lived-token": "./dist/server/short-lived-token.js",
|
|
71
74
|
"./integrations": "./dist/integrations/index.js",
|
|
72
75
|
"./integrations/runtime": "./dist/integrations/runtime.js",
|
|
73
76
|
"./ingestion": "./dist/ingestion/index.js",
|
|
@@ -385,8 +388,8 @@
|
|
|
385
388
|
"y-protocols": "^1.0.7",
|
|
386
389
|
"yjs": "^13.6.31",
|
|
387
390
|
"zod": "^4.3.6",
|
|
388
|
-
"@agent-native/recap-cli": "0.5.
|
|
389
|
-
"@agent-native/toolkit": "^0.9.
|
|
391
|
+
"@agent-native/recap-cli": "0.5.1",
|
|
392
|
+
"@agent-native/toolkit": "^0.9.1"
|
|
390
393
|
},
|
|
391
394
|
"devDependencies": {
|
|
392
395
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
@@ -3986,8 +3986,16 @@ export async function runAgentLoop(opts: {
|
|
|
3986
3986
|
}
|
|
3987
3987
|
}
|
|
3988
3988
|
if (!assistantContent) {
|
|
3989
|
-
|
|
3990
|
-
|
|
3989
|
+
if (!terminalStopReason) {
|
|
3990
|
+
// A stream that disappears without a terminal stop is an interrupted
|
|
3991
|
+
// chunk, not a successful empty answer. Let the continuation path
|
|
3992
|
+
// recover it instead of persisting a tool-only completed turn.
|
|
3993
|
+
send({ type: "auto_continue", reason: "stream_ended" });
|
|
3994
|
+
return usage;
|
|
3995
|
+
}
|
|
3996
|
+
// Route a clean terminal stop with no normalized content through the
|
|
3997
|
+
// empty-final retry/fallback below.
|
|
3998
|
+
assistantContent = [];
|
|
3991
3999
|
}
|
|
3992
4000
|
|
|
3993
4001
|
if (toolCallErrors.size > 0) {
|
|
@@ -4022,7 +4030,9 @@ export async function runAgentLoop(opts: {
|
|
|
4022
4030
|
: part,
|
|
4023
4031
|
);
|
|
4024
4032
|
|
|
4025
|
-
|
|
4033
|
+
if (assistantContentForHistory.length > 0) {
|
|
4034
|
+
messages.push({ role: "assistant", content: assistantContentForHistory });
|
|
4035
|
+
}
|
|
4026
4036
|
|
|
4027
4037
|
const toolCallParts = assistantContent.filter(
|
|
4028
4038
|
(p): p is import("./engine/types.js").EngineToolCallPart =>
|
package/src/cli/doctor.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* itself via `scripts/guard-*.mjs` (see
|
|
5
5
|
* `advisor-plans/reports/005-doctor-design.md` for the full design and
|
|
6
6
|
* `advisor-plans/015-doctor-v1-implementation.md` for the implementation
|
|
7
|
-
* plan). v1 ships
|
|
7
|
+
* plan). v1 ships 9 of those guards, ported to work against a single
|
|
8
8
|
* generated app root instead of this monorepo's multi-template layout —
|
|
9
9
|
* see `../guards/index.ts`.
|
|
10
10
|
*
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
scanDrizzlePush,
|
|
29
29
|
scanEnvCredentials,
|
|
30
30
|
scanEnvMutation,
|
|
31
|
+
scanExplicitCollabAccess,
|
|
31
32
|
scanLocalhostFallback,
|
|
32
33
|
scanUnscopedCredentials,
|
|
33
34
|
scanUnscopedQueries,
|
|
@@ -47,6 +48,7 @@ export type GuardName =
|
|
|
47
48
|
| "db-tool-scoping"
|
|
48
49
|
| "no-env-mutation"
|
|
49
50
|
| "no-localhost-fallback"
|
|
51
|
+
| "explicit-collab-access"
|
|
50
52
|
| "migration-manifest";
|
|
51
53
|
|
|
52
54
|
export const ALL_GUARD_NAMES: GuardName[] = [
|
|
@@ -57,6 +59,7 @@ export const ALL_GUARD_NAMES: GuardName[] = [
|
|
|
57
59
|
"db-tool-scoping",
|
|
58
60
|
"no-env-mutation",
|
|
59
61
|
"no-localhost-fallback",
|
|
62
|
+
"explicit-collab-access",
|
|
60
63
|
"migration-manifest",
|
|
61
64
|
];
|
|
62
65
|
|
|
@@ -150,6 +153,8 @@ function runGuard(
|
|
|
150
153
|
return scanEnvMutation({ root });
|
|
151
154
|
case "no-localhost-fallback":
|
|
152
155
|
return scanLocalhostFallback({ root, extraExemptPaths: [] });
|
|
156
|
+
case "explicit-collab-access":
|
|
157
|
+
return scanExplicitCollabAccess({ root });
|
|
153
158
|
case "migration-manifest": {
|
|
154
159
|
const imports = scanDeprecatedImports({
|
|
155
160
|
root,
|