@agent-native/core 0.90.11 → 0.91.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 (322) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +34 -0
  3. package/corpus/core/docs/content/toolkit-settings.mdx +56 -3
  4. package/corpus/core/package.json +2 -1
  5. package/corpus/core/src/agent/run-ownership.ts +29 -1
  6. package/corpus/core/src/changelog/parse.ts +78 -0
  7. package/corpus/core/src/chat-threads/schema.ts +43 -0
  8. package/corpus/core/src/chat-threads/store.ts +144 -12
  9. package/corpus/core/src/cli/design-connect.ts +53 -9
  10. package/corpus/core/src/cli/workspace-dev.ts +25 -5
  11. package/corpus/core/src/client/AgentPanel.tsx +79 -14
  12. package/corpus/core/src/client/AssistantChat.tsx +359 -425
  13. package/corpus/core/src/client/analytics-session.ts +70 -0
  14. package/corpus/core/src/client/analytics.ts +175 -49
  15. package/corpus/core/src/client/chat/message-components.tsx +22 -2
  16. package/corpus/core/src/client/components/ui/message-scroller.tsx +131 -0
  17. package/corpus/core/src/client/conversation/AgentConversation.tsx +63 -41
  18. package/corpus/core/src/client/error-capture.ts +616 -0
  19. package/corpus/core/src/client/index.ts +12 -0
  20. package/corpus/core/src/client/session-replay.ts +57 -7
  21. package/corpus/core/src/client/settings/SettingsPanel.tsx +123 -1
  22. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +292 -45
  23. package/corpus/core/src/client/settings/index.ts +1 -0
  24. package/corpus/core/src/client/sharing/ShareButton.tsx +14 -11
  25. package/corpus/core/src/client/sharing/ShareDialog.tsx +13 -10
  26. package/corpus/core/src/mcp/builtin-tools.ts +29 -2
  27. package/corpus/core/src/server/agent-chat-plugin.ts +174 -79
  28. package/corpus/core/src/server/onboarding-html.ts +28 -16
  29. package/corpus/core/src/sharing/actions/list-resource-shares.ts +45 -1
  30. package/corpus/core/src/sharing/actions/share-resource.ts +9 -0
  31. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  32. package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  33. package/corpus/core/src/vite/client.ts +217 -35
  34. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +8 -7
  35. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +14 -10
  36. package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +15 -15
  37. package/corpus/templates/analytics/.agents/skills/cross-source-analysis/SKILL.md +1 -0
  38. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +38 -22
  39. package/corpus/templates/analytics/.agents/skills/data-programs/SKILL.md +114 -61
  40. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -0
  41. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +7 -7
  42. package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +1 -0
  43. package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +1 -1
  44. package/corpus/templates/analytics/.builder/skills/bigquery/SKILL.md +17 -17
  45. package/corpus/templates/analytics/.builder/skills/gcloud/SKILL.md +5 -5
  46. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +7 -7
  47. package/corpus/templates/analytics/.builder/skills/gong/SKILL.md +12 -12
  48. package/corpus/templates/analytics/.builder/skills/grafana/SKILL.md +7 -7
  49. package/corpus/templates/analytics/.builder/skills/sentry/SKILL.md +7 -7
  50. package/corpus/templates/analytics/.builder/skills/slack/SKILL.md +6 -6
  51. package/corpus/templates/analytics/.builder/skills/stripe/SKILL.md +7 -7
  52. package/corpus/templates/analytics/AGENTS.md +47 -2
  53. package/corpus/templates/analytics/actions/add-status-page-monitor.ts +36 -0
  54. package/corpus/templates/analytics/actions/capture-test-error.ts +33 -0
  55. package/corpus/templates/analytics/actions/delete-monitor.ts +24 -0
  56. package/corpus/templates/analytics/actions/delete-status-page.ts +23 -0
  57. package/corpus/templates/analytics/actions/get-error-issue.ts +36 -0
  58. package/corpus/templates/analytics/actions/get-monitor-stats.ts +55 -0
  59. package/corpus/templates/analytics/actions/get-monitor.ts +27 -0
  60. package/corpus/templates/analytics/actions/get-public-status-page.ts +41 -0
  61. package/corpus/templates/analytics/actions/get-status-page.ts +29 -0
  62. package/corpus/templates/analytics/actions/list-error-issues.ts +40 -0
  63. package/corpus/templates/analytics/actions/list-monitors.ts +21 -0
  64. package/corpus/templates/analytics/actions/list-status-pages.ts +21 -0
  65. package/corpus/templates/analytics/actions/match-error-issues.ts +51 -0
  66. package/corpus/templates/analytics/actions/navigate.ts +58 -4
  67. package/corpus/templates/analytics/actions/remove-status-page-monitor.ts +22 -0
  68. package/corpus/templates/analytics/actions/reorder-status-page-monitors.ts +25 -0
  69. package/corpus/templates/analytics/actions/resolve-error-issue.ts +38 -0
  70. package/corpus/templates/analytics/actions/run-monitor-check.ts +23 -0
  71. package/corpus/templates/analytics/actions/save-analysis.ts +1 -0
  72. package/corpus/templates/analytics/actions/save-monitor.ts +145 -0
  73. package/corpus/templates/analytics/actions/save-status-page.ts +47 -0
  74. package/corpus/templates/analytics/actions/view-screen.ts +212 -0
  75. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
  76. package/corpus/templates/analytics/app/components/layout/Layout.tsx +10 -1
  77. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +134 -39
  78. package/corpus/templates/analytics/app/components/monitoring/PublicStatusView.tsx +351 -0
  79. package/corpus/templates/analytics/app/components/monitoring/ResponseTimeChart.tsx +174 -0
  80. package/corpus/templates/analytics/app/components/monitoring/UptimeStatCards.tsx +85 -0
  81. package/corpus/templates/analytics/app/components/monitoring/UptimeTimelineBars.tsx +106 -0
  82. package/corpus/templates/analytics/app/components/monitoring/chart-utils.ts +101 -0
  83. package/corpus/templates/analytics/app/components/monitoring/index.ts +28 -0
  84. package/corpus/templates/analytics/app/components/monitoring/types.ts +42 -0
  85. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +34 -0
  86. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -0
  87. package/corpus/templates/analytics/app/i18n-data.ts +33 -0
  88. package/corpus/templates/analytics/app/pages/DataSources.tsx +28 -0
  89. package/corpus/templates/analytics/app/pages/Settings.tsx +77 -9
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +3 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +7 -0
  92. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +205 -0
  93. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +100 -0
  94. package/corpus/templates/analytics/app/pages/monitoring/UptimePanel.tsx +475 -0
  95. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +372 -0
  96. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +360 -0
  97. package/corpus/templates/analytics/app/pages/monitoring/errors/Sparkline.tsx +55 -0
  98. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +106 -0
  99. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +75 -0
  100. package/corpus/templates/analytics/app/pages/monitoring/errors/utils.ts +132 -0
  101. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorDetail.tsx +535 -0
  102. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +1026 -0
  103. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorList.tsx +311 -0
  104. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +235 -0
  105. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPageEditor.tsx +661 -0
  106. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPagesView.tsx +355 -0
  107. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/i18n.ts +106 -0
  108. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/slug.ts +24 -0
  109. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/types.ts +20 -0
  110. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-summary.ts +87 -0
  111. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +161 -0
  112. package/corpus/templates/analytics/app/pages/monitoring/uptime/utils.ts +210 -0
  113. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +76 -1
  114. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +74 -9
  115. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +197 -20
  116. package/corpus/templates/analytics/app/root.tsx +33 -1
  117. package/corpus/templates/analytics/app/routes/monitoring._index.tsx +10 -0
  118. package/corpus/templates/analytics/app/routes/status.$slug.tsx +118 -0
  119. package/corpus/templates/analytics/changelog/2026-07-08-add-uptime-monitors-that-ping-your-urls-and-alert-you-when-t.md +6 -0
  120. package/corpus/templates/analytics/changelog/2026-07-08-analytics-chats-keep-large-data-dictionaries-compact-so-prov.md +6 -0
  121. package/corpus/templates/analytics/changelog/2026-07-08-create-public-status-pages-that-share-the-live-health-of-cho.md +6 -0
  122. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-extension-panels-use-clearer-open-copy.md +6 -0
  123. package/corpus/templates/analytics/changelog/2026-07-08-error-capture.md +6 -0
  124. package/corpus/templates/analytics/changelog/2026-07-08-fixed-single-panel-dashboard-drags-so-they-no-longer-rewrite.md +6 -0
  125. package/corpus/templates/analytics/changelog/2026-07-08-jump-straight-from-an-error-in-a-session-recording-to-its-fu.md +6 -0
  126. package/corpus/templates/analytics/changelog/2026-07-08-monitor-detail-and-list-now-show-colorful-uptime-timelines-r.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-08-pinned-ask-chats-now-show-a-pin-icon-in-the-sidebar.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-08-publish-a-public-uptime-status-page-with-colorful-uptime-tim.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-sessions-now-hide-visitor-emails-in-demo-mode-and-show-clean.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +5 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +5 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-the-uptime-monitor-list-now-has-a-current-status-overview-wi.md +6 -0
  133. package/corpus/templates/analytics/docs/error-capture.md +172 -0
  134. package/corpus/templates/analytics/docs/uptime-monitoring.md +150 -0
  135. package/corpus/templates/analytics/server/db/schema-errors.ts +150 -0
  136. package/corpus/templates/analytics/server/db/schema-monitoring.ts +177 -0
  137. package/corpus/templates/analytics/server/db/schema.ts +6 -0
  138. package/corpus/templates/analytics/server/jobs/uptime-monitors.ts +123 -0
  139. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +41 -0
  140. package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +55 -12
  141. package/corpus/templates/analytics/server/lib/error-capture.ts +1331 -0
  142. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +47 -1
  143. package/corpus/templates/analytics/server/lib/monitor-stats.ts +494 -0
  144. package/corpus/templates/analytics/server/lib/status-pages.ts +798 -0
  145. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +1665 -0
  146. package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -37
  147. package/corpus/templates/analytics/server/plugins/auth.ts +11 -1
  148. package/corpus/templates/analytics/server/plugins/db.ts +408 -0
  149. package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +63 -0
  150. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  151. package/corpus/templates/assets/app/routes/settings.tsx +22 -1
  152. package/corpus/templates/assets/changelog/2026-07-08-recent-drafts-keep-comfortable-side-padding.md +6 -0
  153. package/corpus/templates/assets/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  154. package/corpus/templates/brain/app/routes/settings.tsx +43 -5
  155. package/corpus/templates/brain/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  156. package/corpus/templates/calendar/app/pages/Settings.tsx +44 -6
  157. package/corpus/templates/calendar/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  158. package/corpus/templates/chat/app/routes/settings.tsx +16 -1
  159. package/corpus/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  160. package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +79 -37
  161. package/corpus/templates/clips/app/components/player/player-controls.tsx +35 -0
  162. package/corpus/templates/clips/app/components/player/video-player.tsx +162 -18
  163. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +63 -6
  164. package/corpus/templates/clips/app/routes/record.tsx +18 -1
  165. package/corpus/templates/clips/changelog/2026-07-07-shared-clips-start-playback-reliably-from-the-first-play-click.md +6 -0
  166. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-camera-and-microphone-menus-now-show-which-.md +6 -0
  167. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-copies-new-clip-links-after-saving.md +6 -0
  168. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-recordings-now-continue-after-granting-came.md +6 -0
  169. package/corpus/templates/clips/changelog/2026-07-08-mobile-shared-clips-now-have-loom-style-tap-and-skip-controls.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-07-08-recordings-and-uploads-copy-links-after-saving.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-07-08-settings-are-cleaner-searchable-and-collapse-s3-with-builder.md +5 -0
  172. package/corpus/templates/clips/changelog/2026-07-08-transcripts-are-more-reliable-for-longer-desktop-recordings-.md +6 -0
  173. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -0
  174. package/corpus/templates/clips/chrome-extension/src/background.ts +162 -13
  175. package/corpus/templates/clips/chrome-extension/src/content-script.ts +14 -0
  176. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +36 -0
  177. package/corpus/templates/clips/chrome-extension/src/overlay.ts +99 -25
  178. package/corpus/templates/clips/chrome-extension/src/permission.ts +63 -14
  179. package/corpus/templates/clips/chrome-extension/src/popup.ts +123 -23
  180. package/corpus/templates/content/actions/_builder-cms-read-client.ts +47 -0
  181. package/corpus/templates/content/actions/_database-source-utils.ts +33 -4
  182. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +214 -29
  183. package/corpus/templates/content/actions/attach-content-database-source.ts +3 -0
  184. package/corpus/templates/content/actions/change-content-database-source-role.ts +1 -0
  185. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +42 -32
  186. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +352 -81
  187. package/corpus/templates/content/app/components/editor/database/settings.tsx +49 -24
  188. package/corpus/templates/content/app/routes/_app.settings.tsx +19 -1
  189. package/corpus/templates/content/changelog/2026-07-07-builder-source-tag-fields-now-import-as-multi-select.md +6 -0
  190. package/corpus/templates/content/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  191. package/corpus/templates/content/shared/api.ts +3 -0
  192. package/corpus/templates/content/shared/properties.ts +42 -0
  193. package/corpus/templates/design/AGENTS.md +9 -0
  194. package/corpus/templates/design/actions/generate-design.ts +3 -0
  195. package/corpus/templates/design/actions/get-design-system.ts +147 -1
  196. package/corpus/templates/design/actions/request-localhost-write-consent.ts +141 -0
  197. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +13 -19
  198. package/corpus/templates/design/app/routes/settings.tsx +16 -1
  199. package/corpus/templates/design/changelog/2026-07-08-design-generation-now-follows-hydrated-builder-design-system.md +6 -0
  200. package/corpus/templates/design/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  201. package/corpus/templates/design/server/lib/verify-write-grant.ts +4 -2
  202. package/corpus/templates/dispatch/app/routes/settings.tsx +23 -2
  203. package/corpus/templates/dispatch/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  204. package/corpus/templates/forms/app/routes/_app.settings.tsx +16 -1
  205. package/corpus/templates/forms/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  206. package/corpus/templates/macros/app/routes/settings.tsx +16 -1
  207. package/corpus/templates/macros/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  208. package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +1 -1
  209. package/corpus/templates/mail/app/components/settings/SnippetsSection.tsx +1 -1
  210. package/corpus/templates/mail/app/pages/SettingsPage.tsx +123 -105
  211. package/corpus/templates/mail/changelog/2026-07-08-settings-redesigned-with-a-consistent-searchable-layout.md +5 -0
  212. package/corpus/templates/plan/app/routes/settings.tsx +23 -2
  213. package/corpus/templates/plan/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  214. package/corpus/templates/slides/actions/add-slide.ts +1 -0
  215. package/corpus/templates/slides/actions/get-design-system.ts +147 -1
  216. package/corpus/templates/slides/app/pages/Index.tsx +46 -1
  217. package/corpus/templates/slides/app/routes/settings.tsx +16 -1
  218. package/corpus/templates/slides/changelog/2026-07-08-deck-generation-now-follows-hydrated-builder-design-system-g.md +6 -0
  219. package/corpus/templates/slides/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  220. package/dist/agent/run-ownership.d.ts +6 -0
  221. package/dist/agent/run-ownership.d.ts.map +1 -1
  222. package/dist/agent/run-ownership.js +11 -1
  223. package/dist/agent/run-ownership.js.map +1 -1
  224. package/dist/changelog/parse.d.ts +7 -0
  225. package/dist/changelog/parse.d.ts.map +1 -1
  226. package/dist/changelog/parse.js +64 -0
  227. package/dist/changelog/parse.js.map +1 -1
  228. package/dist/chat-threads/schema.d.ts +445 -0
  229. package/dist/chat-threads/schema.d.ts.map +1 -0
  230. package/dist/chat-threads/schema.js +39 -0
  231. package/dist/chat-threads/schema.js.map +1 -0
  232. package/dist/chat-threads/store.d.ts +12 -0
  233. package/dist/chat-threads/store.d.ts.map +1 -1
  234. package/dist/chat-threads/store.js +99 -10
  235. package/dist/chat-threads/store.js.map +1 -1
  236. package/dist/cli/design-connect.d.ts.map +1 -1
  237. package/dist/cli/design-connect.js +40 -10
  238. package/dist/cli/design-connect.js.map +1 -1
  239. package/dist/cli/workspace-dev.d.ts.map +1 -1
  240. package/dist/cli/workspace-dev.js +20 -5
  241. package/dist/cli/workspace-dev.js.map +1 -1
  242. package/dist/client/AgentPanel.d.ts.map +1 -1
  243. package/dist/client/AgentPanel.js +35 -7
  244. package/dist/client/AgentPanel.js.map +1 -1
  245. package/dist/client/AssistantChat.d.ts.map +1 -1
  246. package/dist/client/AssistantChat.js +105 -183
  247. package/dist/client/AssistantChat.js.map +1 -1
  248. package/dist/client/analytics-session.d.ts +3 -0
  249. package/dist/client/analytics-session.d.ts.map +1 -0
  250. package/dist/client/analytics-session.js +66 -0
  251. package/dist/client/analytics-session.js.map +1 -0
  252. package/dist/client/analytics.d.ts +32 -0
  253. package/dist/client/analytics.d.ts.map +1 -1
  254. package/dist/client/analytics.js +116 -46
  255. package/dist/client/analytics.js.map +1 -1
  256. package/dist/client/chat/message-components.d.ts +2 -1
  257. package/dist/client/chat/message-components.d.ts.map +1 -1
  258. package/dist/client/chat/message-components.js +16 -6
  259. package/dist/client/chat/message-components.js.map +1 -1
  260. package/dist/client/components/ui/message-scroller.d.ts +16 -0
  261. package/dist/client/components/ui/message-scroller.d.ts.map +1 -0
  262. package/dist/client/components/ui/message-scroller.js +25 -0
  263. package/dist/client/components/ui/message-scroller.js.map +1 -0
  264. package/dist/client/conversation/AgentConversation.d.ts +1 -1
  265. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  266. package/dist/client/conversation/AgentConversation.js +3 -8
  267. package/dist/client/conversation/AgentConversation.js.map +1 -1
  268. package/dist/client/error-capture.d.ts +99 -0
  269. package/dist/client/error-capture.d.ts.map +1 -0
  270. package/dist/client/error-capture.js +437 -0
  271. package/dist/client/error-capture.js.map +1 -0
  272. package/dist/client/index.d.ts +2 -2
  273. package/dist/client/index.d.ts.map +1 -1
  274. package/dist/client/index.js +3 -1
  275. package/dist/client/index.js.map +1 -1
  276. package/dist/client/session-replay.d.ts +22 -0
  277. package/dist/client/session-replay.d.ts.map +1 -1
  278. package/dist/client/session-replay.js +45 -4
  279. package/dist/client/session-replay.js.map +1 -1
  280. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  281. package/dist/client/settings/SettingsPanel.js +100 -5
  282. package/dist/client/settings/SettingsPanel.js.map +1 -1
  283. package/dist/client/settings/SettingsTabsPage.d.ts +49 -1
  284. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  285. package/dist/client/settings/SettingsTabsPage.js +131 -19
  286. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  287. package/dist/client/settings/index.d.ts +1 -1
  288. package/dist/client/settings/index.d.ts.map +1 -1
  289. package/dist/client/settings/index.js.map +1 -1
  290. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  291. package/dist/client/sharing/ShareButton.js +13 -8
  292. package/dist/client/sharing/ShareButton.js.map +1 -1
  293. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  294. package/dist/client/sharing/ShareDialog.js +12 -7
  295. package/dist/client/sharing/ShareDialog.js.map +1 -1
  296. package/dist/collab/routes.d.ts +1 -1
  297. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  298. package/dist/mcp/builtin-tools.d.ts.map +1 -1
  299. package/dist/mcp/builtin-tools.js +21 -2
  300. package/dist/mcp/builtin-tools.js.map +1 -1
  301. package/dist/observability/routes.d.ts +1 -1
  302. package/dist/org/schema.d.ts +15 -15
  303. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  304. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  305. package/dist/server/agent-chat-plugin.js +109 -73
  306. package/dist/server/agent-chat-plugin.js.map +1 -1
  307. package/dist/server/onboarding-html.d.ts.map +1 -1
  308. package/dist/server/onboarding-html.js +28 -16
  309. package/dist/server/onboarding-html.js.map +1 -1
  310. package/dist/sharing/actions/list-resource-shares.js +30 -1
  311. package/dist/sharing/actions/list-resource-shares.js.map +1 -1
  312. package/dist/sharing/actions/share-resource.js +6 -0
  313. package/dist/sharing/actions/share-resource.js.map +1 -1
  314. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  315. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  316. package/dist/vite/client.d.ts.map +1 -1
  317. package/dist/vite/client.js +192 -30
  318. package/dist/vite/client.js.map +1 -1
  319. package/docs/content/toolkit-settings.mdx +56 -3
  320. package/package.json +2 -1
  321. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  322. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
