@agent-native/core 0.92.0 → 0.92.2
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 +1 -1
- package/corpus/core/CHANGELOG.md +20 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/application-state/store.ts +12 -1
- package/corpus/core/src/cli/sync-builder-starter-manifest.ts +29 -1
- package/corpus/core/src/client/AssistantChat.tsx +27 -14
- package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
- package/corpus/core/src/client/agent-chat-adapter.ts +37 -10
- package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
- 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/settings/SettingsPanel.tsx +205 -52
- package/corpus/core/src/client/settings/SettingsSection.tsx +8 -1
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
- 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/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 +1 -22
- package/corpus/core/src/resources/handlers.ts +10 -8
- package/corpus/core/src/server/poll.ts +293 -8
- 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/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/default/AGENTS.md +4 -2
- package/corpus/core/src/templates/headless/AGENTS.md +4 -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/storing-data/SKILL.md +5 -1
- package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
- package/corpus/core/src/templates/workspace-root/AGENTS.md +7 -1
- 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/storing-data/SKILL.md +5 -1
- package/corpus/templates/analytics/AGENTS.md +33 -14
- 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 +1 -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/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/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 +6 -3
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +26 -30
- 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-emails-now-show-the-message-without-raw-metadata-json.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-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-production-session-replay-now-requires-private-blob-storage-.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-team-settings-show-access-controls-next-to-member-lists.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-checks-no-longer-count-ssrf-setup-time-against-the-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-checks-reuse-one-keep-alive-connection-so-recorded-la.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-confirm-transient-timeout-failures-befor.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 +30 -18
- package/corpus/templates/analytics/server/db/schema-monitoring.ts +1 -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 +244 -33
- package/corpus/templates/analytics/server/plugins/db.ts +112 -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/storing-data/SKILL.md +5 -1
- 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.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/storing-data/SKILL.md +5 -1
- 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.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.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-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-recaps-now-keep-summaries-action-items-and-transcrip.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/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/storing-data/SKILL.md +5 -1
- package/corpus/templates/content/AGENTS.md +4 -0
- 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/design/.agents/skills/actions/SKILL.md +5 -0
- package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -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.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/storing-data/SKILL.md +5 -1
- 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.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/storing-data/SKILL.md +5 -1
- 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.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.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/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/sync-builder-starter-manifest.d.ts.map +1 -1
- package/dist/cli/sync-builder-starter-manifest.js +24 -1
- package/dist/cli/sync-builder-starter-manifest.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +24 -13
- package/dist/client/AssistantChat.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 +28 -9
- package/dist/client/agent-chat-adapter.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/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/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +37 -14
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsSection.js +1 -1
- 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/collab/routes.d.ts +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/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.js +1 -17
- package/dist/notifications/channels.js.map +1 -1
- package/dist/notifications/routes.d.ts +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-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/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/storing-data/SKILL.md +5 -1
- package/dist/templates/default/AGENTS.md +4 -2
- package/dist/templates/headless/AGENTS.md +4 -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/storing-data/SKILL.md +5 -1
- package/dist/templates/workspace-core/AGENTS.md +7 -1
- package/dist/templates/workspace-root/AGENTS.md +7 -1
- package/package.json +1 -1
- 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/storing-data/SKILL.md +5 -1
- package/src/templates/default/AGENTS.md +4 -2
- package/src/templates/headless/AGENTS.md +4 -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/storing-data/SKILL.md +5 -1
- package/src/templates/workspace-core/AGENTS.md +7 -1
- package/src/templates/workspace-root/AGENTS.md +7 -1
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
IconGauge,
|
|
24
24
|
IconUserCircle,
|
|
25
25
|
IconApps,
|
|
26
|
+
IconUsersGroup,
|
|
26
27
|
} from "@tabler/icons-react";
|
|
27
28
|
import React, {
|
|
28
29
|
Suspense,
|
|
@@ -43,6 +44,7 @@ import {
|
|
|
43
44
|
TooltipContent,
|
|
44
45
|
TooltipTrigger,
|
|
45
46
|
} from "../components/ui/tooltip.js";
|
|
47
|
+
import { TeamPage } from "../org/TeamPage.js";
|
|
46
48
|
import { callAction } from "../use-action.js";
|
|
47
49
|
import { uploadAvatar, useAvatarUrl } from "../use-avatar.js";
|
|
48
50
|
import { useDevMode } from "../use-dev-mode.js";
|
|
@@ -119,6 +121,16 @@ function fieldLabelClass(isPage: boolean): string {
|
|
|
119
121
|
return cn("font-medium text-foreground", isPage ? "text-sm" : "text-[12px]");
|
|
120
122
|
}
|
|
121
123
|
|
|
124
|
+
// Secondary label / row-title size (e.g. "This app", provider names).
|
|
125
|
+
function subTextClass(isPage: boolean): string {
|
|
126
|
+
return isPage ? "text-sm" : "text-[11px]";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Helper / hint / status note size.
|
|
130
|
+
function noteTextClass(isPage: boolean): string {
|
|
131
|
+
return isPage ? "text-xs" : "text-[10px]";
|
|
132
|
+
}
|
|
133
|
+
|
|
122
134
|
function textInputClass(isPage: boolean): string {
|
|
123
135
|
return cn(
|
|
124
136
|
"flex w-full rounded-md border border-border bg-background text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50",
|
|
@@ -1317,6 +1329,7 @@ function AppModelDefaultsSectionInner({
|
|
|
1317
1329
|
open?: boolean;
|
|
1318
1330
|
onToggle?: () => void;
|
|
1319
1331
|
}) {
|
|
1332
|
+
const isPage = useSettingsSurface() === "page";
|
|
1320
1333
|
const [settings, setSettings] = useState<AppModelDefaultsResponse | null>(
|
|
1321
1334
|
null,
|
|
1322
1335
|
);
|
|
@@ -1471,19 +1484,39 @@ function AppModelDefaultsSectionInner({
|
|
|
1471
1484
|
<SettingsSkeleton lines={2} />
|
|
1472
1485
|
) : settings ? (
|
|
1473
1486
|
<div className="space-y-2">
|
|
1474
|
-
<div
|
|
1487
|
+
<div
|
|
1488
|
+
className={cn(
|
|
1489
|
+
"rounded-md border border-border bg-accent/20",
|
|
1490
|
+
isPage ? "px-3.5 py-3" : "px-2.5 py-2",
|
|
1491
|
+
)}
|
|
1492
|
+
>
|
|
1475
1493
|
<div className="mb-2 flex items-center justify-between gap-2">
|
|
1476
1494
|
<div className="min-w-0">
|
|
1477
|
-
<p
|
|
1495
|
+
<p
|
|
1496
|
+
className={cn(
|
|
1497
|
+
"truncate font-medium text-foreground",
|
|
1498
|
+
subTextClass(isPage),
|
|
1499
|
+
)}
|
|
1500
|
+
>
|
|
1478
1501
|
{friendlyAppName(settings.appId) || "This app"}
|
|
1479
1502
|
</p>
|
|
1480
|
-
<p
|
|
1503
|
+
<p
|
|
1504
|
+
className={cn(
|
|
1505
|
+
"mt-0.5 text-muted-foreground",
|
|
1506
|
+
noteTextClass(isPage),
|
|
1507
|
+
)}
|
|
1508
|
+
>
|
|
1481
1509
|
{hasAppDefault
|
|
1482
1510
|
? `Applies to ${scopeLabel}.`
|
|
1483
1511
|
: "Using the global LLM default."}
|
|
1484
1512
|
</p>
|
|
1485
1513
|
</div>
|
|
1486
|
-
<span
|
|
1514
|
+
<span
|
|
1515
|
+
className={cn(
|
|
1516
|
+
"shrink-0 rounded-full bg-background px-2 py-0.5 font-medium text-muted-foreground",
|
|
1517
|
+
noteTextClass(isPage),
|
|
1518
|
+
)}
|
|
1519
|
+
>
|
|
1487
1520
|
{settings.source}
|
|
1488
1521
|
</span>
|
|
1489
1522
|
</div>
|
|
@@ -1504,7 +1537,7 @@ function AppModelDefaultsSectionInner({
|
|
|
1504
1537
|
/>
|
|
1505
1538
|
|
|
1506
1539
|
<div className="space-y-1.5">
|
|
1507
|
-
<p className=
|
|
1540
|
+
<p className={fieldLabelClass(isPage)}>Model</p>
|
|
1508
1541
|
<input
|
|
1509
1542
|
type="text"
|
|
1510
1543
|
list={`app-model-suggestions-${selectedEngine}`}
|
|
@@ -1520,8 +1553,8 @@ function AppModelDefaultsSectionInner({
|
|
|
1520
1553
|
placeholder={selectedEngineInfo?.defaultModel ?? "model-id"}
|
|
1521
1554
|
spellCheck={false}
|
|
1522
1555
|
autoComplete="off"
|
|
1523
|
-
className="
|
|
1524
|
-
style={CONTROL_STYLE}
|
|
1556
|
+
className={cn(textInputClass(isPage), "disabled:opacity-60")}
|
|
1557
|
+
style={isPage ? CONTROL_STYLE_PAGE : CONTROL_STYLE}
|
|
1525
1558
|
/>
|
|
1526
1559
|
{modelOptions.length > 0 && (
|
|
1527
1560
|
<datalist id={`app-model-suggestions-${selectedEngine}`}>
|
|
@@ -1541,12 +1574,15 @@ function AppModelDefaultsSectionInner({
|
|
|
1541
1574
|
type="button"
|
|
1542
1575
|
onClick={save}
|
|
1543
1576
|
disabled={!hasPendingChange || saving}
|
|
1544
|
-
className=
|
|
1577
|
+
className={pillButtonClass(isPage, "solid")}
|
|
1545
1578
|
>
|
|
1546
1579
|
{saving ? (
|
|
1547
|
-
<IconLoader2
|
|
1580
|
+
<IconLoader2
|
|
1581
|
+
size={isPage ? 14 : 10}
|
|
1582
|
+
className="animate-spin"
|
|
1583
|
+
/>
|
|
1548
1584
|
) : saved ? (
|
|
1549
|
-
<IconCheck size={10} />
|
|
1585
|
+
<IconCheck size={isPage ? 14 : 10} />
|
|
1550
1586
|
) : (
|
|
1551
1587
|
"Save"
|
|
1552
1588
|
)}
|
|
@@ -1555,7 +1591,7 @@ function AppModelDefaultsSectionInner({
|
|
|
1555
1591
|
type="button"
|
|
1556
1592
|
onClick={reset}
|
|
1557
1593
|
disabled={!settings.canUpdate || !hasAppDefault || saving}
|
|
1558
|
-
className=
|
|
1594
|
+
className={pillButtonClass(isPage, "outline")}
|
|
1559
1595
|
>
|
|
1560
1596
|
Reset
|
|
1561
1597
|
</button>
|
|
@@ -1563,29 +1599,46 @@ function AppModelDefaultsSectionInner({
|
|
|
1563
1599
|
</div>
|
|
1564
1600
|
|
|
1565
1601
|
{!settings.canUpdate && (
|
|
1566
|
-
<p
|
|
1602
|
+
<p
|
|
1603
|
+
className={cn(
|
|
1604
|
+
"mt-2 text-muted-foreground",
|
|
1605
|
+
noteTextClass(isPage),
|
|
1606
|
+
)}
|
|
1607
|
+
>
|
|
1567
1608
|
Only organization owners and admins can change app model
|
|
1568
1609
|
defaults.
|
|
1569
1610
|
</p>
|
|
1570
1611
|
)}
|
|
1571
1612
|
{selectedEngineInfo?.packageInstalled === false ? (
|
|
1572
|
-
<p
|
|
1613
|
+
<p
|
|
1614
|
+
className={cn(
|
|
1615
|
+
"mt-2 text-muted-foreground",
|
|
1616
|
+
noteTextClass(isPage),
|
|
1617
|
+
)}
|
|
1618
|
+
>
|
|
1573
1619
|
This app does not include the optional runtime packages for this
|
|
1574
1620
|
provider.
|
|
1575
1621
|
</p>
|
|
1576
1622
|
) : selectedEngineInfo && !selectedEngineInfo.configured ? (
|
|
1577
|
-
<p
|
|
1623
|
+
<p
|
|
1624
|
+
className={cn(
|
|
1625
|
+
"mt-2 text-muted-foreground",
|
|
1626
|
+
noteTextClass(isPage),
|
|
1627
|
+
)}
|
|
1628
|
+
>
|
|
1578
1629
|
Credentials for this provider were not detected; runtime will
|
|
1579
1630
|
fall back if the model cannot be used.
|
|
1580
1631
|
</p>
|
|
1581
1632
|
) : null}
|
|
1582
1633
|
{error && (
|
|
1583
|
-
<p className="mt-2 text-
|
|
1634
|
+
<p className={cn("mt-2 text-destructive", noteTextClass(isPage))}>
|
|
1635
|
+
{error}
|
|
1636
|
+
</p>
|
|
1584
1637
|
)}
|
|
1585
1638
|
</div>
|
|
1586
1639
|
</div>
|
|
1587
1640
|
) : (
|
|
1588
|
-
<p className="text-
|
|
1641
|
+
<p className={cn("text-muted-foreground", noteTextClass(isPage))}>
|
|
1589
1642
|
App model defaults are unavailable.
|
|
1590
1643
|
</p>
|
|
1591
1644
|
)}
|
|
@@ -1602,6 +1655,10 @@ function EmailSectionInner({
|
|
|
1602
1655
|
open?: boolean;
|
|
1603
1656
|
onToggle?: () => void;
|
|
1604
1657
|
}) {
|
|
1658
|
+
const isPage = useSettingsSurface() === "page";
|
|
1659
|
+
const emailInputCls = cn(textInputClass(isPage), "flex-1");
|
|
1660
|
+
const emailBtnCls = pillButtonClass(isPage, "solid");
|
|
1661
|
+
const emailIconSize = isPage ? 14 : 10;
|
|
1605
1662
|
const [envKeys, setEnvKeys] = useState<
|
|
1606
1663
|
Array<{ key: string; configured: boolean }>
|
|
1607
1664
|
>([]);
|
|
@@ -1690,7 +1747,12 @@ function EmailSectionInner({
|
|
|
1690
1747
|
) : (
|
|
1691
1748
|
<div className="space-y-2">
|
|
1692
1749
|
<label className="block space-y-1">
|
|
1693
|
-
<span
|
|
1750
|
+
<span
|
|
1751
|
+
className={cn(
|
|
1752
|
+
"uppercase tracking-wide text-muted-foreground",
|
|
1753
|
+
noteTextClass(isPage),
|
|
1754
|
+
)}
|
|
1755
|
+
>
|
|
1694
1756
|
Provider
|
|
1695
1757
|
</span>
|
|
1696
1758
|
<select
|
|
@@ -1698,7 +1760,8 @@ function EmailSectionInner({
|
|
|
1698
1760
|
onChange={(e) =>
|
|
1699
1761
|
setEmailProvider(e.target.value as "resend" | "sendgrid")
|
|
1700
1762
|
}
|
|
1701
|
-
className="w-full
|
|
1763
|
+
className={cn(textInputClass(isPage), "w-full")}
|
|
1764
|
+
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
1702
1765
|
>
|
|
1703
1766
|
<option value="resend">Resend</option>
|
|
1704
1767
|
<option value="sendgrid">SendGrid</option>
|
|
@@ -1712,8 +1775,13 @@ function EmailSectionInner({
|
|
|
1712
1775
|
docsLabel="Get a Resend key"
|
|
1713
1776
|
>
|
|
1714
1777
|
{resendConfigured ? (
|
|
1715
|
-
<div
|
|
1716
|
-
|
|
1778
|
+
<div
|
|
1779
|
+
className={cn(
|
|
1780
|
+
"mb-1 flex items-center gap-1.5 text-green-500",
|
|
1781
|
+
noteTextClass(isPage),
|
|
1782
|
+
)}
|
|
1783
|
+
>
|
|
1784
|
+
<IconCheck size={emailIconSize} />
|
|
1717
1785
|
RESEND_API_KEY configured
|
|
1718
1786
|
</div>
|
|
1719
1787
|
) : (
|
|
@@ -1726,12 +1794,12 @@ function EmailSectionInner({
|
|
|
1726
1794
|
if (e.key === "Enter") saveResend();
|
|
1727
1795
|
}}
|
|
1728
1796
|
placeholder="re_..."
|
|
1729
|
-
className=
|
|
1797
|
+
className={emailInputCls}
|
|
1730
1798
|
/>
|
|
1731
1799
|
<button
|
|
1732
1800
|
onClick={saveResend}
|
|
1733
1801
|
disabled={!resendKey.trim() || saving}
|
|
1734
|
-
className=
|
|
1802
|
+
className={emailBtnCls}
|
|
1735
1803
|
>
|
|
1736
1804
|
{saving ? (
|
|
1737
1805
|
<IconLoader2 size={10} className="animate-spin" />
|
|
@@ -1744,8 +1812,13 @@ function EmailSectionInner({
|
|
|
1744
1812
|
</div>
|
|
1745
1813
|
)}
|
|
1746
1814
|
{fromConfigured ? (
|
|
1747
|
-
<div
|
|
1748
|
-
|
|
1815
|
+
<div
|
|
1816
|
+
className={cn(
|
|
1817
|
+
"flex items-center gap-1.5 text-green-500",
|
|
1818
|
+
noteTextClass(isPage),
|
|
1819
|
+
)}
|
|
1820
|
+
>
|
|
1821
|
+
<IconCheck size={emailIconSize} />
|
|
1749
1822
|
EMAIL_FROM configured
|
|
1750
1823
|
</div>
|
|
1751
1824
|
) : (
|
|
@@ -1758,13 +1831,13 @@ function EmailSectionInner({
|
|
|
1758
1831
|
if (e.key === "Enter") saveResend();
|
|
1759
1832
|
}}
|
|
1760
1833
|
placeholder="From address - e.g. Acme <hi@acme.com>"
|
|
1761
|
-
className=
|
|
1834
|
+
className={emailInputCls}
|
|
1762
1835
|
/>
|
|
1763
1836
|
{!resendConfigured ? null : (
|
|
1764
1837
|
<button
|
|
1765
1838
|
onClick={saveResend}
|
|
1766
1839
|
disabled={!fromAddr.trim() || saving}
|
|
1767
|
-
className=
|
|
1840
|
+
className={emailBtnCls}
|
|
1768
1841
|
>
|
|
1769
1842
|
{saving ? (
|
|
1770
1843
|
<IconLoader2 size={10} className="animate-spin" />
|
|
@@ -1785,8 +1858,13 @@ function EmailSectionInner({
|
|
|
1785
1858
|
docsLabel="Get a SendGrid key"
|
|
1786
1859
|
>
|
|
1787
1860
|
{sendgridConfigured ? (
|
|
1788
|
-
<div
|
|
1789
|
-
|
|
1861
|
+
<div
|
|
1862
|
+
className={cn(
|
|
1863
|
+
"mb-1 flex items-center gap-1.5 text-green-500",
|
|
1864
|
+
noteTextClass(isPage),
|
|
1865
|
+
)}
|
|
1866
|
+
>
|
|
1867
|
+
<IconCheck size={emailIconSize} />
|
|
1790
1868
|
SENDGRID_API_KEY configured
|
|
1791
1869
|
</div>
|
|
1792
1870
|
) : (
|
|
@@ -1799,12 +1877,12 @@ function EmailSectionInner({
|
|
|
1799
1877
|
if (e.key === "Enter") saveSendgrid();
|
|
1800
1878
|
}}
|
|
1801
1879
|
placeholder="SG...."
|
|
1802
|
-
className=
|
|
1880
|
+
className={emailInputCls}
|
|
1803
1881
|
/>
|
|
1804
1882
|
<button
|
|
1805
1883
|
onClick={saveSendgrid}
|
|
1806
1884
|
disabled={!sendgridKey.trim() || saving}
|
|
1807
|
-
className=
|
|
1885
|
+
className={emailBtnCls}
|
|
1808
1886
|
>
|
|
1809
1887
|
{saving ? (
|
|
1810
1888
|
<IconLoader2 size={10} className="animate-spin" />
|
|
@@ -1817,8 +1895,13 @@ function EmailSectionInner({
|
|
|
1817
1895
|
</div>
|
|
1818
1896
|
)}
|
|
1819
1897
|
{fromConfigured ? (
|
|
1820
|
-
<div
|
|
1821
|
-
|
|
1898
|
+
<div
|
|
1899
|
+
className={cn(
|
|
1900
|
+
"flex items-center gap-1.5 text-green-500",
|
|
1901
|
+
noteTextClass(isPage),
|
|
1902
|
+
)}
|
|
1903
|
+
>
|
|
1904
|
+
<IconCheck size={emailIconSize} />
|
|
1822
1905
|
EMAIL_FROM configured
|
|
1823
1906
|
</div>
|
|
1824
1907
|
) : (
|
|
@@ -1831,13 +1914,13 @@ function EmailSectionInner({
|
|
|
1831
1914
|
if (e.key === "Enter") saveSendgrid();
|
|
1832
1915
|
}}
|
|
1833
1916
|
placeholder="From address - e.g. Acme <hi@acme.com>"
|
|
1834
|
-
className=
|
|
1917
|
+
className={emailInputCls}
|
|
1835
1918
|
/>
|
|
1836
1919
|
{!sendgridConfigured ? null : (
|
|
1837
1920
|
<button
|
|
1838
1921
|
onClick={saveSendgrid}
|
|
1839
1922
|
disabled={!fromAddr.trim() || saving}
|
|
1840
|
-
className=
|
|
1923
|
+
className={emailBtnCls}
|
|
1841
1924
|
>
|
|
1842
1925
|
{saving ? (
|
|
1843
1926
|
<IconLoader2 size={10} className="animate-spin" />
|
|
@@ -1879,6 +1962,7 @@ function AgentLimitsSectionInner({
|
|
|
1879
1962
|
open?: boolean;
|
|
1880
1963
|
onToggle?: () => void;
|
|
1881
1964
|
}) {
|
|
1965
|
+
const isPage = useSettingsSurface() === "page";
|
|
1882
1966
|
const [settings, setSettings] = useState<AgentLoopSettingsResponse | null>(
|
|
1883
1967
|
null,
|
|
1884
1968
|
);
|
|
@@ -2014,18 +2098,38 @@ function AgentLimitsSectionInner({
|
|
|
2014
2098
|
<SettingsSkeleton lines={2} />
|
|
2015
2099
|
) : settings ? (
|
|
2016
2100
|
<div className="space-y-2">
|
|
2017
|
-
<div
|
|
2101
|
+
<div
|
|
2102
|
+
className={cn(
|
|
2103
|
+
"rounded-md border border-border bg-accent/20",
|
|
2104
|
+
isPage ? "px-3.5 py-3" : "px-2.5 py-2",
|
|
2105
|
+
)}
|
|
2106
|
+
>
|
|
2018
2107
|
<div className="flex items-center justify-between gap-2">
|
|
2019
2108
|
<div>
|
|
2020
|
-
<p
|
|
2109
|
+
<p
|
|
2110
|
+
className={cn(
|
|
2111
|
+
"font-medium text-foreground",
|
|
2112
|
+
subTextClass(isPage),
|
|
2113
|
+
)}
|
|
2114
|
+
>
|
|
2021
2115
|
Max iterations
|
|
2022
2116
|
</p>
|
|
2023
|
-
<p
|
|
2117
|
+
<p
|
|
2118
|
+
className={cn(
|
|
2119
|
+
"mt-0.5 text-muted-foreground",
|
|
2120
|
+
noteTextClass(isPage),
|
|
2121
|
+
)}
|
|
2122
|
+
>
|
|
2024
2123
|
Applies to {scopeLabel}. Default is{" "}
|
|
2025
2124
|
{settings.defaultMaxIterations.toLocaleString()}.
|
|
2026
2125
|
</p>
|
|
2027
2126
|
</div>
|
|
2028
|
-
<span
|
|
2127
|
+
<span
|
|
2128
|
+
className={cn(
|
|
2129
|
+
"rounded-full bg-background px-2 py-0.5 font-medium text-muted-foreground",
|
|
2130
|
+
noteTextClass(isPage),
|
|
2131
|
+
)}
|
|
2132
|
+
>
|
|
2029
2133
|
{settings.source}
|
|
2030
2134
|
</span>
|
|
2031
2135
|
</div>
|
|
@@ -2043,18 +2147,25 @@ function AgentLimitsSectionInner({
|
|
|
2043
2147
|
onKeyDown={(e) => {
|
|
2044
2148
|
if (e.key === "Enter" && hasPendingChange) void save();
|
|
2045
2149
|
}}
|
|
2046
|
-
className=
|
|
2150
|
+
className={cn(
|
|
2151
|
+
textInputClass(isPage),
|
|
2152
|
+
"min-w-0 flex-1 disabled:opacity-60",
|
|
2153
|
+
)}
|
|
2154
|
+
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
2047
2155
|
/>
|
|
2048
2156
|
<button
|
|
2049
2157
|
type="button"
|
|
2050
2158
|
onClick={save}
|
|
2051
2159
|
disabled={!hasPendingChange || saving}
|
|
2052
|
-
className=
|
|
2160
|
+
className={pillButtonClass(isPage, "solid")}
|
|
2053
2161
|
>
|
|
2054
2162
|
{saving ? (
|
|
2055
|
-
<IconLoader2
|
|
2163
|
+
<IconLoader2
|
|
2164
|
+
size={isPage ? 14 : 10}
|
|
2165
|
+
className="animate-spin"
|
|
2166
|
+
/>
|
|
2056
2167
|
) : saved ? (
|
|
2057
|
-
<IconCheck size={10} />
|
|
2168
|
+
<IconCheck size={isPage ? 14 : 10} />
|
|
2058
2169
|
) : (
|
|
2059
2170
|
"Save"
|
|
2060
2171
|
)}
|
|
@@ -2067,23 +2178,30 @@ function AgentLimitsSectionInner({
|
|
|
2067
2178
|
saving ||
|
|
2068
2179
|
settings.maxIterations === settings.defaultMaxIterations
|
|
2069
2180
|
}
|
|
2070
|
-
className=
|
|
2181
|
+
className={pillButtonClass(isPage, "outline")}
|
|
2071
2182
|
>
|
|
2072
2183
|
Reset
|
|
2073
2184
|
</button>
|
|
2074
2185
|
</div>
|
|
2075
2186
|
{!settings.canUpdate && (
|
|
2076
|
-
<p
|
|
2187
|
+
<p
|
|
2188
|
+
className={cn(
|
|
2189
|
+
"mt-2 text-muted-foreground",
|
|
2190
|
+
noteTextClass(isPage),
|
|
2191
|
+
)}
|
|
2192
|
+
>
|
|
2077
2193
|
Only organization owners and admins can change this limit.
|
|
2078
2194
|
</p>
|
|
2079
2195
|
)}
|
|
2080
2196
|
{error && (
|
|
2081
|
-
<p className="mt-2 text-
|
|
2197
|
+
<p className={cn("mt-2 text-destructive", noteTextClass(isPage))}>
|
|
2198
|
+
{error}
|
|
2199
|
+
</p>
|
|
2082
2200
|
)}
|
|
2083
2201
|
</div>
|
|
2084
2202
|
</div>
|
|
2085
2203
|
) : (
|
|
2086
|
-
<p className="text-
|
|
2204
|
+
<p className={cn("text-muted-foreground", noteTextClass(isPage))}>
|
|
2087
2205
|
Agent limit settings are unavailable.
|
|
2088
2206
|
</p>
|
|
2089
2207
|
)}
|
|
@@ -2438,6 +2556,7 @@ function AccountSectionInner({
|
|
|
2438
2556
|
open: boolean;
|
|
2439
2557
|
onToggle: () => void;
|
|
2440
2558
|
}) {
|
|
2559
|
+
const isPage = useSettingsSurface() === "page";
|
|
2441
2560
|
const { session, isLoading } = useSession();
|
|
2442
2561
|
const email = session?.email;
|
|
2443
2562
|
const avatarUrl = useAvatarUrl(email);
|
|
@@ -2481,7 +2600,12 @@ function AccountSectionInner({
|
|
|
2481
2600
|
onToggle={onToggle}
|
|
2482
2601
|
>
|
|
2483
2602
|
<div className="flex items-center gap-3">
|
|
2484
|
-
<div
|
|
2603
|
+
<div
|
|
2604
|
+
className={cn(
|
|
2605
|
+
"flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-accent font-semibold text-muted-foreground",
|
|
2606
|
+
isPage ? "h-14 w-14 text-[15px]" : "h-12 w-12 text-[13px]",
|
|
2607
|
+
)}
|
|
2608
|
+
>
|
|
2485
2609
|
{avatarUrl ? (
|
|
2486
2610
|
<img
|
|
2487
2611
|
src={avatarUrl}
|
|
@@ -2493,21 +2617,36 @@ function AccountSectionInner({
|
|
|
2493
2617
|
)}
|
|
2494
2618
|
</div>
|
|
2495
2619
|
<div className="min-w-0 flex-1">
|
|
2496
|
-
<p
|
|
2620
|
+
<p
|
|
2621
|
+
className={cn(
|
|
2622
|
+
"truncate font-medium text-foreground",
|
|
2623
|
+
isPage ? "text-sm" : "text-[12px]",
|
|
2624
|
+
)}
|
|
2625
|
+
>
|
|
2497
2626
|
{isLoading ? "Loading..." : displayName}
|
|
2498
2627
|
</p>
|
|
2499
2628
|
{email && (
|
|
2500
|
-
<p
|
|
2629
|
+
<p
|
|
2630
|
+
className={cn(
|
|
2631
|
+
"truncate text-muted-foreground",
|
|
2632
|
+
subTextClass(isPage),
|
|
2633
|
+
)}
|
|
2634
|
+
>
|
|
2501
2635
|
{email}
|
|
2502
2636
|
</p>
|
|
2503
2637
|
)}
|
|
2504
2638
|
{status === "saved" && (
|
|
2505
|
-
<p
|
|
2639
|
+
<p
|
|
2640
|
+
className={cn(
|
|
2641
|
+
"mt-1 text-green-600 dark:text-green-400",
|
|
2642
|
+
subTextClass(isPage),
|
|
2643
|
+
)}
|
|
2644
|
+
>
|
|
2506
2645
|
Photo updated
|
|
2507
2646
|
</p>
|
|
2508
2647
|
)}
|
|
2509
2648
|
{status === "error" && (
|
|
2510
|
-
<p className="mt-1 text-
|
|
2649
|
+
<p className={cn("mt-1 text-destructive", subTextClass(isPage))}>
|
|
2511
2650
|
Could not update photo
|
|
2512
2651
|
</p>
|
|
2513
2652
|
)}
|
|
@@ -2523,7 +2662,10 @@ function AccountSectionInner({
|
|
|
2523
2662
|
type="button"
|
|
2524
2663
|
disabled={!email || uploading}
|
|
2525
2664
|
onClick={() => fileInputRef.current?.click()}
|
|
2526
|
-
className=
|
|
2665
|
+
className={cn(
|
|
2666
|
+
pillButtonClass(isPage, "outline"),
|
|
2667
|
+
"shrink-0 justify-center",
|
|
2668
|
+
)}
|
|
2527
2669
|
>
|
|
2528
2670
|
{uploading ? "Uploading..." : "Change photo"}
|
|
2529
2671
|
</button>
|
|
@@ -3063,6 +3205,17 @@ export function useAgentSettingsTabs(): SettingsTabItem[] {
|
|
|
3063
3205
|
/>
|
|
3064
3206
|
),
|
|
3065
3207
|
},
|
|
3208
|
+
{
|
|
3209
|
+
id: "organization",
|
|
3210
|
+
label: "Organization",
|
|
3211
|
+
icon: IconUsersGroup,
|
|
3212
|
+
keywords: "organization org team members invites collaborators",
|
|
3213
|
+
content: (
|
|
3214
|
+
<div className="mx-auto w-full max-w-2xl">
|
|
3215
|
+
<TeamPage showTitle={false} />
|
|
3216
|
+
</div>
|
|
3217
|
+
),
|
|
3218
|
+
},
|
|
3066
3219
|
{
|
|
3067
3220
|
id: "workspace",
|
|
3068
3221
|
label: "Workspace",
|
|
@@ -157,7 +157,14 @@ function PageSettingsSection({
|
|
|
157
157
|
/>
|
|
158
158
|
</button>
|
|
159
159
|
{open && (
|
|
160
|
-
<div
|
|
160
|
+
<div
|
|
161
|
+
// `data-agent-native-settings-page` lets the shared stylesheet nudge
|
|
162
|
+
// the smallest fixed type (authored dense for the compact sidebar) up
|
|
163
|
+
// to a comfortable, consistent size on the full settings page so every
|
|
164
|
+
// framework section body reads like the shadcn cards around it.
|
|
165
|
+
data-agent-native-settings-page=""
|
|
166
|
+
className="border-t border-border/60 px-5 pb-5 pt-5 sm:px-6 sm:pb-6"
|
|
167
|
+
>
|
|
161
168
|
{children}
|
|
162
169
|
</div>
|
|
163
170
|
)}
|
|
@@ -115,20 +115,33 @@ function normalizeTabId(value?: string | null): string | null {
|
|
|
115
115
|
if (normalized === "workspace" || normalized === "workspace-settings") {
|
|
116
116
|
return "workspace";
|
|
117
117
|
}
|
|
118
|
-
if (normalized === "organization" || normalized === "org") {
|
|
119
|
-
return "team";
|
|
120
|
-
}
|
|
121
118
|
return normalized;
|
|
122
119
|
}
|
|
123
120
|
|
|
121
|
+
function resolveTabId(
|
|
122
|
+
tabs: SettingsTabItem[],
|
|
123
|
+
value?: string | null,
|
|
124
|
+
): string | null {
|
|
125
|
+
const normalized = normalizeTabId(value);
|
|
126
|
+
if (!normalized) return null;
|
|
127
|
+
if (tabs.some((tab) => tab.id === normalized)) return normalized;
|
|
128
|
+
if (
|
|
129
|
+
normalized === "organization" ||
|
|
130
|
+
normalized === "org" ||
|
|
131
|
+
normalized === "team"
|
|
132
|
+
) {
|
|
133
|
+
if (tabs.some((tab) => tab.id === "organization")) return "organization";
|
|
134
|
+
if (tabs.some((tab) => tab.id === "team")) return "team";
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
|
|
124
139
|
function activeTabFromHash(
|
|
125
140
|
tabs: SettingsTabItem[],
|
|
126
141
|
defaultTab: string,
|
|
127
142
|
): string {
|
|
128
143
|
if (typeof window === "undefined") return defaultTab;
|
|
129
|
-
|
|
130
|
-
if (fromHash && tabs.some((tab) => tab.id === fromHash)) return fromHash;
|
|
131
|
-
return defaultTab;
|
|
144
|
+
return resolveTabId(tabs, window.location.hash) ?? defaultTab;
|
|
132
145
|
}
|
|
133
146
|
|
|
134
147
|
function updateHashForTab(tabId: string) {
|
|
@@ -159,6 +172,9 @@ export function SettingsTabsPage({
|
|
|
159
172
|
onValueChange,
|
|
160
173
|
}: SettingsTabsPageProps) {
|
|
161
174
|
const tabs = useMemo<SettingsTabItem[]>(() => {
|
|
175
|
+
const hasOrganizationTab = extraTabs.some(
|
|
176
|
+
(tab) => tab.id === "organization",
|
|
177
|
+
);
|
|
162
178
|
const next: SettingsTabItem[] = [
|
|
163
179
|
{
|
|
164
180
|
id: "general",
|
|
@@ -169,7 +185,7 @@ export function SettingsTabsPage({
|
|
|
169
185
|
},
|
|
170
186
|
];
|
|
171
187
|
next.push(...extraTabs);
|
|
172
|
-
if (team) {
|
|
188
|
+
if (team && !hasOrganizationTab) {
|
|
173
189
|
next.push({
|
|
174
190
|
id: "team",
|
|
175
191
|
label: teamLabel,
|
|
@@ -229,8 +245,8 @@ export function SettingsTabsPage({
|
|
|
229
245
|
// the active tab untouched to avoid bouncing back to General.
|
|
230
246
|
if (isControlled) return;
|
|
231
247
|
const handleHashChange = () => {
|
|
232
|
-
const fromHash =
|
|
233
|
-
if (fromHash
|
|
248
|
+
const fromHash = resolveTabId(tabs, window.location.hash);
|
|
249
|
+
if (fromHash) {
|
|
234
250
|
setInternalTab(fromHash);
|
|
235
251
|
}
|
|
236
252
|
};
|
|
@@ -65,7 +65,7 @@ export function createDbAdminAgentTools(): Record<string, ActionEntry> {
|
|
|
65
65
|
"db-admin-rows": {
|
|
66
66
|
tool: {
|
|
67
67
|
description:
|
|
68
|
-
|
|
68
|
+
'DEV ONLY. Read rows from one table (unscoped) with pagination, sorting, and filters. Large text/JSON cells are previewed by default; pass includeLargeCells: "true" only when you need the full value.',
|
|
69
69
|
parameters: {
|
|
70
70
|
type: "object",
|
|
71
71
|
properties: {
|
|
@@ -88,6 +88,11 @@ export function createDbAdminAgentTools(): Record<string, ActionEntry> {
|
|
|
88
88
|
description:
|
|
89
89
|
'JSON array of filters, e.g. \'[{"column":"status","op":"eq","value":"draft"}]\'. Ops: eq, neq, lt, lte, gt, gte, like, ilike, in, is_null, not_null.',
|
|
90
90
|
},
|
|
91
|
+
includeLargeCells: {
|
|
92
|
+
type: "string",
|
|
93
|
+
description:
|
|
94
|
+
'Set to "true" to return full large text/JSON cells instead of previews.',
|
|
95
|
+
},
|
|
91
96
|
},
|
|
92
97
|
required: ["table"],
|
|
93
98
|
},
|
|
@@ -99,6 +104,7 @@ export function createDbAdminAgentTools(): Record<string, ActionEntry> {
|
|
|
99
104
|
pageSize: Number(args.pageSize) || 50,
|
|
100
105
|
sort: parseJson<DbAdminSort[]>(args.sort, "sort"),
|
|
101
106
|
filters: parseJson<DbAdminFilter[]>(args.filters, "filters"),
|
|
107
|
+
includeLargeCells: String(args.includeLargeCells) === "true",
|
|
102
108
|
});
|
|
103
109
|
return JSON.stringify(result);
|
|
104
110
|
},
|
|
@@ -158,7 +164,7 @@ export function createDbAdminAgentTools(): Record<string, ActionEntry> {
|
|
|
158
164
|
"db-admin-query": {
|
|
159
165
|
tool: {
|
|
160
166
|
description:
|
|
161
|
-
'DEV ONLY. Run arbitrary SQL against the full database (unscoped). PREFER
|
|
167
|
+
'DEV ONLY. Run arbitrary SQL against the full database (unscoped). PREFER this over db-query/db-exec for database-admin work and for tables without owner_email/org_id scoping. Bare SELECTs are auto-limited to 100 rows, and large string cells are truncated in the tool result. Destructive statements require confirmDestructive: "true".',
|
|
162
168
|
parameters: {
|
|
163
169
|
type: "object",
|
|
164
170
|
properties: {
|