@agent-native/core 0.91.2 → 0.92.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 +31 -0
- package/corpus/core/docs/content/faq.mdx +17 -0
- package/corpus/core/docs/content/notifications.mdx +12 -6
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +140 -46
- package/corpus/core/src/agent/tool-search.ts +71 -4
- package/corpus/core/src/application-state/store.ts +12 -1
- package/corpus/core/src/cli/index.ts +20 -0
- package/corpus/core/src/cli/upgrade.ts +798 -0
- package/corpus/core/src/client/AssistantChat.tsx +28 -15
- package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
- package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
- package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
- package/corpus/core/src/client/chat/message-components.tsx +85 -8
- package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
- package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
- package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
- package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
- package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
- package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
- package/corpus/core/src/client/error-capture.ts +69 -7
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
- package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
- package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
- package/corpus/core/src/client/org/TeamPage.tsx +77 -71
- package/corpus/core/src/client/session-replay.ts +3 -97
- package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
- package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
- package/corpus/core/src/client/sse-event-processor.ts +29 -2
- package/corpus/core/src/db-admin/agent-tools.ts +8 -2
- package/corpus/core/src/db-admin/operations.ts +116 -4
- package/corpus/core/src/db-admin/routes.ts +1 -0
- package/corpus/core/src/db-admin/types.ts +4 -0
- package/corpus/core/src/extensions/actions.ts +113 -5
- package/corpus/core/src/extensions/html-shell.ts +5 -4
- package/corpus/core/src/extensions/routes.ts +10 -0
- package/corpus/core/src/navigation/index.ts +1 -1
- package/corpus/core/src/notifications/channels.ts +88 -25
- package/corpus/core/src/notifications/registry.ts +17 -3
- package/corpus/core/src/notifications/types.ts +4 -1
- package/corpus/core/src/resources/handlers.ts +10 -8
- package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
- package/corpus/core/src/server/poll.ts +293 -8
- package/corpus/core/src/server/request-context.ts +7 -0
- package/corpus/core/src/styles/agent-conversation.css +1 -1
- package/corpus/core/src/styles/agent-native.css +27 -0
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/default/AGENTS.md +14 -5
- package/corpus/core/src/templates/default/package.json +2 -1
- package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/headless/AGENTS.md +13 -3
- package/corpus/core/src/templates/headless/package.json +1 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- 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/security/SKILL.md +7 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
- package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
- package/corpus/core/src/templates/workspace-root/package.json +1 -0
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/analytics/AGENTS.md +39 -18
- package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
- package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
- package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
- package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
- package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
- package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
- package/corpus/templates/analytics/actions/navigate.ts +4 -2
- package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
- package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
- package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
- package/corpus/templates/analytics/actions/view-screen.ts +24 -0
- package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
- package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
- package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
- package/corpus/templates/analytics/app/i18n-data.ts +783 -3
- package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
- package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
- package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
- package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
- package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
- package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
- package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
- package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
- package/corpus/templates/analytics/app/routes/team.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
- package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
- package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
- package/corpus/templates/analytics/server/db/schema.ts +56 -0
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
- package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
- package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
- package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
- package/corpus/templates/analytics/server/plugins/db.ts +122 -2
- package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/assets/AGENTS.md +4 -0
- package/corpus/templates/assets/app/routes/settings.tsx +1 -1
- package/corpus/templates/assets/app/routes/team.tsx +1 -1
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/brain/AGENTS.md +4 -0
- package/corpus/templates/brain/app/routes/team.tsx +1 -1
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/calendar/AGENTS.md +4 -0
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
- package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
- package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
- package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
- package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/chat/AGENTS.md +4 -0
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/chat/app/routes/settings.tsx +2 -2
- package/corpus/templates/chat/app/routes/team.tsx +1 -1
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
- package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
- package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
- package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
- package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
- package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
- package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
- package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
- package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
- package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
- package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
- package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
- package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
- package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
- package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
- package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
- package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +123 -3
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
- package/corpus/templates/clips/desktop/src/styles.css +23 -1
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
- package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
- package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
- package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/content/AGENTS.md +4 -0
- package/corpus/templates/content/actions/_batch-utils.ts +8 -0
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
- package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
- package/corpus/templates/content/actions/_database-utils.ts +6 -1
- package/corpus/templates/content/actions/_property-utils.ts +168 -0
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
- package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
- package/corpus/templates/content/actions/delete-document.ts +9 -13
- package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
- package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
- package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
- package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
- package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
- package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
- package/corpus/templates/content/server/plugins/db.ts +19 -0
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/design/AGENTS.md +4 -0
- package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
- package/corpus/templates/design/app/routes/team.tsx +1 -1
- package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/dispatch/AGENTS.md +4 -0
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
- package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
- package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/forms/shared/navigation.ts +1 -1
- package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/macros/AGENTS.md +4 -0
- package/corpus/templates/macros/app/routes/settings.tsx +2 -2
- package/corpus/templates/macros/app/routes/team.tsx +1 -1
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/mail/AGENTS.md +4 -0
- package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
- package/corpus/templates/mail/server/handlers/media.ts +26 -1
- package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
- package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/plan/AGENTS.md +4 -0
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/plan/app/routes/settings.tsx +2 -2
- package/corpus/templates/plan/app/routes/team.tsx +1 -1
- package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
- package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
- package/corpus/templates/slides/app/routes/settings.tsx +2 -2
- package/corpus/templates/slides/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
- package/corpus/templates/slides/shared/api.ts +1 -1
- package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/agent/production-agent.d.ts +5 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +112 -42
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/tool-search.d.ts +2 -0
- package/dist/agent/tool-search.d.ts.map +1 -1
- package/dist/agent/tool-search.js +60 -4
- package/dist/agent/tool-search.js.map +1 -1
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +8 -2
- package/dist/application-state/store.js.map +1 -1
- package/dist/cli/index.js +19 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/upgrade.d.ts +100 -0
- package/dist/cli/upgrade.d.ts.map +1 -0
- package/dist/cli/upgrade.js +678 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +25 -14
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/HighlightedCodeBlock.d.ts +2 -0
- package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
- package/dist/client/HighlightedCodeBlock.js +10 -1
- package/dist/client/HighlightedCodeBlock.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts +1 -1
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/PoweredByBadge.js +3 -9
- package/dist/client/PoweredByBadge.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +60 -13
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +61 -8
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +12 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +136 -42
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/DataTableWidget.js +19 -2
- package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +2 -9
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
- package/dist/client/db-admin/TableEditor.js +19 -2
- package/dist/client/db-admin/TableEditor.js.map +1 -1
- package/dist/client/db-admin/export-utils.d.ts +2 -0
- package/dist/client/db-admin/export-utils.d.ts.map +1 -1
- package/dist/client/db-admin/export-utils.js +11 -3
- package/dist/client/db-admin/export-utils.js.map +1 -1
- package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
- package/dist/client/db-admin/useAgentSync.js +63 -0
- package/dist/client/db-admin/useAgentSync.js.map +1 -1
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +41 -7
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +3 -1
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +32 -5
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/InlineExtensionFrame.js +3 -1
- package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js +1 -0
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +11 -6
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +5 -5
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/session-replay.d.ts +0 -8
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +3 -80
- 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 +89 -33
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsSection.d.ts +19 -4
- package/dist/client/settings/SettingsSection.d.ts.map +1 -1
- package/dist/client/settings/SettingsSection.js +33 -4
- package/dist/client/settings/SettingsSection.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +21 -10
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +9 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +20 -2
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/db-admin/agent-tools.d.ts.map +1 -1
- package/dist/db-admin/agent-tools.js +7 -2
- package/dist/db-admin/agent-tools.js.map +1 -1
- package/dist/db-admin/operations.d.ts.map +1 -1
- package/dist/db-admin/operations.js +90 -4
- package/dist/db-admin/operations.js.map +1 -1
- package/dist/db-admin/routes.d.ts.map +1 -1
- package/dist/db-admin/routes.js +1 -0
- package/dist/db-admin/routes.js.map +1 -1
- package/dist/db-admin/types.d.ts +4 -0
- package/dist/db-admin/types.d.ts.map +1 -1
- package/dist/db-admin/types.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +85 -5
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/html-shell.d.ts +5 -4
- package/dist/extensions/html-shell.d.ts.map +1 -1
- package/dist/extensions/html-shell.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +8 -0
- package/dist/extensions/routes.js.map +1 -1
- package/dist/navigation/index.d.ts +1 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/notifications/channels.d.ts +8 -3
- package/dist/notifications/channels.d.ts.map +1 -1
- package/dist/notifications/channels.js +61 -22
- package/dist/notifications/channels.js.map +1 -1
- package/dist/notifications/registry.d.ts.map +1 -1
- package/dist/notifications/registry.js +14 -3
- package/dist/notifications/registry.js.map +1 -1
- package/dist/notifications/types.d.ts +4 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/notifications/types.js.map +1 -1
- package/dist/resources/handlers.d.ts +5 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +9 -8
- package/dist/resources/handlers.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +5 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +2 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/poll.d.ts +12 -4
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +236 -9
- package/dist/server/poll.js.map +1 -1
- package/dist/server/request-context.d.ts +7 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/styles/agent-conversation.css +1 -1
- package/dist/styles/agent-native.css +27 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/default/AGENTS.md +14 -5
- package/dist/templates/default/package.json +2 -1
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/headless/AGENTS.md +13 -3
- package/dist/templates/headless/package.json +1 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/workspace-core/AGENTS.md +7 -1
- package/dist/templates/workspace-root/AGENTS.md +17 -5
- package/dist/templates/workspace-root/package.json +1 -0
- package/docs/content/faq.mdx +17 -0
- package/docs/content/notifications.mdx +12 -6
- package/package.json +2 -2
- package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/default/AGENTS.md +14 -5
- package/src/templates/default/package.json +2 -1
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/headless/AGENTS.md +13 -3
- package/src/templates/headless/package.json +1 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/workspace-core/AGENTS.md +7 -1
- package/src/templates/workspace-root/AGENTS.md +17 -5
- package/src/templates/workspace-root/package.json +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
|
@@ -57,7 +57,18 @@ const MESSAGES = {
|
|
|
57
57
|
metaUsers: "Users affected",
|
|
58
58
|
metaEnvironment: "Environment",
|
|
59
59
|
metaRelease: "Release",
|
|
60
|
+
frequency: "Error frequency",
|
|
61
|
+
frequencyWindow: "Last {days} days",
|
|
62
|
+
frequencyBarLabel: "{count} occurrences on {date}",
|
|
63
|
+
recentOccurrences: "recent",
|
|
64
|
+
noRecentVolume: "No recent volume",
|
|
65
|
+
latestOccurrence: "Latest occurrence",
|
|
66
|
+
message: "Message",
|
|
67
|
+
url: "URL",
|
|
68
|
+
occurrenceTime: "Occurred",
|
|
60
69
|
stackTrace: "Stack trace",
|
|
70
|
+
stackFrameCount: "{count} frames",
|
|
71
|
+
rawStack: "Raw stack",
|
|
61
72
|
noStack: "No stack trace was captured for this error.",
|
|
62
73
|
inApp: "In app",
|
|
63
74
|
vendor: "Vendor",
|
|
@@ -16,6 +16,13 @@ export interface ParsedStackFrame {
|
|
|
16
16
|
colno: number | null;
|
|
17
17
|
inApp: boolean;
|
|
18
18
|
raw: string;
|
|
19
|
+
sourceContext?: SourceContextLine[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface SourceContextLine {
|
|
23
|
+
line: number;
|
|
24
|
+
text: string;
|
|
25
|
+
highlight: boolean;
|
|
19
26
|
}
|
|
20
27
|
|
|
21
28
|
export interface ErrorIssueSummary {
|
|
@@ -45,6 +52,7 @@ export interface ErrorEventDetail {
|
|
|
45
52
|
culprit: string | null;
|
|
46
53
|
level: ExceptionLevel;
|
|
47
54
|
stack: ParsedStackFrame[];
|
|
55
|
+
rawStack: string | null;
|
|
48
56
|
handled: boolean;
|
|
49
57
|
url: string | null;
|
|
50
58
|
userId: string | null;
|
|
@@ -57,7 +65,7 @@ export interface ErrorEventDetail {
|
|
|
57
65
|
environment: string | null;
|
|
58
66
|
tags: Record<string, unknown>;
|
|
59
67
|
extra: Record<string, unknown>;
|
|
60
|
-
breadcrumbs:
|
|
68
|
+
breadcrumbs: unknown[];
|
|
61
69
|
occurredAt: string;
|
|
62
70
|
}
|
|
63
71
|
|
|
@@ -71,6 +71,7 @@ const INTERVAL_OPTIONS = [
|
|
|
71
71
|
|
|
72
72
|
const STATUS_CLASSES = ["2xx", "3xx", "4xx", "5xx"] as const;
|
|
73
73
|
const KNOWN_CHANNELS = ["inbox", "email", "slack", "webhook"] as const;
|
|
74
|
+
const DEFAULT_TIMEOUT_SECONDS = 10;
|
|
74
75
|
const ASSERTION_TYPES: AssertionType[] = [
|
|
75
76
|
"body_contains",
|
|
76
77
|
"body_absent",
|
|
@@ -101,6 +102,8 @@ interface MonitorFormValues {
|
|
|
101
102
|
severity: MonitorSeverity;
|
|
102
103
|
channels: Record<(typeof KNOWN_CHANNELS)[number], boolean>;
|
|
103
104
|
emailRecipients: string;
|
|
105
|
+
slackWebhookUrl: string;
|
|
106
|
+
webhookUrl: string;
|
|
104
107
|
cooldownMinutes: number;
|
|
105
108
|
enabled: boolean;
|
|
106
109
|
}
|
|
@@ -140,7 +143,9 @@ function defaultValues(monitor: MonitorSummary | null): MonitorFormValues {
|
|
|
140
143
|
url: monitor?.url ?? "",
|
|
141
144
|
method: monitor?.method ?? "GET",
|
|
142
145
|
intervalSeconds: monitor?.intervalSeconds ?? 300,
|
|
143
|
-
timeoutSeconds: Math.round(
|
|
146
|
+
timeoutSeconds: Math.round(
|
|
147
|
+
(monitor?.timeoutMs ?? DEFAULT_TIMEOUT_SECONDS * 1000) / 1000,
|
|
148
|
+
),
|
|
144
149
|
matcherMode: matcher.mode,
|
|
145
150
|
classes: classFlags,
|
|
146
151
|
codes: matcher.mode === "list" ? matcher.codes.join(", ") : "200",
|
|
@@ -160,6 +165,8 @@ function defaultValues(monitor: MonitorSummary | null): MonitorFormValues {
|
|
|
160
165
|
webhook: channelSet.has("webhook"),
|
|
161
166
|
},
|
|
162
167
|
emailRecipients: (monitor?.emailRecipients ?? []).join(", "),
|
|
168
|
+
slackWebhookUrl: monitor?.slackWebhookUrl ?? "",
|
|
169
|
+
webhookUrl: monitor?.webhookUrl ?? "",
|
|
163
170
|
cooldownMinutes: monitor?.cooldownMinutes ?? 15,
|
|
164
171
|
enabled: monitor?.enabled ?? true,
|
|
165
172
|
};
|
|
@@ -206,10 +213,12 @@ function initialSections(monitor: MonitorSummary | null): SectionState {
|
|
|
206
213
|
alerting:
|
|
207
214
|
!isDefaultChannels ||
|
|
208
215
|
monitor.emailRecipients.length > 0 ||
|
|
216
|
+
Boolean(monitor.slackWebhookUrl) ||
|
|
217
|
+
Boolean(monitor.webhookUrl) ||
|
|
209
218
|
monitor.severity !== "critical",
|
|
210
219
|
advanced:
|
|
211
220
|
monitor.method !== "GET" ||
|
|
212
|
-
monitor.timeoutMs !==
|
|
221
|
+
monitor.timeoutMs !== DEFAULT_TIMEOUT_SECONDS * 1000 ||
|
|
213
222
|
monitor.cooldownMinutes !== 15 ||
|
|
214
223
|
!monitor.followRedirects ||
|
|
215
224
|
!monitor.enabled,
|
|
@@ -330,7 +339,7 @@ export function MonitorFormPage({
|
|
|
330
339
|
const advancedSummary = useMemo(() => {
|
|
331
340
|
const parts = [
|
|
332
341
|
values.method,
|
|
333
|
-
`${values.timeoutSeconds ||
|
|
342
|
+
`${values.timeoutSeconds || DEFAULT_TIMEOUT_SECONDS}s`,
|
|
334
343
|
`${values.cooldownMinutes ?? 15}m`,
|
|
335
344
|
];
|
|
336
345
|
if (!values.enabled) parts.push(t.pausedBadge);
|
|
@@ -362,6 +371,30 @@ export function MonitorFormPage({
|
|
|
362
371
|
setError("channels", { message: t.channelRequired });
|
|
363
372
|
return;
|
|
364
373
|
}
|
|
374
|
+
if (
|
|
375
|
+
formValues.channels.email &&
|
|
376
|
+
!splitList(formValues.emailRecipients).length
|
|
377
|
+
) {
|
|
378
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
379
|
+
setError("emailRecipients", { message: t.emailRecipientsRequired });
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (formValues.channels.slack) {
|
|
383
|
+
const slackUrl = formValues.slackWebhookUrl.trim();
|
|
384
|
+
if (slackUrl && !isHttpUrl(slackUrl)) {
|
|
385
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
386
|
+
setError("slackWebhookUrl", { message: t.slackWebhookUrlInvalid });
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (formValues.channels.webhook) {
|
|
391
|
+
const hookUrl = formValues.webhookUrl.trim();
|
|
392
|
+
if (hookUrl && !isHttpUrl(hookUrl)) {
|
|
393
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
394
|
+
setError("webhookUrl", { message: t.webhookUrlInvalid });
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
365
398
|
|
|
366
399
|
const assertions = formValues.assertions
|
|
367
400
|
.map((assertion) => {
|
|
@@ -399,7 +432,15 @@ export function MonitorFormPage({
|
|
|
399
432
|
followRedirects: formValues.followRedirects,
|
|
400
433
|
severity: formValues.severity,
|
|
401
434
|
channels,
|
|
402
|
-
emailRecipients:
|
|
435
|
+
emailRecipients: formValues.channels.email
|
|
436
|
+
? splitList(formValues.emailRecipients)
|
|
437
|
+
: [],
|
|
438
|
+
slackWebhookUrl: formValues.channels.slack
|
|
439
|
+
? formValues.slackWebhookUrl.trim()
|
|
440
|
+
: null,
|
|
441
|
+
webhookUrl: formValues.channels.webhook
|
|
442
|
+
? formValues.webhookUrl.trim()
|
|
443
|
+
: null,
|
|
403
444
|
cooldownMinutes: formValues.cooldownMinutes,
|
|
404
445
|
enabled: formValues.enabled,
|
|
405
446
|
};
|
|
@@ -736,8 +777,8 @@ export function MonitorFormPage({
|
|
|
736
777
|
setSections((prev) => ({ ...prev, alerting: open }))
|
|
737
778
|
}
|
|
738
779
|
>
|
|
739
|
-
<div className="
|
|
740
|
-
<div className="space-y-1.5">
|
|
780
|
+
<div className="space-y-4">
|
|
781
|
+
<div className="space-y-1.5 sm:max-w-xs">
|
|
741
782
|
<Label htmlFor="monitor-severity">{t.fieldSeverity}</Label>
|
|
742
783
|
<Controller
|
|
743
784
|
control={control}
|
|
@@ -765,43 +806,108 @@ export function MonitorFormPage({
|
|
|
765
806
|
/>
|
|
766
807
|
</div>
|
|
767
808
|
|
|
768
|
-
<div className="space-y-
|
|
809
|
+
<div className="space-y-2">
|
|
769
810
|
<Label>{t.fieldChannels}</Label>
|
|
770
811
|
<Controller
|
|
771
812
|
control={control}
|
|
772
813
|
name="channels"
|
|
773
814
|
render={({ field }) => (
|
|
774
|
-
<div className="
|
|
775
|
-
{KNOWN_CHANNELS.map((channel) =>
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
815
|
+
<div className="space-y-2">
|
|
816
|
+
{KNOWN_CHANNELS.map((channel) => {
|
|
817
|
+
const checked = field.value[channel];
|
|
818
|
+
return (
|
|
819
|
+
<div
|
|
820
|
+
key={channel}
|
|
821
|
+
className="rounded-md border border-border/60"
|
|
822
|
+
>
|
|
823
|
+
<label className="flex cursor-pointer items-start gap-2.5 px-3 py-2.5">
|
|
824
|
+
<Checkbox
|
|
825
|
+
className="mt-0.5"
|
|
826
|
+
checked={checked}
|
|
827
|
+
onCheckedChange={(next) =>
|
|
828
|
+
field.onChange({
|
|
829
|
+
...field.value,
|
|
830
|
+
[channel]: next === true,
|
|
831
|
+
})
|
|
832
|
+
}
|
|
833
|
+
/>
|
|
834
|
+
<span className="min-w-0">
|
|
835
|
+
<span className="block text-sm">
|
|
836
|
+
{channelLabel(channel, t)}
|
|
837
|
+
</span>
|
|
838
|
+
<span className="block text-xs text-muted-foreground">
|
|
839
|
+
{channelHint(channel, t)}
|
|
840
|
+
</span>
|
|
841
|
+
</span>
|
|
842
|
+
</label>
|
|
843
|
+
{channel === "email" && checked ? (
|
|
844
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
845
|
+
<Label htmlFor="monitor-emails">
|
|
846
|
+
{t.fieldEmailRecipients}
|
|
847
|
+
</Label>
|
|
848
|
+
<Textarea
|
|
849
|
+
id="monitor-emails"
|
|
850
|
+
className="min-h-[64px]"
|
|
851
|
+
placeholder={t.fieldEmailRecipientsPlaceholder}
|
|
852
|
+
{...register("emailRecipients")}
|
|
853
|
+
/>
|
|
854
|
+
{errors.emailRecipients ? (
|
|
855
|
+
<p className="text-xs text-destructive">
|
|
856
|
+
{errors.emailRecipients.message}
|
|
857
|
+
</p>
|
|
858
|
+
) : null}
|
|
859
|
+
</div>
|
|
860
|
+
) : null}
|
|
861
|
+
{channel === "slack" && checked ? (
|
|
862
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
863
|
+
<Label htmlFor="monitor-slack-url">
|
|
864
|
+
{t.fieldSlackWebhookUrl}
|
|
865
|
+
</Label>
|
|
866
|
+
<Input
|
|
867
|
+
id="monitor-slack-url"
|
|
868
|
+
type="url"
|
|
869
|
+
placeholder={t.fieldSlackWebhookUrlPlaceholder}
|
|
870
|
+
{...register("slackWebhookUrl")}
|
|
871
|
+
/>
|
|
872
|
+
{errors.slackWebhookUrl ? (
|
|
873
|
+
<p className="text-xs text-destructive">
|
|
874
|
+
{errors.slackWebhookUrl.message}
|
|
875
|
+
</p>
|
|
876
|
+
) : (
|
|
877
|
+
<p className="text-xs text-muted-foreground">
|
|
878
|
+
{t.fieldSlackWebhookUrlHint}
|
|
879
|
+
</p>
|
|
880
|
+
)}
|
|
881
|
+
</div>
|
|
882
|
+
) : null}
|
|
883
|
+
{channel === "webhook" && checked ? (
|
|
884
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
885
|
+
<Label htmlFor="monitor-webhook-url">
|
|
886
|
+
{t.fieldWebhookUrl}
|
|
887
|
+
</Label>
|
|
888
|
+
<Input
|
|
889
|
+
id="monitor-webhook-url"
|
|
890
|
+
type="url"
|
|
891
|
+
placeholder={t.fieldWebhookUrlPlaceholder}
|
|
892
|
+
{...register("webhookUrl")}
|
|
893
|
+
/>
|
|
894
|
+
{errors.webhookUrl ? (
|
|
895
|
+
<p className="text-xs text-destructive">
|
|
896
|
+
{errors.webhookUrl.message}
|
|
897
|
+
</p>
|
|
898
|
+
) : (
|
|
899
|
+
<p className="text-xs text-muted-foreground">
|
|
900
|
+
{t.fieldWebhookUrlHint}
|
|
901
|
+
</p>
|
|
902
|
+
)}
|
|
903
|
+
</div>
|
|
904
|
+
) : null}
|
|
905
|
+
</div>
|
|
906
|
+
);
|
|
907
|
+
})}
|
|
792
908
|
</div>
|
|
793
909
|
)}
|
|
794
910
|
/>
|
|
795
|
-
</div>
|
|
796
|
-
|
|
797
|
-
<div className="space-y-1.5 sm:col-span-2">
|
|
798
|
-
<Label htmlFor="monitor-emails">{t.fieldEmailRecipients}</Label>
|
|
799
|
-
<Textarea
|
|
800
|
-
id="monitor-emails"
|
|
801
|
-
className="min-h-[64px]"
|
|
802
|
-
placeholder={t.fieldEmailRecipientsPlaceholder}
|
|
803
|
-
{...register("emailRecipients")}
|
|
804
|
-
/>
|
|
805
911
|
{errors.channels ? (
|
|
806
912
|
<p className="text-xs text-destructive">
|
|
807
913
|
{errors.channels.message}
|
|
@@ -1024,3 +1130,19 @@ function channelLabel(
|
|
|
1024
1130
|
return t.channelWebhook;
|
|
1025
1131
|
}
|
|
1026
1132
|
}
|
|
1133
|
+
|
|
1134
|
+
function channelHint(
|
|
1135
|
+
channel: (typeof KNOWN_CHANNELS)[number],
|
|
1136
|
+
t: ReturnType<typeof useUptimeT>,
|
|
1137
|
+
): string {
|
|
1138
|
+
switch (channel) {
|
|
1139
|
+
case "inbox":
|
|
1140
|
+
return t.channelInboxHint;
|
|
1141
|
+
case "email":
|
|
1142
|
+
return t.channelEmailHint;
|
|
1143
|
+
case "slack":
|
|
1144
|
+
return t.channelSlackHint;
|
|
1145
|
+
case "webhook":
|
|
1146
|
+
return t.channelWebhookHint;
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
@@ -117,7 +117,7 @@ const MESSAGES = {
|
|
|
117
117
|
sectionResponseChecksHint:
|
|
118
118
|
"Choose which responses count as healthy and add body, header, or latency assertions.",
|
|
119
119
|
sectionAlerting: "Alerting",
|
|
120
|
-
sectionAlertingHint: "
|
|
120
|
+
sectionAlertingHint: "Choose severity and where alerts go.",
|
|
121
121
|
sectionAdvanced: "Advanced",
|
|
122
122
|
sectionAdvancedHint:
|
|
123
123
|
"Request method, timeout, cooldown, redirects, and pause.",
|
|
@@ -165,12 +165,24 @@ const MESSAGES = {
|
|
|
165
165
|
severityWarning: "Warning",
|
|
166
166
|
severityCritical: "Critical",
|
|
167
167
|
fieldChannels: "Notify via",
|
|
168
|
-
channelInbox: "
|
|
168
|
+
channelInbox: "In-app inbox",
|
|
169
|
+
channelInboxHint: "Bell notifications inside Analytics.",
|
|
169
170
|
channelEmail: "Email",
|
|
171
|
+
channelEmailHint: "Send to specific addresses.",
|
|
170
172
|
channelSlack: "Slack",
|
|
173
|
+
channelSlackHint: "Post to a Slack incoming webhook.",
|
|
171
174
|
channelWebhook: "Webhook",
|
|
175
|
+
channelWebhookHint: "POST JSON to any HTTPS endpoint.",
|
|
172
176
|
fieldEmailRecipients: "Email recipients",
|
|
173
177
|
fieldEmailRecipientsPlaceholder: "alerts@example.com, oncall@example.com",
|
|
178
|
+
fieldSlackWebhookUrl: "Slack webhook URL",
|
|
179
|
+
fieldSlackWebhookUrlPlaceholder: "https://hooks.slack.com/services/T…/B…/…",
|
|
180
|
+
fieldSlackWebhookUrlHint:
|
|
181
|
+
"Paste a Slack Incoming Webhook URL. Leave blank to use the workspace default, if configured.",
|
|
182
|
+
fieldWebhookUrl: "Webhook URL",
|
|
183
|
+
fieldWebhookUrlPlaceholder: "https://example.com/hooks/uptime",
|
|
184
|
+
fieldWebhookUrlHint:
|
|
185
|
+
"Receives a JSON POST with severity, title, and body. Leave blank to use the workspace default, if configured.",
|
|
174
186
|
fieldCooldown: "Alert cooldown (minutes)",
|
|
175
187
|
fieldEnabled: "Enabled",
|
|
176
188
|
fieldEnabledHint: "Run this monitor on its schedule.",
|
|
@@ -188,6 +200,9 @@ const MESSAGES = {
|
|
|
188
200
|
urlRequired: "Enter an absolute http(s) URL.",
|
|
189
201
|
urlInvalid: "Enter a valid http(s) URL (e.g. https://example.com).",
|
|
190
202
|
channelRequired: "Select at least one alert channel.",
|
|
203
|
+
emailRecipientsRequired: "Add at least one email recipient.",
|
|
204
|
+
slackWebhookUrlInvalid: "Enter a valid Slack webhook http(s) URL.",
|
|
205
|
+
webhookUrlInvalid: "Enter a valid webhook http(s) URL.",
|
|
191
206
|
classRequired: "Select at least one status class.",
|
|
192
207
|
codesRequired: "Enter at least one status code.",
|
|
193
208
|
saved: "Monitor saved.",
|
|
@@ -61,6 +61,8 @@ export interface MonitorSummary {
|
|
|
61
61
|
severity: MonitorSeverity;
|
|
62
62
|
channels: string[];
|
|
63
63
|
emailRecipients: string[];
|
|
64
|
+
slackWebhookUrl: string | null;
|
|
65
|
+
webhookUrl: string | null;
|
|
64
66
|
cooldownMinutes: number;
|
|
65
67
|
enabled: boolean;
|
|
66
68
|
lastStatus: MonitorStatus | null;
|
|
@@ -156,6 +158,8 @@ export interface SaveMonitorInput {
|
|
|
156
158
|
severity?: MonitorSeverity;
|
|
157
159
|
channels?: string[];
|
|
158
160
|
emailRecipients?: string[];
|
|
161
|
+
slackWebhookUrl?: string | null;
|
|
162
|
+
webhookUrl?: string | null;
|
|
159
163
|
cooldownMinutes?: number;
|
|
160
164
|
enabled?: boolean;
|
|
161
165
|
}
|