@agent-native/core 0.90.11 → 0.91.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/docs/content/toolkit-settings.mdx +56 -3
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/agent/run-ownership.ts +29 -1
- package/corpus/core/src/changelog/parse.ts +78 -0
- package/corpus/core/src/chat-threads/schema.ts +43 -0
- package/corpus/core/src/chat-threads/store.ts +144 -12
- package/corpus/core/src/cli/design-connect.ts +53 -9
- package/corpus/core/src/cli/workspace-dev.ts +25 -5
- package/corpus/core/src/client/AgentPanel.tsx +79 -14
- package/corpus/core/src/client/AssistantChat.tsx +359 -425
- package/corpus/core/src/client/analytics-session.ts +70 -0
- package/corpus/core/src/client/analytics.ts +175 -49
- package/corpus/core/src/client/chat/message-components.tsx +22 -2
- package/corpus/core/src/client/components/ui/message-scroller.tsx +131 -0
- package/corpus/core/src/client/conversation/AgentConversation.tsx +63 -41
- package/corpus/core/src/client/error-capture.ts +616 -0
- package/corpus/core/src/client/index.ts +12 -0
- package/corpus/core/src/client/session-replay.ts +57 -7
- package/corpus/core/src/client/settings/SettingsPanel.tsx +123 -1
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +292 -45
- package/corpus/core/src/client/settings/index.ts +1 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +14 -11
- package/corpus/core/src/client/sharing/ShareDialog.tsx +13 -10
- package/corpus/core/src/mcp/builtin-tools.ts +29 -2
- package/corpus/core/src/server/agent-chat-plugin.ts +174 -79
- package/corpus/core/src/server/onboarding-html.ts +28 -16
- package/corpus/core/src/sharing/actions/list-resource-shares.ts +45 -1
- package/corpus/core/src/sharing/actions/share-resource.ts +9 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
- package/corpus/core/src/vite/client.ts +217 -35
- package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +8 -7
- package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +14 -10
- package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +15 -15
- package/corpus/templates/analytics/.agents/skills/cross-source-analysis/SKILL.md +1 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +38 -22
- package/corpus/templates/analytics/.agents/skills/data-programs/SKILL.md +114 -61
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -0
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +7 -7
- package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +1 -0
- package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +1 -1
- package/corpus/templates/analytics/.builder/skills/bigquery/SKILL.md +17 -17
- package/corpus/templates/analytics/.builder/skills/gcloud/SKILL.md +5 -5
- package/corpus/templates/analytics/.builder/skills/github/SKILL.md +7 -7
- package/corpus/templates/analytics/.builder/skills/gong/SKILL.md +12 -12
- package/corpus/templates/analytics/.builder/skills/grafana/SKILL.md +7 -7
- package/corpus/templates/analytics/.builder/skills/sentry/SKILL.md +7 -7
- package/corpus/templates/analytics/.builder/skills/slack/SKILL.md +6 -6
- package/corpus/templates/analytics/.builder/skills/stripe/SKILL.md +7 -7
- package/corpus/templates/analytics/AGENTS.md +47 -2
- package/corpus/templates/analytics/actions/add-status-page-monitor.ts +36 -0
- package/corpus/templates/analytics/actions/capture-test-error.ts +33 -0
- package/corpus/templates/analytics/actions/delete-monitor.ts +24 -0
- package/corpus/templates/analytics/actions/delete-status-page.ts +23 -0
- package/corpus/templates/analytics/actions/get-error-issue.ts +36 -0
- package/corpus/templates/analytics/actions/get-monitor-stats.ts +55 -0
- package/corpus/templates/analytics/actions/get-monitor.ts +27 -0
- package/corpus/templates/analytics/actions/get-public-status-page.ts +41 -0
- package/corpus/templates/analytics/actions/get-status-page.ts +29 -0
- package/corpus/templates/analytics/actions/list-error-issues.ts +40 -0
- package/corpus/templates/analytics/actions/list-monitors.ts +21 -0
- package/corpus/templates/analytics/actions/list-status-pages.ts +21 -0
- package/corpus/templates/analytics/actions/match-error-issues.ts +51 -0
- package/corpus/templates/analytics/actions/navigate.ts +58 -4
- package/corpus/templates/analytics/actions/remove-status-page-monitor.ts +22 -0
- package/corpus/templates/analytics/actions/reorder-status-page-monitors.ts +25 -0
- package/corpus/templates/analytics/actions/resolve-error-issue.ts +38 -0
- package/corpus/templates/analytics/actions/run-monitor-check.ts +23 -0
- package/corpus/templates/analytics/actions/save-analysis.ts +1 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +145 -0
- package/corpus/templates/analytics/actions/save-status-page.ts +47 -0
- package/corpus/templates/analytics/actions/view-screen.ts +212 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +10 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +134 -39
- package/corpus/templates/analytics/app/components/monitoring/PublicStatusView.tsx +351 -0
- package/corpus/templates/analytics/app/components/monitoring/ResponseTimeChart.tsx +174 -0
- package/corpus/templates/analytics/app/components/monitoring/UptimeStatCards.tsx +85 -0
- package/corpus/templates/analytics/app/components/monitoring/UptimeTimelineBars.tsx +106 -0
- package/corpus/templates/analytics/app/components/monitoring/chart-utils.ts +101 -0
- package/corpus/templates/analytics/app/components/monitoring/index.ts +28 -0
- package/corpus/templates/analytics/app/components/monitoring/types.ts +42 -0
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +34 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -0
- package/corpus/templates/analytics/app/i18n-data.ts +33 -0
- package/corpus/templates/analytics/app/pages/DataSources.tsx +28 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +77 -9
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +3 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +7 -0
- package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +205 -0
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +100 -0
- package/corpus/templates/analytics/app/pages/monitoring/UptimePanel.tsx +475 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +372 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +360 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/Sparkline.tsx +55 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +106 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +75 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/utils.ts +132 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorDetail.tsx +535 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +1026 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorList.tsx +311 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +235 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPageEditor.tsx +661 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPagesView.tsx +355 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/i18n.ts +106 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/slug.ts +24 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/types.ts +20 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/status-summary.ts +87 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +161 -0
- package/corpus/templates/analytics/app/pages/monitoring/uptime/utils.ts +210 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +76 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +74 -9
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +197 -20
- package/corpus/templates/analytics/app/root.tsx +33 -1
- package/corpus/templates/analytics/app/routes/monitoring._index.tsx +10 -0
- package/corpus/templates/analytics/app/routes/status.$slug.tsx +118 -0
- package/corpus/templates/analytics/changelog/2026-07-08-add-uptime-monitors-that-ping-your-urls-and-alert-you-when-t.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-analytics-chats-keep-large-data-dictionaries-compact-so-prov.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-create-public-status-pages-that-share-the-live-health-of-cho.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-extension-panels-use-clearer-open-copy.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-error-capture.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-fixed-single-panel-dashboard-drags-so-they-no-longer-rewrite.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-jump-straight-from-an-error-in-a-session-recording-to-its-fu.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-monitor-detail-and-list-now-show-colorful-uptime-timelines-r.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-pinned-ask-chats-now-show-a-pin-icon-in-the-sidebar.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-publish-a-public-uptime-status-page-with-colorful-uptime-tim.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sessions-now-hide-visitor-emails-in-demo-mode-and-show-clean.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +5 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +5 -0
- package/corpus/templates/analytics/changelog/2026-07-08-the-uptime-monitor-list-now-has-a-current-status-overview-wi.md +6 -0
- package/corpus/templates/analytics/docs/error-capture.md +172 -0
- package/corpus/templates/analytics/docs/uptime-monitoring.md +150 -0
- package/corpus/templates/analytics/server/db/schema-errors.ts +150 -0
- package/corpus/templates/analytics/server/db/schema-monitoring.ts +177 -0
- package/corpus/templates/analytics/server/db/schema.ts +6 -0
- package/corpus/templates/analytics/server/jobs/uptime-monitors.ts +123 -0
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +41 -0
- package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +55 -12
- package/corpus/templates/analytics/server/lib/error-capture.ts +1331 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +47 -1
- package/corpus/templates/analytics/server/lib/monitor-stats.ts +494 -0
- package/corpus/templates/analytics/server/lib/status-pages.ts +798 -0
- package/corpus/templates/analytics/server/lib/uptime-monitors.ts +1665 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -37
- package/corpus/templates/analytics/server/plugins/auth.ts +11 -1
- package/corpus/templates/analytics/server/plugins/db.ts +408 -0
- package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +63 -0
- package/corpus/templates/assets/app/routes/_index.tsx +1 -1
- package/corpus/templates/assets/app/routes/settings.tsx +22 -1
- package/corpus/templates/assets/changelog/2026-07-08-recent-drafts-keep-comfortable-side-padding.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/brain/app/routes/settings.tsx +43 -5
- package/corpus/templates/brain/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +44 -6
- package/corpus/templates/calendar/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/chat/app/routes/settings.tsx +16 -1
- package/corpus/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +79 -37
- package/corpus/templates/clips/app/components/player/player-controls.tsx +35 -0
- package/corpus/templates/clips/app/components/player/video-player.tsx +162 -18
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +63 -6
- package/corpus/templates/clips/app/routes/record.tsx +18 -1
- package/corpus/templates/clips/changelog/2026-07-07-shared-clips-start-playback-reliably-from-the-first-play-click.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-camera-and-microphone-menus-now-show-which-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-copies-new-clip-links-after-saving.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-recordings-now-continue-after-granting-came.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-mobile-shared-clips-now-have-loom-style-tap-and-skip-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-recordings-and-uploads-copy-links-after-saving.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-settings-are-cleaner-searchable-and-collapse-s3-with-builder.md +5 -0
- package/corpus/templates/clips/changelog/2026-07-08-transcripts-are-more-reliable-for-longer-desktop-recordings-.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +162 -13
- package/corpus/templates/clips/chrome-extension/src/content-script.ts +14 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +36 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +99 -25
- package/corpus/templates/clips/chrome-extension/src/permission.ts +63 -14
- package/corpus/templates/clips/chrome-extension/src/popup.ts +123 -23
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +47 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +33 -4
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +214 -29
- package/corpus/templates/content/actions/attach-content-database-source.ts +3 -0
- package/corpus/templates/content/actions/change-content-database-source-role.ts +1 -0
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +42 -32
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +352 -81
- package/corpus/templates/content/app/components/editor/database/settings.tsx +49 -24
- package/corpus/templates/content/app/routes/_app.settings.tsx +19 -1
- package/corpus/templates/content/changelog/2026-07-07-builder-source-tag-fields-now-import-as-multi-select.md +6 -0
- package/corpus/templates/content/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/content/shared/api.ts +3 -0
- package/corpus/templates/content/shared/properties.ts +42 -0
- package/corpus/templates/design/AGENTS.md +9 -0
- package/corpus/templates/design/actions/generate-design.ts +3 -0
- package/corpus/templates/design/actions/get-design-system.ts +147 -1
- package/corpus/templates/design/actions/request-localhost-write-consent.ts +141 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +13 -19
- package/corpus/templates/design/app/routes/settings.tsx +16 -1
- package/corpus/templates/design/changelog/2026-07-08-design-generation-now-follows-hydrated-builder-design-system.md +6 -0
- package/corpus/templates/design/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/design/server/lib/verify-write-grant.ts +4 -2
- package/corpus/templates/dispatch/app/routes/settings.tsx +23 -2
- package/corpus/templates/dispatch/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/forms/app/routes/_app.settings.tsx +16 -1
- package/corpus/templates/forms/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/macros/app/routes/settings.tsx +16 -1
- package/corpus/templates/macros/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +1 -1
- package/corpus/templates/mail/app/components/settings/SnippetsSection.tsx +1 -1
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +123 -105
- package/corpus/templates/mail/changelog/2026-07-08-settings-redesigned-with-a-consistent-searchable-layout.md +5 -0
- package/corpus/templates/plan/app/routes/settings.tsx +23 -2
- package/corpus/templates/plan/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/corpus/templates/slides/actions/add-slide.ts +1 -0
- package/corpus/templates/slides/actions/get-design-system.ts +147 -1
- package/corpus/templates/slides/app/pages/Index.tsx +46 -1
- package/corpus/templates/slides/app/routes/settings.tsx +16 -1
- package/corpus/templates/slides/changelog/2026-07-08-deck-generation-now-follows-hydrated-builder-design-system-g.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
- package/dist/agent/run-ownership.d.ts +6 -0
- package/dist/agent/run-ownership.d.ts.map +1 -1
- package/dist/agent/run-ownership.js +11 -1
- package/dist/agent/run-ownership.js.map +1 -1
- package/dist/changelog/parse.d.ts +7 -0
- package/dist/changelog/parse.d.ts.map +1 -1
- package/dist/changelog/parse.js +64 -0
- package/dist/changelog/parse.js.map +1 -1
- package/dist/chat-threads/schema.d.ts +445 -0
- package/dist/chat-threads/schema.d.ts.map +1 -0
- package/dist/chat-threads/schema.js +39 -0
- package/dist/chat-threads/schema.js.map +1 -0
- package/dist/chat-threads/store.d.ts +12 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +99 -10
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +40 -10
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +20 -5
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +35 -7
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +105 -183
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/analytics-session.d.ts +3 -0
- package/dist/client/analytics-session.d.ts.map +1 -0
- package/dist/client/analytics-session.js +66 -0
- package/dist/client/analytics-session.js.map +1 -0
- package/dist/client/analytics.d.ts +32 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +116 -46
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +2 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +16 -6
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/components/ui/message-scroller.d.ts +16 -0
- package/dist/client/components/ui/message-scroller.d.ts.map +1 -0
- package/dist/client/components/ui/message-scroller.js +25 -0
- package/dist/client/components/ui/message-scroller.js.map +1 -0
- package/dist/client/conversation/AgentConversation.d.ts +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +3 -8
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/error-capture.d.ts +99 -0
- package/dist/client/error-capture.d.ts.map +1 -0
- package/dist/client/error-capture.js +437 -0
- package/dist/client/error-capture.js.map +1 -0
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/session-replay.d.ts +22 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +45 -4
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +100 -5
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +49 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +131 -19
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -1
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +13 -8
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +12 -7
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +21 -2
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/observability/routes.d.ts +1 -1
- package/dist/org/schema.d.ts +15 -15
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +109 -73
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +28 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.js +30 -1
- package/dist/sharing/actions/list-resource-shares.js.map +1 -1
- package/dist/sharing/actions/share-resource.js +6 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
- package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +192 -30
- package/dist/vite/client.js.map +1 -1
- package/docs/content/toolkit-settings.mdx +56 -3
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
- package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
|
@@ -14,6 +14,9 @@ const enUS = {
|
|
|
14
14
|
dataSources: "Data Sources",
|
|
15
15
|
dataDictionary: "Data Dictionary",
|
|
16
16
|
sessions: "Sessions",
|
|
17
|
+
monitoring: "Monitoring",
|
|
18
|
+
monitoringUptime: "Uptime",
|
|
19
|
+
monitoringErrors: "Errors",
|
|
17
20
|
agents: "Agents",
|
|
18
21
|
templateCatalog: "Catalog",
|
|
19
22
|
dashboards: "Dashboards",
|
|
@@ -38,6 +41,8 @@ const enUS = {
|
|
|
38
41
|
sidebar: {
|
|
39
42
|
collapseSidebar: "Collapse sidebar",
|
|
40
43
|
expandSidebar: "Expand sidebar",
|
|
44
|
+
collapseAsk: "Collapse Ask",
|
|
45
|
+
expandAsk: "Expand Ask",
|
|
41
46
|
collapseDashboards: "Collapse dashboards",
|
|
42
47
|
expandDashboards: "Expand dashboards",
|
|
43
48
|
collapseAnalyses: "Collapse analyses",
|
|
@@ -347,6 +352,7 @@ const enUS = {
|
|
|
347
352
|
dataDictionary: "Data Dictionary - Analytics",
|
|
348
353
|
dataSources: "Data Sources - Analytics",
|
|
349
354
|
sessions: "Sessions - Analytics",
|
|
355
|
+
monitoring: "Monitoring - Analytics",
|
|
350
356
|
agents: "Agents - Analytics",
|
|
351
357
|
session: "Session Replay - Analytics",
|
|
352
358
|
tool: "Tool - Analytics",
|
|
@@ -3704,6 +3710,8 @@ export const messagesByLocale = {
|
|
|
3704
3710
|
sidebar: {
|
|
3705
3711
|
collapseSidebar: "折叠侧边栏",
|
|
3706
3712
|
expandSidebar: "展开侧边栏",
|
|
3713
|
+
collapseAsk: "收起提问",
|
|
3714
|
+
expandAsk: "展开提问",
|
|
3707
3715
|
collapseDashboards: "收起仪表板",
|
|
3708
3716
|
expandDashboards: "展开仪表板",
|
|
3709
3717
|
collapseAnalyses: "收起分析",
|
|
@@ -3906,6 +3914,8 @@ export const messagesByLocale = {
|
|
|
3906
3914
|
sidebar: {
|
|
3907
3915
|
collapseSidebar: "Contraer barra lateral",
|
|
3908
3916
|
expandSidebar: "Expandir barra lateral",
|
|
3917
|
+
collapseAsk: "Contraer Ask",
|
|
3918
|
+
expandAsk: "Expandir Ask",
|
|
3909
3919
|
collapseDashboards: "Contraer paneles",
|
|
3910
3920
|
expandDashboards: "Expandir paneles",
|
|
3911
3921
|
collapseAnalyses: "Contraer análisis",
|
|
@@ -4119,6 +4129,8 @@ export const messagesByLocale = {
|
|
|
4119
4129
|
sidebar: {
|
|
4120
4130
|
collapseSidebar: "Réduire la barre latérale",
|
|
4121
4131
|
expandSidebar: "Développer la barre latérale",
|
|
4132
|
+
collapseAsk: "Réduire Ask",
|
|
4133
|
+
expandAsk: "Développer Ask",
|
|
4122
4134
|
collapseDashboards: "Réduire les tableaux de bord",
|
|
4123
4135
|
expandDashboards: "Développer les tableaux de bord",
|
|
4124
4136
|
collapseAnalyses: "Réduire les analyses",
|
|
@@ -4338,6 +4350,8 @@ export const messagesByLocale = {
|
|
|
4338
4350
|
sidebar: {
|
|
4339
4351
|
collapseSidebar: "Seitenleiste einklappen",
|
|
4340
4352
|
expandSidebar: "Seitenleiste erweitern",
|
|
4353
|
+
collapseAsk: "Ask einklappen",
|
|
4354
|
+
expandAsk: "Ask ausklappen",
|
|
4341
4355
|
collapseDashboards: "Dashboards einklappen",
|
|
4342
4356
|
expandDashboards: "Dashboards ausklappen",
|
|
4343
4357
|
collapseAnalyses: "Analysen einklappen",
|
|
@@ -4557,6 +4571,8 @@ export const messagesByLocale = {
|
|
|
4557
4571
|
sidebar: {
|
|
4558
4572
|
collapseSidebar: "サイドバーを折りたたむ",
|
|
4559
4573
|
expandSidebar: "サイドバーを展開",
|
|
4574
|
+
collapseAsk: "Ask を折りたたむ",
|
|
4575
|
+
expandAsk: "Ask を展開",
|
|
4560
4576
|
collapseDashboards: "ダッシュボードを折りたたむ",
|
|
4561
4577
|
expandDashboards: "ダッシュボードを展開",
|
|
4562
4578
|
collapseAnalyses: "分析を折りたたむ",
|
|
@@ -4769,6 +4785,8 @@ export const messagesByLocale = {
|
|
|
4769
4785
|
sidebar: {
|
|
4770
4786
|
collapseSidebar: "사이드바 접기",
|
|
4771
4787
|
expandSidebar: "사이드바 펼치기",
|
|
4788
|
+
collapseAsk: "Ask 접기",
|
|
4789
|
+
expandAsk: "Ask 펼치기",
|
|
4772
4790
|
collapseDashboards: "대시보드 접기",
|
|
4773
4791
|
expandDashboards: "대시보드 펼치기",
|
|
4774
4792
|
collapseAnalyses: "분석 접기",
|
|
@@ -4981,6 +4999,8 @@ export const messagesByLocale = {
|
|
|
4981
4999
|
sidebar: {
|
|
4982
5000
|
collapseSidebar: "Recolher barra lateral",
|
|
4983
5001
|
expandSidebar: "Expandir barra lateral",
|
|
5002
|
+
collapseAsk: "Recolher Ask",
|
|
5003
|
+
expandAsk: "Expandir Ask",
|
|
4984
5004
|
collapseDashboards: "Recolher dashboards",
|
|
4985
5005
|
expandDashboards: "Expandir dashboards",
|
|
4986
5006
|
collapseAnalyses: "Recolher análises",
|
|
@@ -5200,6 +5220,8 @@ export const messagesByLocale = {
|
|
|
5200
5220
|
sidebar: {
|
|
5201
5221
|
collapseSidebar: "साइडबार समेटें",
|
|
5202
5222
|
expandSidebar: "साइडबार फैलाएं",
|
|
5223
|
+
collapseAsk: "Ask समेटें",
|
|
5224
|
+
expandAsk: "Ask फैलाएं",
|
|
5203
5225
|
collapseDashboards: "डैशबोर्ड समेटें",
|
|
5204
5226
|
expandDashboards: "डैशबोर्ड फैलाएं",
|
|
5205
5227
|
collapseAnalyses: "विश्लेषण समेटें",
|
|
@@ -5409,6 +5431,8 @@ export const messagesByLocale = {
|
|
|
5409
5431
|
sidebar: {
|
|
5410
5432
|
collapseSidebar: "طي الشريط الجانبي",
|
|
5411
5433
|
expandSidebar: "توسيع الشريط الجانبي",
|
|
5434
|
+
collapseAsk: "طي Ask",
|
|
5435
|
+
expandAsk: "توسيع Ask",
|
|
5412
5436
|
collapseDashboards: "طي لوحات المعلومات",
|
|
5413
5437
|
expandDashboards: "توسيع لوحات المعلومات",
|
|
5414
5438
|
collapseAnalyses: "طي التحليلات",
|
|
@@ -5701,6 +5725,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
5701
5725
|
dashboard: "仪表板 - Analytics",
|
|
5702
5726
|
dataDictionary: "数据字典 - Analytics",
|
|
5703
5727
|
dataSources: "数据源 - Analytics",
|
|
5728
|
+
monitoring: "监控 - Analytics",
|
|
5704
5729
|
agents: "代理 - Analytics",
|
|
5705
5730
|
extensions: "扩展 - Analytics",
|
|
5706
5731
|
notFound: "未找到 - Analytics",
|
|
@@ -5910,6 +5935,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
5910
5935
|
dashboard: "Panel de control - Analytics",
|
|
5911
5936
|
dataDictionary: "Diccionario de datos - Analytics",
|
|
5912
5937
|
dataSources: "Fuentes de datos - Analytics",
|
|
5938
|
+
monitoring: "Monitorización - Analytics",
|
|
5913
5939
|
agents: "Agentes - Analytics",
|
|
5914
5940
|
extensions: "Extensiones - Analytics",
|
|
5915
5941
|
notFound: "No encontrado - Analytics",
|
|
@@ -6124,6 +6150,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6124
6150
|
dashboard: "Tableau de bord - Analytics",
|
|
6125
6151
|
dataDictionary: "Dictionnaire de données - Analytics",
|
|
6126
6152
|
dataSources: "Sources de données - Analytics",
|
|
6153
|
+
monitoring: "Surveillance - Analytics",
|
|
6127
6154
|
agents: "Agents - Analytique",
|
|
6128
6155
|
extensions: "Extensions-Analytics",
|
|
6129
6156
|
notFound: "Introuvable - Analytics",
|
|
@@ -6339,6 +6366,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6339
6366
|
dashboard: "Dashboard – Analytics",
|
|
6340
6367
|
dataDictionary: "Datenwörterbuch – Analytics",
|
|
6341
6368
|
dataSources: "Datenquellen – Analytics",
|
|
6369
|
+
monitoring: "Überwachung – Analytics",
|
|
6342
6370
|
agents: "Agenten – Analytics",
|
|
6343
6371
|
extensions: "Erweiterungen – Analytics",
|
|
6344
6372
|
notFound: "Nicht gefunden – Analytics",
|
|
@@ -6549,6 +6577,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6549
6577
|
dashboard: "ダッシュボード - Analytics",
|
|
6550
6578
|
dataDictionary: "データディクショナリ - Analytics",
|
|
6551
6579
|
dataSources: "データソース - Analytics",
|
|
6580
|
+
monitoring: "監視 - Analytics",
|
|
6552
6581
|
agents: "エージェント - Analytics",
|
|
6553
6582
|
extensions: "拡張機能 - Analytics",
|
|
6554
6583
|
notFound: "見つかりません - Analytics",
|
|
@@ -6758,6 +6787,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6758
6787
|
dashboard: "대시보드 - Analytics",
|
|
6759
6788
|
dataDictionary: "데이터 사전 - Analytics",
|
|
6760
6789
|
dataSources: "데이터 소스 - Analytics",
|
|
6790
|
+
monitoring: "모니터링 - Analytics",
|
|
6761
6791
|
agents: "에이전트 - Analytics",
|
|
6762
6792
|
extensions: "확장 - Analytics",
|
|
6763
6793
|
notFound: "찾을 수 없음 - Analytics",
|
|
@@ -6971,6 +7001,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
6971
7001
|
dashboard: "Painel - Analytics",
|
|
6972
7002
|
dataDictionary: "Dicionário de Dados - Analytics",
|
|
6973
7003
|
dataSources: "Fontes de dados - Analytics",
|
|
7004
|
+
monitoring: "Monitoramento - Analytics",
|
|
6974
7005
|
agents: "Agentes - Analytics",
|
|
6975
7006
|
extensions: "Extensões - Analytics",
|
|
6976
7007
|
notFound: "Não encontrado - Analytics",
|
|
@@ -7180,6 +7211,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7180
7211
|
dashboard: "डैशबोर्ड - Analytics",
|
|
7181
7212
|
dataDictionary: "डेटा डिक्शनरी - Analytics",
|
|
7182
7213
|
dataSources: "डेटा स्रोत - Analytics",
|
|
7214
|
+
monitoring: "मॉनिटरिंग - Analytics",
|
|
7183
7215
|
agents: "एजेंट - Analytics",
|
|
7184
7216
|
extensions: "एक्सटेंशन - Analytics",
|
|
7185
7217
|
notFound: "नहीं मिला - Analytics",
|
|
@@ -7388,6 +7420,7 @@ const translatedAnalyticsDebtTranslations = {
|
|
|
7388
7420
|
dashboard: "لوحة القيادة - Analytics",
|
|
7389
7421
|
dataDictionary: "قاموس البيانات - Analytics",
|
|
7390
7422
|
dataSources: "مصادر البيانات - Analytics",
|
|
7423
|
+
monitoring: "المراقبة - Analytics",
|
|
7391
7424
|
agents: "الوكلاء - Analytics",
|
|
7392
7425
|
extensions: "Extensions - Analytics",
|
|
7393
7426
|
notFound: "Not Found - Analytics",
|
|
@@ -1440,6 +1440,34 @@ function FirstPartyAnalyticsCard() {
|
|
|
1440
1440
|
</div>
|
|
1441
1441
|
</div>
|
|
1442
1442
|
|
|
1443
|
+
{/* Error capture note — the analytics SDK also captures uncaught
|
|
1444
|
+
exceptions and links them to session replays. Static English
|
|
1445
|
+
copy because shared i18n is owned elsewhere. */}
|
|
1446
|
+
<div className="rounded-md border border-border/50 bg-muted/20 p-3 text-xs">
|
|
1447
|
+
<div className="font-medium text-foreground">
|
|
1448
|
+
Error capture{/* i18n-ignore static SDK docs label */}
|
|
1449
|
+
</div>
|
|
1450
|
+
<p className="mt-1 text-muted-foreground">
|
|
1451
|
+
Once a public key is set, the browser SDK automatically captures
|
|
1452
|
+
uncaught exceptions and unhandled promise rejections, and
|
|
1453
|
+
exposes a Sentry-style{" "}
|
|
1454
|
+
<code className="font-mono">captureException()</code> /{" "}
|
|
1455
|
+
<code className="font-mono">captureMessage()</code> API. Errors
|
|
1456
|
+
{/* i18n-ignore static SDK docs copy */} are grouped into issues
|
|
1457
|
+
under Monitoring → Errors and linked to the session replay where
|
|
1458
|
+
each one happened.
|
|
1459
|
+
</p>
|
|
1460
|
+
<a
|
|
1461
|
+
href="https://www.agent-native.com/docs/tracking#error-capture"
|
|
1462
|
+
target="_blank"
|
|
1463
|
+
rel="noreferrer"
|
|
1464
|
+
className="mt-2 inline-flex items-center gap-1 font-medium text-primary hover:underline"
|
|
1465
|
+
>
|
|
1466
|
+
Error capture docs{/* i18n-ignore static SDK docs link */}
|
|
1467
|
+
<IconExternalLink className="h-3 w-3" />
|
|
1468
|
+
</a>
|
|
1469
|
+
</div>
|
|
1470
|
+
|
|
1443
1471
|
<div className="data-source-inline-form">
|
|
1444
1472
|
<input
|
|
1445
1473
|
value={name}
|
|
@@ -7,9 +7,12 @@ import {
|
|
|
7
7
|
useBuilderConnectFlow,
|
|
8
8
|
useBuilderStatus,
|
|
9
9
|
useT,
|
|
10
|
+
type SettingsSearchEntry,
|
|
11
|
+
type SettingsTabItem,
|
|
10
12
|
} from "@agent-native/core/client";
|
|
11
13
|
import { TeamPage } from "@agent-native/core/client/org";
|
|
12
14
|
import {
|
|
15
|
+
IconBell,
|
|
13
16
|
IconCheck,
|
|
14
17
|
IconChevronDown,
|
|
15
18
|
IconCloud,
|
|
@@ -18,7 +21,7 @@ import {
|
|
|
18
21
|
IconLoader2,
|
|
19
22
|
IconServer,
|
|
20
23
|
} from "@tabler/icons-react";
|
|
21
|
-
import { useState } from "react";
|
|
24
|
+
import { useMemo, useState } from "react";
|
|
22
25
|
import { Link } from "react-router";
|
|
23
26
|
import { toast } from "sonner";
|
|
24
27
|
|
|
@@ -188,14 +191,75 @@ export default function Settings() {
|
|
|
188
191
|
}
|
|
189
192
|
}
|
|
190
193
|
|
|
194
|
+
const extraTabs = useMemo<SettingsTabItem[]>(
|
|
195
|
+
() => [
|
|
196
|
+
{
|
|
197
|
+
id: "alerts",
|
|
198
|
+
label: t("settings.alertsTitle"),
|
|
199
|
+
icon: IconBell,
|
|
200
|
+
keywords: "alerts rules notifications thresholds triggers monitoring",
|
|
201
|
+
content: (
|
|
202
|
+
<div className="mx-auto w-full max-w-3xl">
|
|
203
|
+
<AlertRulesSettingsCard />
|
|
204
|
+
</div>
|
|
205
|
+
),
|
|
206
|
+
},
|
|
207
|
+
...agentSettingsTabs,
|
|
208
|
+
],
|
|
209
|
+
[agentSettingsTabs, t],
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
|
|
213
|
+
() => [
|
|
214
|
+
{
|
|
215
|
+
id: "analytics-account",
|
|
216
|
+
label: t("settings.account"),
|
|
217
|
+
keywords: "profile email signed in identity",
|
|
218
|
+
hash: "account",
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
id: "analytics-credentials",
|
|
222
|
+
label: t("settings.credentials"),
|
|
223
|
+
keywords: "data sources api keys manage credentials",
|
|
224
|
+
hash: "credentials",
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
id: "analytics-replay-storage",
|
|
228
|
+
label: t("settings.replayStorage"),
|
|
229
|
+
keywords: "storage s3 builder replay bucket cloud",
|
|
230
|
+
hash: "replay-storage",
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: "analytics-dashboard-templates",
|
|
234
|
+
label: t("settings.dashboardTemplates"),
|
|
235
|
+
keywords: "templates catalog dashboards",
|
|
236
|
+
hash: "dashboard-templates",
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
id: "analytics-language",
|
|
240
|
+
label: t("settings.languageTitle"),
|
|
241
|
+
keywords: "language locale translation i18n",
|
|
242
|
+
hash: "language",
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: "analytics-about",
|
|
246
|
+
label: t("settings.about"),
|
|
247
|
+
keywords: "about version info usage",
|
|
248
|
+
hash: "about",
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
[t],
|
|
252
|
+
);
|
|
253
|
+
|
|
191
254
|
return (
|
|
192
255
|
<SettingsTabsPage
|
|
193
256
|
teamLabel={t("navigation.team")}
|
|
194
257
|
whatsNewLabel={t("root.whatsNew")}
|
|
195
|
-
extraTabs={
|
|
258
|
+
extraTabs={extraTabs}
|
|
259
|
+
generalSearchEntries={generalSearchEntries}
|
|
196
260
|
general={
|
|
197
261
|
<div className="mx-auto w-full max-w-2xl space-y-6">
|
|
198
|
-
<Card className="bg-card border-border/50">
|
|
262
|
+
<Card id="account" className="bg-card border-border/50 scroll-mt-16">
|
|
199
263
|
<CardHeader>
|
|
200
264
|
<CardTitle className="text-base">
|
|
201
265
|
{t("settings.account")}
|
|
@@ -213,7 +277,10 @@ export default function Settings() {
|
|
|
213
277
|
</CardContent>
|
|
214
278
|
</Card>
|
|
215
279
|
|
|
216
|
-
<Card
|
|
280
|
+
<Card
|
|
281
|
+
id="credentials"
|
|
282
|
+
className="bg-card border-border/50 scroll-mt-16"
|
|
283
|
+
>
|
|
217
284
|
<CardHeader>
|
|
218
285
|
<CardTitle className="text-base">
|
|
219
286
|
{t("settings.credentials")}
|
|
@@ -403,7 +470,10 @@ export default function Settings() {
|
|
|
403
470
|
</CardContent>
|
|
404
471
|
</Card>
|
|
405
472
|
|
|
406
|
-
<Card
|
|
473
|
+
<Card
|
|
474
|
+
id="dashboard-templates"
|
|
475
|
+
className="bg-card border-border/50 scroll-mt-16"
|
|
476
|
+
>
|
|
407
477
|
<CardHeader>
|
|
408
478
|
<CardTitle className="text-base">
|
|
409
479
|
{t("settings.dashboardTemplates")}
|
|
@@ -421,9 +491,7 @@ export default function Settings() {
|
|
|
421
491
|
</CardContent>
|
|
422
492
|
</Card>
|
|
423
493
|
|
|
424
|
-
<
|
|
425
|
-
|
|
426
|
-
<Card className="bg-card border-border/50">
|
|
494
|
+
<Card id="language" className="bg-card border-border/50 scroll-mt-16">
|
|
427
495
|
<CardHeader>
|
|
428
496
|
<CardTitle className="text-base">
|
|
429
497
|
{t("settings.languageTitle")}
|
|
@@ -435,7 +503,7 @@ export default function Settings() {
|
|
|
435
503
|
</CardContent>
|
|
436
504
|
</Card>
|
|
437
505
|
|
|
438
|
-
<Card className="bg-card border-border/50">
|
|
506
|
+
<Card id="about" className="bg-card border-border/50 scroll-mt-16">
|
|
439
507
|
<CardHeader>
|
|
440
508
|
<CardTitle className="text-base">{t("settings.about")}</CardTitle>
|
|
441
509
|
</CardHeader>
|
|
@@ -296,8 +296,8 @@ export function SqlChartCard({
|
|
|
296
296
|
|
|
297
297
|
// Extension panels render their sandboxed iframe full-bleed with no card chrome
|
|
298
298
|
// or title — the extension owns its own UI. All viewers get the read-only
|
|
299
|
-
// actions (full screen, refresh, open extension); editable
|
|
300
|
-
// delete and drag.
|
|
299
|
+
// actions (full screen, refresh, open embedded extension); editable
|
|
300
|
+
// dashboards also get delete and drag.
|
|
301
301
|
if (panel.chartType === "extension") {
|
|
302
302
|
const extensionId = (panel.config as Record<string, unknown> | undefined)
|
|
303
303
|
?.extensionId as string | undefined;
|
|
@@ -349,7 +349,7 @@ export function SqlChartCard({
|
|
|
349
349
|
}
|
|
350
350
|
>
|
|
351
351
|
<IconExternalLink className="h-4 w-4 mr-2" />
|
|
352
|
-
Open extension {/* i18n-ignore */}
|
|
352
|
+
Open embedded extension {/* i18n-ignore */}
|
|
353
353
|
</DropdownMenuItem>
|
|
354
354
|
) : null}
|
|
355
355
|
<DropdownMenuSeparator />
|
|
@@ -483,6 +483,13 @@ export function movePanelToDropSlot(
|
|
|
483
483
|
) {
|
|
484
484
|
rowIndex -= 1;
|
|
485
485
|
}
|
|
486
|
+
if (
|
|
487
|
+
sourceGroupKey === slot.groupKey &&
|
|
488
|
+
sourceRowWasSingle &&
|
|
489
|
+
sourceRowIndex === rowIndex
|
|
490
|
+
) {
|
|
491
|
+
return panels;
|
|
492
|
+
}
|
|
486
493
|
targetGroup.rows.splice(Math.max(0, rowIndex), 0, {
|
|
487
494
|
key: movingPanel.id,
|
|
488
495
|
panels: [movingPanel],
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error capture panel — OWNED BY THE ERROR CAPTURE FEATURE.
|
|
3
|
+
*
|
|
4
|
+
* Sentry-style exception triage below the Monitoring tab bar. The issue list
|
|
5
|
+
* and per-issue detail are switched via the `?issue=<id>` query param (shareable
|
|
6
|
+
* + agent-deep-linkable) and the selection is mirrored into `application_state`
|
|
7
|
+
* so the agent knows which error the user is looking at. Data flows through the
|
|
8
|
+
* error-capture actions; `useChangeVersions(["error-issues"])` keeps the UI
|
|
9
|
+
* fresh as new captures and agent edits land.
|
|
10
|
+
*/
|
|
11
|
+
import {
|
|
12
|
+
setClientAppState,
|
|
13
|
+
useActionMutation,
|
|
14
|
+
useActionQuery,
|
|
15
|
+
useChangeVersions,
|
|
16
|
+
} from "@agent-native/core/client";
|
|
17
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
18
|
+
import { useEffect, useMemo, useState } from "react";
|
|
19
|
+
import { useSearchParams } from "react-router";
|
|
20
|
+
import { toast } from "sonner";
|
|
21
|
+
|
|
22
|
+
import { fmt, useErrorsT } from "./errors/i18n";
|
|
23
|
+
import { IssueDetail } from "./errors/IssueDetail";
|
|
24
|
+
import { IssueList } from "./errors/IssueList";
|
|
25
|
+
import type {
|
|
26
|
+
ErrorIssueDetail,
|
|
27
|
+
ErrorIssueSummary,
|
|
28
|
+
IssueStatus,
|
|
29
|
+
StatusFilter,
|
|
30
|
+
} from "./errors/types";
|
|
31
|
+
|
|
32
|
+
function useDebouncedValue<T>(value: T, delayMs: number): T {
|
|
33
|
+
const [debounced, setDebounced] = useState(value);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const timer = setTimeout(() => setDebounced(value), delayMs);
|
|
36
|
+
return () => clearTimeout(timer);
|
|
37
|
+
}, [value, delayMs]);
|
|
38
|
+
return debounced;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function ErrorsPanel() {
|
|
42
|
+
const t = useErrorsT();
|
|
43
|
+
const queryClient = useQueryClient();
|
|
44
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
45
|
+
const selectedId = searchParams.get("issue");
|
|
46
|
+
|
|
47
|
+
const [status, setStatus] = useState<StatusFilter>("unresolved");
|
|
48
|
+
const [search, setSearch] = useState("");
|
|
49
|
+
const debouncedSearch = useDebouncedValue(search, 250);
|
|
50
|
+
|
|
51
|
+
const sync = useChangeVersions(["error-issues", "action"]);
|
|
52
|
+
|
|
53
|
+
const queryArgs = useMemo(
|
|
54
|
+
() => ({
|
|
55
|
+
status,
|
|
56
|
+
query: debouncedSearch.trim() || undefined,
|
|
57
|
+
limit: 100,
|
|
58
|
+
}),
|
|
59
|
+
[status, debouncedSearch],
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
const { data, isLoading, isFetching, error, refetch } = useActionQuery<
|
|
63
|
+
ErrorIssueSummary[]
|
|
64
|
+
>("list-error-issues", queryArgs, { staleTime: 10_000 });
|
|
65
|
+
|
|
66
|
+
const resolveIssue = useActionMutation<
|
|
67
|
+
{ id: string; status: IssueStatus; assignee: string | null },
|
|
68
|
+
{ id: string; status: IssueStatus }
|
|
69
|
+
>("resolve-error-issue");
|
|
70
|
+
const sendTest = useActionMutation<{ issueId: string }, { message?: string }>(
|
|
71
|
+
"capture-test-error",
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const issues = useMemo(() => (Array.isArray(data) ? data : []), [data]);
|
|
75
|
+
|
|
76
|
+
// Refresh list + detail when a capture or agent edit records an
|
|
77
|
+
// "error-issues" change (useDbSync bumps the version this hook reads).
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
queryClient.invalidateQueries({
|
|
80
|
+
queryKey: ["action", "list-error-issues"],
|
|
81
|
+
});
|
|
82
|
+
queryClient.invalidateQueries({ queryKey: ["action", "get-error-issue"] });
|
|
83
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
84
|
+
}, [sync]);
|
|
85
|
+
|
|
86
|
+
const selectedIssue = useMemo(
|
|
87
|
+
() => issues.find((issue) => issue.id === selectedId) ?? null,
|
|
88
|
+
[issues, selectedId],
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// Mirror the current selection into application_state for the agent.
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
const value = selectedIssue
|
|
94
|
+
? {
|
|
95
|
+
view: "errors",
|
|
96
|
+
issueId: selectedIssue.id,
|
|
97
|
+
title: selectedIssue.title,
|
|
98
|
+
status: selectedIssue.status,
|
|
99
|
+
}
|
|
100
|
+
: selectedId
|
|
101
|
+
? { view: "errors", issueId: selectedId }
|
|
102
|
+
: { view: "errors" };
|
|
103
|
+
void setClientAppState("monitoring", value).catch(() => {});
|
|
104
|
+
}, [selectedIssue, selectedId]);
|
|
105
|
+
|
|
106
|
+
const selectIssue = (id: string | null) => {
|
|
107
|
+
setSearchParams(
|
|
108
|
+
(prev) => {
|
|
109
|
+
const params = new URLSearchParams(prev);
|
|
110
|
+
if (id) params.set("issue", id);
|
|
111
|
+
else params.delete("issue");
|
|
112
|
+
return params;
|
|
113
|
+
},
|
|
114
|
+
{ replace: false },
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const applyStatusToCaches = (id: string, nextStatus: IssueStatus) => {
|
|
119
|
+
queryClient.setQueriesData<ErrorIssueSummary[]>(
|
|
120
|
+
{ queryKey: ["action", "list-error-issues"] },
|
|
121
|
+
(old) =>
|
|
122
|
+
Array.isArray(old)
|
|
123
|
+
? old.map((issue) =>
|
|
124
|
+
issue.id === id ? { ...issue, status: nextStatus } : issue,
|
|
125
|
+
)
|
|
126
|
+
: old,
|
|
127
|
+
);
|
|
128
|
+
queryClient.setQueriesData<ErrorIssueDetail>(
|
|
129
|
+
{ queryKey: ["action", "get-error-issue"] },
|
|
130
|
+
(old) =>
|
|
131
|
+
old && old.issue?.id === id
|
|
132
|
+
? { ...old, issue: { ...old.issue, status: nextStatus } }
|
|
133
|
+
: old,
|
|
134
|
+
);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const handleSetStatus = async (id: string, nextStatus: IssueStatus) => {
|
|
138
|
+
applyStatusToCaches(id, nextStatus);
|
|
139
|
+
try {
|
|
140
|
+
await resolveIssue.mutateAsync({ id, status: nextStatus });
|
|
141
|
+
toast.success(
|
|
142
|
+
nextStatus === "resolved"
|
|
143
|
+
? t.resolvedToast
|
|
144
|
+
: nextStatus === "ignored"
|
|
145
|
+
? t.ignoredToast
|
|
146
|
+
: t.reopenedToast,
|
|
147
|
+
);
|
|
148
|
+
} catch (err) {
|
|
149
|
+
queryClient.invalidateQueries({
|
|
150
|
+
queryKey: ["action", "list-error-issues"],
|
|
151
|
+
});
|
|
152
|
+
queryClient.invalidateQueries({
|
|
153
|
+
queryKey: ["action", "get-error-issue"],
|
|
154
|
+
});
|
|
155
|
+
toast.error(
|
|
156
|
+
fmt(t.updateFailed, {
|
|
157
|
+
message: err instanceof Error ? err.message : String(err),
|
|
158
|
+
}),
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const handleSendTestError = async () => {
|
|
164
|
+
try {
|
|
165
|
+
await sendTest.mutateAsync({});
|
|
166
|
+
toast.success(t.testSentToast);
|
|
167
|
+
await refetch();
|
|
168
|
+
} catch (err) {
|
|
169
|
+
toast.error(
|
|
170
|
+
fmt(t.testFailed, {
|
|
171
|
+
message: err instanceof Error ? err.message : String(err),
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
if (selectedId) {
|
|
178
|
+
return (
|
|
179
|
+
<IssueDetail
|
|
180
|
+
issueId={selectedId}
|
|
181
|
+
fallback={selectedIssue ?? undefined}
|
|
182
|
+
onBack={() => selectIssue(null)}
|
|
183
|
+
onSetStatus={(next) => handleSetStatus(selectedId, next)}
|
|
184
|
+
pendingStatus={resolveIssue.isPending}
|
|
185
|
+
/>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<IssueList
|
|
191
|
+
issues={issues}
|
|
192
|
+
isLoading={isLoading}
|
|
193
|
+
status={status}
|
|
194
|
+
onStatusChange={setStatus}
|
|
195
|
+
search={search}
|
|
196
|
+
onSearchChange={setSearch}
|
|
197
|
+
onRefresh={() => void refetch()}
|
|
198
|
+
isFetching={isFetching}
|
|
199
|
+
onSelect={selectIssue}
|
|
200
|
+
onSendTestError={handleSendTestError}
|
|
201
|
+
sendingTest={sendTest.isPending}
|
|
202
|
+
error={error ? error.message : null}
|
|
203
|
+
/>
|
|
204
|
+
);
|
|
205
|
+
}
|