@agent-native/core 0.92.0 → 0.92.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +14 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/application-state/store.ts +12 -1
  5. package/corpus/core/src/client/AssistantChat.tsx +27 -14
  6. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  7. package/corpus/core/src/client/agent-chat-adapter.ts +37 -10
  8. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  9. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  10. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  11. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  12. package/corpus/core/src/client/error-capture.ts +69 -7
  13. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  14. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  15. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  16. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  17. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  18. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  19. package/corpus/core/src/client/settings/SettingsPanel.tsx +205 -52
  20. package/corpus/core/src/client/settings/SettingsSection.tsx +8 -1
  21. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  22. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  23. package/corpus/core/src/db-admin/operations.ts +116 -4
  24. package/corpus/core/src/db-admin/routes.ts +1 -0
  25. package/corpus/core/src/db-admin/types.ts +4 -0
  26. package/corpus/core/src/extensions/html-shell.ts +5 -4
  27. package/corpus/core/src/extensions/routes.ts +10 -0
  28. package/corpus/core/src/navigation/index.ts +1 -1
  29. package/corpus/core/src/resources/handlers.ts +10 -8
  30. package/corpus/core/src/server/poll.ts +293 -8
  31. package/corpus/core/src/styles/agent-native.css +27 -0
  32. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  33. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  34. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  35. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  36. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  37. package/corpus/core/src/templates/default/AGENTS.md +4 -2
  38. package/corpus/core/src/templates/headless/AGENTS.md +4 -0
  39. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  40. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  41. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  42. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  43. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  45. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  46. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  47. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  48. package/corpus/core/src/templates/workspace-root/AGENTS.md +7 -1
  49. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  50. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  51. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  52. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  53. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  54. package/corpus/templates/analytics/AGENTS.md +33 -14
  55. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  56. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  57. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  58. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  59. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  60. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  61. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  62. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  63. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  64. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  65. package/corpus/templates/analytics/actions/save-monitor.ts +1 -1
  66. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  67. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  68. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  69. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  70. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  71. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  72. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  73. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  74. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  75. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  76. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  77. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  78. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  79. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  80. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  82. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  83. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  84. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  85. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  86. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  87. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  88. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +6 -3
  89. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +26 -30
  90. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  91. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  92. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  93. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  98. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  99. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  100. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  101. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  102. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  103. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  104. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  105. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  106. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  107. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  108. package/corpus/templates/analytics/server/db/schema-monitoring.ts +1 -1
  109. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  110. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  111. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  112. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  113. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  114. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +5 -4
  115. package/corpus/templates/analytics/server/plugins/db.ts +112 -2
  116. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  117. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  118. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  119. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  120. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  121. package/corpus/templates/assets/AGENTS.md +4 -0
  122. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  123. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  124. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  125. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  126. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  127. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  128. package/corpus/templates/brain/AGENTS.md +4 -0
  129. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  130. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  131. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  132. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  133. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  134. package/corpus/templates/calendar/AGENTS.md +4 -0
  135. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  136. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  137. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  138. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  139. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  140. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  141. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  142. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  143. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  144. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  145. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  146. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  147. package/corpus/templates/chat/AGENTS.md +4 -0
  148. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  149. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  150. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  151. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  152. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  153. package/corpus/templates/clips/AGENTS.md +4 -0
  154. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  155. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  156. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  157. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  158. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  159. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  160. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  161. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  162. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  163. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  164. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  165. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  166. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  167. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  168. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  169. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  170. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  171. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  172. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  173. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  174. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  175. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  176. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  177. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  178. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  179. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  180. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  181. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  182. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  183. package/corpus/templates/content/AGENTS.md +4 -0
  184. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  185. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  186. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  187. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  188. package/corpus/templates/design/AGENTS.md +4 -0
  189. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  190. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  191. package/corpus/templates/design/app/routes/team.tsx +1 -1
  192. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  193. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  194. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  195. package/corpus/templates/dispatch/AGENTS.md +4 -0
  196. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  197. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  198. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  199. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  200. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  201. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  203. package/corpus/templates/forms/AGENTS.md +4 -0
  204. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  205. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  206. package/corpus/templates/forms/shared/navigation.ts +1 -1
  207. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  208. package/corpus/templates/macros/AGENTS.md +4 -0
  209. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  210. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  211. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  212. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  213. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  214. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  215. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  216. package/corpus/templates/mail/AGENTS.md +4 -0
  217. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  218. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  219. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  220. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  221. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  222. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  223. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  224. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  225. package/corpus/templates/plan/AGENTS.md +4 -0
  226. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  227. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  228. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  229. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  230. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  231. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  232. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  233. package/corpus/templates/slides/AGENTS.md +4 -0
  234. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  235. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  236. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  237. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  238. package/corpus/templates/slides/shared/api.ts +1 -1
  239. package/dist/application-state/store.d.ts.map +1 -1
  240. package/dist/application-state/store.js +8 -2
  241. package/dist/application-state/store.js.map +1 -1
  242. package/dist/client/AssistantChat.d.ts.map +1 -1
  243. package/dist/client/AssistantChat.js +24 -13
  244. package/dist/client/AssistantChat.js.map +1 -1
  245. package/dist/client/PoweredByBadge.d.ts +1 -1
  246. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  247. package/dist/client/PoweredByBadge.js +3 -9
  248. package/dist/client/PoweredByBadge.js.map +1 -1
  249. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  250. package/dist/client/agent-chat-adapter.js +28 -9
  251. package/dist/client/agent-chat-adapter.js.map +1 -1
  252. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  253. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  254. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  255. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  256. package/dist/client/db-admin/TableEditor.js +19 -2
  257. package/dist/client/db-admin/TableEditor.js.map +1 -1
  258. package/dist/client/db-admin/export-utils.d.ts +2 -0
  259. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  260. package/dist/client/db-admin/export-utils.js +11 -3
  261. package/dist/client/db-admin/export-utils.js.map +1 -1
  262. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  263. package/dist/client/db-admin/useAgentSync.js +63 -0
  264. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  265. package/dist/client/error-capture.d.ts.map +1 -1
  266. package/dist/client/error-capture.js +41 -7
  267. package/dist/client/error-capture.js.map +1 -1
  268. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  269. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  270. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  271. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  272. package/dist/client/extensions/ExtensionViewer.js +32 -5
  273. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  274. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  275. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  276. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  277. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  278. package/dist/client/extensions/portable-extension.js +1 -0
  279. package/dist/client/extensions/portable-extension.js.map +1 -1
  280. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  281. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  282. package/dist/client/org/OrgSwitcher.js +11 -6
  283. package/dist/client/org/OrgSwitcher.js.map +1 -1
  284. package/dist/client/org/TeamPage.d.ts.map +1 -1
  285. package/dist/client/org/TeamPage.js +5 -5
  286. package/dist/client/org/TeamPage.js.map +1 -1
  287. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  288. package/dist/client/settings/SettingsPanel.js +37 -14
  289. package/dist/client/settings/SettingsPanel.js.map +1 -1
  290. package/dist/client/settings/SettingsSection.js +1 -1
  291. package/dist/client/settings/SettingsSection.js.map +1 -1
  292. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  293. package/dist/client/settings/SettingsTabsPage.js +21 -10
  294. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  295. package/dist/collab/routes.d.ts +1 -1
  296. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  297. package/dist/db-admin/agent-tools.js +7 -2
  298. package/dist/db-admin/agent-tools.js.map +1 -1
  299. package/dist/db-admin/operations.d.ts.map +1 -1
  300. package/dist/db-admin/operations.js +90 -4
  301. package/dist/db-admin/operations.js.map +1 -1
  302. package/dist/db-admin/routes.d.ts.map +1 -1
  303. package/dist/db-admin/routes.js +1 -0
  304. package/dist/db-admin/routes.js.map +1 -1
  305. package/dist/db-admin/types.d.ts +4 -0
  306. package/dist/db-admin/types.d.ts.map +1 -1
  307. package/dist/db-admin/types.js.map +1 -1
  308. package/dist/extensions/html-shell.d.ts +5 -4
  309. package/dist/extensions/html-shell.d.ts.map +1 -1
  310. package/dist/extensions/html-shell.js.map +1 -1
  311. package/dist/extensions/routes.d.ts.map +1 -1
  312. package/dist/extensions/routes.js +8 -0
  313. package/dist/extensions/routes.js.map +1 -1
  314. package/dist/navigation/index.d.ts +1 -1
  315. package/dist/navigation/index.d.ts.map +1 -1
  316. package/dist/navigation/index.js +1 -1
  317. package/dist/navigation/index.js.map +1 -1
  318. package/dist/notifications/routes.d.ts +1 -1
  319. package/dist/observability/routes.d.ts +1 -1
  320. package/dist/resources/handlers.d.ts +6 -1
  321. package/dist/resources/handlers.d.ts.map +1 -1
  322. package/dist/resources/handlers.js +9 -8
  323. package/dist/resources/handlers.js.map +1 -1
  324. package/dist/server/poll.d.ts +12 -4
  325. package/dist/server/poll.d.ts.map +1 -1
  326. package/dist/server/poll.js +236 -9
  327. package/dist/server/poll.js.map +1 -1
  328. package/dist/styles/agent-native.css +27 -0
  329. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  330. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  331. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  332. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  333. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  334. package/dist/templates/default/AGENTS.md +4 -2
  335. package/dist/templates/headless/AGENTS.md +4 -0
  336. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  337. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  338. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  339. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  340. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  341. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  342. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  343. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  344. package/dist/templates/workspace-core/AGENTS.md +7 -1
  345. package/dist/templates/workspace-root/AGENTS.md +7 -1
  346. package/package.json +1 -1
  347. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  348. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  349. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  350. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  351. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  352. package/src/templates/default/AGENTS.md +4 -2
  353. package/src/templates/headless/AGENTS.md +4 -0
  354. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  355. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  356. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  357. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  358. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  359. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  360. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  361. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  362. package/src/templates/workspace-core/AGENTS.md +7 -1
  363. 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 className="rounded-md border border-border bg-accent/20 px-2.5 py-2">
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 className="truncate text-[11px] font-medium text-foreground">
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 className="mt-0.5 text-[10px] text-muted-foreground">
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 className="shrink-0 rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
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="text-[12px] font-medium text-foreground">Model</p>
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="flex h-9 w-full rounded-md border border-border bg-background px-3 text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 focus:ring-1 focus:ring-accent placeholder:text-muted-foreground/50 disabled:opacity-60"
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="inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
1577
+ className={pillButtonClass(isPage, "solid")}
1545
1578
  >
