@agent-native/core 0.91.2 → 0.92.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +31 -0
  3. package/corpus/core/docs/content/faq.mdx +17 -0
  4. package/corpus/core/docs/content/notifications.mdx +12 -6
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/production-agent.ts +140 -46
  7. package/corpus/core/src/agent/tool-search.ts +71 -4
  8. package/corpus/core/src/application-state/store.ts +12 -1
  9. package/corpus/core/src/cli/index.ts +20 -0
  10. package/corpus/core/src/cli/upgrade.ts +798 -0
  11. package/corpus/core/src/client/AssistantChat.tsx +28 -15
  12. package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
  13. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  14. package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
  15. package/corpus/core/src/client/chat/message-components.tsx +85 -8
  16. package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
  17. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  18. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
  19. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  20. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  21. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  22. package/corpus/core/src/client/error-capture.ts +69 -7
  23. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  24. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  25. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  26. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  27. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  28. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  29. package/corpus/core/src/client/session-replay.ts +3 -97
  30. package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
  31. package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
  32. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  33. package/corpus/core/src/client/sse-event-processor.ts +29 -2
  34. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  35. package/corpus/core/src/db-admin/operations.ts +116 -4
  36. package/corpus/core/src/db-admin/routes.ts +1 -0
  37. package/corpus/core/src/db-admin/types.ts +4 -0
  38. package/corpus/core/src/extensions/actions.ts +113 -5
  39. package/corpus/core/src/extensions/html-shell.ts +5 -4
  40. package/corpus/core/src/extensions/routes.ts +10 -0
  41. package/corpus/core/src/navigation/index.ts +1 -1
  42. package/corpus/core/src/notifications/channels.ts +88 -25
  43. package/corpus/core/src/notifications/registry.ts +17 -3
  44. package/corpus/core/src/notifications/types.ts +4 -1
  45. package/corpus/core/src/resources/handlers.ts +10 -8
  46. package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
  47. package/corpus/core/src/server/poll.ts +293 -8
  48. package/corpus/core/src/server/request-context.ts +7 -0
  49. package/corpus/core/src/styles/agent-conversation.css +1 -1
  50. package/corpus/core/src/styles/agent-native.css +27 -0
  51. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  52. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  53. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  54. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  55. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  56. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  57. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  58. package/corpus/core/src/templates/default/AGENTS.md +14 -5
  59. package/corpus/core/src/templates/default/package.json +2 -1
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  61. package/corpus/core/src/templates/headless/AGENTS.md +13 -3
  62. package/corpus/core/src/templates/headless/package.json +1 -0
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  64. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  67. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  69. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  70. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  71. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  73. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  74. package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
  75. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  76. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  78. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  79. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  80. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
  81. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
  82. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  83. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  84. package/corpus/templates/analytics/AGENTS.md +39 -18
  85. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  86. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  87. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  88. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  89. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  90. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  91. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  92. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  93. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  94. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  95. package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
  96. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  97. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  98. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  99. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
  100. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
  101. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  102. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  103. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  104. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  105. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  106. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  107. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  108. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  109. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  110. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  111. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  112. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  113. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  114. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  115. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  116. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
  117. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  118. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  119. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  120. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  121. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
  122. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
  123. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
  124. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
  125. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  126. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  127. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  128. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  134. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
  135. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  136. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  138. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  139. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  140. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
  141. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  142. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
  143. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  144. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
  145. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  146. package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
  147. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  148. package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
  149. package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
  150. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  151. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  152. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  153. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  154. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  155. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
  156. package/corpus/templates/analytics/server/plugins/db.ts +122 -2
  157. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  158. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  159. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  160. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  161. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
  162. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  163. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  164. package/corpus/templates/assets/AGENTS.md +4 -0
  165. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  166. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  167. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  168. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  169. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  170. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  171. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
  172. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  173. package/corpus/templates/brain/AGENTS.md +4 -0
  174. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  175. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  176. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  177. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  178. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
  179. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  180. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  181. package/corpus/templates/calendar/AGENTS.md +4 -0
  182. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  183. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  184. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  185. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  186. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  187. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  188. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  189. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  190. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  191. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  192. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  193. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  194. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
  195. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  196. package/corpus/templates/chat/AGENTS.md +4 -0
  197. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  198. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  199. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  200. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  201. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
  203. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  204. package/corpus/templates/clips/AGENTS.md +4 -0
  205. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  206. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  207. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  208. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  209. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  210. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  211. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  212. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  213. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  214. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  215. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  216. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  217. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  218. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  219. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  220. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  221. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  222. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
  223. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
  224. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  225. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  226. package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
  227. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  228. package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
  229. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  230. package/corpus/templates/clips/desktop/src/app.tsx +123 -3
  231. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
  232. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
  233. package/corpus/templates/clips/desktop/src/styles.css +23 -1
  234. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
  235. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
  236. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
  237. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
  238. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
  239. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
  240. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
  241. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
  242. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
  243. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  244. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  245. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  246. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  247. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  248. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  249. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  250. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
  251. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  252. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  253. package/corpus/templates/content/AGENTS.md +4 -0
  254. package/corpus/templates/content/actions/_batch-utils.ts +8 -0
  255. package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
  256. package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
  257. package/corpus/templates/content/actions/_database-utils.ts +6 -1
  258. package/corpus/templates/content/actions/_property-utils.ts +168 -0
  259. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
  260. package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
  261. package/corpus/templates/content/actions/delete-document.ts +9 -13
  262. package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
  263. package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
  264. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
  265. package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
  266. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  267. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  268. package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
  269. package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
  270. package/corpus/templates/content/server/plugins/db.ts +19 -0
  271. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  272. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  273. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
  274. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  275. package/corpus/templates/design/AGENTS.md +4 -0
  276. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  277. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  278. package/corpus/templates/design/app/routes/team.tsx +1 -1
  279. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  280. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  281. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  282. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
  283. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  284. package/corpus/templates/dispatch/AGENTS.md +4 -0
  285. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  286. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  287. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  288. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  289. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  290. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  291. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
  292. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  293. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  294. package/corpus/templates/forms/AGENTS.md +4 -0
  295. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  296. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  297. package/corpus/templates/forms/shared/navigation.ts +1 -1
  298. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  299. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  300. package/corpus/templates/macros/AGENTS.md +4 -0
  301. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  302. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  303. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  304. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  305. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  306. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  307. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
  308. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  309. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  310. package/corpus/templates/mail/AGENTS.md +4 -0
  311. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  312. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  313. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  314. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  315. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  316. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  317. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  318. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  319. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
  320. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  321. package/corpus/templates/plan/AGENTS.md +4 -0
  322. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  323. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  324. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  325. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  326. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  327. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  328. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  329. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
  330. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  331. package/corpus/templates/slides/AGENTS.md +4 -0
  332. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  333. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  334. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  335. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  336. package/corpus/templates/slides/shared/api.ts +1 -1
  337. package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  338. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  339. package/dist/agent/production-agent.d.ts +5 -1
  340. package/dist/agent/production-agent.d.ts.map +1 -1
  341. package/dist/agent/production-agent.js +112 -42
  342. package/dist/agent/production-agent.js.map +1 -1
  343. package/dist/agent/tool-search.d.ts +2 -0
  344. package/dist/agent/tool-search.d.ts.map +1 -1
  345. package/dist/agent/tool-search.js +60 -4
  346. package/dist/agent/tool-search.js.map +1 -1
  347. package/dist/application-state/store.d.ts.map +1 -1
  348. package/dist/application-state/store.js +8 -2
  349. package/dist/application-state/store.js.map +1 -1
  350. package/dist/cli/index.js +19 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/upgrade.d.ts +100 -0
  353. package/dist/cli/upgrade.d.ts.map +1 -0
  354. package/dist/cli/upgrade.js +678 -0
  355. package/dist/cli/upgrade.js.map +1 -0
  356. package/dist/client/AssistantChat.d.ts.map +1 -1
  357. package/dist/client/AssistantChat.js +25 -14
  358. package/dist/client/AssistantChat.js.map +1 -1
  359. package/dist/client/HighlightedCodeBlock.d.ts +2 -0
  360. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
  361. package/dist/client/HighlightedCodeBlock.js +10 -1
  362. package/dist/client/HighlightedCodeBlock.js.map +1 -1
  363. package/dist/client/PoweredByBadge.d.ts +1 -1
  364. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  365. package/dist/client/PoweredByBadge.js +3 -9
  366. package/dist/client/PoweredByBadge.js.map +1 -1
  367. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  368. package/dist/client/agent-chat-adapter.js +60 -13
  369. package/dist/client/agent-chat-adapter.js.map +1 -1
  370. package/dist/client/chat/message-components.d.ts.map +1 -1
  371. package/dist/client/chat/message-components.js +61 -8
  372. package/dist/client/chat/message-components.js.map +1 -1
  373. package/dist/client/chat/tool-call-display.d.ts +12 -0
  374. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  375. package/dist/client/chat/tool-call-display.js +136 -42
  376. package/dist/client/chat/tool-call-display.js.map +1 -1
  377. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  378. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  379. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  380. package/dist/client/code-agent-chat-adapter.js +2 -9
  381. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  382. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  383. package/dist/client/db-admin/TableEditor.js +19 -2
  384. package/dist/client/db-admin/TableEditor.js.map +1 -1
  385. package/dist/client/db-admin/export-utils.d.ts +2 -0
  386. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  387. package/dist/client/db-admin/export-utils.js +11 -3
  388. package/dist/client/db-admin/export-utils.js.map +1 -1
  389. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  390. package/dist/client/db-admin/useAgentSync.js +63 -0
  391. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  392. package/dist/client/error-capture.d.ts.map +1 -1
  393. package/dist/client/error-capture.js +41 -7
  394. package/dist/client/error-capture.js.map +1 -1
  395. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  396. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  397. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  398. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  399. package/dist/client/extensions/ExtensionViewer.js +32 -5
  400. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  401. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  402. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  403. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  404. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  405. package/dist/client/extensions/portable-extension.js +1 -0
  406. package/dist/client/extensions/portable-extension.js.map +1 -1
  407. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  408. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  409. package/dist/client/org/OrgSwitcher.js +11 -6
  410. package/dist/client/org/OrgSwitcher.js.map +1 -1
  411. package/dist/client/org/TeamPage.d.ts.map +1 -1
  412. package/dist/client/org/TeamPage.js +5 -5
  413. package/dist/client/org/TeamPage.js.map +1 -1
  414. package/dist/client/session-replay.d.ts +0 -8
  415. package/dist/client/session-replay.d.ts.map +1 -1
  416. package/dist/client/session-replay.js +3 -80
  417. package/dist/client/session-replay.js.map +1 -1
  418. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  419. package/dist/client/settings/SettingsPanel.js +89 -33
  420. package/dist/client/settings/SettingsPanel.js.map +1 -1
  421. package/dist/client/settings/SettingsSection.d.ts +19 -4
  422. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  423. package/dist/client/settings/SettingsSection.js +33 -4
  424. package/dist/client/settings/SettingsSection.js.map +1 -1
  425. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  426. package/dist/client/settings/SettingsTabsPage.js +21 -10
  427. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  428. package/dist/client/sse-event-processor.d.ts +9 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +20 -2
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  433. package/dist/db-admin/agent-tools.js +7 -2
  434. package/dist/db-admin/agent-tools.js.map +1 -1
  435. package/dist/db-admin/operations.d.ts.map +1 -1
  436. package/dist/db-admin/operations.js +90 -4
  437. package/dist/db-admin/operations.js.map +1 -1
  438. package/dist/db-admin/routes.d.ts.map +1 -1
  439. package/dist/db-admin/routes.js +1 -0
  440. package/dist/db-admin/routes.js.map +1 -1
  441. package/dist/db-admin/types.d.ts +4 -0
  442. package/dist/db-admin/types.d.ts.map +1 -1
  443. package/dist/db-admin/types.js.map +1 -1
  444. package/dist/extensions/actions.d.ts.map +1 -1
  445. package/dist/extensions/actions.js +85 -5
  446. package/dist/extensions/actions.js.map +1 -1
  447. package/dist/extensions/html-shell.d.ts +5 -4
  448. package/dist/extensions/html-shell.d.ts.map +1 -1
  449. package/dist/extensions/html-shell.js.map +1 -1
  450. package/dist/extensions/routes.d.ts.map +1 -1
  451. package/dist/extensions/routes.js +8 -0
  452. package/dist/extensions/routes.js.map +1 -1
  453. package/dist/navigation/index.d.ts +1 -1
  454. package/dist/navigation/index.d.ts.map +1 -1
  455. package/dist/navigation/index.js +1 -1
  456. package/dist/navigation/index.js.map +1 -1
  457. package/dist/notifications/channels.d.ts +8 -3
  458. package/dist/notifications/channels.d.ts.map +1 -1
  459. package/dist/notifications/channels.js +61 -22
  460. package/dist/notifications/channels.js.map +1 -1
  461. package/dist/notifications/registry.d.ts.map +1 -1
  462. package/dist/notifications/registry.js +14 -3
  463. package/dist/notifications/registry.js.map +1 -1
  464. package/dist/notifications/types.d.ts +4 -1
  465. package/dist/notifications/types.d.ts.map +1 -1
  466. package/dist/notifications/types.js.map +1 -1
  467. package/dist/resources/handlers.d.ts +5 -0
  468. package/dist/resources/handlers.d.ts.map +1 -1
  469. package/dist/resources/handlers.js +9 -8
  470. package/dist/resources/handlers.js.map +1 -1
  471. package/dist/server/agent-chat-plugin.d.ts +5 -1
  472. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  473. package/dist/server/agent-chat-plugin.js +2 -2
  474. package/dist/server/agent-chat-plugin.js.map +1 -1
  475. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  476. package/dist/server/poll.d.ts +12 -4
  477. package/dist/server/poll.d.ts.map +1 -1
  478. package/dist/server/poll.js +236 -9
  479. package/dist/server/poll.js.map +1 -1
  480. package/dist/server/request-context.d.ts +7 -0
  481. package/dist/server/request-context.d.ts.map +1 -1
  482. package/dist/server/request-context.js.map +1 -1
  483. package/dist/styles/agent-conversation.css +1 -1
  484. package/dist/styles/agent-native.css +27 -0
  485. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  486. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  487. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  488. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  489. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  490. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  491. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  492. package/dist/templates/default/AGENTS.md +14 -5
  493. package/dist/templates/default/package.json +2 -1
  494. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  495. package/dist/templates/headless/AGENTS.md +13 -3
  496. package/dist/templates/headless/package.json +1 -0
  497. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  498. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  499. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  500. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  501. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  502. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  503. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  504. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  505. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  506. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  507. package/dist/templates/workspace-core/AGENTS.md +7 -1
  508. package/dist/templates/workspace-root/AGENTS.md +17 -5
  509. package/dist/templates/workspace-root/package.json +1 -0
  510. package/docs/content/faq.mdx +17 -0
  511. package/docs/content/notifications.mdx +12 -6
  512. package/package.json +2 -2
  513. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  514. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  515. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  516. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  517. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  518. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  519. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  520. package/src/templates/default/AGENTS.md +14 -5
  521. package/src/templates/default/package.json +2 -1
  522. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  523. package/src/templates/headless/AGENTS.md +13 -3
  524. package/src/templates/headless/package.json +1 -0
  525. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  526. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  527. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  528. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  529. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  530. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  531. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  532. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  533. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  534. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  535. package/src/templates/workspace-core/AGENTS.md +7 -1
  536. package/src/templates/workspace-root/AGENTS.md +17 -5
  537. package/src/templates/workspace-root/package.json +1 -0
  538. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
