@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
|
@@ -2,11 +2,13 @@ import type { ReactNode } from "react";
|
|
|
2
2
|
interface AgentTabFrameProps {
|
|
3
3
|
title: string;
|
|
4
4
|
description: string;
|
|
5
|
+
helpHref?: string;
|
|
6
|
+
helpLabel?: string;
|
|
5
7
|
actions?: ReactNode;
|
|
6
8
|
children: ReactNode;
|
|
7
9
|
className?: string;
|
|
8
10
|
}
|
|
9
11
|
/** Shared settings surface for Manage agent page tabs. */
|
|
10
|
-
export declare function AgentTabFrame({ title, description, actions, children, className, }: AgentTabFrameProps): import("react").JSX.Element;
|
|
12
|
+
export declare function AgentTabFrame({ title, description, helpHref, helpLabel, actions, children, className, }: AgentTabFrameProps): import("react").JSX.Element;
|
|
11
13
|
export {};
|
|
12
14
|
//# sourceMappingURL=AgentTabFrame.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTabFrame.d.ts","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabFrame.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AgentTabFrame.d.ts","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabFrame.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,+BAiCpB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconHelpCircle } from "@tabler/icons-react";
|
|
2
3
|
import { cn } from "../utils.js";
|
|
3
4
|
/** Shared settings surface for Manage agent page tabs. */
|
|
4
|
-
export function AgentTabFrame({ title, description, actions, children, className, }) {
|
|
5
|
-
return (_jsxs("div", { className: cn("mx-auto flex w-full max-w-5xl flex-col gap-6", className), children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-4 border-b border-border/70 pb-5", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h2", { className: "text-xl font-semibold tracking-tight text-foreground", children: title }), _jsx("p", { className: "max-w-2xl text-sm leading-relaxed text-muted-foreground", children: description })] }), actions] }), _jsx("div", { className: "min-w-0", children: children })] }));
|
|
5
|
+
export function AgentTabFrame({ title, description, helpHref, helpLabel, actions, children, className, }) {
|
|
6
|
+
return (_jsxs("div", { className: cn("mx-auto flex w-full max-w-5xl flex-col gap-6", className), children: [_jsxs("header", { className: "flex flex-wrap items-start justify-between gap-4 border-b border-border/70 pb-5", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("h2", { className: "text-xl font-semibold tracking-tight text-foreground", children: title }), helpHref && (_jsx("a", { href: helpHref, target: "_blank", rel: "noopener noreferrer", "aria-label": helpLabel ?? `Open ${title} documentation`, title: helpLabel ?? `Open ${title} documentation`, className: "inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground", children: _jsx(IconHelpCircle, { className: "size-4" }) }))] }), _jsx("p", { className: "max-w-2xl text-sm leading-relaxed text-muted-foreground", children: description })] }), actions] }), _jsx("div", { className: "min-w-0", children: children })] }));
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=AgentTabFrame.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTabFrame.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabFrame.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"AgentTabFrame.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabFrame.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAYjC,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,GACU;IACnB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,aAExE,kBAAQ,SAAS,EAAC,iFAAiF,aACjG,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,2BAA2B,aACxC,aAAI,SAAS,EAAC,sDAAsD,YACjE,KAAK,GACH,EACJ,QAAQ,IAAI,CACX,YACE,IAAI,EAAE,QAAQ,EACd,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,gBACb,SAAS,IAAI,QAAQ,KAAK,gBAAgB,EACtD,KAAK,EAAE,SAAS,IAAI,QAAQ,KAAK,gBAAgB,EACjD,SAAS,EAAC,qJAAqJ,YAE/J,KAAC,cAAc,IAAC,SAAS,EAAC,QAAQ,GAAG,GACnC,CACL,IACG,EACN,YAAG,SAAS,EAAC,yDAAyD,YACnE,WAAW,GACV,IACA,EACL,OAAO,IACD,EACT,cAAK,SAAS,EAAC,SAAS,YAAE,QAAQ,GAAO,IACrC,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { IconHelpCircle } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../utils.js\";\n\ninterface AgentTabFrameProps {\n title: string;\n description: string;\n helpHref?: string;\n helpLabel?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\n/** Shared settings surface for Manage agent page tabs. */\nexport function AgentTabFrame({\n title,\n description,\n helpHref,\n helpLabel,\n actions,\n children,\n className,\n}: AgentTabFrameProps) {\n return (\n <div\n className={cn(\"mx-auto flex w-full max-w-5xl flex-col gap-6\", className)}\n >\n <header className=\"flex flex-wrap items-start justify-between gap-4 border-b border-border/70 pb-5\">\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-1.5\">\n <h2 className=\"text-xl font-semibold tracking-tight text-foreground\">\n {title}\n </h2>\n {helpHref && (\n <a\n href={helpHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={helpLabel ?? `Open ${title} documentation`}\n title={helpLabel ?? `Open ${title} documentation`}\n className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground\"\n >\n <IconHelpCircle className=\"size-4\" />\n </a>\n )}\n </div>\n <p className=\"max-w-2xl text-sm leading-relaxed text-muted-foreground\">\n {description}\n </p>\n </div>\n {actions}\n </header>\n <div className=\"min-w-0\">{children}</div>\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
+
import type { ResourceView } from "../resources/ResourcesPanel.js";
|
|
2
3
|
import type { SettingsTabItem } from "../settings/SettingsTabsPage.js";
|
|
3
4
|
import type { AgentPageTabProps } from "./types.js";
|
|
5
|
+
export declare const AGENT_RESOURCE_DOCS_HREF: Record<ResourceView, string>;
|
|
4
6
|
export interface AgentPageExtraTabContext extends AgentPageTabProps {
|
|
5
7
|
scopeControl: ReactNode;
|
|
6
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTabsPage.d.ts","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"AAeA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentTabsPage.d.ts","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"AAeA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAQnE,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA6EpE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CASjE,CAAC;AAufF,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,YAAY,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,wBAAwB,KAC9B,eAAe,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAc,EACd,iBAAsB,EACtB,UAAoB,EACpB,SAAS,EACT,YAAmB,EACnB,iBAA4B,EAC5B,UAAe,EACf,KAAK,EACL,aAAa,GACd,EAAE,kBAAkB,+BAwapB"}
|
|
@@ -57,39 +57,50 @@ function TabLoading() {
|
|
|
57
57
|
function EmptySlot({ label }) {
|
|
58
58
|
return (_jsx("div", { className: "flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border/70 bg-muted/10", children: _jsx("span", { className: "sr-only", children: label }) }));
|
|
59
59
|
}
|
|
60
|
+
export const AGENT_RESOURCE_DOCS_HREF = {
|
|
61
|
+
files: "https://agent-native.com/docs/agent-resources#resources-tab",
|
|
62
|
+
instructions: "https://agent-native.com/docs/agent-resources#agents-md",
|
|
63
|
+
agents: "https://agent-native.com/docs/agent-resources#custom-agents",
|
|
64
|
+
memory: "https://agent-native.com/docs/agent-resources#memory",
|
|
65
|
+
skills: "https://agent-native.com/docs/skills-guide",
|
|
66
|
+
learnings: "https://agent-native.com/docs/agent-resources#memory",
|
|
67
|
+
"remote-agents": "https://agent-native.com/docs/agent-resources#remote-vs-custom-agents",
|
|
68
|
+
};
|
|
60
69
|
const RESOURCE_TAB_COPY = {
|
|
61
70
|
files: {
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
titleKey: "agentResources.files.title",
|
|
72
|
+
descriptionKey: "agentResources.files.description",
|
|
64
73
|
},
|
|
65
74
|
instructions: {
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
titleKey: "agentResources.instructions.title",
|
|
76
|
+
descriptionKey: "agentResources.instructions.description",
|
|
68
77
|
},
|
|
69
78
|
agents: {
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
titleKey: "agentResources.agents.title",
|
|
80
|
+
descriptionKey: "agentResources.agents.description",
|
|
72
81
|
},
|
|
73
82
|
memory: {
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
titleKey: "agentResources.memory.title",
|
|
84
|
+
descriptionKey: "agentResources.memory.description",
|
|
76
85
|
},
|
|
77
86
|
skills: {
|
|
78
|
-
|
|
79
|
-
|
|
87
|
+
titleKey: "agentResources.skills.title",
|
|
88
|
+
descriptionKey: "agentResources.skills.description",
|
|
80
89
|
},
|
|
81
90
|
learnings: {
|
|
82
|
-
|
|
83
|
-
|
|
91
|
+
titleKey: "agentResources.learnings.title",
|
|
92
|
+
descriptionKey: "agentResources.learnings.description",
|
|
84
93
|
},
|
|
85
94
|
"remote-agents": {
|
|
86
|
-
|
|
87
|
-
|
|
95
|
+
titleKey: "agentResources.remoteAgents.title",
|
|
96
|
+
descriptionKey: "agentResources.remoteAgents.description",
|
|
88
97
|
},
|
|
89
98
|
};
|
|
90
99
|
function AgentResourceTab({ scope, view, }) {
|
|
100
|
+
const t = useT();
|
|
91
101
|
const copy = RESOURCE_TAB_COPY[view];
|
|
92
|
-
|
|
102
|
+
const title = t(copy.titleKey);
|
|
103
|
+
return (_jsx(AgentTabFrame, { title: title, description: t(copy.descriptionKey), helpHref: AGENT_RESOURCE_DOCS_HREF[view], helpLabel: t("agentResources.openDocs", { section: title }), children: _jsx("div", { className: "min-h-[480px]", children: _jsx(ResourcesPanel, { showMcpServers: false, resourceFilter: view, resourceTreeVariant: view === "files" ? "tree" : "collection", scope: "personal" }, `${scope}-${view}`) }) }));
|
|
93
104
|
}
|
|
94
105
|
function ServerStatus({ server }) {
|
|
95
106
|
if (server.status.state === "connected") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTabsPage.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconBook2,\n IconChecklist,\n IconClock,\n IconExternalLink,\n IconFolder,\n IconHistory,\n IconHierarchy2,\n IconNotes,\n IconPlugConnected,\n IconTopologyRing2,\n IconSearch,\n IconShieldLock,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type ReactNode,\n} from \"react\";\n\nimport {\n MCP_CONNECT_GUIDES,\n MCP_CONNECT_MCP_URL_TEMPLATE,\n MCP_STATIC_TOKEN_FALLBACK,\n interpolateMcpConnectTemplate,\n type McpConnectTemplateValues,\n} from \"../../shared/mcp-connect-content.js\";\nimport { appPath } from \"../api-path.js\";\nimport { useT } from \"../i18n.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n McpIntegrationDialog,\n // The dialog is intentionally reused here so the Agent page remains a thin\n // host for the existing MCP management flow.\n} from \"../resources/McpIntegrationDialog.js\";\nimport { McpServerDetail } from \"../resources/McpServerDetail.js\";\nimport type { ResourceView } from \"../resources/ResourcesPanel.js\";\nimport {\n useCreateMcpServer,\n useDeleteMcpServer,\n useMcpServers,\n type McpServer,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport type {\n SettingsSearchEntry,\n SettingsTabItem,\n} from \"../settings/SettingsTabsPage.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentEmptyState } from \"./AgentEmptyState.js\";\nimport { AgentTabFrame } from \"./AgentTabFrame.js\";\nimport type { AgentPageScope, AgentPageTabProps } from \"./types.js\";\n\nconst AgentContextTab = lazy(() =>\n import(\"./AgentContextTab.js\").then((module) => ({\n default: module.AgentContextTab,\n })),\n);\nconst AgentJobsTab = lazy(() =>\n import(\"./AgentJobsTab.js\").then((module) => ({\n default: module.AgentJobsTab,\n })),\n);\nconst ResourcesPanel = lazy(() =>\n import(\"../resources/ResourcesPanel.js\").then((module) => ({\n default: module.ResourcesPanel,\n })),\n);\n\ntype SettingsTabIcon = ComponentType<{ className?: string }>;\n\nfunction normalizeTabId(value?: string | null): string | null {\n const normalized = value\n ?.replace(/^#/, \"\")\n .trim()\n .toLowerCase()\n .replace(/[\"']/g, \"\")\n .replace(/[\\s_]+/g, \"-\");\n return normalized || null;\n}\n\nfunction resolveTabId(\n tabs: SettingsTabItem[],\n value?: string | null,\n): string | null {\n const normalized = normalizeTabId(value);\n if (!normalized) return null;\n if (normalized === \"context\" && tabs.some((tab) => tab.id === \"snapshots\")) {\n return \"snapshots\";\n }\n if (tabs.some((tab) => tab.id === normalized)) return normalized;\n const section = normalized.split(\":\", 1)[0];\n const owner = tabs.find((tab) =>\n tab.searchEntries?.some(\n (entry) => normalizeTabId(entry.hash ?? entry.id) === section,\n ),\n );\n return owner?.id ?? null;\n}\n\nfunction updateTabHash(tabId: string) {\n if (typeof window === \"undefined\") return;\n const hash = tabId === \"files\" ? \"\" : `#${encodeURIComponent(tabId)}`;\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}${hash}`,\n );\n}\n\nfunction TabLoading() {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\">\n <div className=\"h-5 w-36 animate-pulse rounded bg-muted\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n </div>\n );\n}\n\nfunction EmptySlot({ label }: { label: string }) {\n return (\n <div className=\"flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border/70 bg-muted/10\">\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nconst RESOURCE_TAB_COPY: Record<\n ResourceView,\n { title: string; description: string }\n> = {\n files: {\n title: \"Files\",\n description: \"Plain workspace files the agent can read and write.\",\n },\n instructions: {\n title: \"Instructions\",\n description:\n \"The rules, preferences, and project guidance that steer the agent.\",\n },\n agents: {\n title: \"Agents\",\n description: \"Reusable profiles for focused sub-agents and delegated work.\",\n },\n memory: {\n title: \"Memory\",\n description: \"Durable notes the agent can retrieve across conversations.\",\n },\n skills: {\n title: \"Skills\",\n description:\n \"Specialized instructions that give the agent repeatable abilities.\",\n },\n learnings: {\n title: \"Learnings\",\n description:\n \"Corrections and patterns worth carrying forward for future work.\",\n },\n \"remote-agents\": {\n title: \"Remote agents\",\n description: \"Other agents this workspace can call through A2A.\",\n },\n};\n\nfunction AgentResourceTab({\n scope,\n view,\n}: AgentPageTabProps & { view: ResourceView }) {\n const copy = RESOURCE_TAB_COPY[view];\n return (\n <AgentTabFrame title={copy.title} description={copy.description}>\n <div className=\"min-h-[480px]\">\n <ResourcesPanel\n key={`${scope}-${view}`}\n showMcpServers={false}\n resourceFilter={view}\n resourceTreeVariant={view === \"files\" ? \"tree\" : \"collection\"}\n scope=\"personal\"\n />\n </div>\n </AgentTabFrame>\n );\n}\n\nfunction ServerStatus({ server }: { server: McpServer }) {\n if (server.status.state === \"connected\") {\n return (\n <span className=\"text-[11px] text-emerald-600 dark:text-emerald-400\">\n Connected · {server.status.toolCount} tools\n </span>\n );\n }\n if (server.status.state === \"error\") {\n return (\n <span className=\"truncate text-[11px] text-destructive\">\n Connection error\n </span>\n );\n }\n return (\n <span className=\"text-[11px] text-muted-foreground\">Status unknown</span>\n );\n}\n\nfunction ConnectionsTab({ canManageOrg = false }: AgentPageTabProps) {\n const t = useT();\n const serversQuery = useMcpServers();\n const createServer = useCreateMcpServer();\n const deleteServer = useDeleteMcpServer();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedServer, setSelectedServer] = useState<McpServer | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const data = serversQuery.data;\n const hasOrg = Boolean(data?.orgId);\n const canCreateOrgMcp = hasOrg && canManageOrg;\n\n const onCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n if (args.scope === \"org\" && !canCreateOrgMcp) {\n throw new Error(\n \"Only organization admins can add organization MCP servers.\",\n );\n }\n return createServer.mutateAsync(args);\n },\n [canCreateOrgMcp, createServer],\n );\n\n const removeServer = async (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n if (deleteTarget !== key) {\n setDeleteTarget(key);\n return;\n }\n setError(null);\n try {\n await deleteServer.mutateAsync({ id: server.id, scope: server.scope });\n if (\n selectedServer?.id === server.id &&\n selectedServer.scope === server.scope\n ) {\n setSelectedServer(null);\n }\n setDeleteTarget(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n\n const renderServer = (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n const canDelete = server.scope === \"user\" || canManageOrg;\n const selected =\n selectedServer?.id === server.id && selectedServer.scope === server.scope;\n return (\n <div\n key={key}\n className={cn(\n \"group/connection-row py-4 transition-colors first:pt-5 last:pb-5\",\n selected && \"bg-accent/20\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedServer(selected ? null : server)}\n className=\"min-w-0 flex-1 cursor-pointer text-start\"\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n {server.name}\n </span>\n </div>\n <code className=\"mt-1 block truncate text-[11px] text-muted-foreground\">\n {server.url}\n </code>\n <div className=\"mt-2 flex items-center gap-2\">\n <ServerStatus server={server} />\n {server.description && (\n <span className=\"truncate text-[11px] text-muted-foreground/70\">\n {server.description}\n </span>\n )}\n </div>\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={() => void removeServer(server)}\n disabled={deleteServer.isPending}\n className={cn(\n \"cursor-pointer rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive\",\n deleteTarget === key && \"bg-destructive/10 text-destructive\",\n )}\n >\n {deleteTarget === key ? \"Confirm\" : \"Delete\"}\n </button>\n )}\n </div>\n {selected && (\n <div className=\"mt-3 border-t border-border/70 pt-3\">\n <McpServerDetail server={server} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <AgentTabFrame\n title=\"Connections\"\n description=\"Tools and services this agent can reach, grouped by where they are configured.\"\n actions={\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n setDialogOpen(true);\n }}\n className=\"cursor-pointer rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"mcpIntegrations.connect\")}\n </button>\n }\n >\n <section className=\"space-y-4\">\n {error && (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n {error}\n </p>\n )}\n {serversQuery.isLoading ? (\n <TabLoading />\n ) : serversQuery.isError ? (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n Could not load MCP servers.\n </p>\n ) : (\n <div className=\"space-y-6\">\n {[\n { label: \"Personal\", servers: data?.user ?? [] },\n { label: \"Organization\", servers: data?.org ?? [] },\n ].map((section) => (\n <section key={section.label} className=\"space-y-2\">\n <h2 className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground/70\">\n {section.label}\n </h2>\n {section.servers.length > 0 ? (\n <div className=\"divide-y divide-border/60 border-y border-border/60\">\n {section.servers.map(renderServer)}\n </div>\n ) : (\n <AgentEmptyState\n icon={IconPlugConnected}\n title={`No ${section.label.toLowerCase()} connections yet`}\n description={\n section.label === \"Personal\"\n ? \"Connect a service to give the agent access to it.\"\n : \"Organization connections shared with this workspace will appear here.\"\n }\n />\n )}\n </section>\n ))}\n </div>\n )}\n <McpIntegrationDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n defaultScope=\"user\"\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrg}\n onCreateMcpServer={onCreateMcpServer}\n />\n </section>\n </AgentTabFrame>\n );\n}\n\ninterface AccessUrls {\n appName: string;\n appUrl: string;\n mcpUrl: string;\n connectUrl: string;\n agentCardUrl: string;\n}\n\nfunction CopyField({ label, value }: { label: string; value: string }) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1600);\n } catch {\n setCopied(false);\n }\n };\n return (\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/20 p-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70\">\n {label}\n </div>\n <code className=\"mt-1 block truncate text-xs text-foreground\">\n {value}\n </code>\n </div>\n <button\n type=\"button\"\n onClick={() => void copy()}\n className=\"shrink-0 cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n );\n}\n\nfunction AccessTab({\n appName: appNameProp,\n}: AgentPageTabProps & { appName?: string }) {\n const [urls, setUrls] = useState<AccessUrls | null>(null);\n const [agentCardAvailable, setAgentCardAvailable] = useState(false);\n const [activeGuide, setActiveGuide] = useState(MCP_CONNECT_GUIDES[0]?.id);\n\n useEffect(() => {\n const origin = window.location.origin;\n const baseUrl = new URL(appPath(\"/\"), origin).toString().replace(/\\/$/, \"\");\n const hostname = window.location.hostname || \"app\";\n const metaSiteName = document\n .querySelector('meta[property=\"og:site_name\"]')\n ?.getAttribute(\"content\")\n ?.trim();\n const hostnameGuess =\n hostname !== \"localhost\" && hostname !== \"127.0.0.1\"\n ? hostname.split(\".\")[0]\n : \"\";\n const appName =\n appNameProp?.trim() || metaSiteName || hostnameGuess || \"this app\";\n const templateValues = {\n appName,\n appUrl: baseUrl,\n mcpUrl: \"\",\n serverId: `agent-native-${hostname}`,\n } satisfies McpConnectTemplateValues;\n setUrls({\n appName,\n appUrl: baseUrl,\n mcpUrl: interpolateMcpConnectTemplate(\n MCP_CONNECT_MCP_URL_TEMPLATE,\n templateValues,\n ),\n connectUrl: new URL(appPath(\"/mcp/connect\"), origin).toString(),\n agentCardUrl: new URL(\n appPath(\"/.well-known/agent-card.json\"),\n origin,\n ).toString(),\n });\n }, [appNameProp]);\n\n useEffect(() => {\n if (!urls) return;\n let cancelled = false;\n fetch(urls.agentCardUrl)\n .then((response) => {\n if (!cancelled) setAgentCardAvailable(response.ok);\n })\n .catch(() => {\n if (!cancelled) setAgentCardAvailable(false);\n });\n return () => {\n cancelled = true;\n };\n }, [urls]);\n\n const templateValues: McpConnectTemplateValues | null = urls\n ? {\n appName: urls.appName,\n appUrl: urls.appUrl,\n mcpUrl: urls.mcpUrl,\n serverId: `agent-native-${window.location.hostname || \"app\"}`,\n }\n : null;\n const guide =\n MCP_CONNECT_GUIDES.find((item) => item.id === activeGuide) ??\n MCP_CONNECT_GUIDES[0];\n\n return (\n <AgentTabFrame\n title=\"Access\"\n description=\"Choose which external clients can talk to this app's agent.\"\n >\n <div className=\"space-y-6\">\n {urls ? (\n <>\n <CopyField label=\"MCP URL\" value={urls.mcpUrl} />\n {agentCardAvailable && (\n <CopyField label=\"A2A agent card\" value={urls.agentCardUrl} />\n )}\n <section className=\"space-y-3 border-t border-border/70 pt-6\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Client setup\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n These instructions are also available on the full connect\n page.\n </p>\n </div>\n <div\n className=\"flex gap-1 overflow-x-auto border-b border-border pb-2\"\n role=\"tablist\"\n aria-label=\"Choose your AI assistant\"\n >\n {MCP_CONNECT_GUIDES.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.id === guide?.id}\n onClick={() => setActiveGuide(item.id)}\n className={cn(\n \"shrink-0 cursor-pointer rounded-md px-2.5 py-1.5 text-xs font-medium\",\n item.id === guide?.id\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {guide && templateValues && (\n <div className=\"space-y-3 pt-1\" role=\"tabpanel\">\n {guide.steps?.length ? (\n <ol className=\"list-decimal space-y-2 ps-5 text-xs leading-relaxed text-muted-foreground\">\n {guide.steps.map((step) => (\n <li key={step}>\n {interpolateMcpConnectTemplate(step, templateValues)}\n </li>\n ))}\n </ol>\n ) : null}\n {guide.intro && (\n <p className=\"text-xs text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.intro,\n templateValues,\n )}\n </p>\n )}\n {guide.commandTemplate && (\n <CopyField\n label=\"Command\"\n value={interpolateMcpConnectTemplate(\n guide.commandTemplate,\n templateValues,\n )}\n />\n )}\n {guide.configTemplate && (\n <CopyField\n label=\"MCP config\"\n value={interpolateMcpConnectTemplate(\n guide.configTemplate,\n templateValues,\n )}\n />\n )}\n {guide.action?.kind === \"link\" && guide.action.href && (\n <a\n href={guide.action.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {guide.action.label}\n <IconExternalLink className=\"size-3.5\" />\n </a>\n )}\n {guide.note && (\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.note,\n templateValues,\n )}\n </p>\n )}\n </div>\n )}\n </section>\n <section className=\"border-t border-border/70 pt-6\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.title}\n </h3>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.state}. Open the connect page to\n create a token for clients that cannot complete OAuth.\n </p>\n <a\n href={urls.connectUrl}\n className=\"mt-3 inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n Open full connect page\n <IconExternalLink className=\"size-3.5\" />\n </a>\n </section>\n </>\n ) : (\n <TabLoading />\n )}\n </div>\n </AgentTabFrame>\n );\n}\n\nexport interface AgentPageExtraTabContext extends AgentPageTabProps {\n scopeControl: ReactNode;\n}\n\nexport type AgentPageExtraTabFactory = (\n context: AgentPageExtraTabContext,\n) => SettingsTabItem;\n\nexport interface AgentTabsPageProps {\n /**\n * Human-readable app name used in the Access tab's connect instructions\n * (e.g. \"name it Mail\"). Falls back to the `og:site_name` meta tag, then a\n * hostname-derived guess — never `document.title`, which this page owns.\n */\n appName?: string;\n extraTabs?: SettingsTabItem[];\n /** Scoped app-specific tabs that receive the current Manage agent page scope. */\n extraTabFactories?: AgentPageExtraTabFactory[];\n defaultTab?: string;\n className?: string;\n /** Whether to render the Agent page search box. Defaults to true. */\n enableSearch?: boolean;\n searchPlaceholder?: string;\n hiddenTabs?: string[];\n value?: string;\n onValueChange?: (tabId: string) => void;\n}\n\nexport function AgentTabsPage({\n appName,\n extraTabs = [],\n extraTabFactories = [],\n defaultTab = \"files\",\n className,\n enableSearch = true,\n searchPlaceholder = \"Search\",\n hiddenTabs = [],\n value,\n onValueChange,\n}: AgentTabsPageProps) {\n const { data: org } = useOrg();\n const canManageOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const scope: AgentPageScope = \"user\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const normalizedHiddenTabs = useMemo(\n () => new Set(hiddenTabs.map((tab) => normalizeTabId(tab)).filter(Boolean)),\n [hiddenTabs],\n );\n const scopeControl: ReactNode = null;\n const scopedExtraTabs = useMemo(\n () =>\n extraTabFactories.map((factory) =>\n factory({ scope, canManageOrg, scopeControl }),\n ),\n [canManageOrg, extraTabFactories, scope, scopeControl],\n );\n\n const tabs = useMemo<SettingsTabItem[]>(\n () => [\n {\n id: \"files\",\n label: \"Files\",\n icon: IconFolder,\n group: \"resources\",\n keywords: \"workspace plain files documents uploads\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"files\" />\n </Suspense>\n ),\n },\n {\n id: \"instructions\",\n label: \"Instructions\",\n icon: IconChecklist,\n group: \"resources\",\n keywords: \"agents md rules preferences guidance\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"instructions\" />\n </Suspense>\n ),\n },\n {\n id: \"agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n group: \"resources\",\n keywords: \"custom sub agents delegate profiles\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"agents\" />\n </Suspense>\n ),\n },\n {\n id: \"memory\",\n label: \"Memory\",\n icon: IconNotes,\n group: \"resources\",\n keywords: \"long term notes memory index recall\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"memory\" />\n </Suspense>\n ),\n },\n {\n id: \"skills\",\n label: \"Skills\",\n icon: IconBook2,\n group: \"resources\",\n keywords: \"abilities reusable instructions workflows\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"skills\" />\n </Suspense>\n ),\n },\n {\n id: \"learnings\",\n label: \"Learnings\",\n icon: IconHistory,\n group: \"resources\",\n keywords: \"corrections patterns knowledge feedback\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"learnings\" />\n </Suspense>\n ),\n },\n {\n id: \"remote-agents\",\n label: \"Remote agents\",\n icon: IconTopologyRing2,\n group: \"resources\",\n keywords: \"a2a connected remote agents delegation\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"remote-agents\" />\n </Suspense>\n ),\n },\n {\n id: \"snapshots\",\n label: \"Snapshots\",\n icon: IconHistory,\n group: \"agent\",\n keywords: \"context recent loads provenance tokens\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentContextTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"connections\",\n label: \"Connections\",\n icon: IconPlugConnected,\n group: \"agent\",\n keywords: \"mcp servers tools integrations\",\n searchEntries: [\n { id: \"mcp-servers\", label: \"MCP servers\", keywords: \"tools\" },\n ],\n content: <ConnectionsTab scope={scope} canManageOrg={canManageOrg} />,\n },\n {\n id: \"jobs\",\n label: \"Jobs\",\n icon: IconClock,\n group: \"agent\",\n keywords: \"scheduled automations recurring\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentJobsTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"access\",\n label: \"Access\",\n icon: IconShieldLock,\n group: \"agent\",\n keywords: \"external clients oauth a2a exposure\",\n searchEntries: [\n {\n id: \"mcp-connect\",\n label: \"External client setup\",\n keywords: \"oauth connect\",\n },\n {\n id: \"a2a-agent-card\",\n label: \"A2A agent card\",\n keywords: \"agent card\",\n },\n ],\n content: (\n <AccessTab\n scope={scope}\n canManageOrg={canManageOrg}\n appName={appName}\n />\n ),\n },\n ...extraTabs,\n ...scopedExtraTabs,\n ],\n [appName, canManageOrg, extraTabs, scope, scopedExtraTabs],\n );\n const visibleTabs = useMemo(\n () => tabs.filter((tab) => !normalizedHiddenTabs.has(tab.id)),\n [normalizedHiddenTabs, tabs],\n );\n const fallbackTab = visibleTabs.some((tab) => tab.id === defaultTab)\n ? defaultTab\n : (visibleTabs[0]?.id ?? \"context\");\n const [internalTab, setInternalTab] = useState(() => {\n if (typeof window === \"undefined\") return fallbackTab;\n return resolveTabId(visibleTabs, window.location.hash) ?? fallbackTab;\n });\n const isControlled = value !== undefined;\n const activeTab = isControlled ? value : internalTab;\n const selectedTab =\n visibleTabs.find((tab) => tab.id === activeTab) ?? visibleTabs[0];\n const tabGroups = useMemo(() => {\n const groups: Array<{ id: string; tabs: SettingsTabItem[] }> = [];\n for (const tab of visibleTabs) {\n const groupId = tab.group ?? \"agent\";\n const previous = groups.at(-1);\n if (previous?.id === groupId) previous.tabs.push(tab);\n else groups.push({ id: groupId, tabs: [tab] });\n }\n return groups;\n }, [visibleTabs]);\n\n useEffect(() => {\n if (!isControlled && !visibleTabs.some((tab) => tab.id === internalTab)) {\n setInternalTab(fallbackTab);\n }\n }, [fallbackTab, internalTab, isControlled, visibleTabs]);\n\n useEffect(() => {\n if (isControlled) return;\n const onHashChange = () => {\n const next = resolveTabId(visibleTabs, window.location.hash);\n if (next) setInternalTab(next);\n };\n window.addEventListener(\"hashchange\", onHashChange);\n return () => window.removeEventListener(\"hashchange\", onHashChange);\n }, [isControlled, visibleTabs]);\n\n const changeTab = useCallback(\n (tabId: string) => {\n if (!isControlled) setInternalTab(tabId);\n onValueChange?.(tabId);\n },\n [isControlled, onValueChange],\n );\n\n const searchIndex = useMemo(() => {\n const entries: Array<\n SettingsSearchEntry & { tabId: string; haystack: string }\n > = [];\n for (const tab of visibleTabs) {\n entries.push({\n id: `tab:${tab.id}`,\n label: tab.label,\n keywords: tab.keywords,\n tabId: tab.id,\n haystack: `${tab.label} ${tab.keywords ?? \"\"}`.toLowerCase(),\n });\n for (const entry of tab.searchEntries ?? []) {\n entries.push({\n ...entry,\n tabId: entry.tabId ?? tab.id,\n haystack:\n `${entry.label} ${entry.keywords ?? \"\"} ${entry.description ?? \"\"} ${tab.label}`.toLowerCase(),\n });\n }\n }\n return entries;\n }, [visibleTabs]);\n const results = useMemo(() => {\n const terms = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return [];\n return searchIndex\n .filter((entry) => terms.every((term) => entry.haystack.includes(term)))\n .sort((a, b) => a.label.localeCompare(b.label));\n }, [query, searchIndex]);\n\n const selectSearchResult = useCallback(\n (entry: (typeof searchIndex)[number]) => {\n changeTab(entry.tabId);\n setQuery(\"\");\n if (isControlled || typeof window === \"undefined\") return;\n if (entry.hash) {\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}#${entry.hash.replace(/^#/, \"\")}`,\n );\n window.dispatchEvent(new Event(\"hashchange\"));\n } else {\n updateTabHash(entry.tabId);\n }\n },\n [changeTab, isControlled],\n );\n\n return (\n <div\n ref={rootRef}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden bg-background\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col sm:flex-row\">\n <div className=\"flex shrink-0 flex-col gap-2 bg-background p-2 sm:min-h-0 sm:w-56 sm:overflow-y-auto sm:p-3\">\n {enableSearch ? (\n <div className=\"relative sm:mb-1\">\n <IconSearch className=\"pointer-events-none absolute start-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setQuery(\"\");\n if (event.key === \"Enter\" && results[0]) {\n event.preventDefault();\n selectSearchResult(results[0]);\n }\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className=\"h-8 w-full rounded-md border border-border bg-background ps-8 pe-7 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground focus:border-foreground/30 focus:ring-2 focus:ring-accent/40\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={() => setQuery(\"\")}\n aria-label=\"Clear search\"\n className=\"absolute end-1.5 top-1/2 flex size-5 -translate-y-1/2 cursor-pointer items-center justify-center rounded text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n >\n <IconX className=\"size-3.5\" />\n </button>\n )}\n </div>\n ) : null}\n {query.trim() ? (\n <div\n role=\"listbox\"\n aria-label=\"Agent search results\"\n className=\"flex flex-col gap-0.5\"\n >\n {results.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-xs text-muted-foreground\">\n No matching items\n </p>\n ) : (\n results.map((entry) => (\n <button\n key={entry.id}\n type=\"button\"\n role=\"option\"\n onClick={() => selectSearchResult(entry)}\n className=\"flex cursor-pointer items-start gap-2 rounded-md px-2.5 py-2 text-start text-sm text-foreground hover:bg-accent/60\"\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium\">\n {entry.label}\n </span>\n <span className=\"truncate text-[11px] text-muted-foreground\">\n {entry.description ?? entry.tabId}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n ) : (\n <nav\n aria-label=\"Agent sections\"\n role=\"tablist\"\n className=\"flex gap-1 overflow-x-auto sm:flex-col sm:overflow-x-visible\"\n >\n {tabGroups.map((group, groupIndex) => (\n <div\n key={group.id}\n className={cn(\n \"contents sm:block\",\n groupIndex > 0 &&\n \"sm:mt-2 sm:border-t sm:border-border/60 sm:pt-2\",\n )}\n >\n {group.id === \"resources\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent resources\n </div>\n )}\n {group.id === \"agent\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent operations\n </div>\n )}\n <div className=\"contents sm:flex sm:flex-col sm:gap-1\">\n {group.tabs.map((tab) => {\n const Icon = tab.icon as SettingsTabIcon | undefined;\n const selected = tab.id === selectedTab?.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n id={`agent-tab-${tab.id}`}\n role=\"tab\"\n aria-selected={selected}\n aria-controls={`agent-tabpanel-${tab.id}`}\n onClick={() => {\n changeTab(tab.id);\n if (!isControlled) updateTabHash(tab.id);\n }}\n className={cn(\n \"flex min-h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-start text-sm font-medium transition-colors sm:w-full\",\n selected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {Icon ? (\n <Icon\n className={cn(\n \"size-4 shrink-0\",\n selected\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n />\n ) : null}\n <span className=\"truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n )}\n </div>\n <div\n id={`agent-tabpanel-${selectedTab?.id ?? \"context\"}`}\n role=\"tabpanel\"\n aria-labelledby={`agent-tab-${selectedTab?.id ?? \"context\"}`}\n className=\"min-h-0 min-w-0 flex-1 overflow-y-auto p-4 sm:p-6\"\n >\n {selectedTab?.content ?? <EmptySlot label=\"Agent section\" />}\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AgentTabsPage.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconBook2,\n IconChecklist,\n IconClock,\n IconExternalLink,\n IconFolder,\n IconHistory,\n IconHierarchy2,\n IconNotes,\n IconPlugConnected,\n IconTopologyRing2,\n IconSearch,\n IconShieldLock,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type ReactNode,\n} from \"react\";\n\nimport {\n MCP_CONNECT_GUIDES,\n MCP_CONNECT_MCP_URL_TEMPLATE,\n MCP_STATIC_TOKEN_FALLBACK,\n interpolateMcpConnectTemplate,\n type McpConnectTemplateValues,\n} from \"../../shared/mcp-connect-content.js\";\nimport { appPath } from \"../api-path.js\";\nimport { useT } from \"../i18n.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n McpIntegrationDialog,\n // The dialog is intentionally reused here so the Agent page remains a thin\n // host for the existing MCP management flow.\n} from \"../resources/McpIntegrationDialog.js\";\nimport { McpServerDetail } from \"../resources/McpServerDetail.js\";\nimport type { ResourceView } from \"../resources/ResourcesPanel.js\";\nimport {\n useCreateMcpServer,\n useDeleteMcpServer,\n useMcpServers,\n type McpServer,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport type {\n SettingsSearchEntry,\n SettingsTabItem,\n} from \"../settings/SettingsTabsPage.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentEmptyState } from \"./AgentEmptyState.js\";\nimport { AgentTabFrame } from \"./AgentTabFrame.js\";\nimport type { AgentPageScope, AgentPageTabProps } from \"./types.js\";\n\nconst AgentContextTab = lazy(() =>\n import(\"./AgentContextTab.js\").then((module) => ({\n default: module.AgentContextTab,\n })),\n);\nconst AgentJobsTab = lazy(() =>\n import(\"./AgentJobsTab.js\").then((module) => ({\n default: module.AgentJobsTab,\n })),\n);\nconst ResourcesPanel = lazy(() =>\n import(\"../resources/ResourcesPanel.js\").then((module) => ({\n default: module.ResourcesPanel,\n })),\n);\n\ntype SettingsTabIcon = ComponentType<{ className?: string }>;\n\nfunction normalizeTabId(value?: string | null): string | null {\n const normalized = value\n ?.replace(/^#/, \"\")\n .trim()\n .toLowerCase()\n .replace(/[\"']/g, \"\")\n .replace(/[\\s_]+/g, \"-\");\n return normalized || null;\n}\n\nfunction resolveTabId(\n tabs: SettingsTabItem[],\n value?: string | null,\n): string | null {\n const normalized = normalizeTabId(value);\n if (!normalized) return null;\n if (normalized === \"context\" && tabs.some((tab) => tab.id === \"snapshots\")) {\n return \"snapshots\";\n }\n if (tabs.some((tab) => tab.id === normalized)) return normalized;\n const section = normalized.split(\":\", 1)[0];\n const owner = tabs.find((tab) =>\n tab.searchEntries?.some(\n (entry) => normalizeTabId(entry.hash ?? entry.id) === section,\n ),\n );\n return owner?.id ?? null;\n}\n\nfunction updateTabHash(tabId: string) {\n if (typeof window === \"undefined\") return;\n const hash = tabId === \"files\" ? \"\" : `#${encodeURIComponent(tabId)}`;\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}${hash}`,\n );\n}\n\nfunction TabLoading() {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\">\n <div className=\"h-5 w-36 animate-pulse rounded bg-muted\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n </div>\n );\n}\n\nfunction EmptySlot({ label }: { label: string }) {\n return (\n <div className=\"flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border/70 bg-muted/10\">\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nexport const AGENT_RESOURCE_DOCS_HREF: Record<ResourceView, string> = {\n files: \"https://agent-native.com/docs/agent-resources#resources-tab\",\n instructions: \"https://agent-native.com/docs/agent-resources#agents-md\",\n agents: \"https://agent-native.com/docs/agent-resources#custom-agents\",\n memory: \"https://agent-native.com/docs/agent-resources#memory\",\n skills: \"https://agent-native.com/docs/skills-guide\",\n learnings: \"https://agent-native.com/docs/agent-resources#memory\",\n \"remote-agents\":\n \"https://agent-native.com/docs/agent-resources#remote-vs-custom-agents\",\n};\n\nconst RESOURCE_TAB_COPY: Record<\n ResourceView,\n { titleKey: string; descriptionKey: string }\n> = {\n files: {\n titleKey: \"agentResources.files.title\",\n descriptionKey: \"agentResources.files.description\",\n },\n instructions: {\n titleKey: \"agentResources.instructions.title\",\n descriptionKey: \"agentResources.instructions.description\",\n },\n agents: {\n titleKey: \"agentResources.agents.title\",\n descriptionKey: \"agentResources.agents.description\",\n },\n memory: {\n titleKey: \"agentResources.memory.title\",\n descriptionKey: \"agentResources.memory.description\",\n },\n skills: {\n titleKey: \"agentResources.skills.title\",\n descriptionKey: \"agentResources.skills.description\",\n },\n learnings: {\n titleKey: \"agentResources.learnings.title\",\n descriptionKey: \"agentResources.learnings.description\",\n },\n \"remote-agents\": {\n titleKey: \"agentResources.remoteAgents.title\",\n descriptionKey: \"agentResources.remoteAgents.description\",\n },\n};\n\nfunction AgentResourceTab({\n scope,\n view,\n}: AgentPageTabProps & { view: ResourceView }) {\n const t = useT();\n const copy = RESOURCE_TAB_COPY[view];\n const title = t(copy.titleKey);\n return (\n <AgentTabFrame\n title={title}\n description={t(copy.descriptionKey)}\n helpHref={AGENT_RESOURCE_DOCS_HREF[view]}\n helpLabel={t(\"agentResources.openDocs\", { section: title })}\n >\n <div className=\"min-h-[480px]\">\n <ResourcesPanel\n key={`${scope}-${view}`}\n showMcpServers={false}\n resourceFilter={view}\n resourceTreeVariant={view === \"files\" ? \"tree\" : \"collection\"}\n scope=\"personal\"\n />\n </div>\n </AgentTabFrame>\n );\n}\n\nfunction ServerStatus({ server }: { server: McpServer }) {\n if (server.status.state === \"connected\") {\n return (\n <span className=\"text-[11px] text-emerald-600 dark:text-emerald-400\">\n Connected · {server.status.toolCount} tools\n </span>\n );\n }\n if (server.status.state === \"error\") {\n return (\n <span className=\"truncate text-[11px] text-destructive\">\n Connection error\n </span>\n );\n }\n return (\n <span className=\"text-[11px] text-muted-foreground\">Status unknown</span>\n );\n}\n\nfunction ConnectionsTab({ canManageOrg = false }: AgentPageTabProps) {\n const t = useT();\n const serversQuery = useMcpServers();\n const createServer = useCreateMcpServer();\n const deleteServer = useDeleteMcpServer();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedServer, setSelectedServer] = useState<McpServer | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const data = serversQuery.data;\n const hasOrg = Boolean(data?.orgId);\n const canCreateOrgMcp = hasOrg && canManageOrg;\n\n const onCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n if (args.scope === \"org\" && !canCreateOrgMcp) {\n throw new Error(\n \"Only organization admins can add organization MCP servers.\",\n );\n }\n return createServer.mutateAsync(args);\n },\n [canCreateOrgMcp, createServer],\n );\n\n const removeServer = async (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n if (deleteTarget !== key) {\n setDeleteTarget(key);\n return;\n }\n setError(null);\n try {\n await deleteServer.mutateAsync({ id: server.id, scope: server.scope });\n if (\n selectedServer?.id === server.id &&\n selectedServer.scope === server.scope\n ) {\n setSelectedServer(null);\n }\n setDeleteTarget(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n\n const renderServer = (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n const canDelete = server.scope === \"user\" || canManageOrg;\n const selected =\n selectedServer?.id === server.id && selectedServer.scope === server.scope;\n return (\n <div\n key={key}\n className={cn(\n \"group/connection-row py-4 transition-colors first:pt-5 last:pb-5\",\n selected && \"bg-accent/20\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedServer(selected ? null : server)}\n className=\"min-w-0 flex-1 cursor-pointer text-start\"\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n {server.name}\n </span>\n </div>\n <code className=\"mt-1 block truncate text-[11px] text-muted-foreground\">\n {server.url}\n </code>\n <div className=\"mt-2 flex items-center gap-2\">\n <ServerStatus server={server} />\n {server.description && (\n <span className=\"truncate text-[11px] text-muted-foreground/70\">\n {server.description}\n </span>\n )}\n </div>\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={() => void removeServer(server)}\n disabled={deleteServer.isPending}\n className={cn(\n \"cursor-pointer rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive\",\n deleteTarget === key && \"bg-destructive/10 text-destructive\",\n )}\n >\n {deleteTarget === key ? \"Confirm\" : \"Delete\"}\n </button>\n )}\n </div>\n {selected && (\n <div className=\"mt-3 border-t border-border/70 pt-3\">\n <McpServerDetail server={server} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <AgentTabFrame\n title=\"Connections\"\n description=\"Tools and services this agent can reach, grouped by where they are configured.\"\n actions={\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n setDialogOpen(true);\n }}\n className=\"cursor-pointer rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"mcpIntegrations.connect\")}\n </button>\n }\n >\n <section className=\"space-y-4\">\n {error && (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n {error}\n </p>\n )}\n {serversQuery.isLoading ? (\n <TabLoading />\n ) : serversQuery.isError ? (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n Could not load MCP servers.\n </p>\n ) : (\n <div className=\"space-y-6\">\n {[\n { label: \"Personal\", servers: data?.user ?? [] },\n { label: \"Organization\", servers: data?.org ?? [] },\n ].map((section) => (\n <section key={section.label} className=\"space-y-2\">\n <h2 className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground/70\">\n {section.label}\n </h2>\n {section.servers.length > 0 ? (\n <div className=\"divide-y divide-border/60 border-y border-border/60\">\n {section.servers.map(renderServer)}\n </div>\n ) : (\n <AgentEmptyState\n icon={IconPlugConnected}\n title={`No ${section.label.toLowerCase()} connections yet`}\n description={\n section.label === \"Personal\"\n ? \"Connect a service to give the agent access to it.\"\n : \"Organization connections shared with this workspace will appear here.\"\n }\n />\n )}\n </section>\n ))}\n </div>\n )}\n <McpIntegrationDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n defaultScope=\"user\"\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrg}\n onCreateMcpServer={onCreateMcpServer}\n />\n </section>\n </AgentTabFrame>\n );\n}\n\ninterface AccessUrls {\n appName: string;\n appUrl: string;\n mcpUrl: string;\n connectUrl: string;\n agentCardUrl: string;\n}\n\nfunction CopyField({ label, value }: { label: string; value: string }) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1600);\n } catch {\n setCopied(false);\n }\n };\n return (\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/20 p-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70\">\n {label}\n </div>\n <code className=\"mt-1 block truncate text-xs text-foreground\">\n {value}\n </code>\n </div>\n <button\n type=\"button\"\n onClick={() => void copy()}\n className=\"shrink-0 cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n );\n}\n\nfunction AccessTab({\n appName: appNameProp,\n}: AgentPageTabProps & { appName?: string }) {\n const [urls, setUrls] = useState<AccessUrls | null>(null);\n const [agentCardAvailable, setAgentCardAvailable] = useState(false);\n const [activeGuide, setActiveGuide] = useState(MCP_CONNECT_GUIDES[0]?.id);\n\n useEffect(() => {\n const origin = window.location.origin;\n const baseUrl = new URL(appPath(\"/\"), origin).toString().replace(/\\/$/, \"\");\n const hostname = window.location.hostname || \"app\";\n const metaSiteName = document\n .querySelector('meta[property=\"og:site_name\"]')\n ?.getAttribute(\"content\")\n ?.trim();\n const hostnameGuess =\n hostname !== \"localhost\" && hostname !== \"127.0.0.1\"\n ? hostname.split(\".\")[0]\n : \"\";\n const appName =\n appNameProp?.trim() || metaSiteName || hostnameGuess || \"this app\";\n const templateValues = {\n appName,\n appUrl: baseUrl,\n mcpUrl: \"\",\n serverId: `agent-native-${hostname}`,\n } satisfies McpConnectTemplateValues;\n setUrls({\n appName,\n appUrl: baseUrl,\n mcpUrl: interpolateMcpConnectTemplate(\n MCP_CONNECT_MCP_URL_TEMPLATE,\n templateValues,\n ),\n connectUrl: new URL(appPath(\"/mcp/connect\"), origin).toString(),\n agentCardUrl: new URL(\n appPath(\"/.well-known/agent-card.json\"),\n origin,\n ).toString(),\n });\n }, [appNameProp]);\n\n useEffect(() => {\n if (!urls) return;\n let cancelled = false;\n fetch(urls.agentCardUrl)\n .then((response) => {\n if (!cancelled) setAgentCardAvailable(response.ok);\n })\n .catch(() => {\n if (!cancelled) setAgentCardAvailable(false);\n });\n return () => {\n cancelled = true;\n };\n }, [urls]);\n\n const templateValues: McpConnectTemplateValues | null = urls\n ? {\n appName: urls.appName,\n appUrl: urls.appUrl,\n mcpUrl: urls.mcpUrl,\n serverId: `agent-native-${window.location.hostname || \"app\"}`,\n }\n : null;\n const guide =\n MCP_CONNECT_GUIDES.find((item) => item.id === activeGuide) ??\n MCP_CONNECT_GUIDES[0];\n\n return (\n <AgentTabFrame\n title=\"Access\"\n description=\"Choose which external clients can talk to this app's agent.\"\n >\n <div className=\"space-y-6\">\n {urls ? (\n <>\n <CopyField label=\"MCP URL\" value={urls.mcpUrl} />\n {agentCardAvailable && (\n <CopyField label=\"A2A agent card\" value={urls.agentCardUrl} />\n )}\n <section className=\"space-y-3 border-t border-border/70 pt-6\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Client setup\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n These instructions are also available on the full connect\n page.\n </p>\n </div>\n <div\n className=\"flex gap-1 overflow-x-auto border-b border-border pb-2\"\n role=\"tablist\"\n aria-label=\"Choose your AI assistant\"\n >\n {MCP_CONNECT_GUIDES.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.id === guide?.id}\n onClick={() => setActiveGuide(item.id)}\n className={cn(\n \"shrink-0 cursor-pointer rounded-md px-2.5 py-1.5 text-xs font-medium\",\n item.id === guide?.id\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {guide && templateValues && (\n <div className=\"space-y-3 pt-1\" role=\"tabpanel\">\n {guide.steps?.length ? (\n <ol className=\"list-decimal space-y-2 ps-5 text-xs leading-relaxed text-muted-foreground\">\n {guide.steps.map((step) => (\n <li key={step}>\n {interpolateMcpConnectTemplate(step, templateValues)}\n </li>\n ))}\n </ol>\n ) : null}\n {guide.intro && (\n <p className=\"text-xs text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.intro,\n templateValues,\n )}\n </p>\n )}\n {guide.commandTemplate && (\n <CopyField\n label=\"Command\"\n value={interpolateMcpConnectTemplate(\n guide.commandTemplate,\n templateValues,\n )}\n />\n )}\n {guide.configTemplate && (\n <CopyField\n label=\"MCP config\"\n value={interpolateMcpConnectTemplate(\n guide.configTemplate,\n templateValues,\n )}\n />\n )}\n {guide.action?.kind === \"link\" && guide.action.href && (\n <a\n href={guide.action.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {guide.action.label}\n <IconExternalLink className=\"size-3.5\" />\n </a>\n )}\n {guide.note && (\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.note,\n templateValues,\n )}\n </p>\n )}\n </div>\n )}\n </section>\n <section className=\"border-t border-border/70 pt-6\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.title}\n </h3>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.state}. Open the connect page to\n create a token for clients that cannot complete OAuth.\n </p>\n <a\n href={urls.connectUrl}\n className=\"mt-3 inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n Open full connect page\n <IconExternalLink className=\"size-3.5\" />\n </a>\n </section>\n </>\n ) : (\n <TabLoading />\n )}\n </div>\n </AgentTabFrame>\n );\n}\n\nexport interface AgentPageExtraTabContext extends AgentPageTabProps {\n scopeControl: ReactNode;\n}\n\nexport type AgentPageExtraTabFactory = (\n context: AgentPageExtraTabContext,\n) => SettingsTabItem;\n\nexport interface AgentTabsPageProps {\n /**\n * Human-readable app name used in the Access tab's connect instructions\n * (e.g. \"name it Mail\"). Falls back to the `og:site_name` meta tag, then a\n * hostname-derived guess — never `document.title`, which this page owns.\n */\n appName?: string;\n extraTabs?: SettingsTabItem[];\n /** Scoped app-specific tabs that receive the current Manage agent page scope. */\n extraTabFactories?: AgentPageExtraTabFactory[];\n defaultTab?: string;\n className?: string;\n /** Whether to render the Agent page search box. Defaults to true. */\n enableSearch?: boolean;\n searchPlaceholder?: string;\n hiddenTabs?: string[];\n value?: string;\n onValueChange?: (tabId: string) => void;\n}\n\nexport function AgentTabsPage({\n appName,\n extraTabs = [],\n extraTabFactories = [],\n defaultTab = \"files\",\n className,\n enableSearch = true,\n searchPlaceholder = \"Search\",\n hiddenTabs = [],\n value,\n onValueChange,\n}: AgentTabsPageProps) {\n const { data: org } = useOrg();\n const canManageOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const scope: AgentPageScope = \"user\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const normalizedHiddenTabs = useMemo(\n () => new Set(hiddenTabs.map((tab) => normalizeTabId(tab)).filter(Boolean)),\n [hiddenTabs],\n );\n const scopeControl: ReactNode = null;\n const scopedExtraTabs = useMemo(\n () =>\n extraTabFactories.map((factory) =>\n factory({ scope, canManageOrg, scopeControl }),\n ),\n [canManageOrg, extraTabFactories, scope, scopeControl],\n );\n\n const tabs = useMemo<SettingsTabItem[]>(\n () => [\n {\n id: \"files\",\n label: \"Files\",\n icon: IconFolder,\n group: \"resources\",\n keywords: \"workspace plain files documents uploads\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"files\" />\n </Suspense>\n ),\n },\n {\n id: \"instructions\",\n label: \"Instructions\",\n icon: IconChecklist,\n group: \"resources\",\n keywords: \"agents md rules preferences guidance\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"instructions\" />\n </Suspense>\n ),\n },\n {\n id: \"agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n group: \"resources\",\n keywords: \"custom sub agents delegate profiles\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"agents\" />\n </Suspense>\n ),\n },\n {\n id: \"memory\",\n label: \"Memory\",\n icon: IconNotes,\n group: \"resources\",\n keywords: \"long term notes memory index recall\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"memory\" />\n </Suspense>\n ),\n },\n {\n id: \"skills\",\n label: \"Skills\",\n icon: IconBook2,\n group: \"resources\",\n keywords: \"abilities reusable instructions workflows\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"skills\" />\n </Suspense>\n ),\n },\n {\n id: \"learnings\",\n label: \"Learnings\",\n icon: IconHistory,\n group: \"resources\",\n keywords: \"corrections patterns knowledge feedback\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"learnings\" />\n </Suspense>\n ),\n },\n {\n id: \"remote-agents\",\n label: \"Remote agents\",\n icon: IconTopologyRing2,\n group: \"resources\",\n keywords: \"a2a connected remote agents delegation\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"remote-agents\" />\n </Suspense>\n ),\n },\n {\n id: \"snapshots\",\n label: \"Snapshots\",\n icon: IconHistory,\n group: \"agent\",\n keywords: \"context recent loads provenance tokens\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentContextTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"connections\",\n label: \"Connections\",\n icon: IconPlugConnected,\n group: \"agent\",\n keywords: \"mcp servers tools integrations\",\n searchEntries: [\n { id: \"mcp-servers\", label: \"MCP servers\", keywords: \"tools\" },\n ],\n content: <ConnectionsTab scope={scope} canManageOrg={canManageOrg} />,\n },\n {\n id: \"jobs\",\n label: \"Jobs\",\n icon: IconClock,\n group: \"agent\",\n keywords: \"scheduled automations recurring\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentJobsTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"access\",\n label: \"Access\",\n icon: IconShieldLock,\n group: \"agent\",\n keywords: \"external clients oauth a2a exposure\",\n searchEntries: [\n {\n id: \"mcp-connect\",\n label: \"External client setup\",\n keywords: \"oauth connect\",\n },\n {\n id: \"a2a-agent-card\",\n label: \"A2A agent card\",\n keywords: \"agent card\",\n },\n ],\n content: (\n <AccessTab\n scope={scope}\n canManageOrg={canManageOrg}\n appName={appName}\n />\n ),\n },\n ...extraTabs,\n ...scopedExtraTabs,\n ],\n [appName, canManageOrg, extraTabs, scope, scopedExtraTabs],\n );\n const visibleTabs = useMemo(\n () => tabs.filter((tab) => !normalizedHiddenTabs.has(tab.id)),\n [normalizedHiddenTabs, tabs],\n );\n const fallbackTab = visibleTabs.some((tab) => tab.id === defaultTab)\n ? defaultTab\n : (visibleTabs[0]?.id ?? \"context\");\n const [internalTab, setInternalTab] = useState(() => {\n if (typeof window === \"undefined\") return fallbackTab;\n return resolveTabId(visibleTabs, window.location.hash) ?? fallbackTab;\n });\n const isControlled = value !== undefined;\n const activeTab = isControlled ? value : internalTab;\n const selectedTab =\n visibleTabs.find((tab) => tab.id === activeTab) ?? visibleTabs[0];\n const tabGroups = useMemo(() => {\n const groups: Array<{ id: string; tabs: SettingsTabItem[] }> = [];\n for (const tab of visibleTabs) {\n const groupId = tab.group ?? \"agent\";\n const previous = groups.at(-1);\n if (previous?.id === groupId) previous.tabs.push(tab);\n else groups.push({ id: groupId, tabs: [tab] });\n }\n return groups;\n }, [visibleTabs]);\n\n useEffect(() => {\n if (!isControlled && !visibleTabs.some((tab) => tab.id === internalTab)) {\n setInternalTab(fallbackTab);\n }\n }, [fallbackTab, internalTab, isControlled, visibleTabs]);\n\n useEffect(() => {\n if (isControlled) return;\n const onHashChange = () => {\n const next = resolveTabId(visibleTabs, window.location.hash);\n if (next) setInternalTab(next);\n };\n window.addEventListener(\"hashchange\", onHashChange);\n return () => window.removeEventListener(\"hashchange\", onHashChange);\n }, [isControlled, visibleTabs]);\n\n const changeTab = useCallback(\n (tabId: string) => {\n if (!isControlled) setInternalTab(tabId);\n onValueChange?.(tabId);\n },\n [isControlled, onValueChange],\n );\n\n const searchIndex = useMemo(() => {\n const entries: Array<\n SettingsSearchEntry & { tabId: string; haystack: string }\n > = [];\n for (const tab of visibleTabs) {\n entries.push({\n id: `tab:${tab.id}`,\n label: tab.label,\n keywords: tab.keywords,\n tabId: tab.id,\n haystack: `${tab.label} ${tab.keywords ?? \"\"}`.toLowerCase(),\n });\n for (const entry of tab.searchEntries ?? []) {\n entries.push({\n ...entry,\n tabId: entry.tabId ?? tab.id,\n haystack:\n `${entry.label} ${entry.keywords ?? \"\"} ${entry.description ?? \"\"} ${tab.label}`.toLowerCase(),\n });\n }\n }\n return entries;\n }, [visibleTabs]);\n const results = useMemo(() => {\n const terms = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return [];\n return searchIndex\n .filter((entry) => terms.every((term) => entry.haystack.includes(term)))\n .sort((a, b) => a.label.localeCompare(b.label));\n }, [query, searchIndex]);\n\n const selectSearchResult = useCallback(\n (entry: (typeof searchIndex)[number]) => {\n changeTab(entry.tabId);\n setQuery(\"\");\n if (isControlled || typeof window === \"undefined\") return;\n if (entry.hash) {\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}#${entry.hash.replace(/^#/, \"\")}`,\n );\n window.dispatchEvent(new Event(\"hashchange\"));\n } else {\n updateTabHash(entry.tabId);\n }\n },\n [changeTab, isControlled],\n );\n\n return (\n <div\n ref={rootRef}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden bg-background\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col sm:flex-row\">\n <div className=\"flex shrink-0 flex-col gap-2 bg-background p-2 sm:min-h-0 sm:w-56 sm:overflow-y-auto sm:p-3\">\n {enableSearch ? (\n <div className=\"relative sm:mb-1\">\n <IconSearch className=\"pointer-events-none absolute start-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setQuery(\"\");\n if (event.key === \"Enter\" && results[0]) {\n event.preventDefault();\n selectSearchResult(results[0]);\n }\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className=\"h-8 w-full rounded-md border border-border bg-background ps-8 pe-7 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground focus:border-foreground/30 focus:ring-2 focus:ring-accent/40\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={() => setQuery(\"\")}\n aria-label=\"Clear search\"\n className=\"absolute end-1.5 top-1/2 flex size-5 -translate-y-1/2 cursor-pointer items-center justify-center rounded text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n >\n <IconX className=\"size-3.5\" />\n </button>\n )}\n </div>\n ) : null}\n {query.trim() ? (\n <div\n role=\"listbox\"\n aria-label=\"Agent search results\"\n className=\"flex flex-col gap-0.5\"\n >\n {results.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-xs text-muted-foreground\">\n No matching items\n </p>\n ) : (\n results.map((entry) => (\n <button\n key={entry.id}\n type=\"button\"\n role=\"option\"\n onClick={() => selectSearchResult(entry)}\n className=\"flex cursor-pointer items-start gap-2 rounded-md px-2.5 py-2 text-start text-sm text-foreground hover:bg-accent/60\"\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium\">\n {entry.label}\n </span>\n <span className=\"truncate text-[11px] text-muted-foreground\">\n {entry.description ?? entry.tabId}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n ) : (\n <nav\n aria-label=\"Agent sections\"\n role=\"tablist\"\n className=\"flex gap-1 overflow-x-auto sm:flex-col sm:overflow-x-visible\"\n >\n {tabGroups.map((group, groupIndex) => (\n <div\n key={group.id}\n className={cn(\n \"contents sm:block\",\n groupIndex > 0 &&\n \"sm:mt-2 sm:border-t sm:border-border/60 sm:pt-2\",\n )}\n >\n {group.id === \"resources\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent resources\n </div>\n )}\n {group.id === \"agent\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent operations\n </div>\n )}\n <div className=\"contents sm:flex sm:flex-col sm:gap-1\">\n {group.tabs.map((tab) => {\n const Icon = tab.icon as SettingsTabIcon | undefined;\n const selected = tab.id === selectedTab?.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n id={`agent-tab-${tab.id}`}\n role=\"tab\"\n aria-selected={selected}\n aria-controls={`agent-tabpanel-${tab.id}`}\n onClick={() => {\n changeTab(tab.id);\n if (!isControlled) updateTabHash(tab.id);\n }}\n className={cn(\n \"flex min-h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-start text-sm font-medium transition-colors sm:w-full\",\n selected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {Icon ? (\n <Icon\n className={cn(\n \"size-4 shrink-0\",\n selected\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n />\n ) : null}\n <span className=\"truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n )}\n </div>\n <div\n id={`agent-tabpanel-${selectedTab?.id ?? \"context\"}`}\n role=\"tabpanel\"\n aria-labelledby={`agent-tab-${selectedTab?.id ?? \"context\"}`}\n className=\"min-h-0 min-w-0 flex-1 overflow-y-auto p-4 sm:p-6\"\n >\n {selectedTab?.content ?? <EmptySlot label=\"Agent section\" />}\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -9,6 +9,16 @@ declare global {
|
|
|
9
9
|
__AGENT_NATIVE_CONFIG__?: {
|
|
10
10
|
sentryDsn?: string;
|
|
11
11
|
sentryEnvironment?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Hosted Realtime Gateway config. Impersonal (same for every visitor),
|
|
14
|
+
* so it is safe inside the CDN-cached SSR shell — unlike the per-user
|
|
15
|
+
* subscribe token, which is minted client-side after load. Absent when
|
|
16
|
+
* the app uses the in-process (local) transport.
|
|
17
|
+
*/
|
|
18
|
+
realtime?: {
|
|
19
|
+
transport?: string;
|
|
20
|
+
gatewayBaseUrl?: string;
|
|
21
|
+
};
|
|
12
22
|
};
|
|
13
23
|
}
|
|
14
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAChC,uBAAuB,CAAC,EAAE;YACxB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"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"}
|