@agent-native/core 0.91.1 → 0.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blueprints/action/crud.md +1 -1
- package/blueprints/channel/discord.md +1 -1
- package/blueprints/provider/stripe.md +1 -1
- package/blueprints/sandbox/docker.md +1 -1
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +31 -0
- package/corpus/core/blueprints/action/crud.md +1 -1
- package/corpus/core/blueprints/channel/discord.md +1 -1
- package/corpus/core/blueprints/provider/stripe.md +1 -1
- package/corpus/core/blueprints/sandbox/docker.md +1 -1
- package/corpus/core/docs/content/faq.mdx +17 -0
- package/corpus/core/docs/content/notifications.mdx +12 -6
- package/corpus/core/package.json +6 -5
- package/corpus/core/src/agent/production-agent.ts +140 -46
- package/corpus/core/src/agent/run-manager.ts +23 -2
- package/corpus/core/src/agent/run-store.ts +2 -2
- package/corpus/core/src/agent/tool-search.ts +71 -4
- package/corpus/core/src/cli/add.ts +1 -1
- package/corpus/core/src/cli/create.ts +8 -3
- package/corpus/core/src/cli/index.ts +25 -4
- package/corpus/core/src/cli/upgrade.ts +798 -0
- package/corpus/core/src/client/AssistantChat.tsx +1 -1
- package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
- package/corpus/core/src/client/agent-chat-adapter.ts +31 -6
- 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/code-agent-chat-adapter.ts +2 -9
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +7 -0
- package/corpus/core/src/client/settings/SettingsPanel.tsx +533 -389
- package/corpus/core/src/client/settings/SettingsSection.tsx +154 -17
- package/corpus/core/src/client/sse-event-processor.ts +29 -2
- package/corpus/core/src/extensions/actions.ts +113 -5
- package/corpus/core/src/jobs/scheduler.ts +30 -1
- package/corpus/core/src/localization/default-messages.ts +21 -0
- 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/server/agent-chat-plugin.ts +7 -3
- package/corpus/core/src/server/request-context.ts +7 -0
- package/corpus/core/src/styles/agent-conversation.css +1 -1
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/default/AGENTS.md +10 -3
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/corpus/core/src/templates/default/package.json +4 -3
- package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/headless/AGENTS.md +9 -3
- package/corpus/core/src/templates/headless/package.json +4 -3
- 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/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/core/src/templates/workspace-core/package.json +6 -6
- package/corpus/core/src/templates/workspace-root/AGENTS.md +10 -4
- package/corpus/core/src/templates/workspace-root/package.json +3 -2
- package/corpus/core/src/triggers/dispatcher.ts +30 -2
- package/corpus/core/src/vite/client.ts +96 -1
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +20 -2
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/analytics/AGENTS.md +7 -5
- package/corpus/templates/analytics/actions/save-monitor.ts +14 -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/global.css +26 -10
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/analytics/app/i18n-data.ts +25 -0
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
- package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +151 -32
- 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 +461 -286
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +285 -294
- package/corpus/templates/analytics/changelog/2026-07-08-console-details-expand-inline-under-each-row-and-the-event-t.md +6 -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-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-keeps-a-usable-stage-when-dev-tools-is-open-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-session-replay-resumes-after-scrubbing-and-expands-console-r.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-session-replays-wait-for-full-load-keep-a-normal-viewport-an.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-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/docs/uptime-monitoring.md +13 -11
- package/corpus/templates/analytics/package.json +2 -2
- package/corpus/templates/analytics/server/db/schema-monitoring.ts +4 -0
- package/corpus/templates/analytics/server/lib/uptime-monitors.ts +60 -12
- package/corpus/templates/analytics/server/plugins/db.ts +10 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/assets/package.json +2 -2
- 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/package.json +2 -2
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/calendar/AGENTS.md +10 -0
- package/corpus/templates/calendar/actions/create-event.ts +5 -1
- package/corpus/templates/calendar/actions/event-action-helpers.ts +41 -0
- package/corpus/templates/calendar/actions/get-attendee-timezones.ts +28 -0
- package/corpus/templates/calendar/actions/set-attendee-timezone.ts +68 -0
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +150 -11
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +36 -1
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +32 -0
- package/corpus/templates/calendar/app/hooks/use-attendee-timezones.ts +24 -0
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/lib/attendee-local-time.ts +122 -0
- package/corpus/templates/calendar/changelog/2026-07-08-event-details-now-support-extension-widgets-and-you-can-see-.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-08-when-you-invite-guests-to-a-new-event-you-now-appear-in.md +6 -0
- package/corpus/templates/calendar/package.json +2 -2
- package/corpus/templates/calendar/server/handlers/events.ts +5 -1
- package/corpus/templates/calendar/shared/api.ts +6 -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/package.json +2 -2
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +6 -2
- 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/actions/create-meeting.ts +8 -3
- package/corpus/templates/clips/actions/list-meetings.ts +31 -3
- package/corpus/templates/clips/changelog/2026-07-08-after-finishing-a-desktop-recording-reopening-clips-restor.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-clips-now-pops-up-to-take-notes-when-you-join-an-adhoc-zoom-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-desktop-clip-recordings-are-louder-after-capture-mic-only.md +6 -0
- 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-meeting-notes-keep-their-recording-state-when-the-desktop.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-meeting-reminders-now-appear-1-minute-before-start-stay-unti.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-08-the-desktop-meetings-panel-has-room-for-its-drop-shadow-and-.md +6 -0
- package/corpus/templates/clips/chrome-extension/package.json +2 -2
- package/corpus/templates/clips/desktop/package.json +2 -2
- package/corpus/templates/clips/desktop/src/app.tsx +214 -37
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +30 -6
- package/corpus/templates/clips/desktop/src/lib/meeting-notification-timing.ts +83 -0
- package/corpus/templates/clips/desktop/src/lib/native-recording-warm.ts +21 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +98 -20
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +197 -50
- package/corpus/templates/clips/desktop/src/styles.css +150 -53
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +362 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +41 -7
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +9 -2
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +89 -11
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +71 -17
- package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +36 -1
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -10
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +1 -25
- 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/desktop/src-tauri/src/util.rs +36 -1
- package/corpus/templates/clips/package.json +2 -2
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -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/_content-database-personal-view.ts +80 -0
- 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/get-content-database-personal-view.ts +27 -0
- package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
- package/corpus/templates/content/actions/update-content-database-personal-view.ts +31 -0
- package/corpus/templates/content/actions/update-content-database-view.ts +3 -0
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +1 -1
- package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +2631 -551
- package/corpus/templates/content/app/components/editor/database/filter-sort.ts +220 -18
- package/corpus/templates/content/app/hooks/use-content-database.ts +32 -0
- package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
- package/corpus/templates/content/app/i18n/zh-TW.ts +16 -0
- package/corpus/templates/content/app/i18n-data.ts +154 -0
- 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-database-filters-now-support-notion-style-reset-save-for-eve.md +6 -0
- package/corpus/templates/content/changelog/2026-07-08-date-filters-can-now-target-a-between-range.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/package.json +2 -2
- package/corpus/templates/content/parity/matrix.md +1 -1
- package/corpus/templates/content/parity/matrix.ts +2 -0
- package/corpus/templates/content/server/plugins/db.ts +19 -0
- package/corpus/templates/content/shared/api.ts +24 -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/package.json +2 -2
- 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/app/i18n/zh-TW.ts +34 -1
- package/corpus/templates/dispatch/app/i18n-data.ts +387 -10
- package/corpus/templates/dispatch/app/routes/automations.tsx +1 -0
- package/corpus/templates/dispatch/changelog/2026-07-08-added-an-automations-page-to-review-pause-and-create.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-08-destinations-now-shows-outbound-delivery-queue-health.md +6 -0
- package/corpus/templates/dispatch/package.json +2 -2
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/forms/package.json +2 -2
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/macros/package.json +2 -2
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/corpus/templates/mail/app/hooks/use-emails.ts +56 -44
- package/corpus/templates/mail/app/lib/gmail-mutation-queue.ts +325 -0
- package/corpus/templates/mail/changelog/2026-07-08-rapid-archive-and-mark-read-now-batch-gmail-updates-so-the-i.md +6 -0
- package/corpus/templates/mail/package.json +2 -2
- 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/package.json +2 -2
- 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/app/components/editor/ImageDropPromptPopover.tsx +46 -29
- package/corpus/templates/slides/app/context/DeckContext.tsx +45 -18
- package/corpus/templates/slides/app/i18n/ar-SA.ts +4 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +4 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +4 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +4 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +4 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +4 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +4 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +4 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +4 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +4 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/slides/app/lib/image-drop-to-agent.ts +115 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +22 -13
- package/corpus/templates/slides/changelog/2026-07-08-dropping-an-image-onto-a-slide-and-sending-it-to-the-agent-w.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-08-undo-works-after-the-agent-edits-a-slide-so-you-can-reverse.md +6 -0
- package/corpus/templates/slides/package.json +2 -2
- 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/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +23 -2
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.js +2 -2
- package/dist/agent/run-store.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/catalog.json +2 -2
- package/dist/cli/add.js +1 -1
- package/dist/cli/add.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +8 -3
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +24 -4
- 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.js +1 -1
- 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/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +32 -4
- 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/code-agent-chat-adapter.js +2 -9
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +6 -0
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +52 -19
- 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/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/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +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/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/jobs/scheduler.js +26 -1
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +19 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +19 -0
- package/dist/localization/default-messages.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/routes.d.ts +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/observability/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +3 -3
- 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/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/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/default/AGENTS.md +10 -3
- package/dist/templates/default/app/i18n/ar-SA.ts +21 -0
- package/dist/templates/default/app/i18n/de-DE.ts +21 -0
- package/dist/templates/default/app/i18n/en-US.ts +21 -0
- package/dist/templates/default/app/i18n/es-ES.ts +21 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +20 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +21 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +20 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +21 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +20 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
- package/dist/templates/default/package.json +4 -3
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/headless/AGENTS.md +9 -3
- package/dist/templates/headless/package.json +4 -3
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/dist/templates/workspace-core/package.json +6 -6
- package/dist/templates/workspace-root/AGENTS.md +10 -4
- package/dist/templates/workspace-root/package.json +3 -2
- package/dist/triggers/dispatcher.js +27 -2
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +70 -1
- package/dist/vite/client.js.map +1 -1
- package/docs/content/faq.mdx +17 -0
- package/docs/content/notifications.mdx +12 -6
- package/package.json +7 -6
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/default/AGENTS.md +10 -3
- package/src/templates/default/app/i18n/ar-SA.ts +21 -0
- package/src/templates/default/app/i18n/de-DE.ts +21 -0
- package/src/templates/default/app/i18n/en-US.ts +21 -0
- package/src/templates/default/app/i18n/es-ES.ts +21 -0
- package/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/src/templates/default/app/i18n/hi-IN.ts +20 -0
- package/src/templates/default/app/i18n/ja-JP.ts +21 -0
- package/src/templates/default/app/i18n/ko-KR.ts +20 -0
- package/src/templates/default/app/i18n/pt-BR.ts +21 -0
- package/src/templates/default/app/i18n/zh-CN.ts +20 -0
- package/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/src/templates/default/package.json +4 -3
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/headless/AGENTS.md +9 -3
- package/src/templates/headless/package.json +4 -3
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
- package/src/templates/workspace-core/package.json +6 -6
- package/src/templates/workspace-root/AGENTS.md +10 -4
- package/src/templates/workspace-root/package.json +3 -2
|
@@ -337,23 +337,33 @@
|
|
|
337
337
|
opacity: 0.55;
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
+
/* Keep the playhead visually distinct from red console-error marker dots on
|
|
341
|
+
the scrubber track — those markers used to look like a second thumb. */
|
|
340
342
|
.an-replay-scrub::-webkit-slider-thumb {
|
|
341
|
-
width: 0.
|
|
342
|
-
height: 0.
|
|
343
|
+
width: 0.875rem;
|
|
344
|
+
height: 0.875rem;
|
|
343
345
|
appearance: none;
|
|
344
346
|
border: 2px solid hsl(var(--background));
|
|
345
347
|
border-radius: 9999px;
|
|
346
|
-
background: hsl(
|
|
347
|
-
box-shadow:
|
|
348
|
+
background: hsl(217 91% 60%);
|
|
349
|
+
box-shadow:
|
|
350
|
+
0 0 0 1px hsl(217 91% 60% / 0.55),
|
|
351
|
+
0 1px 2px hsl(0 0% 0% / 0.35);
|
|
352
|
+
position: relative;
|
|
353
|
+
z-index: 40;
|
|
348
354
|
}
|
|
349
355
|
|
|
350
356
|
.an-replay-scrub::-moz-range-thumb {
|
|
351
|
-
width: 0.
|
|
352
|
-
height: 0.
|
|
357
|
+
width: 0.875rem;
|
|
358
|
+
height: 0.875rem;
|
|
353
359
|
border: 2px solid hsl(var(--background));
|
|
354
360
|
border-radius: 9999px;
|
|
355
|
-
background: hsl(
|
|
356
|
-
box-shadow:
|
|
361
|
+
background: hsl(217 91% 60%);
|
|
362
|
+
box-shadow:
|
|
363
|
+
0 0 0 1px hsl(217 91% 60% / 0.55),
|
|
364
|
+
0 1px 2px hsl(0 0% 0% / 0.35);
|
|
365
|
+
position: relative;
|
|
366
|
+
z-index: 40;
|
|
357
367
|
}
|
|
358
368
|
|
|
359
369
|
.dark
|
|
@@ -570,9 +580,9 @@
|
|
|
570
580
|
}
|
|
571
581
|
}
|
|
572
582
|
|
|
573
|
-
@container analytics-session-detail (min-width:
|
|
583
|
+
@container analytics-session-detail (min-width: 880px) {
|
|
574
584
|
.analytics-session-detail-workbench {
|
|
575
|
-
grid-template-columns: minmax(0, 1fr)
|
|
585
|
+
grid-template-columns: minmax(0, 1fr) minmax(260px, 300px);
|
|
576
586
|
}
|
|
577
587
|
|
|
578
588
|
.analytics-session-detail-timeline {
|
|
@@ -580,6 +590,12 @@
|
|
|
580
590
|
}
|
|
581
591
|
}
|
|
582
592
|
|
|
593
|
+
@container analytics-session-detail (min-width: 1200px) {
|
|
594
|
+
.analytics-session-detail-workbench {
|
|
595
|
+
grid-template-columns: minmax(0, 1fr) 330px;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
583
599
|
/* The dashboard grid responds to the available content width — which shrinks
|
|
584
600
|
when the agent sidebar is open — not the viewport. Rows are rendered
|
|
585
601
|
explicitly so deleting a card only expands the remaining cards in that row. */
|
|
@@ -964,6 +964,8 @@ const messages = {
|
|
|
964
964
|
timeline: "事件時間線",
|
|
965
965
|
replayTimeline: "回放時間線",
|
|
966
966
|
timelineDescription: "顯示 {{count}} / {{total}} 個有用事件。",
|
|
967
|
+
timelineSearch: "搜尋事件...",
|
|
968
|
+
timelineNoMatches: "沒有符合目前搜尋的時間線事件。",
|
|
967
969
|
noTimelineEvents: "未找到時間線標記",
|
|
968
970
|
sequence: "Sequence",
|
|
969
971
|
size: "Size",
|
|
@@ -1006,6 +1006,8 @@ const enUS = {
|
|
|
1006
1006
|
timeline: "Event timeline",
|
|
1007
1007
|
replayTimeline: "Replay timeline",
|
|
1008
1008
|
timelineDescription: "Showing {{count}} of {{total}} useful events.",
|
|
1009
|
+
timelineSearch: "Search events...",
|
|
1010
|
+
timelineNoMatches: "No timeline events match the current search.",
|
|
1009
1011
|
noTimelineEvents: "No timeline markers found",
|
|
1010
1012
|
sequence: "Sequence",
|
|
1011
1013
|
size: "Size",
|
|
@@ -8164,6 +8166,8 @@ const translatedSessionReplayTranslations = {
|
|
|
8164
8166
|
"用于重建此回放的受控分块。提供商 URL 保持私有。",
|
|
8165
8167
|
timeline: "事件时间线",
|
|
8166
8168
|
timelineDescription: "显示 {{count}} / {{total}} 个有用事件。",
|
|
8169
|
+
timelineSearch: "搜索事件...",
|
|
8170
|
+
timelineNoMatches: "没有符合当前搜索的时间线事件。",
|
|
8167
8171
|
started: "开始",
|
|
8168
8172
|
signedIn: "已登录",
|
|
8169
8173
|
anonymous: "匿名",
|
|
@@ -8287,6 +8291,9 @@ const translatedSessionReplayTranslations = {
|
|
|
8287
8291
|
"Fragmentos con acceso controlado usados para reconstruir esta reproducción. Las URL del proveedor permanecen privadas.",
|
|
8288
8292
|
timeline: "Línea de tiempo de eventos",
|
|
8289
8293
|
timelineDescription: "Mostrando {{count}} de {{total}} eventos útiles.",
|
|
8294
|
+
timelineSearch: "Buscar eventos...",
|
|
8295
|
+
timelineNoMatches:
|
|
8296
|
+
"Ningún evento de la línea de tiempo coincide con la búsqueda actual.",
|
|
8290
8297
|
started: "Inicio",
|
|
8291
8298
|
signedIn: "Con sesión iniciada",
|
|
8292
8299
|
anonymous: "Anónimo",
|
|
@@ -8412,6 +8419,9 @@ const translatedSessionReplayTranslations = {
|
|
|
8412
8419
|
timeline: "Chronologie des événements",
|
|
8413
8420
|
timelineDescription:
|
|
8414
8421
|
"Affichage de {{count}} événements utiles sur {{total}}.",
|
|
8422
|
+
timelineSearch: "Rechercher des événements...",
|
|
8423
|
+
timelineNoMatches:
|
|
8424
|
+
"Aucun événement de la chronologie ne correspond à la recherche actuelle.",
|
|
8415
8425
|
started: "Début",
|
|
8416
8426
|
signedIn: "Connecté",
|
|
8417
8427
|
anonymous: "Anonyme",
|
|
@@ -8536,6 +8546,9 @@ const translatedSessionReplayTranslations = {
|
|
|
8536
8546
|
timeline: "Ereignis-Timeline",
|
|
8537
8547
|
timelineDescription:
|
|
8538
8548
|
"{{count}} von {{total}} nützlichen Ereignissen werden angezeigt.",
|
|
8549
|
+
timelineSearch: "Ereignisse suchen...",
|
|
8550
|
+
timelineNoMatches:
|
|
8551
|
+
"Keine Timeline-Ereignisse entsprechen der aktuellen Suche.",
|
|
8539
8552
|
started: "Gestartet",
|
|
8540
8553
|
signedIn: "Angemeldet",
|
|
8541
8554
|
anonymous: "Anonym",
|
|
@@ -8659,6 +8672,9 @@ const translatedSessionReplayTranslations = {
|
|
|
8659
8672
|
timeline: "イベントタイムライン",
|
|
8660
8673
|
timelineDescription:
|
|
8661
8674
|
"有用なイベント {{count}} / {{total}} 件を表示しています。",
|
|
8675
|
+
timelineSearch: "イベントを検索...",
|
|
8676
|
+
timelineNoMatches:
|
|
8677
|
+
"現在の検索に一致するタイムラインイベントはありません。",
|
|
8662
8678
|
started: "開始",
|
|
8663
8679
|
signedIn: "サインイン済み",
|
|
8664
8680
|
anonymous: "匿名",
|
|
@@ -8781,6 +8797,8 @@ const translatedSessionReplayTranslations = {
|
|
|
8781
8797
|
timeline: "이벤트 타임라인",
|
|
8782
8798
|
timelineDescription:
|
|
8783
8799
|
"유용한 이벤트 {{count}} / {{total}}개를 표시합니다.",
|
|
8800
|
+
timelineSearch: "이벤트 검색...",
|
|
8801
|
+
timelineNoMatches: "현재 검색과 일치하는 타임라인 이벤트가 없습니다.",
|
|
8784
8802
|
started: "시작",
|
|
8785
8803
|
signedIn: "로그인됨",
|
|
8786
8804
|
anonymous: "익명",
|
|
@@ -8903,6 +8921,9 @@ const translatedSessionReplayTranslations = {
|
|
|
8903
8921
|
"Blocos com escopo usados para reconstruir este replay. As URLs do provedor permanecem privadas.",
|
|
8904
8922
|
timeline: "Linha do tempo de eventos",
|
|
8905
8923
|
timelineDescription: "Mostrando {{count}} de {{total}} eventos úteis.",
|
|
8924
|
+
timelineSearch: "Pesquisar eventos...",
|
|
8925
|
+
timelineNoMatches:
|
|
8926
|
+
"Nenhum evento da linha do tempo corresponde à pesquisa atual.",
|
|
8906
8927
|
started: "Início",
|
|
8907
8928
|
signedIn: "Logado",
|
|
8908
8929
|
anonymous: "Anônimo",
|
|
@@ -9023,6 +9044,8 @@ const translatedSessionReplayTranslations = {
|
|
|
9023
9044
|
"इस रीप्ले को फिर से बनाने के लिए उपयोग किए गए स्कोप्ड चंक। प्रदाता URL निजी रहते हैं।",
|
|
9024
9045
|
timeline: "इवेंट टाइमलाइन",
|
|
9025
9046
|
timelineDescription: "{{total}} में से {{count}} उपयोगी इवेंट दिखाए जा रहे हैं।",
|
|
9047
|
+
timelineSearch: "इवेंट खोजें...",
|
|
9048
|
+
timelineNoMatches: "वर्तमान खोज से कोई टाइमलाइन इवेंट मेल नहीं खाता।",
|
|
9026
9049
|
started: "शुरू हुआ",
|
|
9027
9050
|
signedIn: "साइन इन",
|
|
9028
9051
|
anonymous: "अनाम",
|
|
@@ -9143,6 +9166,8 @@ const translatedSessionReplayTranslations = {
|
|
|
9143
9166
|
"مقاطع محددة النطاق تُستخدم لإعادة بناء هذا التسجيل. تبقى عناوين URL الخاصة بالمزوّد خاصة.",
|
|
9144
9167
|
timeline: "الخط الزمني للأحداث",
|
|
9145
9168
|
timelineDescription: "عرض {{count}} من {{total}} أحداث مفيدة.",
|
|
9169
|
+
timelineSearch: "البحث عن الأحداث...",
|
|
9170
|
+
timelineNoMatches: "لا توجد أحداث في الخط الزمني تطابق البحث الحالي.",
|
|
9146
9171
|
started: "بدأت",
|
|
9147
9172
|
signedIn: "تم تسجيل الدخول",
|
|
9148
9173
|
anonymous: "مجهول",
|
|
@@ -69,11 +69,17 @@ export default function MonitoringPage() {
|
|
|
69
69
|
{inSubView ? null : (
|
|
70
70
|
<div className="flex items-center justify-between gap-2">
|
|
71
71
|
<TabsList>
|
|
72
|
-
<TabsTrigger
|
|
72
|
+
<TabsTrigger
|
|
73
|
+
value="uptime"
|
|
74
|
+
className="gap-2 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-sm"
|
|
75
|
+
>
|
|
73
76
|
<IconHeartbeat className="h-4 w-4" />
|
|
74
77
|
{t("navigation.monitoringUptime")}
|
|
75
78
|
</TabsTrigger>
|
|
76
|
-
<TabsTrigger
|
|
79
|
+
<TabsTrigger
|
|
80
|
+
value="errors"
|
|
81
|
+
className="gap-2 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-sm"
|
|
82
|
+
>
|
|
77
83
|
<IconAlertTriangle className="h-4 w-4" />
|
|
78
84
|
{t("navigation.monitoringErrors")}
|
|
79
85
|
</TabsTrigger>
|
|
@@ -101,6 +101,8 @@ interface MonitorFormValues {
|
|
|
101
101
|
severity: MonitorSeverity;
|
|
102
102
|
channels: Record<(typeof KNOWN_CHANNELS)[number], boolean>;
|
|
103
103
|
emailRecipients: string;
|
|
104
|
+
slackWebhookUrl: string;
|
|
105
|
+
webhookUrl: string;
|
|
104
106
|
cooldownMinutes: number;
|
|
105
107
|
enabled: boolean;
|
|
106
108
|
}
|
|
@@ -160,6 +162,8 @@ function defaultValues(monitor: MonitorSummary | null): MonitorFormValues {
|
|
|
160
162
|
webhook: channelSet.has("webhook"),
|
|
161
163
|
},
|
|
162
164
|
emailRecipients: (monitor?.emailRecipients ?? []).join(", "),
|
|
165
|
+
slackWebhookUrl: monitor?.slackWebhookUrl ?? "",
|
|
166
|
+
webhookUrl: monitor?.webhookUrl ?? "",
|
|
163
167
|
cooldownMinutes: monitor?.cooldownMinutes ?? 15,
|
|
164
168
|
enabled: monitor?.enabled ?? true,
|
|
165
169
|
};
|
|
@@ -206,6 +210,8 @@ function initialSections(monitor: MonitorSummary | null): SectionState {
|
|
|
206
210
|
alerting:
|
|
207
211
|
!isDefaultChannels ||
|
|
208
212
|
monitor.emailRecipients.length > 0 ||
|
|
213
|
+
Boolean(monitor.slackWebhookUrl) ||
|
|
214
|
+
Boolean(monitor.webhookUrl) ||
|
|
209
215
|
monitor.severity !== "critical",
|
|
210
216
|
advanced:
|
|
211
217
|
monitor.method !== "GET" ||
|
|
@@ -362,6 +368,30 @@ export function MonitorFormPage({
|
|
|
362
368
|
setError("channels", { message: t.channelRequired });
|
|
363
369
|
return;
|
|
364
370
|
}
|
|
371
|
+
if (
|
|
372
|
+
formValues.channels.email &&
|
|
373
|
+
!splitList(formValues.emailRecipients).length
|
|
374
|
+
) {
|
|
375
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
376
|
+
setError("emailRecipients", { message: t.emailRecipientsRequired });
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
if (formValues.channels.slack) {
|
|
380
|
+
const slackUrl = formValues.slackWebhookUrl.trim();
|
|
381
|
+
if (slackUrl && !isHttpUrl(slackUrl)) {
|
|
382
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
383
|
+
setError("slackWebhookUrl", { message: t.slackWebhookUrlInvalid });
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (formValues.channels.webhook) {
|
|
388
|
+
const hookUrl = formValues.webhookUrl.trim();
|
|
389
|
+
if (hookUrl && !isHttpUrl(hookUrl)) {
|
|
390
|
+
setSections((prev) => ({ ...prev, alerting: true }));
|
|
391
|
+
setError("webhookUrl", { message: t.webhookUrlInvalid });
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
365
395
|
|
|
366
396
|
const assertions = formValues.assertions
|
|
367
397
|
.map((assertion) => {
|
|
@@ -399,7 +429,15 @@ export function MonitorFormPage({
|
|
|
399
429
|
followRedirects: formValues.followRedirects,
|
|
400
430
|
severity: formValues.severity,
|
|
401
431
|
channels,
|
|
402
|
-
emailRecipients:
|
|
432
|
+
emailRecipients: formValues.channels.email
|
|
433
|
+
? splitList(formValues.emailRecipients)
|
|
434
|
+
: [],
|
|
435
|
+
slackWebhookUrl: formValues.channels.slack
|
|
436
|
+
? formValues.slackWebhookUrl.trim()
|
|
437
|
+
: null,
|
|
438
|
+
webhookUrl: formValues.channels.webhook
|
|
439
|
+
? formValues.webhookUrl.trim()
|
|
440
|
+
: null,
|
|
403
441
|
cooldownMinutes: formValues.cooldownMinutes,
|
|
404
442
|
enabled: formValues.enabled,
|
|
405
443
|
};
|
|
@@ -736,8 +774,8 @@ export function MonitorFormPage({
|
|
|
736
774
|
setSections((prev) => ({ ...prev, alerting: open }))
|
|
737
775
|
}
|
|
738
776
|
>
|
|
739
|
-
<div className="
|
|
740
|
-
<div className="space-y-1.5">
|
|
777
|
+
<div className="space-y-4">
|
|
778
|
+
<div className="space-y-1.5 sm:max-w-xs">
|
|
741
779
|
<Label htmlFor="monitor-severity">{t.fieldSeverity}</Label>
|
|
742
780
|
<Controller
|
|
743
781
|
control={control}
|
|
@@ -765,43 +803,108 @@ export function MonitorFormPage({
|
|
|
765
803
|
/>
|
|
766
804
|
</div>
|
|
767
805
|
|
|
768
|
-
<div className="space-y-
|
|
806
|
+
<div className="space-y-2">
|
|
769
807
|
<Label>{t.fieldChannels}</Label>
|
|
770
808
|
<Controller
|
|
771
809
|
control={control}
|
|
772
810
|
name="channels"
|
|
773
811
|
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
|
-
|
|
812
|
+
<div className="space-y-2">
|
|
813
|
+
{KNOWN_CHANNELS.map((channel) => {
|
|
814
|
+
const checked = field.value[channel];
|
|
815
|
+
return (
|
|
816
|
+
<div
|
|
817
|
+
key={channel}
|
|
818
|
+
className="rounded-md border border-border/60"
|
|
819
|
+
>
|
|
820
|
+
<label className="flex cursor-pointer items-start gap-2.5 px-3 py-2.5">
|
|
821
|
+
<Checkbox
|
|
822
|
+
className="mt-0.5"
|
|
823
|
+
checked={checked}
|
|
824
|
+
onCheckedChange={(next) =>
|
|
825
|
+
field.onChange({
|
|
826
|
+
...field.value,
|
|
827
|
+
[channel]: next === true,
|
|
828
|
+
})
|
|
829
|
+
}
|
|
830
|
+
/>
|
|
831
|
+
<span className="min-w-0">
|
|
832
|
+
<span className="block text-sm">
|
|
833
|
+
{channelLabel(channel, t)}
|
|
834
|
+
</span>
|
|
835
|
+
<span className="block text-xs text-muted-foreground">
|
|
836
|
+
{channelHint(channel, t)}
|
|
837
|
+
</span>
|
|
838
|
+
</span>
|
|
839
|
+
</label>
|
|
840
|
+
{channel === "email" && checked ? (
|
|
841
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
842
|
+
<Label htmlFor="monitor-emails">
|
|
843
|
+
{t.fieldEmailRecipients}
|
|
844
|
+
</Label>
|
|
845
|
+
<Textarea
|
|
846
|
+
id="monitor-emails"
|
|
847
|
+
className="min-h-[64px]"
|
|
848
|
+
placeholder={t.fieldEmailRecipientsPlaceholder}
|
|
849
|
+
{...register("emailRecipients")}
|
|
850
|
+
/>
|
|
851
|
+
{errors.emailRecipients ? (
|
|
852
|
+
<p className="text-xs text-destructive">
|
|
853
|
+
{errors.emailRecipients.message}
|
|
854
|
+
</p>
|
|
855
|
+
) : null}
|
|
856
|
+
</div>
|
|
857
|
+
) : null}
|
|
858
|
+
{channel === "slack" && checked ? (
|
|
859
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
860
|
+
<Label htmlFor="monitor-slack-url">
|
|
861
|
+
{t.fieldSlackWebhookUrl}
|
|
862
|
+
</Label>
|
|
863
|
+
<Input
|
|
864
|
+
id="monitor-slack-url"
|
|
865
|
+
type="url"
|
|
866
|
+
placeholder={t.fieldSlackWebhookUrlPlaceholder}
|
|
867
|
+
{...register("slackWebhookUrl")}
|
|
868
|
+
/>
|
|
869
|
+
{errors.slackWebhookUrl ? (
|
|
870
|
+
<p className="text-xs text-destructive">
|
|
871
|
+
{errors.slackWebhookUrl.message}
|
|
872
|
+
</p>
|
|
873
|
+
) : (
|
|
874
|
+
<p className="text-xs text-muted-foreground">
|
|
875
|
+
{t.fieldSlackWebhookUrlHint}
|
|
876
|
+
</p>
|
|
877
|
+
)}
|
|
878
|
+
</div>
|
|
879
|
+
) : null}
|
|
880
|
+
{channel === "webhook" && checked ? (
|
|
881
|
+
<div className="space-y-1.5 border-t border-border/60 px-3 py-2.5">
|
|
882
|
+
<Label htmlFor="monitor-webhook-url">
|
|
883
|
+
{t.fieldWebhookUrl}
|
|
884
|
+
</Label>
|
|
885
|
+
<Input
|
|
886
|
+
id="monitor-webhook-url"
|
|
887
|
+
type="url"
|
|
888
|
+
placeholder={t.fieldWebhookUrlPlaceholder}
|
|
889
|
+
{...register("webhookUrl")}
|
|
890
|
+
/>
|
|
891
|
+
{errors.webhookUrl ? (
|
|
892
|
+
<p className="text-xs text-destructive">
|
|
893
|
+
{errors.webhookUrl.message}
|
|
894
|
+
</p>
|
|
895
|
+
) : (
|
|
896
|
+
<p className="text-xs text-muted-foreground">
|
|
897
|
+
{t.fieldWebhookUrlHint}
|
|
898
|
+
</p>
|
|
899
|
+
)}
|
|
900
|
+
</div>
|
|
901
|
+
) : null}
|
|
902
|
+
</div>
|
|
903
|
+
);
|
|
904
|
+
})}
|
|
792
905
|
</div>
|
|
793
906
|
)}
|
|
794
907
|
/>
|
|
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
908
|
{errors.channels ? (
|
|
806
909
|
<p className="text-xs text-destructive">
|
|
807
910
|
{errors.channels.message}
|
|
@@ -1024,3 +1127,19 @@ function channelLabel(
|
|
|
1024
1127
|
return t.channelWebhook;
|
|
1025
1128
|
}
|
|
1026
1129
|
}
|
|
1130
|
+
|
|
1131
|
+
function channelHint(
|
|
1132
|
+
channel: (typeof KNOWN_CHANNELS)[number],
|
|
1133
|
+
t: ReturnType<typeof useUptimeT>,
|
|
1134
|
+
): string {
|
|
1135
|
+
switch (channel) {
|
|
1136
|
+
case "inbox":
|
|
1137
|
+
return t.channelInboxHint;
|
|
1138
|
+
case "email":
|
|
1139
|
+
return t.channelEmailHint;
|
|
1140
|
+
case "slack":
|
|
1141
|
+
return t.channelSlackHint;
|
|
1142
|
+
case "webhook":
|
|
1143
|
+
return t.channelWebhookHint;
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
@@ -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
|
}
|