@@ -1,5 +1,36 @@
1
1
  import { IconChevronDown, IconCheck } from "@tabler/icons-react";
2
- import type { ReactNode } from "react";
2
+ import { createContext, useContext, type ReactNode } from "react";
3
+
4
+ import { cn } from "../utils.js";
5
+
6
+ /**
7
+ * Where a settings section is being rendered.
8
+ *
9
+ * - `sidebar`: the compact agent sidebar panel (dense, small type).
10
+ * - `page`: the full-width settings page, styled as a polished card that
11
+ * matches the shadcn `Card` surface used by app-owned settings tabs.
12
+ */
13
+ export type SettingsSurface = "sidebar" | "page";
14
+
15
+ const SettingsSurfaceContext = createContext<SettingsSurface>("sidebar");
16
+
17
+ export function SettingsSurfaceProvider({
18
+ surface,
19
+ children,
20
+ }: {
21
+ surface: SettingsSurface;
22
+ children: ReactNode;
23
+ }) {
24
+ return (
25
+ <SettingsSurfaceContext.Provider value={surface}>
26
+ {children}
27
+ </SettingsSurfaceContext.Provider>
28
+ );
29
+ }
30
+
31
+ export function useSettingsSurface(): SettingsSurface {
32
+ return useContext(SettingsSurfaceContext);
33
+ }
3
34
 
