@agent-native/core 0.90.10 → 0.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +30 -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/durable-background.ts +5 -5
  6. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +40 -8
  7. package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -7
  8. package/corpus/core/src/agent/engine/output-tokens.ts +94 -0
  9. package/corpus/core/src/agent/production-agent.ts +34 -6
  10. package/corpus/core/src/agent/run-ownership.ts +29 -1
  11. package/corpus/core/src/agent/types.ts +3 -2
  12. package/corpus/core/src/changelog/parse.ts +78 -0
  13. package/corpus/core/src/chat-threads/schema.ts +43 -0
  14. package/corpus/core/src/chat-threads/store.ts +144 -12
  15. package/corpus/core/src/cli/workspace-dev.ts +25 -5
  16. package/corpus/core/src/client/AgentPanel.tsx +79 -14
  17. package/corpus/core/src/client/AssistantChat.tsx +359 -425
  18. package/corpus/core/src/client/analytics-session.ts +70 -0
  19. package/corpus/core/src/client/analytics.ts +175 -49
  20. package/corpus/core/src/client/chat/message-components.tsx +22 -2
  21. package/corpus/core/src/client/components/ui/message-scroller.tsx +131 -0
  22. package/corpus/core/src/client/conversation/AgentConversation.tsx +63 -41
  23. package/corpus/core/src/client/error-capture.ts +616 -0
  24. package/corpus/core/src/client/index.ts +12 -0
  25. package/corpus/core/src/client/session-replay.ts +57 -7
  26. package/corpus/core/src/client/settings/SettingsPanel.tsx +123 -1
  27. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +292 -45
  28. package/corpus/core/src/client/settings/index.ts +1 -0
  29. package/corpus/core/src/client/sharing/ShareButton.tsx +14 -11
  30. package/corpus/core/src/client/sharing/ShareDialog.tsx +13 -10
  31. package/corpus/core/src/db/client.ts +12 -9
  32. package/corpus/core/src/mcp/builtin-tools.ts +29 -2
  33. package/corpus/core/src/server/agent-chat-plugin.ts +174 -79
  34. package/corpus/core/src/server/onboarding-html.ts +28 -16
  35. package/corpus/core/src/shared/reasoning-effort.ts +23 -0
  36. package/corpus/core/src/sharing/actions/list-resource-shares.ts +45 -1
  37. package/corpus/core/src/sharing/actions/share-resource.ts +9 -0
  38. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  39. package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  40. package/corpus/core/src/vite/client.ts +217 -35
  41. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +8 -7
  42. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +14 -10
  43. package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +15 -15
  44. package/corpus/templates/analytics/.agents/skills/cross-source-analysis/SKILL.md +1 -0
  45. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +38 -22
  46. package/corpus/templates/analytics/.agents/skills/data-programs/SKILL.md +114 -61
  47. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -0
  48. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +7 -7
  49. package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +1 -0
  50. package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +1 -1
  51. package/corpus/templates/analytics/.builder/skills/bigquery/SKILL.md +17 -17
  52. package/corpus/templates/analytics/.builder/skills/gcloud/SKILL.md +5 -5
  53. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +7 -7
  54. package/corpus/templates/analytics/.builder/skills/gong/SKILL.md +12 -12
  55. package/corpus/templates/analytics/.builder/skills/grafana/SKILL.md +7 -7
  56. package/corpus/templates/analytics/.builder/skills/sentry/SKILL.md +7 -7
  57. package/corpus/templates/analytics/.builder/skills/slack/SKILL.md +6 -6
  58. package/corpus/templates/analytics/.builder/skills/stripe/SKILL.md +7 -7
  59. package/corpus/templates/analytics/AGENTS.md +47 -2
  60. package/corpus/templates/analytics/actions/add-status-page-monitor.ts +36 -0
  61. package/corpus/templates/analytics/actions/capture-test-error.ts +33 -0
  62. package/corpus/templates/analytics/actions/delete-monitor.ts +24 -0
  63. package/corpus/templates/analytics/actions/delete-status-page.ts +23 -0
  64. package/corpus/templates/analytics/actions/get-error-issue.ts +36 -0
  65. package/corpus/templates/analytics/actions/get-monitor-stats.ts +55 -0
  66. package/corpus/templates/analytics/actions/get-monitor.ts +27 -0
  67. package/corpus/templates/analytics/actions/get-public-status-page.ts +41 -0
  68. package/corpus/templates/analytics/actions/get-status-page.ts +29 -0
  69. package/corpus/templates/analytics/actions/list-error-issues.ts +40 -0
  70. package/corpus/templates/analytics/actions/list-monitors.ts +21 -0
  71. package/corpus/templates/analytics/actions/list-status-pages.ts +21 -0
  72. package/corpus/templates/analytics/actions/match-error-issues.ts +51 -0
  73. package/corpus/templates/analytics/actions/navigate.ts +58 -4
  74. package/corpus/templates/analytics/actions/remove-status-page-monitor.ts +22 -0
  75. package/corpus/templates/analytics/actions/reorder-status-page-monitors.ts +25 -0
  76. package/corpus/templates/analytics/actions/resolve-error-issue.ts +38 -0
  77. package/corpus/templates/analytics/actions/run-monitor-check.ts +23 -0
  78. package/corpus/templates/analytics/actions/save-analysis.ts +1 -0
  79. package/corpus/templates/analytics/actions/save-monitor.ts +145 -0
  80. package/corpus/templates/analytics/actions/save-status-page.ts +47 -0
  81. package/corpus/templates/analytics/actions/view-screen.ts +212 -0
  82. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
  83. package/corpus/templates/analytics/app/components/layout/Layout.tsx +10 -1
  84. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +134 -39
  85. package/corpus/templates/analytics/app/components/monitoring/PublicStatusView.tsx +351 -0
  86. package/corpus/templates/analytics/app/components/monitoring/ResponseTimeChart.tsx +174 -0
  87. package/corpus/templates/analytics/app/components/monitoring/UptimeStatCards.tsx +85 -0
  88. package/corpus/templates/analytics/app/components/monitoring/UptimeTimelineBars.tsx +106 -0
  89. package/corpus/templates/analytics/app/components/monitoring/chart-utils.ts +101 -0
  90. package/corpus/templates/analytics/app/components/monitoring/index.ts +28 -0
  91. package/corpus/templates/analytics/app/components/monitoring/types.ts +42 -0
  92. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +34 -0
  93. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -0
  94. package/corpus/templates/analytics/app/i18n-data.ts +33 -0
  95. package/corpus/templates/analytics/app/pages/DataSources.tsx +28 -0
  96. package/corpus/templates/analytics/app/pages/Settings.tsx +77 -9
  97. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +3 -3
  98. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +7 -0
  99. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +205 -0
  100. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +100 -0
  101. package/corpus/templates/analytics/app/pages/monitoring/UptimePanel.tsx +475 -0
  102. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +372 -0
  103. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +360 -0
  104. package/corpus/templates/analytics/app/pages/monitoring/errors/Sparkline.tsx +55 -0
  105. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +106 -0
  106. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +75 -0
  107. package/corpus/templates/analytics/app/pages/monitoring/errors/utils.ts +132 -0
  108. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorDetail.tsx +535 -0
  109. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +1026 -0
  110. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorList.tsx +311 -0
  111. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +235 -0
  112. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPageEditor.tsx +661 -0
  113. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPagesView.tsx +355 -0
  114. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/i18n.ts +106 -0
  115. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/slug.ts +24 -0
  116. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/types.ts +20 -0
  117. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-summary.ts +87 -0
  118. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +161 -0
  119. package/corpus/templates/analytics/app/pages/monitoring/uptime/utils.ts +210 -0
  120. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +76 -1
  121. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +74 -9
  122. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +197 -20
  123. package/corpus/templates/analytics/app/root.tsx +33 -1
  124. package/corpus/templates/analytics/app/routes/monitoring._index.tsx +10 -0
  125. package/corpus/templates/analytics/app/routes/status.$slug.tsx +118 -0
  126. package/corpus/templates/analytics/changelog/2026-07-08-add-uptime-monitors-that-ping-your-urls-and-alert-you-when-t.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-08-analytics-chats-keep-large-data-dictionaries-compact-so-prov.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-08-create-public-status-pages-that-share-the-live-health-of-cho.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-extension-panels-use-clearer-open-copy.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-error-capture.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-fixed-single-panel-dashboard-drags-so-they-no-longer-rewrite.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-jump-straight-from-an-error-in-a-session-recording-to-its-fu.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-08-monitor-detail-and-list-now-show-colorful-uptime-timelines-r.md +6 -0
  134. package/corpus/templates/analytics/changelog/2026-07-08-pinned-ask-chats-now-show-a-pin-icon-in-the-sidebar.md +6 -0
  135. package/corpus/templates/analytics/changelog/2026-07-08-publish-a-public-uptime-status-page-with-colorful-uptime-tim.md +6 -0
  136. package/corpus/templates/analytics/changelog/2026-07-08-sessions-now-hide-visitor-emails-in-demo-mode-and-show-clean.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +5 -0
  138. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +5 -0
  139. package/corpus/templates/analytics/changelog/2026-07-08-the-uptime-monitor-list-now-has-a-current-status-overview-wi.md +6 -0
  140. package/corpus/templates/analytics/docs/error-capture.md +172 -0
  141. package/corpus/templates/analytics/docs/uptime-monitoring.md +150 -0
  142. package/corpus/templates/analytics/server/db/schema-errors.ts +150 -0
  143. package/corpus/templates/analytics/server/db/schema-monitoring.ts +177 -0
  144. package/corpus/templates/analytics/server/db/schema.ts +6 -0
  145. package/corpus/templates/analytics/server/jobs/uptime-monitors.ts +123 -0
  146. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +41 -0
  147. package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +55 -12
  148. package/corpus/templates/analytics/server/lib/error-capture.ts +1331 -0
  149. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +47 -1
  150. package/corpus/templates/analytics/server/lib/monitor-stats.ts +494 -0
  151. package/corpus/templates/analytics/server/lib/status-pages.ts +798 -0
  152. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +1665 -0
  153. package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -37
  154. package/corpus/templates/analytics/server/plugins/auth.ts +11 -1
  155. package/corpus/templates/analytics/server/plugins/db.ts +408 -0
  156. package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +63 -0
  157. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  158. package/corpus/templates/assets/app/routes/settings.tsx +22 -1
  159. package/corpus/templates/assets/changelog/2026-07-08-recent-drafts-keep-comfortable-side-padding.md +6 -0
  160. package/corpus/templates/assets/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  161. package/corpus/templates/brain/app/routes/settings.tsx +43 -5
  162. package/corpus/templates/brain/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  163. package/corpus/templates/calendar/app/pages/Settings.tsx +44 -6
  164. package/corpus/templates/calendar/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  165. package/corpus/templates/chat/app/routes/settings.tsx +16 -1
  166. package/corpus/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  167. package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +79 -37
  168. package/corpus/templates/clips/actions/regenerate-chapters.ts +7 -0
  169. package/corpus/templates/clips/app/components/player/player-controls.tsx +35 -0
  170. package/corpus/templates/clips/app/components/player/video-player.tsx +162 -18
  171. package/corpus/templates/clips/app/hooks/use-auto-title.ts +15 -5
  172. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +63 -6
  173. package/corpus/templates/clips/app/routes/download.tsx +12 -4
  174. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -0
  175. package/corpus/templates/clips/app/routes/record.tsx +18 -1
  176. package/corpus/templates/clips/changelog/2026-07-07-auto-generated-chapter-requests-now-open-the-matching-agent-.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-07-shared-clips-start-playback-reliably-from-the-first-play-click.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-07-the-clips-desktop-download-page-now-uses-the-agent-native-ap.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-camera-and-microphone-menus-now-show-which-.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-copies-new-clip-links-after-saving.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-recordings-now-continue-after-granting-came.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-08-mobile-shared-clips-now-have-loom-style-tap-and-skip-controls.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-08-recordings-and-uploads-copy-links-after-saving.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-08-settings-are-cleaner-searchable-and-collapse-s3-with-builder.md +5 -0
  185. package/corpus/templates/clips/changelog/2026-07-08-transcripts-are-more-reliable-for-longer-desktop-recordings-.md +6 -0
  186. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -0
  187. package/corpus/templates/clips/chrome-extension/src/background.ts +162 -13
  188. package/corpus/templates/clips/chrome-extension/src/content-script.ts +14 -0
  189. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +36 -0
  190. package/corpus/templates/clips/chrome-extension/src/overlay.ts +99 -25
  191. package/corpus/templates/clips/chrome-extension/src/permission.ts +63 -14
  192. package/corpus/templates/clips/chrome-extension/src/popup.ts +123 -23
  193. package/corpus/templates/content/actions/_builder-cms-read-client.ts +47 -0
  194. package/corpus/templates/content/actions/_database-source-utils.ts +33 -4
  195. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +214 -29
  196. package/corpus/templates/content/actions/attach-content-database-source.ts +3 -0
  197. package/corpus/templates/content/actions/change-content-database-source-role.ts +1 -0
  198. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +42 -32
  199. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +352 -81
  200. package/corpus/templates/content/app/components/editor/database/settings.tsx +49 -24
  201. package/corpus/templates/content/app/routes/_app.settings.tsx +19 -1
  202. package/corpus/templates/content/changelog/2026-07-07-builder-source-tag-fields-now-import-as-multi-select.md +6 -0
  203. package/corpus/templates/content/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  204. package/corpus/templates/content/shared/api.ts +3 -0
  205. package/corpus/templates/content/shared/properties.ts +42 -0
  206. package/corpus/templates/design/actions/generate-design.ts +3 -0
  207. package/corpus/templates/design/actions/get-design-system.ts +147 -1
  208. package/corpus/templates/design/app/routes/settings.tsx +16 -1
  209. package/corpus/templates/design/changelog/2026-07-08-design-generation-now-follows-hydrated-builder-design-system.md +6 -0
  210. package/corpus/templates/design/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  211. package/corpus/templates/dispatch/app/routes/settings.tsx +23 -2
  212. package/corpus/templates/dispatch/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  213. package/corpus/templates/forms/app/routes/_app.settings.tsx +16 -1
  214. package/corpus/templates/forms/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  215. package/corpus/templates/macros/app/routes/settings.tsx +16 -1
  216. package/corpus/templates/macros/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  217. package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +1 -1
  218. package/corpus/templates/mail/app/components/settings/SnippetsSection.tsx +1 -1
  219. package/corpus/templates/mail/app/pages/SettingsPage.tsx +123 -105
  220. package/corpus/templates/mail/changelog/2026-07-08-settings-redesigned-with-a-consistent-searchable-layout.md +5 -0
  221. package/corpus/templates/plan/app/routes/settings.tsx +23 -2
  222. package/corpus/templates/plan/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  223. package/corpus/templates/slides/actions/add-slide.ts +1 -0
  224. package/corpus/templates/slides/actions/get-design-system.ts +147 -1
  225. package/corpus/templates/slides/app/pages/Index.tsx +46 -1
  226. package/corpus/templates/slides/app/routes/settings.tsx +16 -1
  227. package/corpus/templates/slides/changelog/2026-07-08-deck-generation-now-follows-hydrated-builder-design-system-g.md +6 -0
  228. package/corpus/templates/slides/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  229. package/dist/agent/durable-background.d.ts +1 -1
  230. package/dist/agent/durable-background.d.ts.map +1 -1
  231. package/dist/agent/durable-background.js +5 -3
  232. package/dist/agent/durable-background.js.map +1 -1
  233. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  234. package/dist/agent/engine/ai-sdk-engine.js +24 -4
  235. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  236. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  237. package/dist/agent/engine/anthropic-engine.js +13 -3
  238. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  239. package/dist/agent/engine/output-tokens.d.ts +27 -0
  240. package/dist/agent/engine/output-tokens.d.ts.map +1 -1
  241. package/dist/agent/engine/output-tokens.js +70 -0
  242. package/dist/agent/engine/output-tokens.js.map +1 -1
  243. package/dist/agent/production-agent.d.ts.map +1 -1
  244. package/dist/agent/production-agent.js +28 -7
  245. package/dist/agent/production-agent.js.map +1 -1
  246. package/dist/agent/run-ownership.d.ts +6 -0
  247. package/dist/agent/run-ownership.d.ts.map +1 -1
  248. package/dist/agent/run-ownership.js +11 -1
  249. package/dist/agent/run-ownership.js.map +1 -1
  250. package/dist/agent/types.d.ts +3 -2
  251. package/dist/agent/types.d.ts.map +1 -1
  252. package/dist/agent/types.js.map +1 -1
  253. package/dist/changelog/parse.d.ts +7 -0
  254. package/dist/changelog/parse.d.ts.map +1 -1
  255. package/dist/changelog/parse.js +64 -0
  256. package/dist/changelog/parse.js.map +1 -1
  257. package/dist/chat-threads/schema.d.ts +445 -0
  258. package/dist/chat-threads/schema.d.ts.map +1 -0
  259. package/dist/chat-threads/schema.js +39 -0
  260. package/dist/chat-threads/schema.js.map +1 -0
  261. package/dist/chat-threads/store.d.ts +12 -0
  262. package/dist/chat-threads/store.d.ts.map +1 -1
  263. package/dist/chat-threads/store.js +99 -10
  264. package/dist/chat-threads/store.js.map +1 -1
  265. package/dist/cli/workspace-dev.d.ts.map +1 -1
  266. package/dist/cli/workspace-dev.js +20 -5
  267. package/dist/cli/workspace-dev.js.map +1 -1
  268. package/dist/client/AgentPanel.d.ts.map +1 -1
  269. package/dist/client/AgentPanel.js +35 -7
  270. package/dist/client/AgentPanel.js.map +1 -1
  271. package/dist/client/AssistantChat.d.ts.map +1 -1
  272. package/dist/client/AssistantChat.js +105 -183
  273. package/dist/client/AssistantChat.js.map +1 -1
  274. package/dist/client/analytics-session.d.ts +3 -0
  275. package/dist/client/analytics-session.d.ts.map +1 -0
  276. package/dist/client/analytics-session.js +66 -0
  277. package/dist/client/analytics-session.js.map +1 -0
  278. package/dist/client/analytics.d.ts +32 -0
  279. package/dist/client/analytics.d.ts.map +1 -1
  280. package/dist/client/analytics.js +116 -46
  281. package/dist/client/analytics.js.map +1 -1
  282. package/dist/client/chat/message-components.d.ts +2 -1
  283. package/dist/client/chat/message-components.d.ts.map +1 -1
  284. package/dist/client/chat/message-components.js +16 -6
  285. package/dist/client/chat/message-components.js.map +1 -1
  286. package/dist/client/components/ui/message-scroller.d.ts +16 -0
  287. package/dist/client/components/ui/message-scroller.d.ts.map +1 -0
  288. package/dist/client/components/ui/message-scroller.js +25 -0
  289. package/dist/client/components/ui/message-scroller.js.map +1 -0
  290. package/dist/client/conversation/AgentConversation.d.ts +1 -1
  291. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  292. package/dist/client/conversation/AgentConversation.js +3 -8
  293. package/dist/client/conversation/AgentConversation.js.map +1 -1
  294. package/dist/client/error-capture.d.ts +99 -0
  295. package/dist/client/error-capture.d.ts.map +1 -0
  296. package/dist/client/error-capture.js +437 -0
  297. package/dist/client/error-capture.js.map +1 -0
  298. package/dist/client/index.d.ts +2 -2
  299. package/dist/client/index.d.ts.map +1 -1
  300. package/dist/client/index.js +3 -1
  301. package/dist/client/index.js.map +1 -1
  302. package/dist/client/session-replay.d.ts +22 -0
  303. package/dist/client/session-replay.d.ts.map +1 -1
  304. package/dist/client/session-replay.js +45 -4
  305. package/dist/client/session-replay.js.map +1 -1
  306. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  307. package/dist/client/settings/SettingsPanel.js +100 -5
  308. package/dist/client/settings/SettingsPanel.js.map +1 -1
  309. package/dist/client/settings/SettingsTabsPage.d.ts +49 -1
  310. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  311. package/dist/client/settings/SettingsTabsPage.js +131 -19
  312. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  313. package/dist/client/settings/index.d.ts +1 -1
  314. package/dist/client/settings/index.d.ts.map +1 -1
  315. package/dist/client/settings/index.js.map +1 -1
  316. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  317. package/dist/client/sharing/ShareButton.js +13 -8
  318. package/dist/client/sharing/ShareButton.js.map +1 -1
  319. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  320. package/dist/client/sharing/ShareDialog.js +12 -7
  321. package/dist/client/sharing/ShareDialog.js.map +1 -1
  322. package/dist/collab/routes.d.ts +1 -1
  323. package/dist/collab/struct-routes.d.ts +1 -1
  324. package/dist/db/client.d.ts.map +1 -1
  325. package/dist/db/client.js +12 -7
  326. package/dist/db/client.js.map +1 -1
  327. package/dist/mcp/builtin-tools.d.ts.map +1 -1
  328. package/dist/mcp/builtin-tools.js +21 -2
  329. package/dist/mcp/builtin-tools.js.map +1 -1
  330. package/dist/notifications/routes.d.ts +1 -1
  331. package/dist/observability/routes.d.ts +5 -5
  332. package/dist/org/schema.d.ts +15 -15
  333. package/dist/progress/routes.d.ts +1 -1
  334. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  335. package/dist/resources/handlers.d.ts +3 -3
  336. package/dist/secrets/routes.d.ts +9 -9
  337. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  338. package/dist/server/agent-chat-plugin.js +109 -73
  339. package/dist/server/agent-chat-plugin.js.map +1 -1
  340. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  341. package/dist/server/onboarding-html.d.ts.map +1 -1
  342. package/dist/server/onboarding-html.js +28 -16
  343. package/dist/server/onboarding-html.js.map +1 -1
  344. package/dist/shared/reasoning-effort.d.ts +1 -0
  345. package/dist/shared/reasoning-effort.d.ts.map +1 -1
  346. package/dist/shared/reasoning-effort.js +18 -0
  347. package/dist/shared/reasoning-effort.js.map +1 -1
  348. package/dist/sharing/actions/list-resource-shares.js +30 -1
  349. package/dist/sharing/actions/list-resource-shares.js.map +1 -1
  350. package/dist/sharing/actions/share-resource.js +6 -0
  351. package/dist/sharing/actions/share-resource.js.map +1 -1
  352. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  353. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  354. package/dist/vite/client.d.ts.map +1 -1
  355. package/dist/vite/client.js +192 -30
  356. package/dist/vite/client.js.map +1 -1
  357. package/docs/content/toolkit-settings.mdx +56 -3
  358. package/package.json +2 -1
  359. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  360. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