1546
1579
  {saving ? (
1547
- <IconLoader2 size={10} className="animate-spin" />
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="h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40"
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 className="mt-2 text-[10px] text-muted-foreground">
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 className="mt-2 text-[10px] text-muted-foreground">
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 className="mt-2 text-[10px] text-muted-foreground">
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-[10px] text-destructive">{error}</p>
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-[10px] text-muted-foreground">
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 className="text-[10px] uppercase tracking-wide text-muted-foreground">
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 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent"
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 className="mb-1 flex items-center gap-1.5 text-[10px] text-green-500">
1716
- <IconCheck size={10} />
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="flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent"
1797
+ className={emailInputCls}
1730
1798
  />
1731
1799
  <button
1732
1800
  onClick={saveResend}
1733
1801
  disabled={!resendKey.trim() || saving}
1734
- className="rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
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 className="flex items-center gap-1.5 text-[10px] text-green-500">
1748
- <IconCheck size={10} />
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="flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent"
1834
+ className={emailInputCls}
1762
1835
  />
1763
1836
  {!resendConfigured ? null : (
1764
1837
  <button
1765
1838
  onClick={saveResend}
1766
1839
  disabled={!fromAddr.trim() || saving}
1767
- className="rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
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 className="mb-1 flex items-center gap-1.5 text-[10px] text-green-500">
1789
- <IconCheck size={10} />
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="flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent"
1880
+ className={emailInputCls}
1803
1881
  />
1804
1882
  <button
1805
1883
  onClick={saveSendgrid}
1806
1884
  disabled={!sendgridKey.trim() || saving}
1807
- className="rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
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 className="flex items-center gap-1.5 text-[10px] text-green-500">
1821
- <IconCheck size={10} />
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="flex-1 rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent"
1917
+ className={emailInputCls}
1835
1918
  />
1836
1919
  {!sendgridConfigured ? null : (
1837
1920
  <button
1838
1921
  onClick={saveSendgrid}
1839
1922
  disabled={!fromAddr.trim() || saving}
1840
- className="rounded bg-accent px-2 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
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 className="rounded-md border border-border px-2.5 py-2 bg-accent/20">
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 className="text-[11px] font-medium text-foreground">
2109
+ <p
2110
+ className={cn(
2111
+ "font-medium text-foreground",
2112
+ subTextClass(isPage),
2113
+ )}
2114
+ >
2021
2115
  Max iterations
2022
2116
  </p>
2023
- <p className="mt-0.5 text-[10px] text-muted-foreground">
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 className="rounded-full bg-background px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
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="h-8 min-w-0 flex-1 rounded border border-border bg-background px-2 text-[11px] text-foreground outline-none focus:ring-1 focus:ring-accent disabled:opacity-60"
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="inline-flex h-8 items-center gap-1 rounded bg-accent px-2.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
2160
+ className={pillButtonClass(isPage, "solid")}
2053
2161
  >
2054
2162
  {saving ? (
2055
- <IconLoader2 size={10} className="animate-spin" />
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="h-8 rounded border border-border px-2.5 text-[10px] font-medium text-muted-foreground hover:bg-accent/40 hover:text-foreground disabled:opacity-40"
2181
+ className={pillButtonClass(isPage, "outline")}
2071
2182
  >
2072
2183
  Reset
2073
2184
  </button>
2074
2185
  </div>
2075
2186
  {!settings.canUpdate && (
2076
- <p className="mt-2 text-[10px] text-muted-foreground">
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-[10px] text-destructive">{error}</p>
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-[10px] text-muted-foreground">
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 className="flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-full border border-border bg-accent text-[13px] font-semibold text-muted-foreground">
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 className="truncate text-[12px] font-medium text-foreground">
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 className="truncate text-[11px] text-muted-foreground">
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 className="mt-1 text-[11px] text-green-600 dark:text-green-400">
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-[11px] text-destructive">
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="inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-border bg-background px-3 text-[12px] font-medium text-foreground transition-colors hover:bg-accent/50 disabled:cursor-not-allowed disabled:opacity-50"
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 className="border-t border-border/60 px-5 pb-5 pt-5 sm:px-6 sm:pb-6">
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
- const fromHash = normalizeTabId(window.location.hash);
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 = normalizeTabId(window.location.hash);
233
- if (fromHash && tabs.some((tab) => tab.id === 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
- "DEV ONLY. Read rows from one table (unscoped) with pagination, sorting, and filters. Returns column metadata, the page of rows, and the total count.",
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 THIS over db-query/db-exec for database-admin work and for any table without owner_email/org_id scoping (the scoped tools match 0 rows on those). Bare SELECTs are auto-limited to 100 rows. Destructive statements (DROP / TRUNCATE / unscoped DELETE or UPDATE) require confirmDestructive: "true".',
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: {