4
35
  interface SettingsSectionProps {
5
36
  id?: string;
@@ -15,10 +46,133 @@ interface SettingsSectionProps {
15
46
  }
16
47
 
17
48
  /**
18
- * Collapsible settings section card with icon, title, status dot, and optional badge.
19
- * Controlled via `open` / `onToggle` for accordion behaviour.
49
+ * Collapsible settings section. Renders as a compact row in the agent sidebar
50
+ * and as a polished, shadcn-style card on the full settings page (so the
51
+ * framework tabs match app-owned General/Team cards). The visual surface is
52
+ * read from `SettingsSurfaceContext`.
20
53
  */
21
- export function SettingsSection({
54
+ export function SettingsSection(props: SettingsSectionProps) {
55
+ const surface = useSettingsSurface();
56
+ return surface === "page" ? (
57
+ <PageSettingsSection {...props} />
58
+ ) : (
59
+ <SidebarSettingsSection {...props} />
60
+ );
61
+ }
62
+
63
+ function ConnectedDot({ size }: { size: "sm" | "md" }) {
64
+ const dim = size === "sm" ? "h-4 w-4" : "h-5 w-5";
65
+ const stroke = size === "sm" ? 3 : 2.5;
66
+ const glyph = size === "sm" ? 10 : 12;
67
+ return (
68
+ <span
69
+ className={cn(
70
+ "flex shrink-0 items-center justify-center rounded-full bg-green-500/15 text-green-500",
71
+ dim,
72
+ )}
73
+ >
74
+ <IconCheck size={glyph} stroke={stroke} />
75
+ </span>
76
+ );
77
+ }
78
+
79
+ function StatusBadge({
80
+ label,
81
+ tone,
82
+ size,
83
+ }: {
84
+ label: string;
85
+ tone: "muted" | "required";
86
+ size: "sm" | "md";
87
+ }) {
88
+ return (
89
+ <span
90
+ className={cn(
91
+ "shrink-0 rounded-full font-semibold uppercase tracking-wide",
92
+ size === "sm" ? "px-1.5 py-0.5 text-[9px]" : "px-2 py-0.5 text-[10px]",
93
+ tone === "required"
94
+ ? "bg-amber-500/15 text-amber-600 dark:text-amber-400"
95
+ : "bg-muted text-muted-foreground",
96
+ )}
97
+ >
98
+ {label}
99
+ </span>
100
+ );
101
+ }
102
+
103
+ function PageSettingsSection({
104
+ id,
105
+ icon,
106
+ title,
107
+ subtitle,
108
+ badge,
109
+ required,
110
+ connected,
111
+ open = false,
112
+ onToggle,
113
+ children,
114
+ }: SettingsSectionProps) {
115
+ return (
116
+ <div
117
+ id={id}
118
+ className={cn(
119
+ "scroll-mt-16 overflow-hidden rounded-lg border bg-card text-card-foreground shadow-sm transition-colors",
120
+ open ? "border-border" : "border-border/60",
121
+ )}
122
+ >
123
+ <button
124
+ type="button"
125
+ onClick={onToggle}
126
+ aria-expanded={open}
127
+ className="flex w-full items-start justify-between gap-4 px-5 py-4 text-start transition-colors hover:bg-muted/40 sm:px-6 sm:py-5"
128
+ >
129
+ <div className="flex min-w-0 items-start gap-3">
130
+ <span className="mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground [&>svg]:size-[18px]">
131
+ {icon}
132
+ </span>
133
+ <span className="flex min-w-0 flex-col gap-1.5">
134
+ <span className="flex flex-wrap items-center gap-2">
135
+ <span className="text-base font-semibold leading-none tracking-tight text-foreground">
136
+ {title}
137
+ </span>
138
+ {connected && <ConnectedDot size="md" />}
139
+ {required && !connected && (
140
+ <StatusBadge label="Required" tone="required" size="md" />
141
+ )}
142
+ {badge && <StatusBadge label={badge} tone="muted" size="md" />}
143
+ </span>
144
+ {subtitle && (
145
+ <span className="text-sm leading-snug text-muted-foreground">
146
+ {subtitle}
147
+ </span>
148
+ )}
149
+ </span>
150
+ </div>
151
+ <IconChevronDown
152
+ size={18}
153
+ className={cn(
154
+ "mt-1 shrink-0 text-muted-foreground transition-transform",
155
+ open && "rotate-180",
156
+ )}
157
+ />
158
+ </button>
159
+ {open && (
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
+ >
168
+ {children}
169
+ </div>
170
+ )}
171
+ </div>
172
+ );
173
+ }
174
+
175
+ function SidebarSettingsSection({
22
176
  id,
23
177
  icon,
24
178
  title,
@@ -42,21 +196,11 @@ export function SettingsSection({
42
196
  <span className="text-[12px] font-medium text-foreground truncate">
43
197
  {title}
44
198
  </span>
45
- {connected && (
46
- <span className="flex items-center justify-center shrink-0 rounded-full bg-green-500/15 text-green-500 w-4 h-4">
47
- <IconCheck size={10} stroke={3} />
48
- </span>
49
- )}
199
+ {connected && <ConnectedDot size="sm" />}
50
200
  {required && !connected && (
51
- <span className="shrink-0 rounded-full bg-accent/60 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground">
52
- Required
53
- </span>
54
- )}
55
- {badge && (
56
- <span className="shrink-0 rounded-full bg-accent/60 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground">
57
- {badge}
58
- </span>
201
+ <StatusBadge label="Required" tone="muted" size="sm" />
59
202
  )}
203
+ {badge && <StatusBadge label={badge} tone="muted" size="sm" />}
60
204
  </div>
61
205
  <IconChevronDown
62
206
  size={12}
@@ -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
  };
@@ -15,6 +15,16 @@ import {
15
15
 
16
16
  export type ContentPart =
17
17
  | { type: "text"; text: string }
18
+ | {
19
+ /**
20
+ * Model chain-of-thought / extended-thinking prose. Streamed from
21
+ * server `thinking` SSE events (and code-agent thinking transcript
22
+ * items). Rendered as a collapsible plain-English cell — not a tool
23
+ * call.
24
+ */
25
+ type: "reasoning";
26
+ text: string;
27
+ }
18
28
  | {
19
29
  type: "tool-call";
20
30
  toolCallId: string;
@@ -669,7 +679,7 @@ function pendingToolNames(content: ContentPart[]): {
669
679
 
670
680
  function contentSnapshot(content: ContentPart[]): ContentPart[] {
671
681
  return content.map((part) => {
672
- if (part.type === "text") return { ...part };
682
+ if (part.type === "text" || part.type === "reasoning") return { ...part };
673
683
  return {
674
684
  ...part,
675
685
  args: { ...part.args },
@@ -952,6 +962,23 @@ export function processEvent(
952
962
  };
953
963
  }
954
964
 
965
+ if (ev.type === "thinking") {
966
+ // Model chain-of-thought. Coalesce consecutive deltas into one reasoning
967
+ // part so the UI can render a single collapsible "Thinking" cell.
968
+ const delta = ev.text ?? "";
969
+ if (!delta) return { action: "continue" };
970
+ const lastPart = content[content.length - 1];
971
+ if (lastPart && lastPart.type === "reasoning") {
972
+ lastPart.text += delta;
973
+ } else {
974
+ content.push({ type: "reasoning", text: delta });
975
+ }
976
+ return {
977
+ action: "yield",
978
+ result: { content: contentSnapshot(content) } as ChatModelRunResult,
979
+ };
980
+ }
981
+
955
982
  if (ev.type === "stream_keepalive") {
956
983
  return { action: "continue" };
957
984
  }
@@ -1400,7 +1427,7 @@ function clearAssistantDraftContent(content: ContentPart[]): void {
1400
1427
  for (let index = content.length - 1; index >= 0; index--) {
1401
1428
  const part = content[index];
1402
1429
  if (!part) continue;
1403
- if (part.type === "text") {
1430
+ if (part.type === "text" || part.type === "reasoning") {
1404
1431
  content.splice(index, 1);
1405
1432
  continue;
1406
1433
  }
@@ -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: {
@@ -40,6 +40,9 @@ import type {
40
40
  // ---------------------------------------------------------------------------
41
41
 
42
42
  const IDENT_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
43
+ const LARGE_CELL_PREVIEW_CHARS = 16 * 1024;
44
+ const LARGE_CELL_SUFFIX =
45
+ "\n...[db-admin truncated large cell; request includeLargeCells=true for the full value]";
43
46
 
44
47
  export interface DbAdminRuntime {
45
48
  db?: DbExec;
@@ -72,6 +75,103 @@ function isPostgresRuntime(runtime?: DbAdminRuntime): boolean {
72
75
  return dialect(runtime) === "postgres";
73
76
  }
74
77
 
78
+ function isPreviewableLargeColumn(column: DbAdminColumn): boolean {
79
+ const type = column.type.toLowerCase();
80
+ return /\b(text|char|varchar|character|jsonb?|xml|clob)\b/.test(type);
81
+ }
82
+
83
+ function markLargeValuePreviewColumns(
84
+ columns: DbAdminColumn[],
85
+ includeLargeCells: boolean,
86
+ ): DbAdminColumn[] {
87
+ if (includeLargeCells) return columns;
88
+ return columns.map((column) =>
89
+ isPreviewableLargeColumn(column)
90
+ ? { ...column, largeValuePreview: true }
91
+ : column,
92
+ );
93
+ }
94
+
95
+ function buildRowsSelectList(
96
+ columns: DbAdminColumn[],
97
+ includeLargeCells: boolean,
98
+ ): string {
99
+ if (includeLargeCells) {
100
+ return columns.map((column) => quoteIdent(column.name)).join(", ");
101
+ }
102
+
103
+ return columns
104
+ .map((column) => {
105
+ const quoted = quoteIdent(column.name);
106
+ if (!isPreviewableLargeColumn(column)) return quoted;
107
+ const textValue = `CAST(${quoted} AS TEXT)`;
108
+ return `CASE WHEN length(${textValue}) > ${LARGE_CELL_PREVIEW_CHARS} THEN substr(${textValue}, 1, ${LARGE_CELL_PREVIEW_CHARS}) || '${LARGE_CELL_SUFFIX.replace(/'/g, "''")}' ELSE ${textValue} END AS ${quoted}`;
109
+ })
110
+ .join(", ");
111
+ }
112
+
113
+ function truncateLargeResultCells(rows: Record<string, unknown>[]): {
114
+ rows: Record<string, unknown>[];
115
+ truncatedCells: number;
116
+ } {
117
+ let truncatedCells = 0;
118
+ const mapped = rows.map((row) => {
119
+ let changed = false;
120
+ const next: Record<string, unknown> = {};
121
+ for (const [key, value] of Object.entries(row)) {
122
+ if (
123
+ typeof value === "string" &&
124
+ value.length > LARGE_CELL_PREVIEW_CHARS
125
+ ) {
126
+ next[key] =
127
+ `${value.slice(0, LARGE_CELL_PREVIEW_CHARS)}${LARGE_CELL_SUFFIX}`;
128
+ truncatedCells += 1;
129
+ changed = true;
130
+ } else {
131
+ next[key] = value;
132
+ }
133
+ }
134
+ return changed ? next : row;
135
+ });
136
+ return { rows: mapped, truncatedCells };
137
+ }
138
+
139
+ function countTruncatedResultCells(rows: Record<string, unknown>[]): number {
140
+ let truncatedCells = 0;
141
+ for (const row of rows) {
142
+ for (const value of Object.values(row)) {
143
+ if (typeof value === "string" && value.endsWith(LARGE_CELL_SUFFIX)) {
144
+ truncatedCells += 1;
145
+ }
146
+ }
147
+ }
148
+ return truncatedCells;
149
+ }
150
+
151
+ function containsLargeCellPreview(value: unknown): boolean {
152
+ if (typeof value === "string") return value.endsWith(LARGE_CELL_SUFFIX);
153
+ if (Array.isArray(value)) return value.some(containsLargeCellPreview);
154
+ if (value && typeof value === "object") {
155
+ return Object.values(value as Record<string, unknown>).some(
156
+ containsLargeCellPreview,
157
+ );
158
+ }
159
+ return false;
160
+ }
161
+
162
+ function assertNoLargeCellPreviewMutation(
163
+ row: Record<string, unknown>,
164
+ context: string,
165
+ ): void {
166
+ for (const [column, value] of Object.entries(row)) {
167
+ if (containsLargeCellPreview(value)) {
168
+ throw new Error(
169
+ `Refusing to ${context} with previewed large-cell value in column "${column}". Reload the row with includeLargeCells=true before saving.`,
170
+ );
171
+ }
172
+ }
173
+ }
174
+
75
175
  // ---------------------------------------------------------------------------
76
176
  // Notify the UI after a real mutation so polling refetches.
77
177
  // ---------------------------------------------------------------------------
@@ -469,6 +569,8 @@ export async function getRows(
469
569
  const where = buildWhere(req.filters, runtime);
470
570
  const orderBy = buildOrderBy(req.sort);
471
571
  const quoted = quoteIdent(table);
572
+ const includeLargeCells = req.includeLargeCells === true;
573
+ const selectList = buildRowsSelectList(schema.columns, includeLargeCells);
472
574
 
473
575
  const countRes = await client.execute({
474
576
  sql: `SELECT COUNT(*) AS c FROM ${quoted}${where.clause}`,
@@ -477,16 +579,18 @@ export async function getRows(
477
579
  const total = Number((countRes.rows[0] as any)?.c ?? 0) || 0;
478
580
 
479
581
  const rowsRes = await client.execute({
480
- sql: `SELECT * FROM ${quoted}${where.clause}${orderBy} LIMIT ? OFFSET ?`,
582
+ sql: `SELECT ${selectList} FROM ${quoted}${where.clause}${orderBy} LIMIT ? OFFSET ?`,
481
583
  args: [...where.args, pageSize, offset],
482
584
  });
585
+ const rows = rowsRes.rows as Record<string, unknown>[];
483
586
 
484
587
  return {
485
- columns: schema.columns,
486
- rows: rowsRes.rows as Record<string, unknown>[],
588
+ columns: markLargeValuePreviewColumns(schema.columns, includeLargeCells),
589
+ rows,
487
590
  total,
488
591
  page,
489
592
  pageSize,
593
+ truncatedCells: includeLargeCells ? 0 : countTruncatedResultCells(rows),
490
594
  };
491
595
  }
492
596
 
@@ -502,6 +606,7 @@ function buildInsert(
502
606
  if (cols.length === 0) {
503
607
  throw new Error("Cannot insert an empty row");
504
608
  }
609
+ assertNoLargeCellPreviewMutation(row, "insert");
505
610
  cols.forEach((c) => assertIdent(c, "column name"));
506
611
  const sql = `INSERT INTO ${quoteIdent(table)} (${cols
507
612
  .map(quoteIdent)
@@ -520,6 +625,8 @@ function buildUpdate(
520
625
  if (whereCols.length === 0) {
521
626
  throw new Error("Update requires a non-empty where clause");
522
627
  }
628
+ assertNoLargeCellPreviewMutation(set, "update");
629
+ assertNoLargeCellPreviewMutation(where, "match rows");
523
630
  setCols.forEach((c) => assertIdent(c, "column name"));
524
631
  whereCols.forEach((c) => assertIdent(c, "column name"));
525
632
  const setSql = setCols.map((c) => `${quoteIdent(c)} = ?`).join(", ");
@@ -539,6 +646,7 @@ function buildDelete(
539
646
  if (whereCols.length === 0) {
540
647
  throw new Error("Delete requires a non-empty where clause");
541
648
  }
649
+ assertNoLargeCellPreviewMutation(where, "delete");
542
650
  whereCols.forEach((c) => assertIdent(c, "column name"));
543
651
  const whereSql = whereCols.map((c) => `${quoteIdent(c)} = ?`).join(" AND ");
544
652
  const sql = `DELETE FROM ${quoteIdent(table)} WHERE ${whereSql}`;
@@ -674,7 +782,10 @@ export async function runSql(
674
782
  );
675
783
  const durationMs = Date.now() - started;
676
784
 
677
- const rows = (res.rows ?? []) as Record<string, unknown>[];
785
+ const truncation = truncateLargeResultCells(
786
+ (res.rows ?? []) as Record<string, unknown>[],
787
+ );
788
+ const rows = truncation.rows;
678
789
  const columns =
679
790
  rows.length > 0 && rows[0] && typeof rows[0] === "object"
680
791
  ? Object.keys(rows[0])
@@ -687,5 +798,6 @@ export async function runSql(
687
798
  rows,
688
799
  rowsAffected: res.rowsAffected ?? 0,
689
800
  durationMs,
801
+ truncatedCells: truncation.truncatedCells,
690
802
  };
691
803
  }
@@ -106,6 +106,7 @@ export function mountDbAdminRoutes(
106
106
  pageSize: Number(body.pageSize) || 50,
107
107
  sort: body.sort,
108
108
  filters: body.filters,
109
+ includeLargeCells: body.includeLargeCells === true,
109
110
  });
110
111
  return { ok: true, ...result };
111
112
  }
@@ -15,6 +15,7 @@ export interface DbAdminColumn {
15
15
  pk: boolean;
16
16
  defaultValue: string | null;
17
17
  autoIncrement?: boolean;
18
+ largeValuePreview?: boolean;
18
19
  }
19
20
 
20
21
  export interface DbAdminForeignKey {
@@ -74,6 +75,7 @@ export interface DbAdminRowsRequest {
74
75
  pageSize: number;
75
76
  sort?: DbAdminSort[];
76
77
  filters?: DbAdminFilter[];
78
+ includeLargeCells?: boolean;
77
79
  }
78
80
 
79
81
  export interface DbAdminRowsResult {
@@ -82,6 +84,7 @@ export interface DbAdminRowsResult {
82
84
  total: number;
83
85
  page: number;
84
86
  pageSize: number;
87
+ truncatedCells?: number;
85
88
  }
86
89
 
87
90
  export interface DbAdminMutation {
@@ -103,4 +106,5 @@ export interface DbAdminQueryResult {
103
106
  rows: Record<string, unknown>[];
104
107
  rowsAffected: number;
105
108
  durationMs: number;
109
+ truncatedCells?: number;
106
110
  }