@@ -59,7 +59,8 @@ export async function verifyWriteGrant(
59
59
  if (!grant) {
60
60
  throw new Error(
61
61
  "No localhost write-consent grant found for this design + connection. " +
62
- "The user must approve writes via the LocalhostWriteConsentDialog first.",
62
+ "Call request-localhost-write-consent to prompt the user, then retry " +
63
+ "this write after they click 'Allow writes'.",
63
64
  );
64
65
  }
65
66
 
@@ -67,7 +68,8 @@ export async function verifyWriteGrant(
67
68
  if (grant.grantedUntil < now) {
68
69
  throw new Error(
69
70
  `Localhost write-consent grant expired at ${grant.grantedUntil}. ` +
70
- "Request a new grant via the LocalhostWriteConsentDialog.",
71
+ "Call request-localhost-write-consent to prompt the user for a new " +
72
+ "grant, then retry this write.",
71
73
  );
72
74
  }
73
75
 
@@ -4,6 +4,7 @@ import {
4
4
  SettingsTabsPage,
5
5
  useAgentSettingsTabs,
6
6
  useT,
7
+ type SettingsSearchEntry,
7
8
  } from "@agent-native/core/client";
8
9
  import { TeamPage } from "@agent-native/core/client/org";
9
10
  import { Button } from "@agent-native/dispatch/components/ui/button";
@@ -15,6 +16,7 @@ import {
15
16
  CardTitle,
16
17
  } from "@agent-native/dispatch/components/ui/card";
17
18
  import { Label } from "@agent-native/dispatch/components/ui/label";
19
+ import { useMemo } from "react";
18
20
  import { Link } from "react-router";
19
21
 
20
22
  import { messagesByLocale } from "@/i18n-data";
@@ -29,16 +31,35 @@ export default function SettingsRoute() {
29
31
  const t = useT();
30
32
  const agentSettingsTabs = useAgentSettingsTabs();
31
33
 
34
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
35
+ () => [
36
+ {
37
+ id: "dispatch-language",
38
+ label: t("settings.languageTitle"),
39
+ keywords: "language locale translation i18n",
40
+ hash: "language",
41
+ },
42
+ {
43
+ id: "dispatch-workspace",
44
+ label: t("settings.workspaceTitle"),
45
+ keywords: "workspace resources integrations vault destinations",
46
+ hash: "workspace-resources",
47
+ },
48
+ ],
49
+ [t],
50
+ );
51
+
32
52
  return (
33
53
  <SettingsTabsPage
34
54
  extraTabs={agentSettingsTabs}
55
+ generalSearchEntries={generalSearchEntries}
35
56
  general={
36
57
  <div className="mx-auto w-full max-w-3xl space-y-6">
37
58
  <p className="text-sm leading-6 text-muted-foreground">
38
59
  {t("settings.description")}
39
60
  </p>
40
61
 
41
- <Card>
62
+ <Card id="language" className="scroll-mt-16">
42
63
  <CardHeader>
43
64
  <CardTitle className="text-base">
44
65
  {t("settings.languageTitle")}
@@ -53,7 +74,7 @@ export default function SettingsRoute() {
53
74
  </CardContent>
54
75
  </Card>
55
76
 
56
- <Card>
77
+ <Card id="workspace-resources" className="scroll-mt-16">
57
78
  <CardHeader>
58
79
  <CardTitle className="text-base">
59
80
  {t("settings.workspaceTitle")}
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.
@@ -4,9 +4,11 @@ import {
4
4
  SettingsTabsPage,
5
5
  useAgentSettingsTabs,
6
6
  useT,
7
+ type SettingsSearchEntry,
7
8
  } from "@agent-native/core/client";
8
9
  import { TeamPage } from "@agent-native/core/client/org";
9
10
  import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
11
+ import { useMemo } from "react";
10
12
 
11
13
  import {
12
14
  Card,
@@ -29,17 +31,30 @@ export default function SettingsRoute() {
29
31
  const agentSettingsTabs = useAgentSettingsTabs();
30
32
  useSetPageTitle(t("settings.title"));
31
33
 
34
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
35
+ () => [
36
+ {
37
+ id: "forms-language",
38
+ label: t("settings.languageTitle"),
39
+ keywords: "language locale translation i18n",
40
+ hash: "language",
41
+ },
42
+ ],
43
+ [t],
44
+ );
45
+
32
46
  return (
33
47
  <SettingsTabsPage
34
48
  teamLabel={t("navigation.team")}
35
49
  extraTabs={agentSettingsTabs}
50
+ generalSearchEntries={generalSearchEntries}
36
51
  general={
37
52
  <div className="mx-auto w-full max-w-3xl space-y-6">
38
53
  <p className="text-sm leading-6 text-muted-foreground">
39
54
  {t("settings.description")}
40
55
  </p>
41
56
 
42
- <Card>
57
+ <Card id="language" className="scroll-mt-16">
43
58
  <CardHeader>
44
59
  <CardTitle className="text-base">
45
60
  {t("settings.languageTitle")}
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.
@@ -4,9 +4,11 @@ import {
4
4
  SettingsTabsPage,
5
5
  useAgentSettingsTabs,
6
6
  useT,
7
+ type SettingsSearchEntry,
7
8
  } from "@agent-native/core/client";
8
9
  import { TeamPage } from "@agent-native/core/client/org";
9
10
  import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
11
+ import { useMemo } from "react";
10
12
 
11
13
  import {
12
14
  Card,
@@ -29,17 +31,30 @@ export default function SettingsRoute() {
29
31
  const agentSettingsTabs = useAgentSettingsTabs();
30
32
  useSetPageTitle(t("settings.title"));
31
33
 
34
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
35
+ () => [
36
+ {
37
+ id: "macros-language",
38
+ label: t("settings.languageTitle"),
39
+ keywords: "language locale translation i18n",
40
+ hash: "language",
41
+ },
42
+ ],
43
+ [t],
44
+ );
45
+
32
46
  return (
33
47
  <SettingsTabsPage
34
48
  teamLabel={t("team.title")}
35
49
  extraTabs={agentSettingsTabs}
50
+ generalSearchEntries={generalSearchEntries}
36
51
  general={
37
52
  <div className="mx-auto w-full max-w-3xl space-y-6">
38
53
  <p className="text-sm leading-6 text-muted-foreground">
39
54
  {t("settings.description")}
40
55
  </p>
41
56
 
42
- <Card>
57
+ <Card id="language" className="scroll-mt-16">
43
58
  <CardHeader>
44
59
  <CardTitle className="text-base">
45
60
  {t("settings.languageTitle")}
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.
@@ -554,7 +554,7 @@ export function GmailFiltersSection() {
554
554
  );
555
555
 
556
556
  return (
557
- <div className="flex-1 overflow-y-auto p-4 sm:p-8">
557
+ <div>
558
558
  <div className="mb-6 flex items-center justify-between">
559
559
  <div>
560
560
  <h2 className="text-[16px] font-semibold text-foreground">
@@ -231,7 +231,7 @@ export function SnippetsSection() {
231
231
  };
232
232
 
233
233
  return (
234
- <div className="flex-1 p-4 sm:p-8 overflow-y-auto">
234
+ <div>
235
235
  <div className="flex items-center justify-between mb-6">
236
236
  <div>
237
237
  <h2 className="text-[16px] font-semibold text-foreground">
@@ -5,8 +5,11 @@ import {
5
5
  useChangeVersions,
6
6
  ChangelogSettingsCard,
7
7
  LanguagePicker,
8
+ SettingsTabsPage,
8
9
  useAgentSettingsTabs,
9
10
  useT,
11
+ type SettingsSearchEntry,
12
+ type SettingsTabItem,
10
13
  } from "@agent-native/core/client";
11
14
  import { appApiPath } from "@agent-native/core/client";
12
15
  import { TeamPage } from "@agent-native/core/client/org";
@@ -32,8 +35,6 @@ import {
32
35
  IconSignature,
33
36
  IconFilter,
34
37
  IconInfoCircle,
35
- IconHistory,
36
- IconSettings,
37
38
  IconMessage2,
38
39
  } from "@tabler/icons-react";
39
40
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
@@ -328,7 +329,7 @@ function AliasesSection() {
328
329
  };
329
330
 
330
331
  return (
331
- <div className="flex-1 p-4 sm:p-8 overflow-y-auto">
332
+ <div>
332
333
  {/* Header */}
333
334
  <div className="flex items-center justify-between mb-6">
334
335
  <div>
@@ -938,7 +939,7 @@ function AutomationsSection() {
938
939
  };
939
940
 
940
941
  return (
941
- <div className="flex-1 p-4 sm:p-8 overflow-y-auto">
942
+ <div>
942
943
  {/* Header */}
943
944
  <div className="flex items-center justify-between mb-6">
944
945
  <div>
@@ -1115,7 +1116,7 @@ function DraftingSection() {
1115
1116
  };
1116
1117
 
1117
1118
  return (
1118
- <div className="flex-1 overflow-y-auto p-4 sm:p-8">
1119
+ <div>
1119
1120
  <div className="mb-6">
1120
1121
  <h2 className="text-[16px] font-semibold text-foreground">
1121
1122
  {t("settings.drafting")}
@@ -1252,7 +1253,7 @@ function TrackingSection() {
1252
1253
  };
1253
1254
 
1254
1255
  return (
1255
- <div className="flex-1 p-4 sm:p-8 overflow-y-auto">
1256
+ <div>
1256
1257
  <div className="mb-6">
1257
1258
  <h2 className="text-[16px] font-semibold text-foreground">
1258
1259
  {t("settings.tracking")}
@@ -1334,7 +1335,7 @@ function SlackIntakeSection() {
1334
1335
  : t("settings.slackNeedsCredentials");
1335
1336
 
1336
1337
  return (
1337
- <div className="flex-1 overflow-y-auto p-4 sm:p-8">
1338
+ <div>
1338
1339
  <div className="mb-6">
1339
1340
  <h2 className="text-[16px] font-semibold text-foreground">
1340
1341
  {t("settings.slackIntake")}
@@ -1412,7 +1413,7 @@ function SlackIntakeSection() {
1412
1413
  function GeneralSection() {
1413
1414
  const t = useT();
1414
1415
  return (
1415
- <div className="flex-1 overflow-y-auto p-4 sm:p-8">
1416
+ <div>
1416
1417
  <div className="mb-6">
1417
1418
  <h2 className="text-[16px] font-semibold text-foreground">
1418
1419
  {t("settings.general")}
@@ -1422,7 +1423,10 @@ function GeneralSection() {
1422
1423
  </p>
1423
1424
  </div>
1424
1425
 
1425
- <div className="max-w-2xl rounded-lg border border-border/20 bg-card/50 p-4">
1426
+ <div
1427
+ id="language"
1428
+ className="max-w-2xl scroll-mt-4 rounded-lg border border-border/20 bg-card/50 p-4"
1429
+ >
1426
1430
  <div className="mb-3">
1427
1431
  <h3 className="text-[13px] font-semibold text-foreground">
1428
1432
  {t("settings.languageTitle")}
@@ -1442,7 +1446,7 @@ function GeneralSection() {
1442
1446
  function WhatsNewSection() {
1443
1447
  const t = useT();
1444
1448
  return (
1445
- <div className="flex-1 overflow-y-auto p-4 sm:p-8">
1449
+ <div>
1446
1450
  <div className="mb-6">
1447
1451
  <h2 className="text-[16px] font-semibold text-foreground">
1448
1452
  {t("settings.whatsNew")}
@@ -1461,119 +1465,133 @@ function WhatsNewSection() {
1461
1465
 
1462
1466
  // ─── Settings Page ────────────────────────────────────────────────────────────
1463
1467
 
1464
- type SettingsNavItem = {
1465
- id: string;
1466
- labelKey?: string;
1467
- label?: string;
1468
- icon: React.ComponentType<{ className?: string }>;
1469
- };
1470
-
1471
- const navItems: SettingsNavItem[] = [
1472
- { id: "general", labelKey: "settings.general", icon: IconSettings },
1473
- { id: "team", labelKey: "settings.team", icon: IconUsers },
1474
- { id: "whats-new", labelKey: "settings.whatsNew", icon: IconHistory },
1475
- { id: "drafting", labelKey: "settings.drafting", icon: IconSignature },
1476
- { id: "snippets", labelKey: "settings.snippets", icon: IconMessage2 },
1477
- { id: "automations", labelKey: "settings.automations", icon: IconBolt },
1478
- { id: "gmail-filters", labelKey: "settings.gmailFilters", icon: IconFilter },
1479
- { id: "aliases", labelKey: "settings.aliases", icon: IconUsers },
1480
- { id: "tracking", labelKey: "settings.tracking", icon: IconChartBar },
1481
- { id: "slack", labelKey: "settings.slack", icon: IconBolt },
1482
- ];
1483
-
1484
1468
  export function SettingsPage() {
1485
1469
  const t = useT();
1486
1470
  const [searchParams, setSearchParams] = useSearchParams();
1487
1471
  const navState = useNavigationState();
1488
1472
  const agentSettingsTabs = useAgentSettingsTabs();
1489
1473
  const [activeSection, setActiveSection] = useState<string>("general");
1490
- const allNavItems = useMemo<SettingsNavItem[]>(
1474
+
1475
+ const mailTabs = useMemo<SettingsTabItem[]>(
1491
1476
  () => [
1492
- ...navItems,
1493
- ...agentSettingsTabs.map((tab) => ({
1494
- id: tab.id,
1495
- label: tab.label,
1496
- icon: tab.icon ?? IconSettings,
1497
- })),
1477
+ {
1478
+ id: "drafting",
1479
+ label: t("settings.drafting"),
1480
+ icon: IconSignature,
1481
+ content: <DraftingSection />,
1482
+ keywords: "signature writing style compose reply draft",
1483
+ },
1484
+ {
1485
+ id: "snippets",
1486
+ label: t("settings.snippets"),
1487
+ icon: IconMessage2,
1488
+ content: <SnippetsSection />,
1489
+ keywords: "snippets templates canned responses shortcuts",
1490
+ },
1491
+ {
1492
+ id: "automations",
1493
+ label: t("settings.automations"),
1494
+ icon: IconBolt,
1495
+ content: <AutomationsSection />,
1496
+ keywords: "automations rules triggers events labels model",
1497
+ },
1498
+ {
1499
+ id: "gmail-filters",
1500
+ label: t("settings.gmailFilters"),
1501
+ icon: IconFilter,
1502
+ content: <GmailFiltersSection />,
1503
+ keywords: "gmail filters import rules",
1504
+ },
1505
+ {
1506
+ id: "aliases",
1507
+ label: t("settings.aliases"),
1508
+ icon: IconUsers,
1509
+ content: <AliasesSection />,
1510
+ keywords: "aliases groups distribution lists recipients",
1511
+ },
1512
+ {
1513
+ id: "tracking",
1514
+ label: t("settings.tracking"),
1515
+ icon: IconChartBar,
1516
+ content: <TrackingSection />,
1517
+ keywords: "tracking opens clicks pixel analytics",
1518
+ },
1519
+ {
1520
+ id: "slack",
1521
+ label: t("settings.slack"),
1522
+ icon: IconBolt,
1523
+ content: <SlackIntakeSection />,
1524
+ keywords: "slack intake integration webhook",
1525
+ },
1526
+ ],
1527
+ [t],
1528
+ );
1529
+
1530
+ const extraTabs = useMemo<SettingsTabItem[]>(
1531
+ () => [...mailTabs, ...agentSettingsTabs],
1532
+ [agentSettingsTabs, mailTabs],
1533
+ );
1534
+
1535
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
1536
+ () => [
1537
+ {
1538
+ id: "mail-language",
1539
+ label: t("settings.languageTitle"),
1540
+ keywords: "language locale translation i18n",
1541
+ hash: "language",
1542
+ },
1498
1543
  ],
1499
- [agentSettingsTabs],
1544
+ [t],
1500
1545
  );
1501
1546
 
1547
+ const validSectionIds = useMemo(() => {
1548
+ const ids = new Set<string>(["general", "team", "whats-new"]);
1549
+ for (const tab of extraTabs) ids.add(tab.id);
1550
+ return ids;
1551
+ }, [extraTabs]);
1552
+
1553
+ // Deep links arrive as /settings?section=<id> (e.g. from the agent's
1554
+ // navigate action). Adopt that section, then strip the param so later tab
1555
+ // switches aren't overridden by a stale query value.
1502
1556
  useEffect(() => {
1503
1557
  const section = searchParams.get("section");
1504
- if (!section || !allNavItems.some((item) => item.id === section)) return;
1558
+ if (!section || !validSectionIds.has(section)) return;
1505
1559
  setActiveSection(section);
1506
- setSearchParams((prev) => {
1507
- const next = new URLSearchParams(prev);
1508
- next.delete("section");
1509
- return next;
1510
- });
1511
- }, [allNavItems, searchParams, setSearchParams]);
1560
+ setSearchParams(
1561
+ (prev) => {
1562
+ const next = new URLSearchParams(prev);
1563
+ next.delete("section");
1564
+ return next;
1565
+ },
1566
+ { replace: true },
1567
+ );
1568
+ }, [searchParams, setSearchParams, validSectionIds]);
1512
1569
 
1570
+ // Keep app state aware of the visible settings section for the agent.
1513
1571
  useEffect(() => {
1514
1572
  navState.sync({ view: "settings", settingsSection: activeSection });
1515
1573
  }, [activeSection]); // eslint-disable-line react-hooks/exhaustive-deps
1516
1574
 
1517
1575
  return (
1518
- <div className="flex flex-1 flex-col sm:flex-row overflow-hidden">
1519
- {/* Top tabs on mobile, left sidebar on desktop */}
1520
- <div className="sm:w-[200px] shrink-0 sm:border-e border-b sm:border-b-0 border-border/30 bg-muted/50 dark:bg-[var(--mail-sidebar-surface)] sm:p-3 flex sm:flex-col gap-0.5 overflow-x-auto">
1521
- {allNavItems.map((item) => {
1522
- const Icon = item.icon;
1523
- const isActive = activeSection === item.id;
1524
- const label = item.labelKey
1525
- ? t(item.labelKey)
1526
- : (item.label ?? item.id);
1527
- return (
1528
- <button
1529
- key={item.id}
1530
- onClick={() => setActiveSection(item.id)}
1531
- className={cn(
1532
- "flex items-center gap-2.5 sm:w-full rounded-md px-3 sm:px-2.5 py-2.5 sm:py-2 text-[13px] transition-colors text-start whitespace-nowrap",
1533
- isActive
1534
- ? "bg-blue-500/15 text-blue-400 font-medium"
1535
- : "text-muted-foreground hover:text-foreground hover:bg-accent/50",
1536
- )}
1537
- >
1538
- <Icon
1539
- className={cn(
1540
- "h-4 w-4 shrink-0",
1541
- isActive ? "text-blue-400" : "text-muted-foreground/60",
1542
- )}
1543
- />
1544
- {label}
1545
- </button>
1546
- );
1547
- })}
1548
- </div>
1549
-
1550
- {/* Right content panel */}
1551
- <div className="flex flex-1 overflow-hidden bg-background">
1552
- {activeSection === "general" && <GeneralSection />}
1553
- {activeSection === "whats-new" && <WhatsNewSection />}
1554
- {activeSection === "drafting" && <DraftingSection />}
1555
- {activeSection === "snippets" && <SnippetsSection />}
1556
- {activeSection === "automations" && <AutomationsSection />}
1557
- {activeSection === "gmail-filters" && <GmailFiltersSection />}
1558
- {activeSection === "aliases" && <AliasesSection />}
1559
- {activeSection === "tracking" && <TrackingSection />}
1560
- {activeSection === "slack" && <SlackIntakeSection />}
1561
- {activeSection === "team" && (
1562
- <div className="flex-1 overflow-y-auto">
1563
- <TeamPage
1564
- showTitle={false}
1565
- createOrgDescription={t("settings.teamDescription")}
1566
- />
1567
- </div>
1568
- )}
1569
- {agentSettingsTabs.map((tab) =>
1570
- activeSection === tab.id ? (
1571
- <div key={tab.id} className="flex-1 overflow-y-auto p-4 sm:p-8">
1572
- {tab.content}
1573
- </div>
1574
- ) : null,
1575
- )}
1576
- </div>
1577
- </div>
1576
+ <SettingsTabsPage
1577
+ className="flex-1"
1578
+ generalLabel={t("settings.general")}
1579
+ teamLabel={t("settings.team")}
1580
+ whatsNewLabel={t("settings.whatsNew")}
1581
+ extraTabs={extraTabs}
1582
+ generalSearchEntries={generalSearchEntries}
1583
+ value={activeSection}
1584
+ onValueChange={setActiveSection}
1585
+ general={<GeneralSection />}
1586
+ team={
1587
+ <div className="mx-auto w-full max-w-3xl">
1588
+ <TeamPage
1589
+ showTitle={false}
1590
+ createOrgDescription={t("settings.teamDescription")}
1591
+ />
1592
+ </div>
1593
+ }
1594
+ whatsNew={<WhatsNewSection />}
1595
+ />
1578
1596
  );
1579
1597
  }
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are redesigned with a consistent, edge-to-edge navigation and a search box that jumps straight to any setting.
@@ -4,9 +4,11 @@ import {
4
4
  SettingsTabsPage,
5
5
  useAgentSettingsTabs,
6
6
  useT,
7
+ type SettingsSearchEntry,
7
8
  } from "@agent-native/core/client";
8
9
  import { TeamPage } from "@agent-native/core/client/org";
9
10
  import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
11
+ import { useMemo } from "react";
10
12
 
11
13
  import { Button } from "@/components/ui/button";
12
14
  import {
@@ -30,17 +32,36 @@ export default function SettingsRoute() {
30
32
  const agentSettingsTabs = useAgentSettingsTabs();
31
33
  useSetPageTitle(t("settings.title"));
32
34
 
35
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
36
+ () => [
37
+ {
38
+ id: "plan-language",
39
+ label: t("settings.languageTitle"),
40
+ keywords: "language locale translation i18n",
41
+ hash: "language",
42
+ },
43
+ {
44
+ id: "plan-editor",
45
+ label: t("settings.editorTitle"),
46
+ keywords: "editor extension vscode ide",
47
+ hash: "editor",
48
+ },
49
+ ],
50
+ [t],
51
+ );
52
+
33
53
  return (
34
54
  <SettingsTabsPage
35
55
  teamLabel={t("header.team")}
36
56
  extraTabs={agentSettingsTabs}
57
+ generalSearchEntries={generalSearchEntries}
37
58
  general={
38
59
  <div className="mx-auto w-full max-w-3xl space-y-6">
39
60
  <p className="text-sm leading-6 text-muted-foreground">
40
61
  {t("settings.description")}
41
62
  </p>
42
63
 
43
- <Card>
64
+ <Card id="language" className="scroll-mt-16">
44
65
  <CardHeader>
45
66
  <CardTitle className="text-base">
46
67
  {t("settings.languageTitle")}
@@ -55,7 +76,7 @@ export default function SettingsRoute() {
55
76
  </CardContent>
56
77
  </Card>
57
78
 
58
- <Card>
79
+ <Card id="editor" className="scroll-mt-16">
59
80
  <CardHeader>
60
81
  <CardTitle className="text-base">
61
82
  {t("settings.editorTitle")}
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.
@@ -35,6 +35,7 @@ export default defineAction({
35
35
  "Add a single slide to an existing deck. Use this to build decks slide-by-slide — " +
36
36
  "call it once per slide in slide order and wait for each result before adding the next slide. " +
37
37
  "Avoid parallel add-slide calls for the same deck; sequential writes keep the editor and agent connection stable. " +
38
+ "If the deck has a designSystemId, first use `get-design-system` and apply its `agentContext` tokens/docs; do not use generic slide styling from the id alone. " +
38
39
  "Returns the new slide ID, 1-based slideNumber, and updated slide count.",
39
40
  schema: z.object({
40
41
  deckId: z.string().describe("Target deck ID"),