@@ -6,14 +6,19 @@ import { z } from "zod";
6
6
  import { getDb, schema } from "../server/db/index.js";
7
7
  import type {
8
8
  AddContentDatabaseSourceFieldPropertyRequest,
9
+ BuilderCmsModelFieldSummary,
9
10
  ContentDatabaseSourceFieldPropertyResponse,
10
11
  DocumentPropertyValue,
11
12
  } from "../shared/api.js";
12
13
  import {
13
14
  defaultPropertyOptions,
14
15
  normalizePropertyValue,
16
+ normalizePropertyValueWithOptions,
15
17
  normalizePropertyVisibility,
18
+ serializePropertyOptions,
16
19
  serializePropertyValue,
20
+ type DocumentPropertyOptionColor,
21
+ type DocumentPropertyOptions,
17
22
  type DocumentPropertyType,
18
23
  } from "../shared/properties.js";
19
24
  import {
@@ -44,12 +49,15 @@ export function sourceFieldPropertyValuesFromRows(
44
49
  }>,
45
50
  sourceFieldKey: string,
46
51
  type: DocumentPropertyType,
52
+ options?: DocumentPropertyOptions,
47
53
  ) {
48
54
  return rows
49
55
  .map((row) => {
50
56
  const sourceValues = parseSourceValues(row.sourceValuesJson);
51
57
  const sourceValue = sourceValues[sourceFieldKey];
52
- const value = normalizePropertyValue(type, sourceValue);
58
+ const value = options
59
+ ? normalizePropertyValueWithOptions(type, sourceValue, options)
60
+ : normalizePropertyValue(type, sourceValue);
53
61
  return {
54
62
  itemId: row.databaseItemId,
55
63
  documentId: row.documentId,
@@ -61,18 +69,181 @@ export function sourceFieldPropertyValuesFromRows(
61
69
 
62
70
  export function propertyTypeForSourceField(
63
71
  sourceFieldType: string,
72
+ metadata?: BuilderCmsModelFieldSummary | null,
64
73
  ): DocumentPropertyType {
65
- if (sourceFieldType === "number") return "number";
66
- if (sourceFieldType === "datetime" || sourceFieldType === "date") {
74
+ const normalized = sourceFieldType.trim().toLowerCase();
75
+ const metadataKind = [
76
+ metadata?.type,
77
+ metadata?.inputType,
78
+ metadata?.name,
79
+ metadata?.label,
80
+ ]
81
+ .filter((value): value is string => Boolean(value))
82
+ .join(" ")
83
+ .trim()
84
+ .toLowerCase();
85
+ const hasChoices =
86
+ (metadata?.enum?.length ?? 0) > 0 || (metadata?.options?.length ?? 0) > 0;
87
+ const looksMultiSelect = /\b(multi[-_\s]?select|tags?|stringlist)\b/.test(
88
+ metadataKind,
89
+ );
90
+
91
+ if (normalized === "number") return "number";
92
+ if (normalized === "datetime" || normalized === "date") {
67
93
  return "date";
68
94
  }
69
- if (sourceFieldType === "url") return "url";
70
- if (sourceFieldType === "boolean" || sourceFieldType === "checkbox") {
95
+ if (normalized === "url") return "url";
96
+ if (normalized === "boolean" || normalized === "checkbox") {
71
97
  return "checkbox";
72
98
  }
99
+ if (normalized === "multi_select" || normalized === "tags") {
100
+ return "multi_select";
101
+ }
102
+ if ((normalized === "list" || normalized === "array") && looksMultiSelect) {
103
+ return "multi_select";
104
+ }
105
+ if (hasChoices && looksMultiSelect) return "multi_select";
106
+ if (hasChoices && normalized !== "list" && normalized !== "array") {
107
+ return "select";
108
+ }
73
109
  return "text";
74
110
  }
75
111
 
112
+ const SOURCE_OPTION_COLORS: DocumentPropertyOptionColor[] = [
113
+ "blue",
114
+ "green",
115
+ "purple",
116
+ "pink",
117
+ "orange",
118
+ "yellow",
119
+ "red",
120
+ "gray",
121
+ ];
122
+
123
+ function optionIdFromName(name: string) {
124
+ return (
125
+ name
126
+ .trim()
127
+ .toLowerCase()
128
+ .replace(/[^a-z0-9]+/g, "-")
129
+ .replace(/^-+|-+$/g, "") || "option"
130
+ );
131
+ }
132
+
133
+ function uniqueOptionIdFromName(name: string, usedIds: Set<string>) {
134
+ const baseId = optionIdFromName(name);
135
+ let id = baseId;
136
+ let index = 2;
137
+ while (usedIds.has(id)) {
138
+ id = `${baseId}-${index++}`;
139
+ }
140
+ usedIds.add(id);
141
+ return id;
142
+ }
143
+
144
+ function uniqueStringValues(values: unknown[]) {
145
+ const seen = new Set<string>();
146
+ const result: string[] = [];
147
+ for (const value of values) {
148
+ if (typeof value !== "string") continue;
149
+ const trimmed = value.trim();
150
+ if (!trimmed || seen.has(trimmed.toLowerCase())) continue;
151
+ seen.add(trimmed.toLowerCase());
152
+ result.push(trimmed);
153
+ }
154
+ return result;
155
+ }
156
+
157
+ function sourceFieldOptionNames(args: {
158
+ metadata?: BuilderCmsModelFieldSummary | null;
159
+ rows: Array<{ sourceValuesJson: string | null }>;
160
+ sourceFieldKey: string;
161
+ type: DocumentPropertyType;
162
+ }) {
163
+ const explicit = uniqueStringValues([
164
+ ...(args.metadata?.options ?? []),
165
+ ...(args.metadata?.enum ?? []),
166
+ ]);
167
+ if (explicit.length > 0) return explicit;
168
+ if (args.type !== "select" && args.type !== "multi_select") return [];
169
+
170
+ const rowValues: string[] = [];
171
+ for (const row of args.rows) {
172
+ const value = parseSourceValues(row.sourceValuesJson)[args.sourceFieldKey];
173
+ if (Array.isArray(value)) rowValues.push(...value);
174
+ else if (typeof value === "string") rowValues.push(value);
175
+ }
176
+ return uniqueStringValues(rowValues).slice(0, 100);
177
+ }
178
+
179
+ export function sourceFieldPropertyOptions(args: {
180
+ type: DocumentPropertyType;
181
+ metadata?: BuilderCmsModelFieldSummary | null;
182
+ rows: Array<{ sourceValuesJson: string | null }>;
183
+ sourceFieldKey: string;
184
+ }): DocumentPropertyOptions {
185
+ const optionNames = sourceFieldOptionNames(args);
186
+ if (
187
+ (args.type === "select" || args.type === "multi_select") &&
188
+ optionNames.length > 0
189
+ ) {
190
+ const usedIds = new Set<string>();
191
+ return {
192
+ options: optionNames.map((name, index) => ({
193
+ id: uniqueOptionIdFromName(name, usedIds),
194
+ name,
195
+ color: SOURCE_OPTION_COLORS[index % SOURCE_OPTION_COLORS.length],
196
+ })),
197
+ };
198
+ }
199
+ return defaultPropertyOptions(args.type);
200
+ }
201
+
202
+ function builderFieldNameForSourceKey(sourceFieldKey: string) {
203
+ return sourceFieldKey
204
+ .replace(/^data\./, "")
205
+ .trim()
206
+ .toLowerCase();
207
+ }
208
+
209
+ function builderModelFieldsFromMetadata(
210
+ metadataJson: string | null | undefined,
211
+ ): BuilderCmsModelFieldSummary[] {
212
+ if (!metadataJson) return [];
213
+ try {
214
+ const parsed = JSON.parse(metadataJson) as unknown;
215
+ if (!parsed || typeof parsed !== "object") return [];
216
+ const fields = (parsed as { builderModelFields?: unknown })
217
+ .builderModelFields;
218
+ return Array.isArray(fields)
219
+ ? fields.filter((field): field is BuilderCmsModelFieldSummary => {
220
+ return (
221
+ !!field &&
222
+ typeof field === "object" &&
223
+ typeof (field as BuilderCmsModelFieldSummary).name === "string" &&
224
+ typeof (field as BuilderCmsModelFieldSummary).type === "string"
225
+ );
226
+ })
227
+ : [];
228
+ } catch {
229
+ return [];
230
+ }
231
+ }
232
+
233
+ function builderMetadataForSourceField(args: {
234
+ sourceFieldKey: string;
235
+ sourceMetadataJson: string | null | undefined;
236
+ }) {
237
+ const fieldName = builderFieldNameForSourceKey(args.sourceFieldKey);
238
+ const sourceFieldKey = args.sourceFieldKey.trim().toLowerCase();
239
+ return (
240
+ builderModelFieldsFromMetadata(args.sourceMetadataJson).find((field) => {
241
+ const name = field.name.trim().toLowerCase();
242
+ return name === fieldName || `data.${name}` === sourceFieldKey;
243
+ }) ?? null
244
+ );
245
+ }
246
+
76
247
  export default defineAction({
77
248
  description:
78
249
  "Create a local database property from an unmapped source field and bind the source field to that property.",
@@ -137,9 +308,7 @@ export default defineAction({
137
308
  }
138
309
 
139
310
  const now = new Date().toISOString();
140
- const type = propertyTypeForSourceField(field.sourceFieldType);
141
311
  const visibility = normalizePropertyVisibility(undefined);
142
- const options = defaultPropertyOptions(type);
143
312
  const [maxPos] = await db
144
313
  .select({
145
314
  max: sql<number>`COALESCE(MAX(position), -1)`,
@@ -156,6 +325,42 @@ export default defineAction({
156
325
  );
157
326
  const propertyId = nanoid();
158
327
 
328
+ // A federated secondary source's rows have no local document (they join by
329
+ // canonical key), so we don't materialize their values into
330
+ // documentPropertyValues — the read path overlays them per row at query
331
+ // time. Primary sources still copy values onto their backing documents.
332
+ let federationRole: string | null = null;
333
+ try {
334
+ const parsed = JSON.parse(source.metadataJson ?? "{}") as {
335
+ federation?: { role?: string };
336
+ };
337
+ federationRole = parsed.federation?.role ?? null;
338
+ } catch {
339
+ federationRole = null;
340
+ }
341
+ const isSecondary = federationRole === "secondary";
342
+
343
+ const sourceRows = isSecondary
344
+ ? []
345
+ : await db
346
+ .select()
347
+ .from(schema.contentDatabaseSourceRows)
348
+ .where(eq(schema.contentDatabaseSourceRows.sourceId, source.id));
349
+ const builderMetadata = builderMetadataForSourceField({
350
+ sourceFieldKey: field.sourceFieldKey,
351
+ sourceMetadataJson: source.metadataJson,
352
+ });
353
+ const type = propertyTypeForSourceField(
354
+ field.sourceFieldType,
355
+ builderMetadata,
356
+ );
357
+ const options = sourceFieldPropertyOptions({
358
+ type,
359
+ metadata: builderMetadata,
360
+ rows: sourceRows,
361
+ sourceFieldKey: field.sourceFieldKey,
362
+ });
363
+
159
364
  await db.insert(schema.documentPropertyDefinitions).values({
160
365
  id: propertyId,
161
366
  ownerEmail: database.ownerEmail,
@@ -164,7 +369,7 @@ export default defineAction({
164
369
  name: field.sourceFieldLabel,
165
370
  type,
166
371
  visibility,
167
- optionsJson: JSON.stringify(options),
372
+ optionsJson: serializePropertyOptions(options),
168
373
  position: (maxPos?.max ?? -1) + 1,
169
374
  createdAt: now,
170
375
  updatedAt: now,
@@ -185,31 +390,11 @@ export default defineAction({
185
390
  .set({ updatedAt: now })
186
391
  .where(eq(schema.contentDatabaseSources.id, source.id));
187
392
 
188
- // A federated secondary source's rows have no local document (they join by
189
- // canonical key), so we don't materialize their values into
190
- // documentPropertyValues — the read path overlays them per row at query
191
- // time. Primary sources still copy values onto their backing documents.
192
- let federationRole: string | null = null;
193
- try {
194
- const parsed = JSON.parse(source.metadataJson ?? "{}") as {
195
- federation?: { role?: string };
196
- };
197
- federationRole = parsed.federation?.role ?? null;
198
- } catch {
199
- federationRole = null;
200
- }
201
- const isSecondary = federationRole === "secondary";
202
-
203
- const sourceRows = isSecondary
204
- ? []
205
- : await db
206
- .select()
207
- .from(schema.contentDatabaseSourceRows)
208
- .where(eq(schema.contentDatabaseSourceRows.sourceId, source.id));
209
393
  const itemValues = sourceFieldPropertyValuesFromRows(
210
394
  sourceRows,
211
395
  field.sourceFieldKey,
212
396
  type,
397
+ options,
213
398
  );
214
399
  if (itemValues.length > 0) {
215
400
  await db.insert(schema.documentPropertyValues).values(
@@ -284,6 +284,7 @@ export default defineAction({
284
284
  fetchedAt: builderRead.fetchedAt,
285
285
  now,
286
286
  message: builderRead.message,
287
+ builderModelFields: modelFields,
287
288
  ...builderCmsAttachReadMetadata(builderRead),
288
289
  });
289
290
  }
@@ -417,6 +418,7 @@ export default defineAction({
417
418
  fetchedAt: additionalRead.fetchedAt,
418
419
  now,
419
420
  message: additionalRead.message,
421
+ builderModelFields: additionalModelFields,
420
422
  ...builderCmsAttachReadMetadata(additionalRead),
421
423
  });
422
424
  await ensureDatabaseSourceProperty({ database, now });
@@ -520,6 +522,7 @@ export default defineAction({
520
522
  fetchedAt: builderRead.fetchedAt,
521
523
  now,
522
524
  message: builderRead.message,
525
+ builderModelFields,
523
526
  ...builderCmsAttachReadMetadata(builderRead),
524
527
  });
525
528
  }
@@ -415,6 +415,7 @@ export default defineAction({
415
415
  now,
416
416
  message: read.message,
417
417
  syncState: "linked",
418
+ builderModelFields,
418
419
  });
419
420
 
420
421
  const latestSources = await db
@@ -851,17 +851,21 @@ function PropertyRow({
851
851
 
852
852
  // Mirror of the server's propertyTypeForSourceField — keep in sync. Used to
853
853
  // gate which source fields can bind into a column (type compatibility).
854
- function propertyTypeForSourceFieldType(
854
+ export function propertyTypeForSourceFieldType(
855
855
  sourceFieldType: string,
856
856
  ): DocumentPropertyType {
857
- if (sourceFieldType === "number") return "number";
858
- if (sourceFieldType === "datetime" || sourceFieldType === "date") {
857
+ const normalized = sourceFieldType.trim().toLowerCase();
858
+ if (normalized === "number") return "number";
859
+ if (normalized === "datetime" || normalized === "date") {
859
860
  return "date";
860
861
  }
861
- if (sourceFieldType === "url") return "url";
862
- if (sourceFieldType === "boolean" || sourceFieldType === "checkbox") {
862
+ if (normalized === "url") return "url";
863
+ if (normalized === "boolean" || normalized === "checkbox") {
863
864
  return "checkbox";
864
865
  }
866
+ if (normalized === "tags" || normalized === "multi_select") {
867
+ return "multi_select";
868
+ }
865
869
  return "text";
866
870
  }
867
871
 
@@ -2781,33 +2785,39 @@ export function AddProperty({
2781
2785
  name: group.source.sourceName,
2782
2786
  })}
2783
2787
  </div>
2784
- {group.fields.map((field) => (
2785
- <button
2786
- key={field.id}
2787
- type="button"
2788
- aria-label={t("editor.properties.sourceField", {
2789
- name: field.sourceFieldLabel,
2790
- })}
2791
- disabled={isAddingProperty}
2792
- aria-busy={pendingSourceFieldId === field.id}
2793
- className="flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm hover:bg-accent disabled:opacity-50"
2794
- onClick={() => void addFromSourceField(field.id)}
2795
- >
2796
- {pendingSourceFieldId === field.id ? (
2797
- <Spinner className="size-4 shrink-0 text-muted-foreground" />
2798
- ) : (
2799
- <IconLink className="size-4 shrink-0 text-muted-foreground" />
2800
- )}
2801
- <span className="min-w-0 flex-1 truncate">
2802
- {field.sourceFieldLabel}
2803
- </span>
2804
- <span className="shrink-0 text-xs text-muted-foreground">
2805
- {group.source.metadata.federation?.role === "secondary"
2806
- ? t("editor.properties.federated")
2807
- : t("editor.properties.source")}
2808
- </span>
2809
- </button>
2810
- ))}
2788
+ {group.fields.map((field) => {
2789
+ const SourceFieldIcon =
2790
+ TYPE_ICONS[
2791
+ propertyTypeForSourceFieldType(field.sourceFieldType)
2792
+ ];
2793
+ return (
2794
+ <button
2795
+ key={field.id}
2796
+ type="button"
2797
+ aria-label={t("editor.properties.sourceField", {
2798
+ name: field.sourceFieldLabel,
2799
+ })}
2800
+ disabled={isAddingProperty}
2801
+ aria-busy={pendingSourceFieldId === field.id}
2802
+ className="flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm hover:bg-accent disabled:opacity-50"
2803
+ onClick={() => void addFromSourceField(field.id)}
2804
+ >
2805
+ {pendingSourceFieldId === field.id ? (
2806
+ <Spinner className="size-4 shrink-0 text-muted-foreground" />
2807
+ ) : (
2808
+ <SourceFieldIcon className="size-4 shrink-0 text-muted-foreground" />
2809
+ )}
2810
+ <span className="min-w-0 flex-1 truncate">
2811
+ {field.sourceFieldLabel}
2812
+ </span>
2813
+ <span className="shrink-0 text-xs text-muted-foreground">
2814
+ {group.source.metadata.federation?.role === "secondary"
2815
+ ? t("editor.properties.federated")
2816
+ : t("editor.properties.source")}
2817
+ </span>
2818
+ </button>
2819
+ );
2820
+ })}
2811
2821
  </div>
2812
2822
  ))}
2813
2823
  {filteredPropertyTypes.length === 0 ? (