@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
|
@@ -115,6 +115,7 @@ export default defineAction({
|
|
|
115
115
|
description:
|
|
116
116
|
"Save an ad-hoc analysis as a reusable artifact. Do not call this for ordinary in-chat analysis or deep-dive answers unless the user explicitly asks to save/create a reusable analysis, or this turn is re-running an existing saved analysis. Stores the analysis question, instructions for re-running, data sources used, and compact results. " +
|
|
117
117
|
"This creates a reusable analysis that anyone can re-run later to get updated results. " +
|
|
118
|
+
"Saved analyses appear in the Analyses sidebar, so do not use this as scratch storage, as a transient summary, or as a duplicate companion artifact when creating a dashboard or extension unless the user explicitly asked for a saved analysis too. " +
|
|
118
119
|
"Call this only after you've gathered real evidence and include non-empty, compact resultData with structured evidence from those data-source action results. For qualitative analyses, resultData may include call/message IDs, short transcript excerpts, coded themes, mention counts, and sentiment labels derived from actual source records. Never include full Gong transcripts, full tool outputs, or bulk raw provider payloads.",
|
|
119
120
|
schema: z.object({
|
|
120
121
|
id: z
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import {
|
|
3
|
+
getRequestOrgId,
|
|
4
|
+
getRequestUserEmail,
|
|
5
|
+
} from "@agent-native/core/server";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
|
|
8
|
+
import { hostFromUrl, saveMonitor } from "../server/lib/uptime-monitors";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Friendly default name from a URL: the host without a leading `www.`
|
|
12
|
+
* (e.g. `example.com` from `https://www.example.com/health`). Keeps
|
|
13
|
+
* agent-created monitors sensible when no name is provided.
|
|
14
|
+
*/
|
|
15
|
+
function deriveNameFromUrl(url: string): string {
|
|
16
|
+
return hostFromUrl((url ?? "").trim()).replace(/^www\./i, "");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const assertionSchema = z.object({
|
|
20
|
+
type: z
|
|
21
|
+
.enum([
|
|
22
|
+
"body_contains",
|
|
23
|
+
"body_absent",
|
|
24
|
+
"header_contains",
|
|
25
|
+
"header_equals",
|
|
26
|
+
"max_latency_ms",
|
|
27
|
+
])
|
|
28
|
+
.describe(
|
|
29
|
+
"Assertion type: body_contains/body_absent check the response text; header_contains/header_equals check a response header; max_latency_ms flags a slow response (degraded).",
|
|
30
|
+
),
|
|
31
|
+
value: z
|
|
32
|
+
.union([z.string(), z.number()])
|
|
33
|
+
.describe(
|
|
34
|
+
"Expected value: text for body/header checks, milliseconds for max_latency_ms.",
|
|
35
|
+
),
|
|
36
|
+
header: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Header name (required for header_contains / header_equals)."),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const statusMatcherSchema = z
|
|
43
|
+
.union([
|
|
44
|
+
z.object({
|
|
45
|
+
mode: z.literal("class"),
|
|
46
|
+
classes: z
|
|
47
|
+
.array(z.string())
|
|
48
|
+
.describe('Status classes to accept, e.g. ["2xx","3xx"].'),
|
|
49
|
+
}),
|
|
50
|
+
z.object({
|
|
51
|
+
mode: z.literal("list"),
|
|
52
|
+
codes: z
|
|
53
|
+
.array(z.number().int())
|
|
54
|
+
.describe("Exact status codes to accept, e.g. [200,204]."),
|
|
55
|
+
}),
|
|
56
|
+
z.object({
|
|
57
|
+
mode: z.literal("range"),
|
|
58
|
+
min: z.number().int(),
|
|
59
|
+
max: z.number().int(),
|
|
60
|
+
}),
|
|
61
|
+
])
|
|
62
|
+
.describe(
|
|
63
|
+
"Which HTTP status counts as healthy. Defaults to the 2xx class when omitted.",
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
export default defineAction({
|
|
67
|
+
description:
|
|
68
|
+
"Create or update an uptime monitor that pings a URL on a schedule and alerts when it is down, returns the wrong status, is too slow, or its body is missing/contains specific text.",
|
|
69
|
+
schema: z.object({
|
|
70
|
+
id: z.string().optional().describe("Existing monitor id to update."),
|
|
71
|
+
name: z
|
|
72
|
+
.string()
|
|
73
|
+
.optional()
|
|
74
|
+
.describe(
|
|
75
|
+
"Human-readable monitor name. Optional — defaults to the URL host (without www) when omitted or blank.",
|
|
76
|
+
),
|
|
77
|
+
url: z.string().describe("Absolute http(s) URL to probe."),
|
|
78
|
+
method: z
|
|
79
|
+
.enum(["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"])
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("HTTP method for the probe (default GET)."),
|
|
82
|
+
requestHeaders: z
|
|
83
|
+
.record(z.string(), z.string())
|
|
84
|
+
.optional()
|
|
85
|
+
.describe("Extra request headers as a key/value object."),
|
|
86
|
+
requestBody: z
|
|
87
|
+
.string()
|
|
88
|
+
.nullable()
|
|
89
|
+
.optional()
|
|
90
|
+
.describe("Optional request body for POST/PUT/PATCH."),
|
|
91
|
+
intervalSeconds: z
|
|
92
|
+
.number()
|
|
93
|
+
.int()
|
|
94
|
+
.min(30)
|
|
95
|
+
.max(86400)
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("How often to check, in seconds (default 300, min 30)."),
|
|
98
|
+
timeoutMs: z
|
|
99
|
+
.number()
|
|
100
|
+
.int()
|
|
101
|
+
.min(1000)
|
|
102
|
+
.max(120000)
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("Request timeout in milliseconds (default 15000)."),
|
|
105
|
+
expectedStatus: statusMatcherSchema.optional(),
|
|
106
|
+
assertions: z
|
|
107
|
+
.array(assertionSchema)
|
|
108
|
+
.optional()
|
|
109
|
+
.describe("Response-body/header/latency assertions to evaluate."),
|
|
110
|
+
followRedirects: z
|
|
111
|
+
.boolean()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Follow 3xx redirects to allowed hosts (default true)."),
|
|
114
|
+
severity: z
|
|
115
|
+
.enum(["warning", "critical"])
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("Alert severity when the monitor fails (default critical)."),
|
|
118
|
+
channels: z
|
|
119
|
+
.array(z.string())
|
|
120
|
+
.optional()
|
|
121
|
+
.describe("Notification channels, e.g. inbox, email, slack, webhook."),
|
|
122
|
+
emailRecipients: z
|
|
123
|
+
.array(z.string().email())
|
|
124
|
+
.optional()
|
|
125
|
+
.describe("Email recipients used by the email channel."),
|
|
126
|
+
cooldownMinutes: z
|
|
127
|
+
.number()
|
|
128
|
+
.int()
|
|
129
|
+
.min(0)
|
|
130
|
+
.max(1440)
|
|
131
|
+
.optional()
|
|
132
|
+
.describe(
|
|
133
|
+
"Minutes to suppress a repeat 'down' alert after a recent recovery (anti-flap; default 15).",
|
|
134
|
+
),
|
|
135
|
+
enabled: z.boolean().optional().describe("Whether the monitor is active."),
|
|
136
|
+
}),
|
|
137
|
+
http: { method: "POST" },
|
|
138
|
+
run: async (args) => {
|
|
139
|
+
const email = getRequestUserEmail();
|
|
140
|
+
if (!email) throw new Error("no authenticated user");
|
|
141
|
+
const orgId = getRequestOrgId() || null;
|
|
142
|
+
const name = args.name?.trim() || deriveNameFromUrl(args.url);
|
|
143
|
+
return saveMonitor({ ...args, name }, { email, orgId });
|
|
144
|
+
},
|
|
145
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import {
|
|
3
|
+
getRequestOrgId,
|
|
4
|
+
getRequestUserEmail,
|
|
5
|
+
} from "@agent-native/core/server";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
|
|
8
|
+
import { saveStatusPage } from "../server/lib/status-pages";
|
|
9
|
+
|
|
10
|
+
export default defineAction({
|
|
11
|
+
description:
|
|
12
|
+
"Create or update a public status page. Pass id to update, omit to create. Include monitors to set the full included set (each with an optional display-name override and per-monitor showUrl opt-in).",
|
|
13
|
+
schema: z.object({
|
|
14
|
+
id: z.string().optional().describe("Status page id (omit to create)."),
|
|
15
|
+
slug: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Public URL slug; auto-derived from the title when omitted."),
|
|
19
|
+
title: z.string().optional().describe("Status page title."),
|
|
20
|
+
description: z.string().nullable().optional(),
|
|
21
|
+
published: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Whether the page is publicly readable."),
|
|
25
|
+
showUptimeBars: z.boolean().optional(),
|
|
26
|
+
showOverallUptime: z.boolean().optional(),
|
|
27
|
+
showResponseTime: z.boolean().optional(),
|
|
28
|
+
density: z.enum(["comfortable", "compact"]).optional(),
|
|
29
|
+
alignment: z.enum(["left", "center"]).optional(),
|
|
30
|
+
monitors: z
|
|
31
|
+
.array(
|
|
32
|
+
z.object({
|
|
33
|
+
monitorId: z.string(),
|
|
34
|
+
displayName: z.string().nullable().optional(),
|
|
35
|
+
showUrl: z.boolean().optional(),
|
|
36
|
+
}),
|
|
37
|
+
)
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Full set of included monitors, in display order."),
|
|
40
|
+
}),
|
|
41
|
+
run: async (input) => {
|
|
42
|
+
const email = getRequestUserEmail();
|
|
43
|
+
if (!email) throw new Error("no authenticated user");
|
|
44
|
+
const orgId = getRequestOrgId() || null;
|
|
45
|
+
return saveStatusPage(input, { email, orgId });
|
|
46
|
+
},
|
|
47
|
+
});
|
|
@@ -12,6 +12,7 @@ import { z } from "zod";
|
|
|
12
12
|
import { listAnalyticsAlertRules } from "../server/lib/analytics-alerts";
|
|
13
13
|
import { listDashboardCatalog } from "../server/lib/dashboard-catalog";
|
|
14
14
|
import { getAnalysis, getDashboard } from "../server/lib/dashboards-store";
|
|
15
|
+
import { getErrorIssue, listErrorIssues } from "../server/lib/error-capture.js";
|
|
15
16
|
import { listAnalyticsPublicKeys } from "../server/lib/first-party-analytics.js";
|
|
16
17
|
import {
|
|
17
18
|
getSessionReplaySummary,
|
|
@@ -19,6 +20,11 @@ import {
|
|
|
19
20
|
replayRangeToIso,
|
|
20
21
|
type ReplayRange,
|
|
21
22
|
} from "../server/lib/session-replay.js";
|
|
23
|
+
import {
|
|
24
|
+
getStatusPagePreview,
|
|
25
|
+
listStatusPages,
|
|
26
|
+
} from "../server/lib/status-pages.js";
|
|
27
|
+
import { getMonitor, listMonitors } from "../server/lib/uptime-monitors.js";
|
|
22
28
|
|
|
23
29
|
const SESSION_FILTER_KEYS = new Set(["range", "app", "q"]);
|
|
24
30
|
const REPLAY_RANGES = new Set(["24h", "7d", "30d", "90d", "all"]);
|
|
@@ -150,6 +156,212 @@ export default defineAction({
|
|
|
150
156
|
screen.sessionReplayError = error?.message || String(error);
|
|
151
157
|
}
|
|
152
158
|
}
|
|
159
|
+
} else if (nav?.view === "monitoring") {
|
|
160
|
+
screen.page = "monitoring";
|
|
161
|
+
const monitoringView =
|
|
162
|
+
nav?.monitoringView === "errors" ? "errors" : "uptime";
|
|
163
|
+
screen.monitoringView = monitoringView;
|
|
164
|
+
screen.monitoringSurfaces = [
|
|
165
|
+
{
|
|
166
|
+
id: "uptime",
|
|
167
|
+
label: "Uptime",
|
|
168
|
+
path: "/monitoring",
|
|
169
|
+
includes: [
|
|
170
|
+
"synthetic HTTP/status uptime checks",
|
|
171
|
+
"latency + body/header assertions",
|
|
172
|
+
"incidents",
|
|
173
|
+
"down/degraded alerting",
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "status-pages",
|
|
178
|
+
label: "Status pages",
|
|
179
|
+
path: "/monitoring?statuspage=list",
|
|
180
|
+
includes: [
|
|
181
|
+
"public status page config (under the uptime subview)",
|
|
182
|
+
"monitor selection + ordering",
|
|
183
|
+
"publish / slug management",
|
|
184
|
+
"public URL /status/<slug>",
|
|
185
|
+
],
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: "errors",
|
|
189
|
+
label: "Errors",
|
|
190
|
+
path: "/monitoring?view=errors",
|
|
191
|
+
includes: [
|
|
192
|
+
"captured JavaScript exceptions",
|
|
193
|
+
"grouped error issues",
|
|
194
|
+
"linked session replays",
|
|
195
|
+
],
|
|
196
|
+
},
|
|
197
|
+
];
|
|
198
|
+
const email = getRequestUserEmail();
|
|
199
|
+
if (email) {
|
|
200
|
+
const orgId = getRequestOrgId() || null;
|
|
201
|
+
try {
|
|
202
|
+
if (monitoringView === "errors") {
|
|
203
|
+
if (nav?.errorIssueId) {
|
|
204
|
+
screen.errorIssueId = nav.errorIssueId;
|
|
205
|
+
const detail = await getErrorIssue(
|
|
206
|
+
{ userEmail: email, orgId },
|
|
207
|
+
nav.errorIssueId,
|
|
208
|
+
);
|
|
209
|
+
const issue = detail.issue;
|
|
210
|
+
const sample = detail.events[0];
|
|
211
|
+
screen.errorIssue = {
|
|
212
|
+
id: issue.id,
|
|
213
|
+
title: issue.title,
|
|
214
|
+
type: issue.type,
|
|
215
|
+
culprit: issue.culprit,
|
|
216
|
+
level: issue.level,
|
|
217
|
+
status: issue.status,
|
|
218
|
+
firstSeenAt: issue.firstSeenAt,
|
|
219
|
+
lastSeenAt: issue.lastSeenAt,
|
|
220
|
+
eventCount: issue.eventCount,
|
|
221
|
+
usersAffected: issue.usersAffected,
|
|
222
|
+
assignee: issue.assignee,
|
|
223
|
+
app: issue.app,
|
|
224
|
+
template: issue.template,
|
|
225
|
+
lastSessionRecordingPath: issue.lastSessionRecordingPath,
|
|
226
|
+
sampleEvent: sample
|
|
227
|
+
? {
|
|
228
|
+
message: sample.message,
|
|
229
|
+
culprit: sample.culprit,
|
|
230
|
+
handled: sample.handled,
|
|
231
|
+
url: sample.url,
|
|
232
|
+
occurredAt: sample.occurredAt,
|
|
233
|
+
sessionRecordingPath: sample.sessionRecordingPath,
|
|
234
|
+
}
|
|
235
|
+
: null,
|
|
236
|
+
linkedSessions: detail.sessions.slice(0, 5),
|
|
237
|
+
};
|
|
238
|
+
} else {
|
|
239
|
+
const issues = await listErrorIssues(
|
|
240
|
+
{ userEmail: email, orgId },
|
|
241
|
+
{ status: "unresolved", limit: 25 },
|
|
242
|
+
);
|
|
243
|
+
screen.errorIssues = issues.map((issue) => ({
|
|
244
|
+
id: issue.id,
|
|
245
|
+
title: issue.title,
|
|
246
|
+
culprit: issue.culprit,
|
|
247
|
+
level: issue.level,
|
|
248
|
+
status: issue.status,
|
|
249
|
+
eventCount: issue.eventCount,
|
|
250
|
+
usersAffected: issue.usersAffected,
|
|
251
|
+
lastSeenAt: issue.lastSeenAt,
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
} else if (nav?.statusPageId) {
|
|
255
|
+
// Status pages are a config sub-view under the uptime panel.
|
|
256
|
+
screen.uptimeSubview = "status-pages";
|
|
257
|
+
if (nav.statusPageId === "new") {
|
|
258
|
+
screen.statusPageMode = "create";
|
|
259
|
+
} else if (nav.statusPageId === "list") {
|
|
260
|
+
const pages = await listStatusPages({ email, orgId });
|
|
261
|
+
screen.statusPages = pages.map((page) => ({
|
|
262
|
+
id: page.id,
|
|
263
|
+
slug: page.slug,
|
|
264
|
+
title: page.title,
|
|
265
|
+
published: page.published,
|
|
266
|
+
monitorCount: page.monitors.length,
|
|
267
|
+
publicUrl: `/status/${page.slug}`,
|
|
268
|
+
updatedAt: page.updatedAt,
|
|
269
|
+
}));
|
|
270
|
+
} else {
|
|
271
|
+
screen.statusPageId = nav.statusPageId;
|
|
272
|
+
const preview = await getStatusPagePreview(nav.statusPageId, {
|
|
273
|
+
email,
|
|
274
|
+
orgId,
|
|
275
|
+
});
|
|
276
|
+
if (preview) {
|
|
277
|
+
const { page, view } = preview;
|
|
278
|
+
screen.statusPage = {
|
|
279
|
+
id: page.id,
|
|
280
|
+
slug: page.slug,
|
|
281
|
+
title: page.title,
|
|
282
|
+
description: page.description,
|
|
283
|
+
published: page.published,
|
|
284
|
+
publicUrl: `/status/${page.slug}`,
|
|
285
|
+
layout: {
|
|
286
|
+
density: page.density,
|
|
287
|
+
alignment: page.alignment,
|
|
288
|
+
showUptimeBars: page.showUptimeBars,
|
|
289
|
+
showOverallUptime: page.showOverallUptime,
|
|
290
|
+
showResponseTime: page.showResponseTime,
|
|
291
|
+
},
|
|
292
|
+
monitorCount: page.monitors.length,
|
|
293
|
+
overall: view.overall,
|
|
294
|
+
counts: view.counts,
|
|
295
|
+
includedMonitors: view.monitors.map((monitor) => ({
|
|
296
|
+
id: monitor.id,
|
|
297
|
+
name: monitor.name,
|
|
298
|
+
host: monitor.host,
|
|
299
|
+
status: monitor.status,
|
|
300
|
+
uptime24h: monitor.windows.uptime24h,
|
|
301
|
+
uptime7d: monitor.windows.uptime7d,
|
|
302
|
+
})),
|
|
303
|
+
updatedAt: page.updatedAt,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
} else if (nav?.monitorId === "new") {
|
|
308
|
+
screen.monitorMode = "create";
|
|
309
|
+
} else if (nav?.monitorId) {
|
|
310
|
+
screen.monitorId = nav.monitorId;
|
|
311
|
+
const detail = await getMonitor(nav.monitorId, { email, orgId });
|
|
312
|
+
if (detail) {
|
|
313
|
+
const monitor = detail.monitor;
|
|
314
|
+
const openIncidents = detail.incidents.filter(
|
|
315
|
+
(incident) => !incident.resolvedAt,
|
|
316
|
+
);
|
|
317
|
+
screen.monitor = {
|
|
318
|
+
id: monitor.id,
|
|
319
|
+
name: monitor.name,
|
|
320
|
+
url: monitor.url,
|
|
321
|
+
method: monitor.method,
|
|
322
|
+
enabled: monitor.enabled,
|
|
323
|
+
severity: monitor.severity,
|
|
324
|
+
intervalSeconds: monitor.intervalSeconds,
|
|
325
|
+
lastStatus: monitor.lastStatus,
|
|
326
|
+
lastCheckedAt: monitor.lastCheckedAt,
|
|
327
|
+
lastSuccessAt: monitor.lastSuccessAt,
|
|
328
|
+
lastError: monitor.lastError,
|
|
329
|
+
lastLatencyMs: monitor.lastLatencyMs,
|
|
330
|
+
lastStatusCode: monitor.lastStatusCode,
|
|
331
|
+
consecutiveFailures: monitor.consecutiveFailures,
|
|
332
|
+
uptime24h: monitor.uptime24h,
|
|
333
|
+
uptime7d: monitor.uptime7d,
|
|
334
|
+
checks24h: monitor.checks24h,
|
|
335
|
+
openIncidentCount: openIncidents.length,
|
|
336
|
+
recentIncidents: detail.incidents
|
|
337
|
+
.slice(0, 5)
|
|
338
|
+
.map((incident) => ({
|
|
339
|
+
id: incident.id,
|
|
340
|
+
startedAt: incident.startedAt,
|
|
341
|
+
resolvedAt: incident.resolvedAt,
|
|
342
|
+
status: incident.status,
|
|
343
|
+
severity: incident.severity,
|
|
344
|
+
cause: incident.cause,
|
|
345
|
+
})),
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
const monitors = await listMonitors({ email, orgId });
|
|
350
|
+
screen.monitors = monitors.map((monitor) => ({
|
|
351
|
+
id: monitor.id,
|
|
352
|
+
name: monitor.name,
|
|
353
|
+
url: monitor.url,
|
|
354
|
+
enabled: monitor.enabled,
|
|
355
|
+
lastStatus: monitor.lastStatus,
|
|
356
|
+
lastCheckedAt: monitor.lastCheckedAt,
|
|
357
|
+
uptime24h: monitor.uptime24h,
|
|
358
|
+
uptime7d: monitor.uptime7d,
|
|
359
|
+
}));
|
|
360
|
+
}
|
|
361
|
+
} catch (error: any) {
|
|
362
|
+
screen.monitoringError = error?.message || String(error);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
153
365
|
} else if (nav?.view === "overview" || nav?.view === "home" || !nav?.view) {
|
|
154
366
|
screen.page = "ask";
|
|
155
367
|
} else if (nav?.view === "ask") {
|
|
@@ -20,6 +20,7 @@ const pageTitleKeys: Record<string, string> = {
|
|
|
20
20
|
"/catalog": "navigation.templateCatalog",
|
|
21
21
|
"/analyses": "navigation.analyses",
|
|
22
22
|
"/sessions": "navigation.sessions",
|
|
23
|
+
"/monitoring": "navigation.monitoring",
|
|
23
24
|
"/agents": "navigation.agents",
|
|
24
25
|
"/dashboards/explorer": "navigation.explorer",
|
|
25
26
|
"/settings": "navigation.settings",
|
|
@@ -147,6 +147,12 @@ export function Layout({ children }: LayoutProps) {
|
|
|
147
147
|
location.pathname.startsWith("/extensions/");
|
|
148
148
|
const isSessionsRoute = isAnalyticsSessionsRoute(location.pathname);
|
|
149
149
|
const isSessionDetailRoute = /^\/sessions\/[^/]+/.test(location.pathname);
|
|
150
|
+
// Monitoring renders its own header row (section tabs / "Back to monitors"
|
|
151
|
+
// + the relocated agent toggle), so skip the framework Header to avoid a
|
|
152
|
+
// redundant second title bar.
|
|
153
|
+
const isMonitoringRoute =
|
|
154
|
+
location.pathname === "/monitoring" ||
|
|
155
|
+
location.pathname.startsWith("/monitoring/");
|
|
150
156
|
const isAskRoute = location.pathname === "/ask";
|
|
151
157
|
const chatHomeHandoffActive = useAgentChatHomeHandoff({
|
|
152
158
|
storageKey: ANALYTICS_CHAT_STORAGE_KEY,
|
|
@@ -222,7 +228,10 @@ export function Layout({ children }: LayoutProps) {
|
|
|
222
228
|
const contentFrame = (
|
|
223
229
|
<div className="flex h-full flex-1 flex-col overflow-hidden">
|
|
224
230
|
<MobileNav showNewChat={isAskRoute} />
|
|
225
|
-
{!isExtensionsRoute &&
|
|
231
|
+
{!isExtensionsRoute &&
|
|
232
|
+
!isAskRoute &&
|
|
233
|
+
!isSessionDetailRoute &&
|
|
234
|
+
!isMonitoringRoute && <Header />}
|
|
226
235
|
<InvitationBanner />
|
|
227
236
|
<main
|
|
228
237
|
className={
|