@agent-native/core 0.113.0 → 0.114.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 (1638) hide show
  1. package/agent-native.eject.json +164 -0
  2. package/corpus/README.md +3 -3
  3. package/corpus/core/CHANGELOG.md +20 -0
  4. package/corpus/core/README.md +61 -174
  5. package/corpus/core/agent-native.eject.json +164 -0
  6. package/corpus/core/docs/content/agent-native-toolkit.mdx +38 -0
  7. package/corpus/core/docs/content/package-lifecycle.mdx +54 -4
  8. package/corpus/core/package.json +15 -2
  9. package/corpus/core/src/cli/eject.ts +1594 -0
  10. package/corpus/core/src/cli/index.ts +16 -0
  11. package/corpus/core/src/client/build-compatibility.ts +77 -0
  12. package/corpus/core/src/client/index.ts +4 -0
  13. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +8 -2
  14. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +7 -2
  15. package/corpus/core/src/client/resources/ResourcesPanel.tsx +17 -3
  16. package/corpus/core/src/client/resources/index.ts +19 -0
  17. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +9 -1
  18. package/corpus/core/src/client/resources/runtime.ts +1 -0
  19. package/corpus/core/src/client/route-chunk-recovery/index.ts +1 -0
  20. package/corpus/core/src/client/setup-connections/catalog.ts +6 -0
  21. package/corpus/core/src/client/setup-connections/index.ts +1 -0
  22. package/corpus/core/src/client/setup-connections/runtime.ts +1 -0
  23. package/corpus/core/src/client/use-action.ts +32 -1
  24. package/corpus/core/src/connections/catalog.ts +41 -24
  25. package/corpus/core/src/connections/index.ts +1 -0
  26. package/corpus/core/src/connections/runtime.ts +1 -0
  27. package/corpus/core/src/deploy/build.ts +4 -1
  28. package/corpus/core/src/eject/provider-api-definitions.ts +193 -0
  29. package/corpus/core/src/eject/remote-mcp-presets.ts +137 -0
  30. package/corpus/core/src/eject/setup-readiness-ui.tsx +29 -0
  31. package/corpus/core/src/eject/workspace-connections.ts +92 -0
  32. package/corpus/core/src/index.ts +1 -0
  33. package/corpus/core/src/integrations/adapter-overrides.ts +12 -0
  34. package/corpus/core/src/integrations/eject/messaging-adapters.ts +85 -0
  35. package/corpus/core/src/integrations/index.ts +5 -1
  36. package/corpus/core/src/integrations/plugin.ts +34 -12
  37. package/corpus/core/src/integrations/runtime.ts +1 -0
  38. package/corpus/core/src/integrations/types.ts +3 -1
  39. package/corpus/core/src/org/context.ts +56 -30
  40. package/corpus/core/src/package-lifecycle/eject-manifest.ts +345 -0
  41. package/corpus/core/src/package-lifecycle/index.ts +1 -0
  42. package/corpus/core/src/provider-api/index.ts +46 -12
  43. package/corpus/core/src/provider-api/runtime.ts +1 -0
  44. package/corpus/core/src/server/action-routes.ts +52 -2
  45. package/corpus/core/src/server/auth-plugin.ts +9 -4
  46. package/corpus/core/src/server/better-auth-instance.ts +5 -1
  47. package/corpus/core/src/setup-connections/index.ts +1 -0
  48. package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
  49. package/corpus/core/src/shared/merge-by-id.ts +14 -0
  50. package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  51. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  52. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  53. package/corpus/core/src/templates/default/AGENTS.md +6 -5
  54. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  55. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  56. package/corpus/core/src/templates/headless/AGENTS.md +5 -4
  57. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  58. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  59. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  60. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  61. package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -4
  62. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -4
  63. package/corpus/core/src/vite/client.ts +42 -2
  64. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  65. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +9 -6
  66. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  67. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +9 -6
  68. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  69. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +9 -6
  70. package/corpus/templates/brain/actions/remediate-legacy-capture-audiences.ts +167 -0
  71. package/corpus/templates/brain/app/lib/brain-chat-readiness.ts +6 -0
  72. package/corpus/templates/brain/app/routes/_index.tsx +8 -0
  73. package/corpus/templates/brain/app/routes.ts +1 -0
  74. package/corpus/templates/brain/changelog/2026-07-19-ask-starts-immediately-when-builder-s-managed-ai-connection-.md +6 -0
  75. package/corpus/templates/brain/changelog/2026-07-19-slack-and-granola-backfills-now-process-captures-concurrentl.md +6 -0
  76. package/corpus/templates/brain/changelog/2026-07-19-source-review-settings-now-control-knowledge-approval.md +6 -0
  77. package/corpus/templates/brain/changelog/2026-07-19-the-manage-agent-page-now-opens-correctly-from-brain-navigat.md +6 -0
  78. package/corpus/templates/brain/server/db/schema.ts +3 -0
  79. package/corpus/templates/brain/server/lib/brain.ts +41 -2
  80. package/corpus/templates/brain/server/lib/connectors.ts +379 -113
  81. package/corpus/templates/brain/server/lib/meeting-audience.ts +38 -0
  82. package/corpus/templates/brain/server/plugins/db.ts +10 -0
  83. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +6 -4
  84. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  85. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +9 -6
  86. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  87. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  88. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  89. package/corpus/templates/chat/AGENTS.md +3 -2
  90. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  91. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +9 -6
  92. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  93. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +9 -6
  94. package/corpus/templates/content/AGENTS.md +2 -0
  95. package/corpus/templates/content/actions/_content-database-personal-view.ts +49 -5
  96. package/corpus/templates/content/actions/_content-document-access.ts +21 -0
  97. package/corpus/templates/content/actions/_content-favorites.ts +91 -0
  98. package/corpus/templates/content/actions/_content-files.ts +79 -23
  99. package/corpus/templates/content/actions/_content-sidebar-state.ts +24 -0
  100. package/corpus/templates/content/actions/_content-space-access.ts +15 -17
  101. package/corpus/templates/content/actions/_content-space-catalog-guards.ts +20 -0
  102. package/corpus/templates/content/actions/_content-spaces.ts +364 -167
  103. package/corpus/templates/content/actions/_database-source-utils.ts +8 -0
  104. package/corpus/templates/content/actions/_database-utils.ts +249 -15
  105. package/corpus/templates/content/actions/_delete-content-space.ts +84 -0
  106. package/corpus/templates/content/actions/_files-system-properties.ts +499 -0
  107. package/corpus/templates/content/actions/_local-file-documents.ts +0 -1
  108. package/corpus/templates/content/actions/_property-utils.ts +18 -9
  109. package/corpus/templates/content/actions/bind-content-database-source-field.ts +3 -0
  110. package/corpus/templates/content/actions/configure-document-property.ts +3 -0
  111. package/corpus/templates/content/actions/create-content-database.ts +2 -2
  112. package/corpus/templates/content/actions/create-content-space.ts +34 -0
  113. package/corpus/templates/content/actions/create-document.ts +4 -1
  114. package/corpus/templates/content/actions/delete-content-space.ts +19 -0
  115. package/corpus/templates/content/actions/delete-database-items.ts +28 -1
  116. package/corpus/templates/content/actions/delete-document-property.ts +3 -0
  117. package/corpus/templates/content/actions/delete-document.ts +39 -2
  118. package/corpus/templates/content/actions/duplicate-database-item.ts +6 -0
  119. package/corpus/templates/content/actions/duplicate-database-items.ts +6 -0
  120. package/corpus/templates/content/actions/duplicate-document-property.ts +3 -0
  121. package/corpus/templates/content/actions/get-content-database.ts +11 -2
  122. package/corpus/templates/content/actions/get-content-sidebar-state.ts +23 -0
  123. package/corpus/templates/content/actions/get-document.ts +32 -7
  124. package/corpus/templates/content/actions/import-content-source.ts +33 -1
  125. package/corpus/templates/content/actions/list-content-spaces.ts +34 -2
  126. package/corpus/templates/content/actions/list-documents.ts +39 -7
  127. package/corpus/templates/content/actions/reorder-document-property.ts +9 -0
  128. package/corpus/templates/content/actions/set-document-property.ts +41 -23
  129. package/corpus/templates/content/actions/share-local-file-document.ts +15 -0
  130. package/corpus/templates/content/actions/submit-content-database-form.ts +7 -0
  131. package/corpus/templates/content/actions/sync-local-folder-source.ts +14 -0
  132. package/corpus/templates/content/actions/update-content-database-view.ts +1 -0
  133. package/corpus/templates/content/actions/update-content-sidebar-state.ts +27 -0
  134. package/corpus/templates/content/actions/update-document.ts +158 -66
  135. package/corpus/templates/content/app/components/EmptyState.tsx +4 -57
  136. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +8 -1
  137. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +519 -178
  138. package/corpus/templates/content/app/components/editor/DocumentInfoPanel.tsx +39 -0
  139. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +1 -1
  140. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +266 -7
  141. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +430 -152
  142. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +467 -66
  143. package/corpus/templates/content/app/components/editor/database/view-config.ts +9 -3
  144. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +720 -196
  145. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +173 -1
  146. package/corpus/templates/content/app/components/sidebar/document-sidebar-sections.ts +1 -1
  147. package/corpus/templates/content/app/components/sidebar/select-content-space.ts +91 -16
  148. package/corpus/templates/content/app/entry.client.tsx +5 -1
  149. package/corpus/templates/content/app/hooks/use-content-database.ts +84 -3
  150. package/corpus/templates/content/app/hooks/use-content-spaces.ts +60 -2
  151. package/corpus/templates/content/app/hooks/use-create-page.ts +30 -0
  152. package/corpus/templates/content/app/hooks/use-documents.ts +270 -19
  153. package/corpus/templates/content/app/i18n-data.ts +243 -20
  154. package/corpus/templates/content/app/lib/local-folder-picker-safety.ts +54 -0
  155. package/corpus/templates/content/app/lib/local-folder-picker-support.ts +18 -0
  156. package/corpus/templates/content/app/routes/_app.favorites.tsx +30 -0
  157. package/corpus/templates/content/app/routes/_app.local-files.tsx +18 -6
  158. package/corpus/templates/content/changelog/2026-07-17-workspace-files-now-stay-in-a-loading-state-until-automatic-.md +6 -0
  159. package/corpus/templates/content/changelog/2026-07-17-workspace-switching-now-opens-the-selected-files-database-pr.md +6 -0
  160. package/corpus/templates/content/changelog/2026-07-17-workspaces-now-expand-above-their-own-files-list-without-dup.md +6 -0
  161. package/corpus/templates/content/changelog/2026-07-18-create-named-workspaces-each-with-its-own-private-files-data.md +6 -0
  162. package/corpus/templates/content/changelog/2026-07-18-favorites-align-with-workspace-and-file-rows-in-the-sidebar.md +6 -0
  163. package/corpus/templates/content/changelog/2026-07-18-local-folder-selection-no-longer-invokes-the-unsafe-native-p.md +6 -0
  164. package/corpus/templates/content/changelog/2026-07-18-made-content-workspaces-independently-expandable-restored-or.md +6 -0
  165. package/corpus/templates/content/changelog/2026-07-18-page-details-now-live-in-a-shared-info-and-comments-rail-dat.md +6 -0
  166. package/corpus/templates/content/changelog/2026-07-18-workspace-database-views-now-control-sidebar-workspace-navig.md +6 -0
  167. package/corpus/templates/content/changelog/2026-07-18-workspace-navigation-now-aligns-favorites-with-workspace-pag.md +6 -0
  168. package/corpus/templates/content/changelog/2026-07-19-favorites-now-open-as-a-table-and-compact-breadcrumbs-make-w.md +6 -0
  169. package/corpus/templates/content/changelog/2026-07-19-files-databases-now-start-unfiltered-sidebar-rows-exactly-fo.md +6 -0
  170. package/corpus/templates/content/changelog/2026-07-19-sidebar-page-trees-now-open-only-when-expanded-remember-thei.md +6 -0
  171. package/corpus/templates/content/changelog/2026-07-19-workspace-file-databases-now-use-the-workspace-name-open-as-.md +6 -0
  172. package/corpus/templates/content/changelog/2026-07-19-workspace-navigation-now-stays-stable-on-hover-uses-folder-i.md +6 -0
  173. package/corpus/templates/content/changelog/2026-07-19-workspace-rows-now-use-folder-icons-and-deleting-a-user-crea.md +6 -0
  174. package/corpus/templates/content/changelog/2026-07-19-workspaces-can-be-created-without-leaving-the-workspaces-dat.md +6 -0
  175. package/corpus/templates/content/e2e/global-setup.ts +3 -2
  176. package/corpus/templates/content/parity/matrix.md +28 -28
  177. package/corpus/templates/content/parity/matrix.ts +8 -2
  178. package/corpus/templates/content/server/db/index.ts +1 -0
  179. package/corpus/templates/content/server/db/schema.ts +10 -0
  180. package/corpus/templates/content/server/lib/documents.ts +12 -7
  181. package/corpus/templates/content/server/plugins/db.ts +17 -0
  182. package/corpus/templates/content/shared/api.ts +9 -0
  183. package/corpus/templates/content/shared/database-form.ts +11 -2
  184. package/corpus/templates/content/vite.config.ts +1 -0
  185. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  186. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +9 -6
  187. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  188. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +9 -6
  189. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  190. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +9 -6
  191. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  192. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  193. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +9 -6
  194. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  195. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +9 -6
  196. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  197. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +9 -6
  198. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +15 -13
  199. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  200. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +9 -6
  201. package/corpus/toolkit/CHANGELOG.md +6 -0
  202. package/corpus/toolkit/agent-native.eject.json +411 -0
  203. package/corpus/toolkit/package.json +5 -2
  204. package/dist/cli/eject.d.ts +21 -0
  205. package/dist/cli/eject.d.ts.map +1 -0
  206. package/dist/cli/eject.js +1145 -0
  207. package/dist/cli/eject.js.map +1 -0
  208. package/dist/cli/index.js +15 -0
  209. package/dist/cli/index.js.map +1 -1
  210. package/dist/client/build-compatibility.d.ts +11 -0
  211. package/dist/client/build-compatibility.d.ts.map +1 -0
  212. package/dist/client/build-compatibility.js +56 -0
  213. package/dist/client/build-compatibility.js.map +1 -0
  214. package/dist/client/index.d.ts +1 -1
  215. package/dist/client/index.d.ts.map +1 -1
  216. package/dist/client/index.js +1 -1
  217. package/dist/client/index.js.map +1 -1
  218. package/dist/client/resources/McpConnectionSuggestion.d.ts +4 -3
  219. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  220. package/dist/client/resources/McpConnectionSuggestion.js +3 -3
  221. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  222. package/dist/client/resources/McpIntegrationDialog.d.ts +4 -3
  223. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  224. package/dist/client/resources/McpIntegrationDialog.js +2 -2
  225. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  226. package/dist/client/resources/ResourcesPanel.d.ts +4 -1
  227. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  228. package/dist/client/resources/ResourcesPanel.js +9 -7
  229. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  230. package/dist/client/resources/index.d.ts +3 -0
  231. package/dist/client/resources/index.d.ts.map +1 -1
  232. package/dist/client/resources/index.js +3 -0
  233. package/dist/client/resources/index.js.map +1 -1
  234. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -1
  235. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  236. package/dist/client/resources/mcp-integration-catalog.js +6 -2
  237. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  238. package/dist/client/resources/runtime.d.ts +2 -0
  239. package/dist/client/resources/runtime.d.ts.map +1 -0
  240. package/dist/client/resources/runtime.js +2 -0
  241. package/dist/client/resources/runtime.js.map +1 -0
  242. package/dist/client/route-chunk-recovery/index.d.ts +1 -0
  243. package/dist/client/route-chunk-recovery/index.d.ts.map +1 -1
  244. package/dist/client/route-chunk-recovery/index.js +1 -0
  245. package/dist/client/route-chunk-recovery/index.js.map +1 -1
  246. package/dist/client/setup-connections/catalog.d.ts +2 -0
  247. package/dist/client/setup-connections/catalog.d.ts.map +1 -0
  248. package/dist/client/setup-connections/catalog.js +7 -0
  249. package/dist/client/setup-connections/catalog.js.map +1 -0
  250. package/dist/client/setup-connections/index.d.ts +1 -0
  251. package/dist/client/setup-connections/index.d.ts.map +1 -1
  252. package/dist/client/setup-connections/index.js +1 -0
  253. package/dist/client/setup-connections/index.js.map +1 -1
  254. package/dist/client/setup-connections/runtime.d.ts +2 -0
  255. package/dist/client/setup-connections/runtime.d.ts.map +1 -0
  256. package/dist/client/setup-connections/runtime.js +2 -0
  257. package/dist/client/setup-connections/runtime.js.map +1 -0
  258. package/dist/client/use-action.d.ts.map +1 -1
  259. package/dist/client/use-action.js +19 -1
  260. package/dist/client/use-action.js.map +1 -1
  261. package/dist/collab/awareness.d.ts +2 -2
  262. package/dist/collab/awareness.d.ts.map +1 -1
  263. package/dist/collab/struct-routes.d.ts +1 -1
  264. package/dist/connections/catalog.d.ts +5 -3
  265. package/dist/connections/catalog.d.ts.map +1 -1
  266. package/dist/connections/catalog.js +16 -8
  267. package/dist/connections/catalog.js.map +1 -1
  268. package/dist/connections/index.d.ts +1 -1
  269. package/dist/connections/index.d.ts.map +1 -1
  270. package/dist/connections/index.js +1 -1
  271. package/dist/connections/index.js.map +1 -1
  272. package/dist/connections/runtime.d.ts +2 -0
  273. package/dist/connections/runtime.d.ts.map +1 -0
  274. package/dist/connections/runtime.js +2 -0
  275. package/dist/connections/runtime.js.map +1 -0
  276. package/dist/deploy/build.js +2 -1
  277. package/dist/deploy/build.js.map +1 -1
  278. package/dist/eject/provider-api-definitions.d.ts +34 -0
  279. package/dist/eject/provider-api-definitions.d.ts.map +1 -0
  280. package/dist/eject/provider-api-definitions.js +88 -0
  281. package/dist/eject/provider-api-definitions.js.map +1 -0
  282. package/dist/eject/remote-mcp-presets.d.ts +17 -0
  283. package/dist/eject/remote-mcp-presets.d.ts.map +1 -0
  284. package/dist/eject/remote-mcp-presets.js +81 -0
  285. package/dist/eject/remote-mcp-presets.js.map +1 -0
  286. package/dist/eject/setup-readiness-ui.d.ts +7 -0
  287. package/dist/eject/setup-readiness-ui.d.ts.map +1 -0
  288. package/dist/eject/setup-readiness-ui.js +13 -0
  289. package/dist/eject/setup-readiness-ui.js.map +1 -0
  290. package/dist/eject/workspace-connections.d.ts +11 -0
  291. package/dist/eject/workspace-connections.d.ts.map +1 -0
  292. package/dist/eject/workspace-connections.js +47 -0
  293. package/dist/eject/workspace-connections.js.map +1 -0
  294. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  295. package/dist/index.d.ts +1 -1
  296. package/dist/index.d.ts.map +1 -1
  297. package/dist/index.js +1 -1
  298. package/dist/index.js.map +1 -1
  299. package/dist/integrations/adapter-overrides.d.ts +3 -0
  300. package/dist/integrations/adapter-overrides.d.ts.map +1 -0
  301. package/dist/integrations/adapter-overrides.js +7 -0
  302. package/dist/integrations/adapter-overrides.js.map +1 -0
  303. package/dist/integrations/eject/messaging-adapters.d.ts +12 -0
  304. package/dist/integrations/eject/messaging-adapters.d.ts.map +1 -0
  305. package/dist/integrations/eject/messaging-adapters.js +49 -0
  306. package/dist/integrations/eject/messaging-adapters.js.map +1 -0
  307. package/dist/integrations/index.d.ts +3 -2
  308. package/dist/integrations/index.d.ts.map +1 -1
  309. package/dist/integrations/index.js +2 -1
  310. package/dist/integrations/index.js.map +1 -1
  311. package/dist/integrations/plugin.d.ts +32 -1
  312. package/dist/integrations/plugin.d.ts.map +1 -1
  313. package/dist/integrations/plugin.js +19 -12
  314. package/dist/integrations/plugin.js.map +1 -1
  315. package/dist/integrations/runtime.d.ts +2 -0
  316. package/dist/integrations/runtime.d.ts.map +1 -0
  317. package/dist/integrations/runtime.js +2 -0
  318. package/dist/integrations/runtime.js.map +1 -0
  319. package/dist/integrations/types.d.ts +3 -1
  320. package/dist/integrations/types.d.ts.map +1 -1
  321. package/dist/integrations/types.js.map +1 -1
  322. package/dist/notifications/routes.d.ts +2 -2
  323. package/dist/observability/routes.d.ts +5 -5
  324. package/dist/org/context.d.ts +4 -2
  325. package/dist/org/context.d.ts.map +1 -1
  326. package/dist/org/context.js +44 -22
  327. package/dist/org/context.js.map +1 -1
  328. package/dist/package-lifecycle/eject-manifest.d.ts +43 -0
  329. package/dist/package-lifecycle/eject-manifest.d.ts.map +1 -0
  330. package/dist/package-lifecycle/eject-manifest.js +219 -0
  331. package/dist/package-lifecycle/eject-manifest.js.map +1 -0
  332. package/dist/package-lifecycle/index.d.ts +1 -0
  333. package/dist/package-lifecycle/index.d.ts.map +1 -1
  334. package/dist/package-lifecycle/index.js +1 -0
  335. package/dist/package-lifecycle/index.js.map +1 -1
  336. package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
  337. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  338. package/dist/provider-api/index.d.ts +6 -2
  339. package/dist/provider-api/index.d.ts.map +1 -1
  340. package/dist/provider-api/index.js +25 -12
  341. package/dist/provider-api/index.js.map +1 -1
  342. package/dist/provider-api/runtime.d.ts +2 -0
  343. package/dist/provider-api/runtime.d.ts.map +1 -0
  344. package/dist/provider-api/runtime.js +2 -0
  345. package/dist/provider-api/runtime.js.map +1 -0
  346. package/dist/resources/handlers.d.ts +1 -1
  347. package/dist/server/action-routes.d.ts.map +1 -1
  348. package/dist/server/action-routes.js +32 -2
  349. package/dist/server/action-routes.js.map +1 -1
  350. package/dist/server/auth-plugin.d.ts.map +1 -1
  351. package/dist/server/auth-plugin.js +9 -5
  352. package/dist/server/auth-plugin.js.map +1 -1
  353. package/dist/server/better-auth-instance.d.ts.map +1 -1
  354. package/dist/server/better-auth-instance.js +4 -1
  355. package/dist/server/better-auth-instance.js.map +1 -1
  356. package/dist/setup-connections/index.d.ts +1 -1
  357. package/dist/setup-connections/index.d.ts.map +1 -1
  358. package/dist/setup-connections/index.js +1 -1
  359. package/dist/setup-connections/index.js.map +1 -1
  360. package/dist/shared/mcp-embed-headers.d.ts +1 -1
  361. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  362. package/dist/shared/mcp-embed-headers.js +1 -1
  363. package/dist/shared/mcp-embed-headers.js.map +1 -1
  364. package/dist/shared/merge-by-id.d.ts +5 -0
  365. package/dist/shared/merge-by-id.d.ts.map +1 -0
  366. package/dist/shared/merge-by-id.js +7 -0
  367. package/dist/shared/merge-by-id.js.map +1 -0
  368. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  369. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  370. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  371. package/dist/templates/chat/AGENTS.md +3 -2
  372. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  373. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  374. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  375. package/dist/templates/default/AGENTS.md +6 -5
  376. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  377. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  378. package/dist/templates/headless/AGENTS.md +5 -4
  379. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  380. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  381. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  382. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  383. package/dist/templates/workspace-core/AGENTS.md +4 -4
  384. package/dist/templates/workspace-root/AGENTS.md +4 -4
  385. package/dist/vite/client.d.ts +6 -0
  386. package/dist/vite/client.d.ts.map +1 -1
  387. package/dist/vite/client.js +30 -2
  388. package/dist/vite/client.js.map +1 -1
  389. package/docs/content/agent-native-toolkit.mdx +38 -0
  390. package/docs/content/package-lifecycle.mdx +54 -4
  391. package/package.json +15 -2
  392. package/src/a2a/agent-card.ts +83 -0
  393. package/src/a2a/artifact-response.ts +1648 -0
  394. package/src/a2a/auth-policy.ts +66 -0
  395. package/src/a2a/caller-auth.ts +102 -0
  396. package/src/a2a/client.ts +876 -0
  397. package/src/a2a/correlation.ts +50 -0
  398. package/src/a2a/handlers.ts +1285 -0
  399. package/src/a2a/index.ts +50 -0
  400. package/src/a2a/invoke.ts +348 -0
  401. package/src/a2a/response-text.ts +53 -0
  402. package/src/a2a/server.ts +586 -0
  403. package/src/a2a/task-store.ts +917 -0
  404. package/src/a2a/types.ts +221 -0
  405. package/src/a2a-claims.ts +52 -0
  406. package/src/action-change-marker.ts +74 -0
  407. package/src/action-ui.ts +38 -0
  408. package/src/action.ts +1406 -0
  409. package/src/adapters/cli/index.ts +6 -0
  410. package/src/adapters/cli/registry.ts +73 -0
  411. package/src/adapters/cli/shell-adapter.ts +92 -0
  412. package/src/adapters/cli/types.ts +27 -0
  413. package/src/agent/action-continuation-guidance.ts +38 -0
  414. package/src/agent/app-model-defaults.ts +201 -0
  415. package/src/agent/context-xray/actions/context-evict.ts +56 -0
  416. package/src/agent/context-xray/actions/context-manifest-get.ts +75 -0
  417. package/src/agent/context-xray/actions/context-pin.ts +56 -0
  418. package/src/agent/context-xray/actions/context-preview-get.ts +134 -0
  419. package/src/agent/context-xray/actions/context-report.ts +75 -0
  420. package/src/agent/context-xray/actions/context-restore.ts +51 -0
  421. package/src/agent/context-xray/actions/errors.ts +40 -0
  422. package/src/agent/context-xray/apply-directives.ts +137 -0
  423. package/src/agent/context-xray/directives-store.ts +178 -0
  424. package/src/agent/context-xray/identity.ts +37 -0
  425. package/src/agent/context-xray/manifest.ts +284 -0
  426. package/src/agent/context-xray/migrations.ts +32 -0
  427. package/src/agent/context-xray/plugin.ts +23 -0
  428. package/src/agent/context-xray/schema.ts +17 -0
  429. package/src/agent/context-xray/segments.ts +194 -0
  430. package/src/agent/context-xray/tokenize.ts +93 -0
  431. package/src/agent/default-model.ts +5 -0
  432. package/src/agent/durable-background.ts +547 -0
  433. package/src/agent/engine/ai-sdk-engine.ts +565 -0
  434. package/src/agent/engine/anthropic-engine.ts +320 -0
  435. package/src/agent/engine/builder-engine.ts +1110 -0
  436. package/src/agent/engine/builder-gateway-headers.ts +44 -0
  437. package/src/agent/engine/builtin.ts +122 -0
  438. package/src/agent/engine/context-directives-transform.ts +73 -0
  439. package/src/agent/engine/continuation-dispatch-retry.ts +168 -0
  440. package/src/agent/engine/credential-errors.ts +69 -0
  441. package/src/agent/engine/index.ts +54 -0
  442. package/src/agent/engine/openai-compatible-endpoint.ts +25 -0
  443. package/src/agent/engine/output-tokens.ts +181 -0
  444. package/src/agent/engine/provider-env-vars.ts +69 -0
  445. package/src/agent/engine/registry.ts +853 -0
  446. package/src/agent/engine/tool-call-journal-seed.ts +85 -0
  447. package/src/agent/engine/translate-ai-sdk.ts +407 -0
  448. package/src/agent/engine/translate-anthropic.ts +611 -0
  449. package/src/agent/engine/types.ts +310 -0
  450. package/src/agent/harness/acp-adapter.ts +893 -0
  451. package/src/agent/harness/acp-builtin.ts +70 -0
  452. package/src/agent/harness/ai-sdk-adapter.ts +509 -0
  453. package/src/agent/harness/background.ts +365 -0
  454. package/src/agent/harness/builtin.ts +50 -0
  455. package/src/agent/harness/index.ts +86 -0
  456. package/src/agent/harness/lifecycle.ts +498 -0
  457. package/src/agent/harness/registry.ts +97 -0
  458. package/src/agent/harness/runner.ts +182 -0
  459. package/src/agent/harness/store.ts +466 -0
  460. package/src/agent/harness/translate.ts +130 -0
  461. package/src/agent/harness/types.ts +129 -0
  462. package/src/agent/index.ts +32 -0
  463. package/src/agent/loop-settings.ts +186 -0
  464. package/src/agent/model-config.ts +363 -0
  465. package/src/agent/observational-memory/compactor.ts +78 -0
  466. package/src/agent/observational-memory/config.ts +78 -0
  467. package/src/agent/observational-memory/index.ts +79 -0
  468. package/src/agent/observational-memory/internal-run.ts +89 -0
  469. package/src/agent/observational-memory/message-text.ts +49 -0
  470. package/src/agent/observational-memory/migrations.ts +44 -0
  471. package/src/agent/observational-memory/observer.ts +128 -0
  472. package/src/agent/observational-memory/plugin.ts +35 -0
  473. package/src/agent/observational-memory/prompts.ts +53 -0
  474. package/src/agent/observational-memory/read.ts +131 -0
  475. package/src/agent/observational-memory/reflector.ts +119 -0
  476. package/src/agent/observational-memory/schema.ts +48 -0
  477. package/src/agent/observational-memory/store.ts +275 -0
  478. package/src/agent/observational-memory/types.ts +65 -0
  479. package/src/agent/processors.ts +209 -0
  480. package/src/agent/production-agent.ts +8254 -0
  481. package/src/agent/run-loop-with-resume.ts +394 -0
  482. package/src/agent/run-manager.ts +1825 -0
  483. package/src/agent/run-ownership.ts +75 -0
  484. package/src/agent/run-store.ts +2601 -0
  485. package/src/agent/runtime-context.ts +169 -0
  486. package/src/agent/thread-data-builder.ts +1584 -0
  487. package/src/agent/tool-call-journal.ts +368 -0
  488. package/src/agent/tool-error-redaction.ts +52 -0
  489. package/src/agent/tool-result-images.ts +178 -0
  490. package/src/agent/tool-search.ts +376 -0
  491. package/src/agent/types.ts +372 -0
  492. package/src/agent-native/index.ts +198 -0
  493. package/src/agent-web/config.ts +253 -0
  494. package/src/agent-web/generator.ts +382 -0
  495. package/src/agent-web/index.ts +36 -0
  496. package/src/appearance/actions/change-appearance.ts +35 -0
  497. package/src/application-state/emitter.ts +81 -0
  498. package/src/application-state/handlers.ts +121 -0
  499. package/src/application-state/index.ts +44 -0
  500. package/src/application-state/script-helpers.ts +155 -0
  501. package/src/application-state/store.ts +274 -0
  502. package/src/assets/branding/agent-native.icon/Assets/background.svg +3 -0
  503. package/src/assets/branding/agent-native.icon/Assets/foreground.svg +12 -0
  504. package/src/assets/branding/agent-native.icon/icon.json +49 -0
  505. package/src/assets/branding/favicon.png +0 -0
  506. package/src/assets/branding/favicon.svg +1 -0
  507. package/src/assets/branding/icon-on-dark.svg +10 -0
  508. package/src/assets/branding/icon-on-light.svg +10 -0
  509. package/src/assets/branding/mac-app-icon.svg +1 -0
  510. package/src/assets/branding/slack-bot/agent-native-1024.png +0 -0
  511. package/src/assets/branding/slack-bot/agent-native-512.png +0 -0
  512. package/src/assets/branding/tray-icon.svg +6 -0
  513. package/src/assets/branding/wordmark-on-dark.svg +21 -0
  514. package/src/assets/branding/wordmark-on-light.svg +21 -0
  515. package/src/assets/fonts/LICENSE_LIBERATION +96 -0
  516. package/src/assets/fonts/LICENSE_NOTO_NASKH_ARABIC +93 -0
  517. package/src/assets/fonts/LiberationSans-Bold.ttf +0 -0
  518. package/src/assets/fonts/LiberationSans-Regular.ttf +0 -0
  519. package/src/assets/fonts/NotoNaskhArabic-Variable.ttf +0 -0
  520. package/src/audit/actions/export-audit-events.ts +162 -0
  521. package/src/audit/actions/get-audit-event.ts +24 -0
  522. package/src/audit/actions/list-audit-events.ts +66 -0
  523. package/src/audit/cleanup-job.ts +100 -0
  524. package/src/audit/config.ts +90 -0
  525. package/src/audit/index.ts +43 -0
  526. package/src/audit/record.ts +180 -0
  527. package/src/audit/redact.ts +109 -0
  528. package/src/audit/store.ts +346 -0
  529. package/src/audit/types.ts +141 -0
  530. package/src/automation/index.ts +802 -0
  531. package/src/brand-kit/brand-signals.ts +124 -0
  532. package/src/brand-kit/fig/index.ts +64 -0
  533. package/src/brand-kit/index.ts +72 -0
  534. package/src/brand-kit/types.ts +113 -0
  535. package/src/browser-sessions/actions.ts +302 -0
  536. package/src/browser-sessions/routes.ts +234 -0
  537. package/src/browser-sessions/store.ts +679 -0
  538. package/src/browser-sessions/types.ts +84 -0
  539. package/src/changelog/parse.ts +328 -0
  540. package/src/chat-threads/emitter.ts +22 -0
  541. package/src/chat-threads/schema.ts +43 -0
  542. package/src/chat-threads/store.ts +1311 -0
  543. package/src/checkpoints/index.ts +15 -0
  544. package/src/checkpoints/service.ts +142 -0
  545. package/src/checkpoints/store.ts +153 -0
  546. package/src/cli/add.ts +425 -0
  547. package/src/cli/agent.ts +424 -0
  548. package/src/cli/agents.ts +122 -0
  549. package/src/cli/app-skill.ts +1455 -0
  550. package/src/cli/atomic-json-file.ts +324 -0
  551. package/src/cli/audit-agent-web.ts +324 -0
  552. package/src/cli/changelog.ts +199 -0
  553. package/src/cli/claude-code-participant.ts +515 -0
  554. package/src/cli/code-agent-commands.ts +270 -0
  555. package/src/cli/code-agent-connector.ts +1109 -0
  556. package/src/cli/code-agent-executor.ts +1970 -0
  557. package/src/cli/code-agent-output-smoother.ts +140 -0
  558. package/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
  559. package/src/cli/code-agent-runs.ts +548 -0
  560. package/src/cli/code.ts +1805 -0
  561. package/src/cli/codex-cli-participant.ts +496 -0
  562. package/src/cli/connect.ts +2714 -0
  563. package/src/cli/content-local.ts +442 -0
  564. package/src/cli/context-xray-local.ts +2193 -0
  565. package/src/cli/create-workspace.ts +30 -0
  566. package/src/cli/create.ts +2247 -0
  567. package/src/cli/deploy-build.ts +50 -0
  568. package/src/cli/design-connect.ts +3187 -0
  569. package/src/cli/doctor.ts +472 -0
  570. package/src/cli/eject.ts +1594 -0
  571. package/src/cli/eval.ts +134 -0
  572. package/src/cli/gateway-helpers.ts +70 -0
  573. package/src/cli/index.ts +1217 -0
  574. package/src/cli/info.ts +105 -0
  575. package/src/cli/invoke.ts +288 -0
  576. package/src/cli/mcp-config-writers.ts +857 -0
  577. package/src/cli/mcp.ts +594 -0
  578. package/src/cli/migrate.ts +1813 -0
  579. package/src/cli/migration-codemod.ts +646 -0
  580. package/src/cli/multi-frontier-runs.ts +1952 -0
  581. package/src/cli/package-lifecycle.ts +823 -0
  582. package/src/cli/plan-blocks.ts +143 -0
  583. package/src/cli/plan-local.ts +3189 -0
  584. package/src/cli/plan-publish-store.ts +138 -0
  585. package/src/cli/pr-visual-recap-workflow.ts +2 -0
  586. package/src/cli/recap.ts +5 -0
  587. package/src/cli/setup-agents.ts +120 -0
  588. package/src/cli/skills-content/assets-skill.ts +83 -0
  589. package/src/cli/skills-content/canvas.ts +153 -0
  590. package/src/cli/skills-content/connection.ts +52 -0
  591. package/src/cli/skills-content/content-skill.ts +120 -0
  592. package/src/cli/skills-content/design-exploration-skill.ts +118 -0
  593. package/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
  594. package/src/cli/skills-content/document-quality.ts +196 -0
  595. package/src/cli/skills-content/exemplar.ts +69 -0
  596. package/src/cli/skills-content/help.ts +77 -0
  597. package/src/cli/skills-content/index.ts +22 -0
  598. package/src/cli/skills-content/local-files.ts +100 -0
  599. package/src/cli/skills-content/plan-setup-auth.ts +80 -0
  600. package/src/cli/skills-content/visual-plan-skill.ts +493 -0
  601. package/src/cli/skills-content/visual-recap-skill.ts +553 -0
  602. package/src/cli/skills-content/visualize-repo-skill.ts +93 -0
  603. package/src/cli/skills-content/wireframe.ts +349 -0
  604. package/src/cli/skills.ts +4340 -0
  605. package/src/cli/sync-builder-starter-manifest.ts +631 -0
  606. package/src/cli/telemetry.ts +136 -0
  607. package/src/cli/templates-meta.ts +269 -0
  608. package/src/cli/upgrade.ts +956 -0
  609. package/src/cli/visualize-repo.ts +715 -0
  610. package/src/cli/workspace-dev.ts +1486 -0
  611. package/src/cli/workspacify.ts +258 -0
  612. package/src/client/AgentAskPopover.tsx +89 -0
  613. package/src/client/AgentChatHome.tsx +66 -0
  614. package/src/client/AgentNative.tsx +161 -0
  615. package/src/client/AgentNativeEmbedded.tsx +288 -0
  616. package/src/client/AgentNativeFrame.tsx +151 -0
  617. package/src/client/AgentPanel.tsx +3437 -0
  618. package/src/client/AgentTaskCard.tsx +273 -0
  619. package/src/client/AppearancePicker.tsx +79 -0
  620. package/src/client/AssistantChat.tsx +5793 -0
  621. package/src/client/ClientOnly.tsx +22 -0
  622. package/src/client/CommandMenu.tsx +726 -0
  623. package/src/client/ConnectBuilderCard.tsx +390 -0
  624. package/src/client/DefaultSpinner.tsx +47 -0
  625. package/src/client/ErrorBoundary.tsx +359 -0
  626. package/src/client/ErrorReportActions.tsx +69 -0
  627. package/src/client/FeedbackButton.tsx +553 -0
  628. package/src/client/HighlightedCodeBlock.tsx +173 -0
  629. package/src/client/IframeEmbed.tsx +151 -0
  630. package/src/client/KeepTabOpenNotice.tsx +181 -0
  631. package/src/client/MultiTabAssistantChat.tsx +2576 -0
  632. package/src/client/NewWorkspaceAppFlow.tsx +525 -0
  633. package/src/client/PoweredByBadge.tsx +284 -0
  634. package/src/client/RunStuckBanner.tsx +431 -0
  635. package/src/client/StarfieldBackground.tsx +466 -0
  636. package/src/client/Turnstile.tsx +125 -0
  637. package/src/client/active-run-state.ts +139 -0
  638. package/src/client/agent-chat/index.ts +279 -0
  639. package/src/client/agent-chat-adapter.ts +3692 -0
  640. package/src/client/agent-chat.ts +1233 -0
  641. package/src/client/agent-engine-key.ts +122 -0
  642. package/src/client/agent-page/AgentContextTab.tsx +487 -0
  643. package/src/client/agent-page/AgentEmptyState.tsx +44 -0
  644. package/src/client/agent-page/AgentJobsTab.tsx +441 -0
  645. package/src/client/agent-page/AgentTabFrame.tsx +39 -0
  646. package/src/client/agent-page/AgentTabsPage.tsx +1096 -0
  647. package/src/client/agent-page/types.ts +18 -0
  648. package/src/client/agent-page/use-jobs.ts +150 -0
  649. package/src/client/agent-sidebar-state.ts +166 -0
  650. package/src/client/analytics/index.ts +40 -0
  651. package/src/client/analytics-session.ts +70 -0
  652. package/src/client/analytics.ts +1757 -0
  653. package/src/client/api-path.ts +124 -0
  654. package/src/client/app-providers.tsx +230 -0
  655. package/src/client/appearance.ts +130 -0
  656. package/src/client/application-state.ts +154 -0
  657. package/src/client/assistant-ui-recovery.tsx +205 -0
  658. package/src/client/automation/index.ts +4 -0
  659. package/src/client/automation.ts +22 -0
  660. package/src/client/blocks/AiEditableField.tsx +30 -0
  661. package/src/client/blocks/BlockView.tsx +145 -0
  662. package/src/client/blocks/RegistryBlockDataProvider.tsx +121 -0
  663. package/src/client/blocks/SchemaBlockEditor.tsx +457 -0
  664. package/src/client/blocks/agent.ts +95 -0
  665. package/src/client/blocks/code-block-direction.ts +21 -0
  666. package/src/client/blocks/index.ts +308 -0
  667. package/src/client/blocks/library/AnnotatedCodeBlock.tsx +710 -0
  668. package/src/client/blocks/library/ApiEndpointBlock.tsx +1120 -0
  669. package/src/client/blocks/library/DataModelBlock.tsx +775 -0
  670. package/src/client/blocks/library/DiffBlock.tsx +1854 -0
  671. package/src/client/blocks/library/FileTreeBlock.tsx +868 -0
  672. package/src/client/blocks/library/HighlightedCode.tsx +260 -0
  673. package/src/client/blocks/library/JsonExplorerBlock.tsx +608 -0
  674. package/src/client/blocks/library/MermaidBlock.tsx +362 -0
  675. package/src/client/blocks/library/OpenApiSpecBlock.tsx +998 -0
  676. package/src/client/blocks/library/annotated-code.config.ts +101 -0
  677. package/src/client/blocks/library/annotation-rail.tsx +1020 -0
  678. package/src/client/blocks/library/api-endpoint.config.ts +207 -0
  679. package/src/client/blocks/library/block-copy.ts +399 -0
  680. package/src/client/blocks/library/callout.config.ts +57 -0
  681. package/src/client/blocks/library/callout.tsx +149 -0
  682. package/src/client/blocks/library/checklist.config.ts +56 -0
  683. package/src/client/blocks/library/checklist.tsx +208 -0
  684. package/src/client/blocks/library/code-filename-label.tsx +59 -0
  685. package/src/client/blocks/library/code-highlight.tsx +178 -0
  686. package/src/client/blocks/library/code-tabs.config.ts +70 -0
  687. package/src/client/blocks/library/code-tabs.tsx +606 -0
  688. package/src/client/blocks/library/code.config.ts +69 -0
  689. package/src/client/blocks/library/code.tsx +440 -0
  690. package/src/client/blocks/library/columns.config.ts +85 -0
  691. package/src/client/blocks/library/columns.tsx +334 -0
  692. package/src/client/blocks/library/data-model.config.ts +152 -0
  693. package/src/client/blocks/library/dev-doc-ui.tsx +191 -0
  694. package/src/client/blocks/library/diagram.config.ts +222 -0
  695. package/src/client/blocks/library/diagram.tsx +958 -0
  696. package/src/client/blocks/library/diff.config.ts +115 -0
  697. package/src/client/blocks/library/file-tree.config.ts +92 -0
  698. package/src/client/blocks/library/html.config.ts +79 -0
  699. package/src/client/blocks/library/html.tsx +258 -0
  700. package/src/client/blocks/library/json-explorer.config.ts +74 -0
  701. package/src/client/blocks/library/mermaid.config.ts +49 -0
  702. package/src/client/blocks/library/narrow-container.tsx +37 -0
  703. package/src/client/blocks/library/openapi-spec.config.ts +66 -0
  704. package/src/client/blocks/library/question-form.config.ts +127 -0
  705. package/src/client/blocks/library/question-form.tsx +944 -0
  706. package/src/client/blocks/library/sanitize-html.ts +343 -0
  707. package/src/client/blocks/library/server-specs.ts +338 -0
  708. package/src/client/blocks/library/specs.tsx +308 -0
  709. package/src/client/blocks/library/table.config.ts +61 -0
  710. package/src/client/blocks/library/table.tsx +449 -0
  711. package/src/client/blocks/library/tabs.config.ts +96 -0
  712. package/src/client/blocks/library/tabs.tsx +665 -0
  713. package/src/client/blocks/library/wireframe-icons.ts +210 -0
  714. package/src/client/blocks/library/wireframe-kit.tsx +1850 -0
  715. package/src/client/blocks/library/wireframe.config.ts +539 -0
  716. package/src/client/blocks/library/wireframe.tsx +535 -0
  717. package/src/client/blocks/mdx.ts +364 -0
  718. package/src/client/blocks/provider.tsx +51 -0
  719. package/src/client/blocks/registry.ts +83 -0
  720. package/src/client/blocks/schema-form/introspect.ts +201 -0
  721. package/src/client/blocks/server.ts +170 -0
  722. package/src/client/blocks/types.ts +415 -0
  723. package/src/client/browser-session-bridge.ts +548 -0
  724. package/src/client/browser-tab-id.ts +36 -0
  725. package/src/client/build-compatibility.ts +77 -0
  726. package/src/client/builder-frame.ts +194 -0
  727. package/src/client/builder-mark.tsx +21 -0
  728. package/src/client/changelog/Changelog.tsx +333 -0
  729. package/src/client/changelog/index.ts +1 -0
  730. package/src/client/chat/ChatHistoryList.tsx +7 -0
  731. package/src/client/chat/attachment-adapters.ts +426 -0
  732. package/src/client/chat/connectors.ts +1579 -0
  733. package/src/client/chat/index.ts +160 -0
  734. package/src/client/chat/markdown-renderer.tsx +693 -0
  735. package/src/client/chat/message-components.tsx +1326 -0
  736. package/src/client/chat/repo-helpers.ts +281 -0
  737. package/src/client/chat/run-recovery.tsx +994 -0
  738. package/src/client/chat/runtime.ts +1810 -0
  739. package/src/client/chat/tool-call-display.tsx +1270 -0
  740. package/src/client/chat/tool-render-registry.tsx +144 -0
  741. package/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  742. package/src/client/chat/use-reconnect-reader-owner.ts +28 -0
  743. package/src/client/chat/widgets/DataChartRenderer.tsx +242 -0
  744. package/src/client/chat/widgets/DataChartWidget.tsx +51 -0
  745. package/src/client/chat/widgets/DataInsightsWidget.tsx +59 -0
  746. package/src/client/chat/widgets/DataTableWidget.tsx +240 -0
  747. package/src/client/chat/widgets/InlineExtensionWidget.tsx +60 -0
  748. package/src/client/chat/widgets/builtin-tool-renderers.tsx +213 -0
  749. package/src/client/chat/widgets/data-widget-types.ts +1 -0
  750. package/src/client/chat/widgets/inline-extension-result.ts +86 -0
  751. package/src/client/chat-model-groups.ts +171 -0
  752. package/src/client/chat-thread-url.ts +11 -0
  753. package/src/client/chat-view-transition.ts +213 -0
  754. package/src/client/client-action.ts +21 -0
  755. package/src/client/client-bootstrap.ts +7 -0
  756. package/src/client/client-surface.ts +41 -0
  757. package/src/client/clipboard.ts +89 -0
  758. package/src/client/code-agent-chat-adapter.ts +537 -0
  759. package/src/client/collab/index.ts +60 -0
  760. package/src/client/command-navigation/index.ts +15 -0
  761. package/src/client/comments-review/index.ts +1 -0
  762. package/src/client/components/AgentPresenceChip.tsx +4 -0
  763. package/src/client/components/ApiKeySettings.tsx +309 -0
  764. package/src/client/components/CodeAgentIndicator.tsx +59 -0
  765. package/src/client/components/CodeRequiredDialog.tsx +470 -0
  766. package/src/client/components/LiveCursorOverlay.tsx +5 -0
  767. package/src/client/components/MissingKeyCard.tsx +61 -0
  768. package/src/client/components/PresenceBar.tsx +4 -0
  769. package/src/client/components/RecentEditHighlights.tsx +4 -0
  770. package/src/client/components/RemoteSelectionRings.tsx +5 -0
  771. package/src/client/components/icons/AgentNativeIcon.tsx +46 -0
  772. package/src/client/components/ui/dialog.tsx +1 -0
  773. package/src/client/components/ui/dropdown-menu.tsx +1 -0
  774. package/src/client/components/ui/hover-card.tsx +1 -0
  775. package/src/client/components/ui/message-scroller.tsx +131 -0
  776. package/src/client/components/ui/popover.tsx +1 -0
  777. package/src/client/components/ui/sheet.tsx +1 -0
  778. package/src/client/components/ui/tooltip.tsx +1 -0
  779. package/src/client/composer/index.ts +11 -0
  780. package/src/client/composer/runtime-adapters.tsx +123 -0
  781. package/src/client/composer/use-mention-search.ts +7 -0
  782. package/src/client/composer/wired-components.tsx +53 -0
  783. package/src/client/context-xray/ContextMeter.tsx +124 -0
  784. package/src/client/context-xray/ContextSegmentRow.tsx +27 -0
  785. package/src/client/context-xray/ContextTreemap.tsx +24 -0
  786. package/src/client/context-xray/ContextXRayPanel.tsx +59 -0
  787. package/src/client/context-xray/SegmentProvenancePopover.tsx +18 -0
  788. package/src/client/context-xray/format.ts +27 -0
  789. package/src/client/conversation/AgentConversation.tsx +555 -0
  790. package/src/client/conversation/code-agent-transcript.ts +283 -0
  791. package/src/client/conversation/index.ts +22 -0
  792. package/src/client/conversation/types.ts +85 -0
  793. package/src/client/conversation/use-near-bottom-autoscroll.ts +278 -0
  794. package/src/client/create-query-client.ts +86 -0
  795. package/src/client/db-admin/DataGrid.tsx +551 -0
  796. package/src/client/db-admin/DbAdminPage.tsx +218 -0
  797. package/src/client/db-admin/DevDatabaseLink.tsx +16 -0
  798. package/src/client/db-admin/EditableCell.tsx +451 -0
  799. package/src/client/db-admin/FilterBar.tsx +203 -0
  800. package/src/client/db-admin/ResultsGrid.tsx +114 -0
  801. package/src/client/db-admin/RowSidePanel.tsx +337 -0
  802. package/src/client/db-admin/SqlEditor.tsx +840 -0
  803. package/src/client/db-admin/TableBrowser.tsx +212 -0
  804. package/src/client/db-admin/TableEditor.tsx +760 -0
  805. package/src/client/db-admin/cell-format.ts +246 -0
  806. package/src/client/db-admin/changeset.ts +296 -0
  807. package/src/client/db-admin/export-utils.ts +78 -0
  808. package/src/client/db-admin/index.ts +33 -0
  809. package/src/client/db-admin/sql-storage.ts +134 -0
  810. package/src/client/db-admin/storage.ts +68 -0
  811. package/src/client/db-admin/useAgentSync.ts +226 -0
  812. package/src/client/db-admin/useDbAdmin.ts +294 -0
  813. package/src/client/dev-overlay/DevOverlay.tsx +576 -0
  814. package/src/client/dev-overlay/builtins.ts +40 -0
  815. package/src/client/dev-overlay/index.ts +23 -0
  816. package/src/client/dev-overlay/registry.ts +67 -0
  817. package/src/client/dev-overlay/types.ts +64 -0
  818. package/src/client/dev-overlay/use-dev-option.ts +78 -0
  819. package/src/client/dev-overlay/use-dev-overlay-shortcut.ts +31 -0
  820. package/src/client/dynamic-suggestions.ts +455 -0
  821. package/src/client/embed-auth.ts +544 -0
  822. package/src/client/embed.ts +54 -0
  823. package/src/client/error-capture.ts +690 -0
  824. package/src/client/error-format.ts +211 -0
  825. package/src/client/error-reporting.ts +100 -0
  826. package/src/client/extensions/AgentNativeExtensionFrame.e2e-host.tsx +136 -0
  827. package/src/client/extensions/AgentNativeExtensionFrame.tsx +708 -0
  828. package/src/client/extensions/EmbeddedExtension.tsx +604 -0
  829. package/src/client/extensions/ExtensionEditor.tsx +450 -0
  830. package/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
  831. package/src/client/extensions/ExtensionSlot.tsx +345 -0
  832. package/src/client/extensions/ExtensionViewer.tsx +1502 -0
  833. package/src/client/extensions/ExtensionViewerPage.tsx +32 -0
  834. package/src/client/extensions/ExtensionsListPage.tsx +432 -0
  835. package/src/client/extensions/ExtensionsSidebarSection.tsx +1259 -0
  836. package/src/client/extensions/InlineExtensionFrame.tsx +660 -0
  837. package/src/client/extensions/agent-native-extension-runtime.ts +495 -0
  838. package/src/client/extensions/delete-extension.ts +76 -0
  839. package/src/client/extensions/extension-load-error.ts +26 -0
  840. package/src/client/extensions/extension-order.ts +49 -0
  841. package/src/client/extensions/extension-popularity.ts +61 -0
  842. package/src/client/extensions/iframe-bridge.ts +377 -0
  843. package/src/client/extensions/index.ts +84 -0
  844. package/src/client/extensions/portable-extension.ts +712 -0
  845. package/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
  846. package/src/client/feature-flags/helpers.ts +77 -0
  847. package/src/client/feature-flags/index.ts +13 -0
  848. package/src/client/feature-flags/types.ts +29 -0
  849. package/src/client/feature-flags/use-feature-flag.ts +26 -0
  850. package/src/client/feedback-context.ts +90 -0
  851. package/src/client/frame-protocol.ts +168 -0
  852. package/src/client/frame.ts +329 -0
  853. package/src/client/guided-questions.tsx +1152 -0
  854. package/src/client/history/VersionHistoryPanel.tsx +175 -0
  855. package/src/client/history/index.ts +21 -0
  856. package/src/client/history/use-history.ts +114 -0
  857. package/src/client/hooks/index.ts +46 -0
  858. package/src/client/host/index.ts +170 -0
  859. package/src/client/host-bridge.ts +1272 -0
  860. package/src/client/host-tools.ts +190 -0
  861. package/src/client/i18n.tsx +798 -0
  862. package/src/client/index.ts +370 -0
  863. package/src/client/integrations/IntegrationCard.tsx +186 -0
  864. package/src/client/integrations/IntegrationsPanel.tsx +633 -0
  865. package/src/client/integrations/api.ts +295 -0
  866. package/src/client/integrations/index.ts +29 -0
  867. package/src/client/integrations/useIntegrationStatus.ts +52 -0
  868. package/src/client/mcp-app-host.ts +720 -0
  869. package/src/client/mcp-apps/McpAppRenderer.tsx +760 -0
  870. package/src/client/navigation/index.ts +54 -0
  871. package/src/client/notifications/NotificationsBell.tsx +383 -0
  872. package/src/client/notifications/index.ts +1 -0
  873. package/src/client/observability/ObservabilityDashboard.tsx +890 -0
  874. package/src/client/observability/ThumbsFeedback.tsx +160 -0
  875. package/src/client/observability/index.ts +20 -0
  876. package/src/client/observability/useObservability.ts +266 -0
  877. package/src/client/onboarding/OnboardingBanner.tsx +73 -0
  878. package/src/client/onboarding/OnboardingPanel.tsx +1036 -0
  879. package/src/client/onboarding/SetupButton.tsx +64 -0
  880. package/src/client/onboarding/index.ts +25 -0
  881. package/src/client/onboarding/use-onboarding.ts +164 -0
  882. package/src/client/onboarding/use-preview-mode.ts +40 -0
  883. package/src/client/org/InvitationBanner.tsx +148 -0
  884. package/src/client/org/OrgSwitcher.tsx +754 -0
  885. package/src/client/org/RequireActiveOrg.tsx +337 -0
  886. package/src/client/org/TeamPage.tsx +1432 -0
  887. package/src/client/org/hooks.ts +359 -0
  888. package/src/client/org/index.ts +70 -0
  889. package/src/client/org/workspace-app-links.ts +367 -0
  890. package/src/client/org-team/index.ts +1 -0
  891. package/src/client/progress/RunsTray.tsx +680 -0
  892. package/src/client/progress/index.ts +1 -0
  893. package/src/client/require-session.tsx +142 -0
  894. package/src/client/resources/BuiltinCapabilityDetail.tsx +258 -0
  895. package/src/client/resources/McpConnectionSuggestion.tsx +276 -0
  896. package/src/client/resources/McpIntegrationDialog.tsx +808 -0
  897. package/src/client/resources/McpServerDetail.tsx +230 -0
  898. package/src/client/resources/ResourceEditor.tsx +872 -0
  899. package/src/client/resources/ResourceTree.tsx +860 -0
  900. package/src/client/resources/ResourcesPanel.tsx +1960 -0
  901. package/src/client/resources/index.ts +25 -0
  902. package/src/client/resources/mcp-integration-catalog.ts +771 -0
  903. package/src/client/resources/mcp-integration-logos.ts +108 -0
  904. package/src/client/resources/runtime.ts +1 -0
  905. package/src/client/resources/use-builtin-capabilities.ts +113 -0
  906. package/src/client/resources/use-mcp-servers.ts +217 -0
  907. package/src/client/resources/use-resources.ts +402 -0
  908. package/src/client/review/ReviewCommentComposer.tsx +123 -0
  909. package/src/client/review/ReviewStatusBadge.tsx +39 -0
  910. package/src/client/review/ReviewThreadPanel.tsx +625 -0
  911. package/src/client/review/index.ts +38 -0
  912. package/src/client/review/use-review.ts +186 -0
  913. package/src/client/route-chunk-recovery/index.ts +2 -0
  914. package/src/client/route-chunk-recovery.ts +331 -0
  915. package/src/client/route-state.ts +455 -0
  916. package/src/client/route-warmup.tsx +543 -0
  917. package/src/client/session-replay-iframe.e2e-host.tsx +100 -0
  918. package/src/client/session-replay.ts +3417 -0
  919. package/src/client/settings/AgentsSection.tsx +441 -0
  920. package/src/client/settings/AutomationsSection.tsx +516 -0
  921. package/src/client/settings/BackgroundAgentSection.tsx +189 -0
  922. package/src/client/settings/BrowserSection.tsx +110 -0
  923. package/src/client/settings/DemoModeSection.tsx +48 -0
  924. package/src/client/settings/SecretsSection.tsx +875 -0
  925. package/src/client/settings/SettingsPanel.tsx +3162 -0
  926. package/src/client/settings/SettingsSection.tsx +283 -0
  927. package/src/client/settings/SettingsTabsPage.tsx +592 -0
  928. package/src/client/settings/UsageSection.tsx +401 -0
  929. package/src/client/settings/VoiceTranscriptionSection.tsx +960 -0
  930. package/src/client/settings/agent-settings-search.ts +220 -0
  931. package/src/client/settings/index.ts +27 -0
  932. package/src/client/settings/useBuilderStatus.ts +1055 -0
  933. package/src/client/setup-connections/BuilderConnectCard.tsx +89 -0
  934. package/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  935. package/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  936. package/src/client/setup-connections/catalog.ts +6 -0
  937. package/src/client/setup-connections/index.ts +47 -0
  938. package/src/client/setup-connections/runtime.ts +1 -0
  939. package/src/client/sharing/ShareButton.tsx +1748 -0
  940. package/src/client/sharing/ShareDialog.tsx +846 -0
  941. package/src/client/sharing/VisibilityBadge.tsx +4 -0
  942. package/src/client/sharing/index.ts +2 -0
  943. package/src/client/sse-event-processor.ts +2002 -0
  944. package/src/client/terminal/AgentTerminal.tsx +488 -0
  945. package/src/client/terminal/index.ts +7 -0
  946. package/src/client/theme.ts +27 -0
  947. package/src/client/tombstone/agent-presence-chip.ts +17 -0
  948. package/src/client/tombstone/editor.ts +265 -0
  949. package/src/client/tombstone/live-cursor-overlay.ts +21 -0
  950. package/src/client/tombstone/presence-bar.ts +17 -0
  951. package/src/client/tombstone/recent-edit-highlights.ts +17 -0
  952. package/src/client/tombstone/remote-selection-rings.ts +21 -0
  953. package/src/client/tombstone/rich-markdown-editor.ts +265 -0
  954. package/src/client/tombstone/ui-dialog.ts +49 -0
  955. package/src/client/tombstone/ui-dropdown-menu.ts +69 -0
  956. package/src/client/tombstone/ui-hover-card.ts +21 -0
  957. package/src/client/tombstone/ui-popover.ts +25 -0
  958. package/src/client/tombstone/ui-sheet.ts +49 -0
  959. package/src/client/tombstone/ui-tooltip.ts +29 -0
  960. package/src/client/tombstone/visual-style-controls.ts +61 -0
  961. package/src/client/tool-cells/BashCell.tsx +164 -0
  962. package/src/client/tool-cells/EditCell.tsx +303 -0
  963. package/src/client/tool-cells/FilesChangedSummary.tsx +208 -0
  964. package/src/client/tool-cells/WriteCell.tsx +145 -0
  965. package/src/client/tool-cells/index.ts +7 -0
  966. package/src/client/tool-display.ts +41 -0
  967. package/src/client/track.ts +57 -0
  968. package/src/client/transcription/BuilderTranscriptionCta.tsx +120 -0
  969. package/src/client/transcription/use-live-transcription.ts +292 -0
  970. package/src/client/ui/index.ts +55 -0
  971. package/src/client/uploads/index.ts +6 -0
  972. package/src/client/uploads/upload-editor-image.ts +79 -0
  973. package/src/client/uploads/use-upload-resource.ts +24 -0
  974. package/src/client/url-scrub.ts +51 -0
  975. package/src/client/use-action.ts +797 -0
  976. package/src/client/use-agent-chat-context.ts +63 -0
  977. package/src/client/use-agent-chat-home-handoff.ts +207 -0
  978. package/src/client/use-agent-chat.ts +53 -0
  979. package/src/client/use-agent-engine-configured.ts +211 -0
  980. package/src/client/use-avatar.ts +127 -0
  981. package/src/client/use-change-version.ts +150 -0
  982. package/src/client/use-chat-models.ts +252 -0
  983. package/src/client/use-chat-threads.ts +1262 -0
  984. package/src/client/use-db-sync.ts +1112 -0
  985. package/src/client/use-demo-mode-status.ts +30 -0
  986. package/src/client/use-dev-mode.ts +177 -0
  987. package/src/client/use-external-value.ts +40 -0
  988. package/src/client/use-pausing-interval.ts +65 -0
  989. package/src/client/use-pinch-zoom.ts +202 -0
  990. package/src/client/use-run-stuck-detection.ts +427 -0
  991. package/src/client/use-send-to-agent-chat.ts +85 -0
  992. package/src/client/use-session.ts +114 -0
  993. package/src/client/utils.ts +7 -0
  994. package/src/client/visual-style-controls.tsx +1 -0
  995. package/src/client/vite-dev-recovery-script.ts +226 -0
  996. package/src/client/voice-provider-status.ts +44 -0
  997. package/src/client/widgets/index.ts +41 -0
  998. package/src/code-agents/background-controller.ts +398 -0
  999. package/src/code-agents/background-run.ts +156 -0
  1000. package/src/code-agents/index.ts +95 -0
  1001. package/src/code-agents/prompt-attachments.ts +39 -0
  1002. package/src/code-agents/transcript-normalizer.ts +750 -0
  1003. package/src/code-agents/transcript-order.ts +73 -0
  1004. package/src/coding-tools/index.ts +742 -0
  1005. package/src/coding-tools/run-code.ts +1662 -0
  1006. package/src/coding-tools/sandbox/adapter.ts +82 -0
  1007. package/src/coding-tools/sandbox/background.ts +406 -0
  1008. package/src/coding-tools/sandbox/executions-store.ts +517 -0
  1009. package/src/coding-tools/sandbox/index.ts +132 -0
  1010. package/src/coding-tools/sandbox/local-child-process-adapter.ts +217 -0
  1011. package/src/collab/agent-identity.ts +5 -0
  1012. package/src/collab/agent-presence.ts +341 -0
  1013. package/src/collab/awareness-store.ts +196 -0
  1014. package/src/collab/awareness.ts +317 -0
  1015. package/src/collab/client-struct.ts +366 -0
  1016. package/src/collab/client.ts +1205 -0
  1017. package/src/collab/emitter.ts +31 -0
  1018. package/src/collab/follow-mode.ts +107 -0
  1019. package/src/collab/index.ts +151 -0
  1020. package/src/collab/json-to-yjs.ts +504 -0
  1021. package/src/collab/presence.ts +207 -0
  1022. package/src/collab/recent-edits.ts +215 -0
  1023. package/src/collab/routes.ts +191 -0
  1024. package/src/collab/storage.ts +228 -0
  1025. package/src/collab/struct-routes.ts +133 -0
  1026. package/src/collab/text-to-yjs.ts +79 -0
  1027. package/src/collab/undo.ts +432 -0
  1028. package/src/collab/xml-ops.ts +68 -0
  1029. package/src/collab/ydoc-manager.ts +544 -0
  1030. package/src/command-navigation/actions.ts +100 -0
  1031. package/src/command-navigation/index.ts +12 -0
  1032. package/src/comments-review/index.ts +1 -0
  1033. package/src/connections/catalog.ts +451 -0
  1034. package/src/connections/index.ts +48 -0
  1035. package/src/connections/reader.ts +911 -0
  1036. package/src/connections/runtime.ts +1 -0
  1037. package/src/credentials/index.ts +187 -0
  1038. package/src/data-programs/actions.ts +335 -0
  1039. package/src/data-programs/contract.ts +284 -0
  1040. package/src/data-programs/execute.ts +693 -0
  1041. package/src/data-programs/index.ts +72 -0
  1042. package/src/data-programs/schema.ts +148 -0
  1043. package/src/data-programs/store.ts +755 -0
  1044. package/src/data-widgets/index.ts +376 -0
  1045. package/src/db/client.ts +1627 -0
  1046. package/src/db/create-get-db.ts +579 -0
  1047. package/src/db/ddl-guard.ts +302 -0
  1048. package/src/db/drizzle-config.ts +190 -0
  1049. package/src/db/ensure-additive-columns.ts +430 -0
  1050. package/src/db/index.ts +57 -0
  1051. package/src/db/migrations.ts +691 -0
  1052. package/src/db/request-telemetry.ts +154 -0
  1053. package/src/db/runtime-diagnostics.ts +331 -0
  1054. package/src/db/schema.ts +121 -0
  1055. package/src/db/widen-columns.ts +75 -0
  1056. package/src/db-admin/agent-tools.ts +202 -0
  1057. package/src/db-admin/index.ts +26 -0
  1058. package/src/db-admin/operations.ts +803 -0
  1059. package/src/db-admin/routes.ts +174 -0
  1060. package/src/db-admin/types.ts +110 -0
  1061. package/src/demo/browser-state.ts +47 -0
  1062. package/src/demo/fetch-interceptor.ts +175 -0
  1063. package/src/demo/redact.ts +575 -0
  1064. package/src/deploy/build.ts +3938 -0
  1065. package/src/deploy/immutable-assets.ts +65 -0
  1066. package/src/deploy/route-discovery.ts +458 -0
  1067. package/src/deploy/workspace-core.ts +282 -0
  1068. package/src/deploy/workspace-deploy.ts +1488 -0
  1069. package/src/eject/provider-api-definitions.ts +193 -0
  1070. package/src/eject/remote-mcp-presets.ts +137 -0
  1071. package/src/eject/setup-readiness-ui.tsx +29 -0
  1072. package/src/eject/workspace-connections.ts +92 -0
  1073. package/src/embedding/agent.ts +159 -0
  1074. package/src/embedding/bridge.ts +297 -0
  1075. package/src/embedding/index.ts +43 -0
  1076. package/src/embedding/protocol.ts +185 -0
  1077. package/src/embedding/react.tsx +319 -0
  1078. package/src/embeddings/index.ts +233 -0
  1079. package/src/eval/agent-runner.ts +210 -0
  1080. package/src/eval/define-eval.ts +55 -0
  1081. package/src/eval/index.ts +49 -0
  1082. package/src/eval/report.ts +75 -0
  1083. package/src/eval/runner.ts +369 -0
  1084. package/src/eval/scorer.ts +244 -0
  1085. package/src/eval/types.ts +188 -0
  1086. package/src/event-bus/bus.ts +140 -0
  1087. package/src/event-bus/index.ts +3 -0
  1088. package/src/event-bus/registry.ts +79 -0
  1089. package/src/event-bus/types.ts +29 -0
  1090. package/src/extensions/actions.ts +1636 -0
  1091. package/src/extensions/change-marker.ts +54 -0
  1092. package/src/extensions/content-patch.ts +468 -0
  1093. package/src/extensions/fetch-tool.ts +461 -0
  1094. package/src/extensions/html-shell.ts +803 -0
  1095. package/src/extensions/local.ts +462 -0
  1096. package/src/extensions/path.ts +40 -0
  1097. package/src/extensions/proxy-security.ts +171 -0
  1098. package/src/extensions/routes.ts +1080 -0
  1099. package/src/extensions/schema.ts +269 -0
  1100. package/src/extensions/session-replay-iframe.ts +131 -0
  1101. package/src/extensions/slots/routes.ts +126 -0
  1102. package/src/extensions/slots/schema.ts +87 -0
  1103. package/src/extensions/slots/store.ts +450 -0
  1104. package/src/extensions/store.ts +1347 -0
  1105. package/src/extensions/theme.ts +114 -0
  1106. package/src/extensions/url-safety.ts +316 -0
  1107. package/src/extensions/web-content.ts +663 -0
  1108. package/src/extensions/web-search-tool.ts +437 -0
  1109. package/src/feature-flags/a2a-action-route.ts +56 -0
  1110. package/src/feature-flags/actions/get-feature-flags.ts +24 -0
  1111. package/src/feature-flags/actions/list-feature-flags.ts +69 -0
  1112. package/src/feature-flags/actions/set-feature-flag.ts +89 -0
  1113. package/src/feature-flags/index.ts +21 -0
  1114. package/src/feature-flags/permissions.ts +53 -0
  1115. package/src/feature-flags/plugin.ts +44 -0
  1116. package/src/feature-flags/registry.ts +96 -0
  1117. package/src/feature-flags/store.ts +176 -0
  1118. package/src/file-upload/actions/upload-image.ts +213 -0
  1119. package/src/file-upload/builder.ts +431 -0
  1120. package/src/file-upload/index.ts +24 -0
  1121. package/src/file-upload/pre-upload-attachments.ts +305 -0
  1122. package/src/file-upload/registry.ts +125 -0
  1123. package/src/file-upload/types.ts +89 -0
  1124. package/src/guards/db-tool-scoping.ts +129 -0
  1125. package/src/guards/index.ts +23 -0
  1126. package/src/guards/no-drizzle-push.ts +116 -0
  1127. package/src/guards/no-env-credentials.ts +229 -0
  1128. package/src/guards/no-env-mutation.ts +114 -0
  1129. package/src/guards/no-localhost-fallback.ts +124 -0
  1130. package/src/guards/no-unscoped-credentials.ts +227 -0
  1131. package/src/guards/no-unscoped-queries.ts +834 -0
  1132. package/src/guards/scan-utils.ts +105 -0
  1133. package/src/guards/types.ts +30 -0
  1134. package/src/history/actions/create-resource-version.ts +92 -0
  1135. package/src/history/actions/get-resource-version.ts +60 -0
  1136. package/src/history/actions/list-resource-history.ts +53 -0
  1137. package/src/history/actions/list-resource-versions.ts +43 -0
  1138. package/src/history/actions/restore-resource-version.ts +96 -0
  1139. package/src/history/index.ts +26 -0
  1140. package/src/history/registry.ts +111 -0
  1141. package/src/history/store.ts +379 -0
  1142. package/src/history/types.ts +69 -0
  1143. package/src/index.browser.ts +155 -0
  1144. package/src/index.ts +408 -0
  1145. package/src/ingestion/docx.ts +158 -0
  1146. package/src/ingestion/figma-node-to-html.ts +1860 -0
  1147. package/src/ingestion/figma.ts +548 -0
  1148. package/src/ingestion/index.ts +107 -0
  1149. package/src/ingestion/media.ts +264 -0
  1150. package/src/ingestion/notion.ts +121 -0
  1151. package/src/ingestion/office.ts +213 -0
  1152. package/src/ingestion/orchestration.ts +160 -0
  1153. package/src/ingestion/pptx.ts +331 -0
  1154. package/src/ingestion/selection.ts +81 -0
  1155. package/src/ingestion/website.ts +151 -0
  1156. package/src/integrations/a2a-continuation-marker.ts +2 -0
  1157. package/src/integrations/a2a-continuation-processor.ts +888 -0
  1158. package/src/integrations/a2a-continuations-store.ts +643 -0
  1159. package/src/integrations/adapter-overrides.ts +12 -0
  1160. package/src/integrations/adapters/discord.ts +364 -0
  1161. package/src/integrations/adapters/email.ts +1164 -0
  1162. package/src/integrations/adapters/google-docs.ts +371 -0
  1163. package/src/integrations/adapters/index.ts +29 -0
  1164. package/src/integrations/adapters/microsoft-teams.ts +413 -0
  1165. package/src/integrations/adapters/slack.ts +1914 -0
  1166. package/src/integrations/adapters/telegram.ts +386 -0
  1167. package/src/integrations/adapters/whatsapp.ts +358 -0
  1168. package/src/integrations/awaiting-input-store.ts +130 -0
  1169. package/src/integrations/catalog.ts +571 -0
  1170. package/src/integrations/computer-supervision-store.ts +423 -0
  1171. package/src/integrations/computer-supervision.ts +213 -0
  1172. package/src/integrations/config-store.ts +131 -0
  1173. package/src/integrations/controls-store.ts +187 -0
  1174. package/src/integrations/eject/messaging-adapters.ts +85 -0
  1175. package/src/integrations/google-docs-poller.ts +671 -0
  1176. package/src/integrations/identity-links-store.ts +210 -0
  1177. package/src/integrations/identity.ts +196 -0
  1178. package/src/integrations/index.ts +220 -0
  1179. package/src/integrations/installations-store.ts +677 -0
  1180. package/src/integrations/integration-memory.ts +187 -0
  1181. package/src/integrations/internal-token.ts +106 -0
  1182. package/src/integrations/pending-tasks-retry-job.ts +286 -0
  1183. package/src/integrations/pending-tasks-store.ts +468 -0
  1184. package/src/integrations/plugin.ts +3048 -0
  1185. package/src/integrations/remote-commands-store.ts +690 -0
  1186. package/src/integrations/remote-devices-store.ts +492 -0
  1187. package/src/integrations/remote-json-safety.ts +127 -0
  1188. package/src/integrations/remote-push-delivery-job.ts +48 -0
  1189. package/src/integrations/remote-push-delivery.ts +370 -0
  1190. package/src/integrations/remote-push-store.ts +664 -0
  1191. package/src/integrations/remote-retry-job.ts +55 -0
  1192. package/src/integrations/remote-run-events-store.ts +222 -0
  1193. package/src/integrations/remote-types.ts +186 -0
  1194. package/src/integrations/runtime.ts +1 -0
  1195. package/src/integrations/scope-store.ts +498 -0
  1196. package/src/integrations/slack-manifest.ts +78 -0
  1197. package/src/integrations/slack-oauth.ts +344 -0
  1198. package/src/integrations/task-queue-stats.ts +144 -0
  1199. package/src/integrations/thread-mapping-store.ts +134 -0
  1200. package/src/integrations/types.ts +485 -0
  1201. package/src/integrations/usage-budget-store.ts +906 -0
  1202. package/src/integrations/webhook-delivery.ts +55 -0
  1203. package/src/integrations/webhook-handler.ts +1939 -0
  1204. package/src/jobs/actions/list-recurring-jobs.ts +105 -0
  1205. package/src/jobs/actions/manage-recurring-job.ts +85 -0
  1206. package/src/jobs/cron.ts +126 -0
  1207. package/src/jobs/index.ts +9 -0
  1208. package/src/jobs/scheduler.ts +703 -0
  1209. package/src/jobs/tools.ts +367 -0
  1210. package/src/local-artifacts/index.ts +1372 -0
  1211. package/src/localization/actions/get-localization-preference.ts +24 -0
  1212. package/src/localization/actions/set-localization-preference.ts +32 -0
  1213. package/src/localization/default-messages.ts +1009 -0
  1214. package/src/localization/index.ts +2 -0
  1215. package/src/localization/server.ts +131 -0
  1216. package/src/localization/shared.ts +208 -0
  1217. package/src/mcp/actions/call-mcp-tool.ts +19 -0
  1218. package/src/mcp/actions/create-org-service-token.ts +87 -0
  1219. package/src/mcp/actions/list-mcp-tools.ts +18 -0
  1220. package/src/mcp/actions/list-org-service-tokens.ts +44 -0
  1221. package/src/mcp/actions/revoke-org-service-token.ts +30 -0
  1222. package/src/mcp/actions/service-token-access.ts +121 -0
  1223. package/src/mcp/ask-app-inline-tasks.ts +125 -0
  1224. package/src/mcp/build-server.ts +2356 -0
  1225. package/src/mcp/builtin-tools.ts +1506 -0
  1226. package/src/mcp/connect-route.ts +1460 -0
  1227. package/src/mcp/connect-store.ts +680 -0
  1228. package/src/mcp/embed-app.ts +2051 -0
  1229. package/src/mcp/embed-route.ts +84 -0
  1230. package/src/mcp/external-agent-policy.ts +18 -0
  1231. package/src/mcp/index.ts +47 -0
  1232. package/src/mcp/oauth-route.ts +1016 -0
  1233. package/src/mcp/oauth-store.ts +581 -0
  1234. package/src/mcp/oauth-token.ts +227 -0
  1235. package/src/mcp/org-directory.ts +343 -0
  1236. package/src/mcp/route-paths.ts +34 -0
  1237. package/src/mcp/screen-memory-stdio.ts +290 -0
  1238. package/src/mcp/server.ts +507 -0
  1239. package/src/mcp/stdio.ts +328 -0
  1240. package/src/mcp/workspace-resolve.ts +261 -0
  1241. package/src/mcp-client/app-api.ts +136 -0
  1242. package/src/mcp-client/app-result.ts +64 -0
  1243. package/src/mcp-client/builtin-capabilities.ts +146 -0
  1244. package/src/mcp-client/builtin-store.ts +93 -0
  1245. package/src/mcp-client/config.ts +281 -0
  1246. package/src/mcp-client/errors.ts +54 -0
  1247. package/src/mcp-client/hub-client.ts +172 -0
  1248. package/src/mcp-client/hub-routes.ts +198 -0
  1249. package/src/mcp-client/index.ts +504 -0
  1250. package/src/mcp-client/manager.ts +968 -0
  1251. package/src/mcp-client/oauth-client.ts +462 -0
  1252. package/src/mcp-client/oauth-routes.ts +307 -0
  1253. package/src/mcp-client/remote-store.ts +674 -0
  1254. package/src/mcp-client/remote-url.ts +97 -0
  1255. package/src/mcp-client/routes.ts +1093 -0
  1256. package/src/mcp-client/screen-memory-local.ts +461 -0
  1257. package/src/mcp-client/tool-policy.ts +182 -0
  1258. package/src/mcp-client/visibility.ts +56 -0
  1259. package/src/mcp-client/workspace-servers.ts +379 -0
  1260. package/src/navigation/index.ts +170 -0
  1261. package/src/notifications/actions.ts +151 -0
  1262. package/src/notifications/channels.ts +410 -0
  1263. package/src/notifications/index.ts +22 -0
  1264. package/src/notifications/registry.ts +216 -0
  1265. package/src/notifications/routes.ts +106 -0
  1266. package/src/notifications/store.ts +236 -0
  1267. package/src/notifications/types.ts +52 -0
  1268. package/src/oauth-tokens/google-refresh.ts +175 -0
  1269. package/src/oauth-tokens/index.ts +15 -0
  1270. package/src/oauth-tokens/store.ts +384 -0
  1271. package/src/observability/cleanup-job.ts +124 -0
  1272. package/src/observability/evals.ts +507 -0
  1273. package/src/observability/experiments.ts +359 -0
  1274. package/src/observability/feedback.ts +332 -0
  1275. package/src/observability/hosted-model-experiment.ts +118 -0
  1276. package/src/observability/index.ts +62 -0
  1277. package/src/observability/plugin.ts +31 -0
  1278. package/src/observability/routes.ts +431 -0
  1279. package/src/observability/sentiment.ts +261 -0
  1280. package/src/observability/store.ts +1347 -0
  1281. package/src/observability/traces.ts +789 -0
  1282. package/src/observability/tracing.ts +157 -0
  1283. package/src/observability/tracking-identity.ts +55 -0
  1284. package/src/observability/types.ts +211 -0
  1285. package/src/onboarding/default-steps.ts +428 -0
  1286. package/src/onboarding/index.ts +22 -0
  1287. package/src/onboarding/plugin.ts +262 -0
  1288. package/src/onboarding/registry.ts +47 -0
  1289. package/src/onboarding/types.ts +96 -0
  1290. package/src/org/accept-pending.ts +98 -0
  1291. package/src/org/auto-join-domain.ts +113 -0
  1292. package/src/org/context.ts +640 -0
  1293. package/src/org/free-email-providers.ts +124 -0
  1294. package/src/org/handlers.ts +1153 -0
  1295. package/src/org/index.ts +63 -0
  1296. package/src/org/migrations.ts +105 -0
  1297. package/src/org/permissions.ts +30 -0
  1298. package/src/org/plugin.ts +255 -0
  1299. package/src/org/schema.ts +28 -0
  1300. package/src/org/types.ts +57 -0
  1301. package/src/org-team/index.ts +1 -0
  1302. package/src/package-lifecycle/deprecated-imports.ts +179 -0
  1303. package/src/package-lifecycle/eject-manifest.ts +345 -0
  1304. package/src/package-lifecycle/index.ts +7 -0
  1305. package/src/package-lifecycle/manifest.ts +120 -0
  1306. package/src/package-lifecycle/migration-manifest.ts +159 -0
  1307. package/src/package-lifecycle/migration-message.ts +6 -0
  1308. package/src/package-lifecycle/tombstone.ts +58 -0
  1309. package/src/package-lifecycle/upgrade-error.ts +37 -0
  1310. package/src/private-blob/index.ts +18 -0
  1311. package/src/private-blob/registry.ts +242 -0
  1312. package/src/private-blob/types.ts +55 -0
  1313. package/src/progress/actions.ts +179 -0
  1314. package/src/progress/index.ts +16 -0
  1315. package/src/progress/registry.ts +127 -0
  1316. package/src/progress/routes.ts +89 -0
  1317. package/src/progress/store.ts +353 -0
  1318. package/src/progress/types.ts +59 -0
  1319. package/src/provider-api/actions/custom-provider-registration.ts +197 -0
  1320. package/src/provider-api/actions/delete-staged-dataset.ts +5 -0
  1321. package/src/provider-api/actions/github-repo-files.ts +266 -0
  1322. package/src/provider-api/actions/list-staged-datasets.ts +5 -0
  1323. package/src/provider-api/actions/provider-api-audit.ts +88 -0
  1324. package/src/provider-api/actions/provider-api.ts +460 -0
  1325. package/src/provider-api/actions/query-staged-dataset.ts +5 -0
  1326. package/src/provider-api/actions/staged-datasets.ts +359 -0
  1327. package/src/provider-api/corpus-jobs-store.ts +522 -0
  1328. package/src/provider-api/corpus-jobs.ts +1817 -0
  1329. package/src/provider-api/custom-registry.ts +456 -0
  1330. package/src/provider-api/github-repo.ts +675 -0
  1331. package/src/provider-api/gong.ts +108 -0
  1332. package/src/provider-api/index.ts +5444 -0
  1333. package/src/provider-api/quota-governor.ts +562 -0
  1334. package/src/provider-api/runtime.ts +1 -0
  1335. package/src/provider-api/staged-datasets-aggregate.ts +304 -0
  1336. package/src/provider-api/staged-datasets-store.ts +441 -0
  1337. package/src/provider-api/staging.ts +483 -0
  1338. package/src/resources/agents.ts +65 -0
  1339. package/src/resources/emitter.ts +54 -0
  1340. package/src/resources/handlers.ts +728 -0
  1341. package/src/resources/index.ts +4 -0
  1342. package/src/resources/metadata.ts +252 -0
  1343. package/src/resources/script-helpers.ts +160 -0
  1344. package/src/resources/store.ts +1618 -0
  1345. package/src/review/actions/consume-review-feedback.ts +48 -0
  1346. package/src/review/actions/create-review-comment.ts +108 -0
  1347. package/src/review/actions/delete-review-comment.ts +67 -0
  1348. package/src/review/actions/get-review-feedback.ts +49 -0
  1349. package/src/review/actions/list-review-comments.ts +87 -0
  1350. package/src/review/actions/reply-review-comment.ts +118 -0
  1351. package/src/review/actions/resolve-review-thread.ts +94 -0
  1352. package/src/review/actions/send-review-thread-to-agent.ts +62 -0
  1353. package/src/review/actions/set-review-status.ts +58 -0
  1354. package/src/review/identity.ts +101 -0
  1355. package/src/review/index.ts +45 -0
  1356. package/src/review/mentions.ts +44 -0
  1357. package/src/review/registry.ts +111 -0
  1358. package/src/review/store.ts +997 -0
  1359. package/src/review/types.ts +101 -0
  1360. package/src/router/index.ts +24 -0
  1361. package/src/scripts/agent-engines/list-agent-engines.ts +130 -0
  1362. package/src/scripts/agent-engines/manage-agent-engine.ts +197 -0
  1363. package/src/scripts/agent-engines/set-agent-engine.ts +84 -0
  1364. package/src/scripts/agent-engines/test-agent-engine.ts +174 -0
  1365. package/src/scripts/call-agent.ts +792 -0
  1366. package/src/scripts/chat/index.ts +8 -0
  1367. package/src/scripts/chat/open-chat.ts +56 -0
  1368. package/src/scripts/chat/search-chats.ts +121 -0
  1369. package/src/scripts/core-scripts.ts +22 -0
  1370. package/src/scripts/db/check-scoping.ts +212 -0
  1371. package/src/scripts/db/exec.ts +791 -0
  1372. package/src/scripts/db/index.ts +19 -0
  1373. package/src/scripts/db/migrate-encrypt-credentials.ts +223 -0
  1374. package/src/scripts/db/migrate-encrypt-oauth-tokens.ts +213 -0
  1375. package/src/scripts/db/migrate-user-api-keys.ts +257 -0
  1376. package/src/scripts/db/patch.ts +820 -0
  1377. package/src/scripts/db/query.ts +299 -0
  1378. package/src/scripts/db/reset-dev-owner.ts +285 -0
  1379. package/src/scripts/db/safety.ts +286 -0
  1380. package/src/scripts/db/schema.ts +364 -0
  1381. package/src/scripts/db/scoping.ts +341 -0
  1382. package/src/scripts/db/sqlite-client.ts +78 -0
  1383. package/src/scripts/db/tool-mode.ts +23 -0
  1384. package/src/scripts/db/tool-schemas.ts +31 -0
  1385. package/src/scripts/db/wipe-leaked-builder-keys.ts +201 -0
  1386. package/src/scripts/dev/index.ts +296 -0
  1387. package/src/scripts/dev/list-files.ts +119 -0
  1388. package/src/scripts/dev/read-file.ts +77 -0
  1389. package/src/scripts/dev/search-files.ts +151 -0
  1390. package/src/scripts/dev/shell.ts +111 -0
  1391. package/src/scripts/dev/write-file.ts +56 -0
  1392. package/src/scripts/dev-session.ts +96 -0
  1393. package/src/scripts/docs/index.ts +8 -0
  1394. package/src/scripts/docs/search.ts +274 -0
  1395. package/src/scripts/docs/source-search.ts +363 -0
  1396. package/src/scripts/index.ts +15 -0
  1397. package/src/scripts/manage-agent-loop-settings.ts +84 -0
  1398. package/src/scripts/parse-args.ts +46 -0
  1399. package/src/scripts/resources/delete-memory.ts +67 -0
  1400. package/src/scripts/resources/delete.ts +69 -0
  1401. package/src/scripts/resources/effective.ts +71 -0
  1402. package/src/scripts/resources/index.ts +18 -0
  1403. package/src/scripts/resources/list.ts +103 -0
  1404. package/src/scripts/resources/migrate-learnings.ts +40 -0
  1405. package/src/scripts/resources/read.ts +107 -0
  1406. package/src/scripts/resources/save-memory.ts +99 -0
  1407. package/src/scripts/resources/write.ts +158 -0
  1408. package/src/scripts/runner.ts +339 -0
  1409. package/src/scripts/utils.ts +130 -0
  1410. package/src/search/index.ts +413 -0
  1411. package/src/search-utils/index.ts +112 -0
  1412. package/src/secrets/crypto.ts +228 -0
  1413. package/src/secrets/index.ts +65 -0
  1414. package/src/secrets/onboarding.ts +101 -0
  1415. package/src/secrets/register-framework-secrets.ts +228 -0
  1416. package/src/secrets/register.ts +129 -0
  1417. package/src/secrets/routes.ts +697 -0
  1418. package/src/secrets/schema.ts +52 -0
  1419. package/src/secrets/storage.ts +561 -0
  1420. package/src/secrets/substitution.ts +305 -0
  1421. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +150 -0
  1422. package/src/server/action-change.ts +66 -0
  1423. package/src/server/action-discovery.ts +774 -0
  1424. package/src/server/action-routes.ts +658 -0
  1425. package/src/server/agent-access.ts +72 -0
  1426. package/src/server/agent-chat/action-filters-a2a.ts +339 -0
  1427. package/src/server/agent-chat/browser-team-tools.ts +510 -0
  1428. package/src/server/agent-chat/context-tools.ts +599 -0
  1429. package/src/server/agent-chat/framework-prompts.ts +467 -0
  1430. package/src/server/agent-chat/lazy-fs.ts +11 -0
  1431. package/src/server/agent-chat/mcp-glue.ts +91 -0
  1432. package/src/server/agent-chat/plugin-options.ts +379 -0
  1433. package/src/server/agent-chat/process-run-failure.ts +62 -0
  1434. package/src/server/agent-chat/prompt-resources.ts +1004 -0
  1435. package/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
  1436. package/src/server/agent-chat/request-surface.ts +71 -0
  1437. package/src/server/agent-chat/run-code-tools.ts +67 -0
  1438. package/src/server/agent-chat/script-entries.ts +796 -0
  1439. package/src/server/agent-chat/shared-thread.ts +301 -0
  1440. package/src/server/agent-chat/skill-frontmatter.ts +41 -0
  1441. package/src/server/agent-chat-plugin.ts +5930 -0
  1442. package/src/server/agent-discovery.ts +706 -0
  1443. package/src/server/agent-engine-api-key-route.ts +236 -0
  1444. package/src/server/agent-run-context.ts +204 -0
  1445. package/src/server/agent-teams-run-queue.ts +344 -0
  1446. package/src/server/agent-teams.ts +2257 -0
  1447. package/src/server/agents-bundle.ts +464 -0
  1448. package/src/server/analytics.ts +105 -0
  1449. package/src/server/app-base-path.ts +79 -0
  1450. package/src/server/app-name.ts +53 -0
  1451. package/src/server/app-url.ts +184 -0
  1452. package/src/server/attachment-actions.ts +276 -0
  1453. package/src/server/attribution.ts +214 -0
  1454. package/src/server/auth-marketing.ts +260 -0
  1455. package/src/server/auth-plugin.ts +32 -0
  1456. package/src/server/auth.ts +3803 -0
  1457. package/src/server/better-auth-instance.ts +1201 -0
  1458. package/src/server/builder-browser.ts +1701 -0
  1459. package/src/server/builder-design-systems.ts +668 -0
  1460. package/src/server/builder-space.ts +176 -0
  1461. package/src/server/captcha.ts +63 -0
  1462. package/src/server/capture-error.ts +64 -0
  1463. package/src/server/cli-capture.ts +141 -0
  1464. package/src/server/collab-plugin.ts +391 -0
  1465. package/src/server/complete-text.ts +231 -0
  1466. package/src/server/cookie-namespace.ts +159 -0
  1467. package/src/server/core-routes-plugin.ts +4122 -0
  1468. package/src/server/cors-origins.ts +60 -0
  1469. package/src/server/create-server.ts +268 -0
  1470. package/src/server/credential-provider.ts +1202 -0
  1471. package/src/server/csrf.ts +229 -0
  1472. package/src/server/date-utils.ts +42 -0
  1473. package/src/server/deep-link.ts +119 -0
  1474. package/src/server/derived-secret.ts +32 -0
  1475. package/src/server/design-token-utils.ts +1032 -0
  1476. package/src/server/desktop-sso.ts +83 -0
  1477. package/src/server/edge.ts +69 -0
  1478. package/src/server/email-actions.ts +218 -0
  1479. package/src/server/email-template.ts +192 -0
  1480. package/src/server/email-templates.ts +148 -0
  1481. package/src/server/email.ts +219 -0
  1482. package/src/server/embed-route.ts +283 -0
  1483. package/src/server/embed-session.ts +805 -0
  1484. package/src/server/embedded.ts +252 -0
  1485. package/src/server/entry-server.tsx +154 -0
  1486. package/src/server/framework-request-handler.ts +848 -0
  1487. package/src/server/fusion-app.ts +447 -0
  1488. package/src/server/google-auth-mode.ts +34 -0
  1489. package/src/server/google-auth-plugin.ts +496 -0
  1490. package/src/server/google-oauth-credentials.ts +128 -0
  1491. package/src/server/google-oauth.ts +972 -0
  1492. package/src/server/google-realtime-session.ts +182 -0
  1493. package/src/server/h3-helpers.ts +174 -0
  1494. package/src/server/http-response-telemetry.ts +396 -0
  1495. package/src/server/identity-sso-store.ts +304 -0
  1496. package/src/server/identity-sso.ts +514 -0
  1497. package/src/server/index.ts +593 -0
  1498. package/src/server/missing-key.ts +36 -0
  1499. package/src/server/oauth-helpers.ts +44 -0
  1500. package/src/server/oauth-public-origin.ts +44 -0
  1501. package/src/server/oauth-return-url.ts +120 -0
  1502. package/src/server/og-fonts-data.ts +15 -0
  1503. package/src/server/og-fonts.ts +75 -0
  1504. package/src/server/onboarding-html.ts +4040 -0
  1505. package/src/server/open-route.ts +311 -0
  1506. package/src/server/org-admin.ts +28 -0
  1507. package/src/server/poll-events.ts +88 -0
  1508. package/src/server/poll.ts +1224 -0
  1509. package/src/server/prompts/framework-core-compact.ts +107 -0
  1510. package/src/server/prompts/framework-core.ts +143 -0
  1511. package/src/server/prompts/index.ts +16 -0
  1512. package/src/server/prompts/model-overlays.ts +54 -0
  1513. package/src/server/prompts/shared-rules.ts +104 -0
  1514. package/src/server/realtime-voice.ts +967 -0
  1515. package/src/server/recap-image-route.ts +242 -0
  1516. package/src/server/recap-image-store.ts +185 -0
  1517. package/src/server/request-context.ts +416 -0
  1518. package/src/server/request-origin.ts +67 -0
  1519. package/src/server/resources-plugin.ts +119 -0
  1520. package/src/server/schema-prompt.ts +429 -0
  1521. package/src/server/scoped-key-storage.ts +223 -0
  1522. package/src/server/security-headers.ts +170 -0
  1523. package/src/server/self-dispatch.ts +224 -0
  1524. package/src/server/sentry-config.ts +73 -0
  1525. package/src/server/sentry-plugin.ts +138 -0
  1526. package/src/server/sentry.ts +444 -0
  1527. package/src/server/short-lived-token.ts +170 -0
  1528. package/src/server/social-og-image.ts +454 -0
  1529. package/src/server/sse.ts +102 -0
  1530. package/src/server/ssr-handler.ts +466 -0
  1531. package/src/server/transcribe-voice.ts +1076 -0
  1532. package/src/server/voice-providers-status.ts +118 -0
  1533. package/src/server/workspace-oauth.ts +31 -0
  1534. package/src/server/workspace-provider-oauth.ts +970 -0
  1535. package/src/session-replay-iframe-protocol.ts +58 -0
  1536. package/src/settings/handlers.ts +44 -0
  1537. package/src/settings/index.ts +34 -0
  1538. package/src/settings/org-settings.ts +83 -0
  1539. package/src/settings/script-helpers.ts +24 -0
  1540. package/src/settings/store.ts +247 -0
  1541. package/src/settings/user-settings.ts +47 -0
  1542. package/src/setup-connections/index.ts +90 -0
  1543. package/src/setup-connections/onboarding.ts +47 -0
  1544. package/src/shared/agent-access.ts +112 -0
  1545. package/src/shared/agent-chat.ts +124 -0
  1546. package/src/shared/agent-env.ts +46 -0
  1547. package/src/shared/agent-readable-resource.ts +111 -0
  1548. package/src/shared/agent-sidebar-url.ts +39 -0
  1549. package/src/shared/cache-control.ts +25 -0
  1550. package/src/shared/cloudflare-globals.d.ts +34 -0
  1551. package/src/shared/context-xray.ts +172 -0
  1552. package/src/shared/embed-auth.ts +6 -0
  1553. package/src/shared/index.ts +83 -0
  1554. package/src/shared/llm-connection.ts +42 -0
  1555. package/src/shared/markdown-block-split.ts +129 -0
  1556. package/src/shared/mcp-connect-content.ts +130 -0
  1557. package/src/shared/mcp-embed-headers.ts +175 -0
  1558. package/src/shared/mcp-integration-config.ts +101 -0
  1559. package/src/shared/merge-by-id.ts +14 -0
  1560. package/src/shared/oauth-state.ts +39 -0
  1561. package/src/shared/reasoning-effort.ts +228 -0
  1562. package/src/shared/route-warmup-config.ts +128 -0
  1563. package/src/shared/runtime.ts +31 -0
  1564. package/src/shared/social-meta.ts +82 -0
  1565. package/src/shared/streaming-text-smoothing.ts +184 -0
  1566. package/src/shared/truncate.ts +13 -0
  1567. package/src/shared/workspace-app-audience.ts +177 -0
  1568. package/src/shared/workspace-app-id.ts +54 -0
  1569. package/src/sharing/access.ts +585 -0
  1570. package/src/sharing/actions/create-agent-resource-link.ts +91 -0
  1571. package/src/sharing/actions/extension-change.ts +22 -0
  1572. package/src/sharing/actions/list-resource-shares.ts +93 -0
  1573. package/src/sharing/actions/set-resource-visibility.ts +91 -0
  1574. package/src/sharing/actions/share-resource.ts +322 -0
  1575. package/src/sharing/actions/unshare-resource.ts +72 -0
  1576. package/src/sharing/index.ts +35 -0
  1577. package/src/sharing/registry.ts +201 -0
  1578. package/src/sharing/schema.ts +99 -0
  1579. package/src/styles/agent-conversation.css +766 -0
  1580. package/src/styles/agent-native.css +938 -0
  1581. package/src/styles/blocks.css +1717 -0
  1582. package/src/styles/chat-history-list.css +1 -0
  1583. package/src/styles/rich-markdown-editor.css +1 -0
  1584. package/src/tailwind.preset.ts +140 -0
  1585. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1586. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1587. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1588. package/src/templates/chat/AGENTS.md +3 -2
  1589. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1590. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1591. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1592. package/src/templates/default/AGENTS.md +6 -5
  1593. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1594. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1595. package/src/templates/headless/AGENTS.md +5 -4
  1596. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +15 -13
  1597. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +3 -2
  1598. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +63 -20
  1599. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +9 -6
  1600. package/src/templates/workspace-core/AGENTS.md +4 -4
  1601. package/src/templates/workspace-root/AGENTS.md +4 -4
  1602. package/src/terminal/cli-registry.ts +57 -0
  1603. package/src/terminal/index.ts +22 -0
  1604. package/src/terminal/pty-server.ts +389 -0
  1605. package/src/terminal/terminal-plugin.ts +265 -0
  1606. package/src/testing.ts +23 -0
  1607. package/src/tracking/index.ts +10 -0
  1608. package/src/tracking/providers.ts +422 -0
  1609. package/src/tracking/registry.ts +102 -0
  1610. package/src/tracking/route.ts +108 -0
  1611. package/src/tracking/types.ts +16 -0
  1612. package/src/transcription/builder-transcription.ts +118 -0
  1613. package/src/triggers/actions/list-automations.ts +99 -0
  1614. package/src/triggers/actions/manage-automation.ts +78 -0
  1615. package/src/triggers/actions.ts +333 -0
  1616. package/src/triggers/condition-evaluator.ts +163 -0
  1617. package/src/triggers/dispatcher.ts +536 -0
  1618. package/src/triggers/index.ts +13 -0
  1619. package/src/triggers/routes.ts +322 -0
  1620. package/src/triggers/types.ts +42 -0
  1621. package/src/types/pglite.d.ts +26 -0
  1622. package/src/usage/store.ts +698 -0
  1623. package/src/vite/action-types-plugin.ts +481 -0
  1624. package/src/vite/agent-web-plugin.ts +78 -0
  1625. package/src/vite/agents-bundle-plugin.ts +185 -0
  1626. package/src/vite/client.ts +3056 -0
  1627. package/src/vite/index.ts +21 -0
  1628. package/src/voice/index.ts +18 -0
  1629. package/src/voice/voice-cleanup-prompt.ts +38 -0
  1630. package/src/voice/voice-context.ts +217 -0
  1631. package/src/voice/voice-replacements.ts +75 -0
  1632. package/src/workspace-connections/credentials.ts +603 -0
  1633. package/src/workspace-connections/index.ts +72 -0
  1634. package/src/workspace-connections/lifecycle.ts +43 -0
  1635. package/src/workspace-connections/store.ts +1943 -0
  1636. package/src/workspace-files/index.ts +18 -0
  1637. package/src/workspace-files/store.ts +339 -0
  1638. package/src/workspace-files/tool.ts +266 -0
@@ -0,0 +1,1347 @@
1
+ /**
2
+ * SQL persistence for the agent observability system.
3
+ *
4
+ * Creates and manages tables for traces, feedback, evals, experiments,
5
+ * and satisfaction scores. Follows the same raw-SQL pattern as
6
+ * run-store.ts and usage/store.ts — framework tables use getDbExec()
7
+ * rather than Drizzle ORM (which is for template-level schemas).
8
+ */
9
+ import {
10
+ getDbExec,
11
+ intType,
12
+ isPostgres,
13
+ retryOnDdlRace,
14
+ } from "../db/client.js";
15
+ import {
16
+ ensureTableExists,
17
+ ensureColumnExists,
18
+ ensureIndexExists,
19
+ } from "../db/ddl-guard.js";
20
+ import { isDuplicateColumnError } from "../db/migrations.js";
21
+ import type {
22
+ TraceSpan,
23
+ TraceSummary,
24
+ FeedbackEntry,
25
+ SatisfactionScore,
26
+ EvalResult,
27
+ EvalDataset,
28
+ Experiment,
29
+ ExperimentAssignment,
30
+ ExperimentMetricResult,
31
+ } from "./types.js";
32
+
33
+ function safeJsonParse<T>(value: unknown, fallback: T): T {
34
+ if (!value) return fallback;
35
+ try {
36
+ return JSON.parse(String(value));
37
+ } catch {
38
+ return fallback;
39
+ }
40
+ }
41
+
42
+ // Tables whose rows are owned by an end user — drives the boot-time
43
+ // user_id ALTER loop and the per-user composite indexes below. Every
44
+ // new user-owned observability table must be added here so the upgrade
45
+ // path and the per-user query plan stay in sync.
46
+ const USER_SCOPED_TABLES = [
47
+ "agent_trace_spans",
48
+ "agent_trace_summaries",
49
+ "agent_satisfaction_scores",
50
+ "agent_evals",
51
+ "agent_feedback",
52
+ ] as const;
53
+
54
+ /**
55
+ * Append an `AND user_id = ?` clause when a userId filter is requested.
56
+ * Returns the fully-bound WHERE clause + args ready to splice into the
57
+ * caller's SQL. Centralizes the pattern so tests can assert one shape.
58
+ */
59
+ function withUserFilter(
60
+ baseWhere: string,
61
+ baseArgs: any[],
62
+ userId: string | undefined,
63
+ ): { where: string; args: any[] } {
64
+ if (userId == null) return { where: baseWhere, args: baseArgs };
65
+ return {
66
+ where: `${baseWhere} AND user_id = ?`,
67
+ args: [...baseArgs, userId],
68
+ };
69
+ }
70
+
71
+ let _initPromise: Promise<void> | undefined;
72
+
73
+ export async function ensureObservabilityTables(): Promise<void> {
74
+ if (!_initPromise) {
75
+ _initPromise = (async () => {
76
+ const client = getDbExec();
77
+
78
+ const traceSpansCreateSql = `
79
+ CREATE TABLE IF NOT EXISTS agent_trace_spans (
80
+ id TEXT PRIMARY KEY,
81
+ run_id TEXT NOT NULL,
82
+ thread_id TEXT,
83
+ user_id TEXT,
84
+ parent_span_id TEXT,
85
+ span_type TEXT NOT NULL,
86
+ name TEXT NOT NULL,
87
+ input_tokens ${intType()} NOT NULL DEFAULT 0,
88
+ output_tokens ${intType()} NOT NULL DEFAULT 0,
89
+ cache_read_tokens ${intType()} NOT NULL DEFAULT 0,
90
+ cache_write_tokens ${intType()} NOT NULL DEFAULT 0,
91
+ cost_cents_x100 ${intType()} NOT NULL DEFAULT 0,
92
+ duration_ms ${intType()} NOT NULL DEFAULT 0,
93
+ status TEXT NOT NULL DEFAULT 'success',
94
+ error_message TEXT,
95
+ metadata TEXT,
96
+ created_at ${intType()} NOT NULL
97
+ )
98
+ `;
99
+
100
+ const traceSummariesCreateSql = `
101
+ CREATE TABLE IF NOT EXISTS agent_trace_summaries (
102
+ run_id TEXT PRIMARY KEY,
103
+ thread_id TEXT,
104
+ user_id TEXT,
105
+ total_spans ${intType()} NOT NULL DEFAULT 0,
106
+ llm_calls ${intType()} NOT NULL DEFAULT 0,
107
+ tool_calls ${intType()} NOT NULL DEFAULT 0,
108
+ successful_tools ${intType()} NOT NULL DEFAULT 0,
109
+ failed_tools ${intType()} NOT NULL DEFAULT 0,
110
+ total_duration_ms ${intType()} NOT NULL DEFAULT 0,
111
+ total_cost_cents_x100 ${intType()} NOT NULL DEFAULT 0,
112
+ total_input_tokens ${intType()} NOT NULL DEFAULT 0,
113
+ total_output_tokens ${intType()} NOT NULL DEFAULT 0,
114
+ model TEXT NOT NULL DEFAULT '',
115
+ created_at ${intType()} NOT NULL
116
+ )
117
+ `;
118
+
119
+ const feedbackCreateSql = `
120
+ CREATE TABLE IF NOT EXISTS agent_feedback (
121
+ id TEXT PRIMARY KEY,
122
+ run_id TEXT,
123
+ thread_id TEXT,
124
+ message_seq ${intType()},
125
+ feedback_type TEXT NOT NULL,
126
+ value TEXT NOT NULL DEFAULT '',
127
+ user_id TEXT,
128
+ created_at ${intType()} NOT NULL
129
+ )
130
+ `;
131
+
132
+ const satisfactionScoresCreateSql = `
133
+ CREATE TABLE IF NOT EXISTS agent_satisfaction_scores (
134
+ id TEXT PRIMARY KEY,
135
+ thread_id TEXT NOT NULL,
136
+ user_id TEXT,
137
+ frustration_score REAL NOT NULL DEFAULT 0,
138
+ rephrasing_score REAL NOT NULL DEFAULT 0,
139
+ abandonment_score REAL NOT NULL DEFAULT 0,
140
+ sentiment_score REAL NOT NULL DEFAULT 0,
141
+ length_trend_score REAL NOT NULL DEFAULT 0,
142
+ computed_at ${intType()} NOT NULL
143
+ )
144
+ `;
145
+
146
+ const evalsCreateSql = `
147
+ CREATE TABLE IF NOT EXISTS agent_evals (
148
+ id TEXT PRIMARY KEY,
149
+ run_id TEXT NOT NULL,
150
+ thread_id TEXT,
151
+ user_id TEXT,
152
+ eval_type TEXT NOT NULL,
153
+ criteria TEXT NOT NULL,
154
+ score REAL NOT NULL DEFAULT 0,
155
+ reasoning TEXT,
156
+ metadata TEXT,
157
+ created_at ${intType()} NOT NULL
158
+ )
159
+ `;
160
+
161
+ const evalDatasetsCreateSql = `
162
+ CREATE TABLE IF NOT EXISTS agent_eval_datasets (
163
+ id TEXT PRIMARY KEY,
164
+ name TEXT NOT NULL,
165
+ description TEXT NOT NULL DEFAULT '',
166
+ entries TEXT NOT NULL DEFAULT '[]',
167
+ created_at ${intType()} NOT NULL,
168
+ updated_at ${intType()} NOT NULL
169
+ )
170
+ `;
171
+
172
+ const experimentsCreateSql = `
173
+ CREATE TABLE IF NOT EXISTS agent_experiments (
174
+ id TEXT PRIMARY KEY,
175
+ name TEXT NOT NULL,
176
+ status TEXT NOT NULL DEFAULT 'draft',
177
+ variants TEXT NOT NULL DEFAULT '[]',
178
+ metrics TEXT NOT NULL DEFAULT '[]',
179
+ assignment_level TEXT NOT NULL DEFAULT 'user',
180
+ started_at ${intType()},
181
+ ended_at ${intType()},
182
+ created_at ${intType()} NOT NULL,
183
+ owner_email TEXT
184
+ )
185
+ `;
186
+
187
+ const experimentAssignmentsCreateSql = `
188
+ CREATE TABLE IF NOT EXISTS agent_experiment_assignments (
189
+ experiment_id TEXT NOT NULL,
190
+ user_id TEXT NOT NULL,
191
+ variant_id TEXT NOT NULL,
192
+ assigned_at ${intType()} NOT NULL,
193
+ PRIMARY KEY (experiment_id, user_id)
194
+ )
195
+ `;
196
+
197
+ const experimentResultsCreateSql = `
198
+ CREATE TABLE IF NOT EXISTS agent_experiment_results (
199
+ id TEXT PRIMARY KEY,
200
+ experiment_id TEXT NOT NULL,
201
+ variant_id TEXT NOT NULL,
202
+ metric TEXT NOT NULL,
203
+ value REAL NOT NULL DEFAULT 0,
204
+ sample_size ${intType()} NOT NULL DEFAULT 0,
205
+ confidence_low REAL NOT NULL DEFAULT 0,
206
+ confidence_high REAL NOT NULL DEFAULT 0,
207
+ computed_at ${intType()} NOT NULL
208
+ )
209
+ `;
210
+
211
+ if (isPostgres()) {
212
+ // PG guard: probe → guarded DDL → re-probe; skips lock on already-migrated path
213
+ await ensureTableExists("agent_trace_spans", traceSpansCreateSql);
214
+ await ensureTableExists(
215
+ "agent_trace_summaries",
216
+ traceSummariesCreateSql,
217
+ );
218
+ await ensureTableExists("agent_feedback", feedbackCreateSql);
219
+ await ensureTableExists(
220
+ "agent_satisfaction_scores",
221
+ satisfactionScoresCreateSql,
222
+ );
223
+ await ensureTableExists("agent_evals", evalsCreateSql);
224
+ await ensureTableExists("agent_eval_datasets", evalDatasetsCreateSql);
225
+ await ensureTableExists("agent_experiments", experimentsCreateSql);
226
+ await ensureTableExists(
227
+ "agent_experiment_assignments",
228
+ experimentAssignmentsCreateSql,
229
+ );
230
+ await ensureTableExists(
231
+ "agent_experiment_results",
232
+ experimentResultsCreateSql,
233
+ );
234
+ await ensureColumnExists(
235
+ "agent_experiments",
236
+ "owner_email",
237
+ `ALTER TABLE agent_experiments ADD COLUMN IF NOT EXISTS owner_email TEXT`,
238
+ );
239
+ for (const table of USER_SCOPED_TABLES) {
240
+ await ensureColumnExists(
241
+ table,
242
+ "user_id",
243
+ `ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS user_id TEXT`,
244
+ );
245
+ }
246
+ await ensureIndexExists(
247
+ "idx_trace_spans_run",
248
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_run ON agent_trace_spans (run_id)`,
249
+ );
250
+ await ensureIndexExists(
251
+ "idx_trace_spans_thread",
252
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_thread ON agent_trace_spans (thread_id)`,
253
+ );
254
+ await ensureIndexExists(
255
+ "idx_trace_spans_created",
256
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_created ON agent_trace_spans (created_at)`,
257
+ );
258
+ await ensureIndexExists(
259
+ "idx_trace_summaries_created",
260
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_created ON agent_trace_summaries (created_at)`,
261
+ );
262
+ await ensureIndexExists(
263
+ "idx_trace_summaries_user",
264
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_user ON agent_trace_summaries (user_id, created_at)`,
265
+ );
266
+ await ensureIndexExists(
267
+ "idx_trace_summaries_thread_user_created",
268
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_thread_user_created ON agent_trace_summaries (thread_id, user_id, created_at)`,
269
+ );
270
+ await ensureIndexExists(
271
+ "idx_trace_spans_user",
272
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_user ON agent_trace_spans (user_id)`,
273
+ );
274
+ await ensureIndexExists(
275
+ "idx_feedback_thread",
276
+ `CREATE INDEX IF NOT EXISTS idx_feedback_thread ON agent_feedback (thread_id)`,
277
+ );
278
+ await ensureIndexExists(
279
+ "idx_feedback_created",
280
+ `CREATE INDEX IF NOT EXISTS idx_feedback_created ON agent_feedback (created_at)`,
281
+ );
282
+ await ensureIndexExists(
283
+ "idx_feedback_user",
284
+ `CREATE INDEX IF NOT EXISTS idx_feedback_user ON agent_feedback (user_id, created_at)`,
285
+ );
286
+ await ensureIndexExists(
287
+ "idx_satisfaction_thread",
288
+ `CREATE INDEX IF NOT EXISTS idx_satisfaction_thread ON agent_satisfaction_scores (thread_id)`,
289
+ );
290
+ await ensureIndexExists(
291
+ "idx_satisfaction_user",
292
+ `CREATE INDEX IF NOT EXISTS idx_satisfaction_user ON agent_satisfaction_scores (user_id, computed_at)`,
293
+ );
294
+ await ensureIndexExists(
295
+ "idx_evals_run",
296
+ `CREATE INDEX IF NOT EXISTS idx_evals_run ON agent_evals (run_id)`,
297
+ );
298
+ await ensureIndexExists(
299
+ "idx_evals_created",
300
+ `CREATE INDEX IF NOT EXISTS idx_evals_created ON agent_evals (created_at)`,
301
+ );
302
+ await ensureIndexExists(
303
+ "idx_evals_user",
304
+ `CREATE INDEX IF NOT EXISTS idx_evals_user ON agent_evals (user_id, created_at)`,
305
+ );
306
+ await ensureIndexExists(
307
+ "idx_experiment_results_exp",
308
+ `CREATE INDEX IF NOT EXISTS idx_experiment_results_exp ON agent_experiment_results (experiment_id)`,
309
+ );
310
+ return;
311
+ }
312
+
313
+ // SQLite (local dev): no lock problem — keep the original behaviour.
314
+ await retryOnDdlRace(() => client.execute(traceSpansCreateSql));
315
+
316
+ await retryOnDdlRace(() => client.execute(traceSummariesCreateSql));
317
+
318
+ await retryOnDdlRace(() => client.execute(feedbackCreateSql));
319
+
320
+ await retryOnDdlRace(() => client.execute(satisfactionScoresCreateSql));
321
+
322
+ await retryOnDdlRace(() => client.execute(evalsCreateSql));
323
+
324
+ await retryOnDdlRace(() => client.execute(evalDatasetsCreateSql));
325
+
326
+ await retryOnDdlRace(() => client.execute(experimentsCreateSql));
327
+
328
+ // Additive migration for DBs created before the owner column shipped
329
+ // (any pre-existing rows have NULL owner — see `updateExperiment` for
330
+ // the migration semantics). Mutations on those rows fall back to the
331
+ // standard authentication gate but cannot enforce per-owner scoping
332
+ // until they're re-saved.
333
+ try {
334
+ await client.execute(
335
+ `ALTER TABLE agent_experiments ADD COLUMN owner_email TEXT`,
336
+ );
337
+ } catch {
338
+ // Column already exists — expected after first run.
339
+ }
340
+
341
+ await retryOnDdlRace(() =>
342
+ client.execute(experimentAssignmentsCreateSql),
343
+ );
344
+
345
+ await retryOnDdlRace(() => client.execute(experimentResultsCreateSql));
346
+
347
+ // Idempotent column upgrades for DBs created before per-user
348
+ // isolation. SQLite has no `ADD COLUMN IF NOT EXISTS`; Postgres
349
+ // surfaces "column ... already exists". `isDuplicateColumnError`
350
+ // (from db/migrations.ts) recognizes both shapes.
351
+ for (const table of USER_SCOPED_TABLES) {
352
+ try {
353
+ await client.execute(`ALTER TABLE ${table} ADD COLUMN user_id TEXT`);
354
+ } catch (err) {
355
+ if (isDuplicateColumnError(err)) continue;
356
+ throw err;
357
+ }
358
+ }
359
+
360
+ // Indexes for common query patterns
361
+ const indexes = [
362
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_run ON agent_trace_spans (run_id)`,
363
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_thread ON agent_trace_spans (thread_id)`,
364
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_created ON agent_trace_spans (created_at)`,
365
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_created ON agent_trace_summaries (created_at)`,
366
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_user ON agent_trace_summaries (user_id, created_at)`,
367
+ `CREATE INDEX IF NOT EXISTS idx_trace_summaries_thread_user_created ON agent_trace_summaries (thread_id, user_id, created_at)`,
368
+ `CREATE INDEX IF NOT EXISTS idx_trace_spans_user ON agent_trace_spans (user_id)`,
369
+ `CREATE INDEX IF NOT EXISTS idx_feedback_thread ON agent_feedback (thread_id)`,
370
+ `CREATE INDEX IF NOT EXISTS idx_feedback_created ON agent_feedback (created_at)`,
371
+ `CREATE INDEX IF NOT EXISTS idx_feedback_user ON agent_feedback (user_id, created_at)`,
372
+ `CREATE INDEX IF NOT EXISTS idx_satisfaction_thread ON agent_satisfaction_scores (thread_id)`,
373
+ `CREATE INDEX IF NOT EXISTS idx_satisfaction_user ON agent_satisfaction_scores (user_id, computed_at)`,
374
+ `CREATE INDEX IF NOT EXISTS idx_evals_run ON agent_evals (run_id)`,
375
+ `CREATE INDEX IF NOT EXISTS idx_evals_created ON agent_evals (created_at)`,
376
+ `CREATE INDEX IF NOT EXISTS idx_evals_user ON agent_evals (user_id, created_at)`,
377
+ `CREATE INDEX IF NOT EXISTS idx_experiment_results_exp ON agent_experiment_results (experiment_id)`,
378
+ ];
379
+ for (const sql of indexes) {
380
+ try {
381
+ await client.execute(sql);
382
+ } catch {
383
+ // Index might already exist
384
+ }
385
+ }
386
+ })().catch((err) => {
387
+ _initPromise = undefined;
388
+ throw err;
389
+ });
390
+ }
391
+ return _initPromise;
392
+ }
393
+
394
+ // ─── Trace span CRUD ─────────────────────────────────────────────────
395
+
396
+ export async function insertTraceSpan(span: TraceSpan): Promise<void> {
397
+ await ensureObservabilityTables();
398
+ const client = getDbExec();
399
+ await client.execute({
400
+ sql: `INSERT INTO agent_trace_spans
401
+ (id, run_id, thread_id, user_id, parent_span_id, span_type, name,
402
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens,
403
+ cost_cents_x100, duration_ms, status, error_message, metadata, created_at)
404
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
405
+ args: [
406
+ span.id,
407
+ span.runId,
408
+ span.threadId,
409
+ span.userId,
410
+ span.parentSpanId,
411
+ span.spanType,
412
+ span.name,
413
+ span.inputTokens,
414
+ span.outputTokens,
415
+ span.cacheReadTokens,
416
+ span.cacheWriteTokens,
417
+ span.costCentsX100,
418
+ span.durationMs,
419
+ span.status,
420
+ span.errorMessage,
421
+ span.metadata ? JSON.stringify(span.metadata) : null,
422
+ span.createdAt,
423
+ ],
424
+ });
425
+ }
426
+
427
+ export async function upsertTraceSummary(summary: TraceSummary): Promise<void> {
428
+ await ensureObservabilityTables();
429
+ const client = getDbExec();
430
+ // user_id is intentionally NOT updated on conflict — once a run's
431
+ // owner is recorded it shouldn't change under us.
432
+ if (isPostgres()) {
433
+ await client.execute({
434
+ sql: `INSERT INTO agent_trace_summaries
435
+ (run_id, thread_id, user_id, total_spans, llm_calls, tool_calls,
436
+ successful_tools, failed_tools, total_duration_ms,
437
+ total_cost_cents_x100, total_input_tokens, total_output_tokens,
438
+ model, created_at)
439
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
440
+ ON CONFLICT (run_id) DO UPDATE SET
441
+ total_spans = EXCLUDED.total_spans,
442
+ llm_calls = EXCLUDED.llm_calls,
443
+ tool_calls = EXCLUDED.tool_calls,
444
+ successful_tools = EXCLUDED.successful_tools,
445
+ failed_tools = EXCLUDED.failed_tools,
446
+ total_duration_ms = EXCLUDED.total_duration_ms,
447
+ total_cost_cents_x100 = EXCLUDED.total_cost_cents_x100,
448
+ total_input_tokens = EXCLUDED.total_input_tokens,
449
+ total_output_tokens = EXCLUDED.total_output_tokens,
450
+ model = EXCLUDED.model`,
451
+ args: [
452
+ summary.runId,
453
+ summary.threadId,
454
+ summary.userId,
455
+ summary.totalSpans,
456
+ summary.llmCalls,
457
+ summary.toolCalls,
458
+ summary.successfulTools,
459
+ summary.failedTools,
460
+ summary.totalDurationMs,
461
+ summary.totalCostCentsX100,
462
+ summary.totalInputTokens,
463
+ summary.totalOutputTokens,
464
+ summary.model,
465
+ summary.createdAt,
466
+ ],
467
+ });
468
+ } else {
469
+ await client.execute({
470
+ sql: `INSERT INTO agent_trace_summaries
471
+ (run_id, thread_id, user_id, total_spans, llm_calls, tool_calls,
472
+ successful_tools, failed_tools, total_duration_ms,
473
+ total_cost_cents_x100, total_input_tokens, total_output_tokens,
474
+ model, created_at)
475
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
476
+ ON CONFLICT (run_id) DO UPDATE SET
477
+ total_spans = EXCLUDED.total_spans,
478
+ llm_calls = EXCLUDED.llm_calls,
479
+ tool_calls = EXCLUDED.tool_calls,
480
+ successful_tools = EXCLUDED.successful_tools,
481
+ failed_tools = EXCLUDED.failed_tools,
482
+ total_duration_ms = EXCLUDED.total_duration_ms,
483
+ total_cost_cents_x100 = EXCLUDED.total_cost_cents_x100,
484
+ total_input_tokens = EXCLUDED.total_input_tokens,
485
+ total_output_tokens = EXCLUDED.total_output_tokens,
486
+ model = EXCLUDED.model`,
487
+ args: [
488
+ summary.runId,
489
+ summary.threadId,
490
+ summary.userId,
491
+ summary.totalSpans,
492
+ summary.llmCalls,
493
+ summary.toolCalls,
494
+ summary.successfulTools,
495
+ summary.failedTools,
496
+ summary.totalDurationMs,
497
+ summary.totalCostCentsX100,
498
+ summary.totalInputTokens,
499
+ summary.totalOutputTokens,
500
+ summary.model,
501
+ summary.createdAt,
502
+ ],
503
+ });
504
+ }
505
+ }
506
+
507
+ /**
508
+ * Purge trace spans, summaries, and eval results older than `cutoffMs`
509
+ * (a Unix epoch in milliseconds — rows with `created_at < cutoffMs` are
510
+ * deleted). Returns the per-table deletion counts. Satisfies the span
511
+ * retention TTL noted in /tmp/security-audit/12-mcp-a2a-agent.md
512
+ * (MEDIUM #14): trace metadata can hold sensitive tool inputs, so we
513
+ * cap the storage horizon. Feedback rows are retained — they're
514
+ * intentionally durable for product analytics. Experiments and
515
+ * datasets are also retained because they are user-authored
516
+ * configuration, not call telemetry.
517
+ */
518
+ export async function deleteOldTraceData(cutoffMs: number): Promise<{
519
+ spans: number;
520
+ summaries: number;
521
+ evals: number;
522
+ }> {
523
+ await ensureObservabilityTables();
524
+ const client = getDbExec();
525
+ const cutoff = Math.floor(cutoffMs);
526
+
527
+ const [spansResult, summariesResult, evalsResult] = await Promise.all([
528
+ client.execute({
529
+ sql: `DELETE FROM agent_trace_spans WHERE created_at < ?`,
530
+ args: [cutoff],
531
+ }),
532
+ client.execute({
533
+ sql: `DELETE FROM agent_trace_summaries WHERE created_at < ?`,
534
+ args: [cutoff],
535
+ }),
536
+ client.execute({
537
+ sql: `DELETE FROM agent_evals WHERE created_at < ?`,
538
+ args: [cutoff],
539
+ }),
540
+ ]);
541
+
542
+ return {
543
+ spans: Number(spansResult.rowsAffected ?? 0),
544
+ summaries: Number(summariesResult.rowsAffected ?? 0),
545
+ evals: Number(evalsResult.rowsAffected ?? 0),
546
+ };
547
+ }
548
+
549
+ export async function getTraceSpansForRun(
550
+ runId: string,
551
+ opts: { userId?: string } = {},
552
+ ): Promise<TraceSpan[]> {
553
+ await ensureObservabilityTables();
554
+ const client = getDbExec();
555
+ const { where, args } = withUserFilter("run_id = ?", [runId], opts.userId);
556
+ const { rows } = await client.execute({
557
+ sql: `SELECT * FROM agent_trace_spans WHERE ${where} ORDER BY created_at ASC`,
558
+ args,
559
+ });
560
+ return (rows as any[]).map(rowToTraceSpan);
561
+ }
562
+
563
+ export async function getTraceSummaries(opts: {
564
+ sinceMs?: number;
565
+ limit?: number;
566
+ userId?: string;
567
+ }): Promise<TraceSummary[]> {
568
+ await ensureObservabilityTables();
569
+ const client = getDbExec();
570
+ const sinceMs = opts.sinceMs ?? 0;
571
+ const limit = opts.limit ?? 100;
572
+ const { where, args } = withUserFilter(
573
+ "created_at >= ?",
574
+ [sinceMs],
575
+ opts.userId,
576
+ );
577
+ const { rows } = await client.execute({
578
+ sql: `SELECT * FROM agent_trace_summaries
579
+ WHERE ${where}
580
+ ORDER BY created_at DESC
581
+ LIMIT ?`,
582
+ args: [...args, limit],
583
+ });
584
+ return (rows as any[]).map(rowToTraceSummary);
585
+ }
586
+
587
+ export async function getTraceSummary(
588
+ runId: string,
589
+ opts: { userId?: string } = {},
590
+ ): Promise<TraceSummary | null> {
591
+ await ensureObservabilityTables();
592
+ const client = getDbExec();
593
+ const { where, args } = withUserFilter("run_id = ?", [runId], opts.userId);
594
+ const { rows } = await client.execute({
595
+ sql: `SELECT * FROM agent_trace_summaries WHERE ${where}`,
596
+ args,
597
+ });
598
+ if (rows.length === 0) return null;
599
+ return rowToTraceSummary(rows[0] as any);
600
+ }
601
+
602
+ /** Latest completed response in a thread, always scoped to its owner. */
603
+ export async function getLatestTraceSummaryForThread(
604
+ threadId: string,
605
+ opts: { userId: string; excludeRunId: string },
606
+ ): Promise<TraceSummary | null> {
607
+ await ensureObservabilityTables();
608
+ const client = getDbExec();
609
+ const { rows } = await client.execute({
610
+ sql: `SELECT * FROM agent_trace_summaries
611
+ WHERE thread_id = ? AND user_id = ? AND run_id <> ?
612
+ ORDER BY created_at DESC
613
+ LIMIT 1`,
614
+ args: [threadId, opts.userId, opts.excludeRunId],
615
+ });
616
+ if (rows.length === 0) return null;
617
+ return rowToTraceSummary(rows[0] as any);
618
+ }
619
+
620
+ // ─── Feedback CRUD ───────────────────────────────────────────────────
621
+
622
+ export async function insertFeedback(entry: FeedbackEntry): Promise<void> {
623
+ await ensureObservabilityTables();
624
+ const client = getDbExec();
625
+ await client.execute({
626
+ sql: `INSERT INTO agent_feedback
627
+ (id, run_id, thread_id, message_seq, feedback_type, value, user_id, created_at)
628
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
629
+ args: [
630
+ entry.id,
631
+ entry.runId,
632
+ entry.threadId,
633
+ entry.messageSeq,
634
+ entry.feedbackType,
635
+ entry.value,
636
+ entry.userId,
637
+ entry.createdAt,
638
+ ],
639
+ });
640
+ }
641
+
642
+ export async function getFeedback(opts: {
643
+ threadId?: string;
644
+ sinceMs?: number;
645
+ limit?: number;
646
+ feedbackType?: string;
647
+ userId?: string;
648
+ }): Promise<FeedbackEntry[]> {
649
+ await ensureObservabilityTables();
650
+ const client = getDbExec();
651
+ const conditions: string[] = [];
652
+ const args: any[] = [];
653
+ if (opts.threadId) {
654
+ conditions.push("thread_id = ?");
655
+ args.push(opts.threadId);
656
+ }
657
+ if (opts.sinceMs) {
658
+ conditions.push("created_at >= ?");
659
+ args.push(opts.sinceMs);
660
+ }
661
+ if (opts.feedbackType) {
662
+ conditions.push("feedback_type = ?");
663
+ args.push(opts.feedbackType);
664
+ }
665
+ if (opts.userId) {
666
+ conditions.push("user_id = ?");
667
+ args.push(opts.userId);
668
+ }
669
+ const where =
670
+ conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
671
+ const limit = opts.limit ?? 100;
672
+ const { rows } = await client.execute({
673
+ sql: `SELECT * FROM agent_feedback ${where} ORDER BY created_at DESC LIMIT ?`,
674
+ args: [...args, limit],
675
+ });
676
+ return (rows as any[]).map(rowToFeedback);
677
+ }
678
+
679
+ export async function getFeedbackStats(
680
+ sinceMs: number,
681
+ opts: { userId?: string } = {},
682
+ ): Promise<{
683
+ total: number;
684
+ thumbsUp: number;
685
+ thumbsDown: number;
686
+ categories: Record<string, number>;
687
+ }> {
688
+ await ensureObservabilityTables();
689
+ const client = getDbExec();
690
+ const { where, args } = withUserFilter(
691
+ "created_at >= ?",
692
+ [sinceMs],
693
+ opts.userId,
694
+ );
695
+ const { rows } = await client.execute({
696
+ sql: `SELECT feedback_type, value, COUNT(*) as cnt
697
+ FROM agent_feedback WHERE ${where}
698
+ GROUP BY feedback_type, value`,
699
+ args,
700
+ });
701
+ let total = 0;
702
+ let thumbsUp = 0;
703
+ let thumbsDown = 0;
704
+ const categories: Record<string, number> = {};
705
+ for (const row of rows as any[]) {
706
+ const cnt = Number(row.cnt);
707
+ total += cnt;
708
+ if (row.feedback_type === "thumbs_up") thumbsUp += cnt;
709
+ else if (row.feedback_type === "thumbs_down") thumbsDown += cnt;
710
+ else if (row.feedback_type === "category")
711
+ categories[String(row.value)] = cnt;
712
+ }
713
+ return { total, thumbsUp, thumbsDown, categories };
714
+ }
715
+
716
+ // ─── Satisfaction scores CRUD ────────────────────────────────────────
717
+
718
+ export async function upsertSatisfactionScore(
719
+ score: SatisfactionScore,
720
+ ): Promise<void> {
721
+ await ensureObservabilityTables();
722
+ const client = getDbExec();
723
+ if (isPostgres()) {
724
+ await client.execute({
725
+ sql: `INSERT INTO agent_satisfaction_scores
726
+ (id, thread_id, user_id, frustration_score, rephrasing_score,
727
+ abandonment_score, sentiment_score, length_trend_score, computed_at)
728
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
729
+ ON CONFLICT (id) DO UPDATE SET
730
+ frustration_score = EXCLUDED.frustration_score,
731
+ rephrasing_score = EXCLUDED.rephrasing_score,
732
+ abandonment_score = EXCLUDED.abandonment_score,
733
+ sentiment_score = EXCLUDED.sentiment_score,
734
+ length_trend_score = EXCLUDED.length_trend_score,
735
+ computed_at = EXCLUDED.computed_at`,
736
+ args: [
737
+ score.id,
738
+ score.threadId,
739
+ score.userId,
740
+ score.frustrationScore,
741
+ score.rephrasingScore,
742
+ score.abandonmentScore,
743
+ score.sentimentScore,
744
+ score.lengthTrendScore,
745
+ score.computedAt,
746
+ ],
747
+ });
748
+ } else {
749
+ await client.execute({
750
+ sql: `INSERT INTO agent_satisfaction_scores
751
+ (id, thread_id, user_id, frustration_score, rephrasing_score,
752
+ abandonment_score, sentiment_score, length_trend_score, computed_at)
753
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
754
+ ON CONFLICT (id) DO UPDATE SET
755
+ frustration_score = EXCLUDED.frustration_score,
756
+ rephrasing_score = EXCLUDED.rephrasing_score,
757
+ abandonment_score = EXCLUDED.abandonment_score,
758
+ sentiment_score = EXCLUDED.sentiment_score,
759
+ length_trend_score = EXCLUDED.length_trend_score,
760
+ computed_at = EXCLUDED.computed_at`,
761
+ args: [
762
+ score.id,
763
+ score.threadId,
764
+ score.userId,
765
+ score.frustrationScore,
766
+ score.rephrasingScore,
767
+ score.abandonmentScore,
768
+ score.sentimentScore,
769
+ score.lengthTrendScore,
770
+ score.computedAt,
771
+ ],
772
+ });
773
+ }
774
+ }
775
+
776
+ export async function getSatisfactionScores(opts: {
777
+ sinceMs?: number;
778
+ limit?: number;
779
+ minFrustration?: number;
780
+ userId?: string;
781
+ }): Promise<SatisfactionScore[]> {
782
+ await ensureObservabilityTables();
783
+ const client = getDbExec();
784
+ const conditions: string[] = [];
785
+ const args: any[] = [];
786
+ if (opts.sinceMs) {
787
+ conditions.push("computed_at >= ?");
788
+ args.push(opts.sinceMs);
789
+ }
790
+ if (opts.minFrustration != null) {
791
+ conditions.push("frustration_score >= ?");
792
+ args.push(opts.minFrustration);
793
+ }
794
+ if (opts.userId) {
795
+ conditions.push("user_id = ?");
796
+ args.push(opts.userId);
797
+ }
798
+ const where =
799
+ conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
800
+ const { rows } = await client.execute({
801
+ sql: `SELECT * FROM agent_satisfaction_scores ${where}
802
+ ORDER BY computed_at DESC LIMIT ?`,
803
+ args: [...args, opts.limit ?? 100],
804
+ });
805
+ return (rows as any[]).map(rowToSatisfaction);
806
+ }
807
+
808
+ // ─── Evals CRUD ──────────────────────────────────────────────────────
809
+
810
+ export async function insertEvalResult(result: EvalResult): Promise<void> {
811
+ await ensureObservabilityTables();
812
+ const client = getDbExec();
813
+ await client.execute({
814
+ sql: `INSERT INTO agent_evals
815
+ (id, run_id, thread_id, user_id, eval_type, criteria, score, reasoning, metadata, created_at)
816
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
817
+ args: [
818
+ result.id,
819
+ result.runId,
820
+ result.threadId,
821
+ result.userId,
822
+ result.evalType,
823
+ result.criteria,
824
+ result.score,
825
+ result.reasoning,
826
+ result.metadata ? JSON.stringify(result.metadata) : null,
827
+ result.createdAt,
828
+ ],
829
+ });
830
+ }
831
+
832
+ export async function getEvalsForRun(
833
+ runId: string,
834
+ opts: { userId?: string } = {},
835
+ ): Promise<EvalResult[]> {
836
+ await ensureObservabilityTables();
837
+ const client = getDbExec();
838
+ const { where, args } = withUserFilter("run_id = ?", [runId], opts.userId);
839
+ const { rows } = await client.execute({
840
+ sql: `SELECT * FROM agent_evals WHERE ${where} ORDER BY created_at ASC`,
841
+ args,
842
+ });
843
+ return (rows as any[]).map(rowToEval);
844
+ }
845
+
846
+ export async function getEvalStats(
847
+ sinceMs: number,
848
+ opts: { userId?: string } = {},
849
+ ): Promise<{
850
+ totalEvals: number;
851
+ avgScore: number;
852
+ byCriteria: Array<{ criteria: string; avgScore: number; count: number }>;
853
+ }> {
854
+ await ensureObservabilityTables();
855
+ const client = getDbExec();
856
+ const { where, args } = withUserFilter(
857
+ "created_at >= ?",
858
+ [sinceMs],
859
+ opts.userId,
860
+ );
861
+ const { rows: totalRows } = await client.execute({
862
+ sql: `SELECT COUNT(*) as cnt, AVG(score) as avg_score
863
+ FROM agent_evals WHERE ${where}`,
864
+ args,
865
+ });
866
+ const t = (totalRows[0] ?? {}) as Record<string, number | null>;
867
+
868
+ const { rows: criteriaRows } = await client.execute({
869
+ sql: `SELECT criteria, AVG(score) as avg_score, COUNT(*) as cnt
870
+ FROM agent_evals WHERE ${where}
871
+ GROUP BY criteria ORDER BY cnt DESC`,
872
+ args,
873
+ });
874
+
875
+ return {
876
+ totalEvals: Number(t.cnt ?? 0),
877
+ avgScore: Number(t.avg_score ?? 0),
878
+ byCriteria: (criteriaRows as any[]).map((r) => ({
879
+ criteria: String(r.criteria),
880
+ avgScore: Number(r.avg_score ?? 0),
881
+ count: Number(r.cnt ?? 0),
882
+ })),
883
+ };
884
+ }
885
+
886
+ // ─── Eval datasets CRUD ──────────────────────────────────────────────
887
+
888
+ export async function insertEvalDataset(dataset: EvalDataset): Promise<void> {
889
+ await ensureObservabilityTables();
890
+ const client = getDbExec();
891
+ await client.execute({
892
+ sql: `INSERT INTO agent_eval_datasets
893
+ (id, name, description, entries, created_at, updated_at)
894
+ VALUES (?, ?, ?, ?, ?, ?)`,
895
+ args: [
896
+ dataset.id,
897
+ dataset.name,
898
+ dataset.description,
899
+ JSON.stringify(dataset.entries),
900
+ dataset.createdAt,
901
+ dataset.updatedAt,
902
+ ],
903
+ });
904
+ }
905
+
906
+ export async function listEvalDatasets(): Promise<EvalDataset[]> {
907
+ await ensureObservabilityTables();
908
+ const client = getDbExec();
909
+ const { rows } = await client.execute(
910
+ `SELECT * FROM agent_eval_datasets ORDER BY updated_at DESC`,
911
+ );
912
+ return (rows as any[]).map(rowToDataset);
913
+ }
914
+
915
+ export async function getEvalDataset(id: string): Promise<EvalDataset | null> {
916
+ await ensureObservabilityTables();
917
+ const client = getDbExec();
918
+ const { rows } = await client.execute({
919
+ sql: `SELECT * FROM agent_eval_datasets WHERE id = ?`,
920
+ args: [id],
921
+ });
922
+ if (rows.length === 0) return null;
923
+ return rowToDataset(rows[0] as any);
924
+ }
925
+
926
+ export async function updateEvalDataset(
927
+ id: string,
928
+ updates: Partial<Pick<EvalDataset, "name" | "description" | "entries">>,
929
+ ): Promise<void> {
930
+ await ensureObservabilityTables();
931
+ const client = getDbExec();
932
+ const sets: string[] = [];
933
+ const args: any[] = [];
934
+ if (updates.name !== undefined) {
935
+ sets.push("name = ?");
936
+ args.push(updates.name);
937
+ }
938
+ if (updates.description !== undefined) {
939
+ sets.push("description = ?");
940
+ args.push(updates.description);
941
+ }
942
+ if (updates.entries !== undefined) {
943
+ sets.push("entries = ?");
944
+ args.push(JSON.stringify(updates.entries));
945
+ }
946
+ sets.push("updated_at = ?");
947
+ args.push(Date.now());
948
+ args.push(id);
949
+ await client.execute({
950
+ sql: `UPDATE agent_eval_datasets SET ${sets.join(", ")} WHERE id = ?`,
951
+ args,
952
+ });
953
+ }
954
+
955
+ // ─── Experiments CRUD ────────────────────────────────────────────────
956
+
957
+ export async function insertExperiment(exp: Experiment): Promise<void> {
958
+ await ensureObservabilityTables();
959
+ const client = getDbExec();
960
+ await client.execute({
961
+ sql: `INSERT INTO agent_experiments
962
+ (id, name, status, variants, metrics, assignment_level,
963
+ started_at, ended_at, created_at, owner_email)
964
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
965
+ args: [
966
+ exp.id,
967
+ exp.name,
968
+ exp.status,
969
+ JSON.stringify(exp.variants),
970
+ JSON.stringify(exp.metrics),
971
+ exp.assignmentLevel,
972
+ exp.startedAt,
973
+ exp.endedAt,
974
+ exp.createdAt,
975
+ exp.ownerEmail ?? null,
976
+ ],
977
+ });
978
+ }
979
+
980
+ export async function updateExperiment(
981
+ id: string,
982
+ updates: Partial<
983
+ Pick<Experiment, "name" | "status" | "variants" | "metrics" | "endedAt">
984
+ >,
985
+ ): Promise<void> {
986
+ await ensureObservabilityTables();
987
+ const client = getDbExec();
988
+ const sets: string[] = [];
989
+ const args: any[] = [];
990
+ if (updates.name !== undefined) {
991
+ sets.push("name = ?");
992
+ args.push(updates.name);
993
+ }
994
+ if (updates.status !== undefined) {
995
+ sets.push("status = ?");
996
+ args.push(updates.status);
997
+ if (updates.status === "running" && !updates.endedAt) {
998
+ // Preserve the original exposure window when a paused experiment
999
+ // resumes; resetting it would silently discard the first run period from
1000
+ // the results.
1001
+ sets.push("started_at = COALESCE(started_at, ?)");
1002
+ args.push(Date.now());
1003
+ }
1004
+ }
1005
+ if (updates.variants !== undefined) {
1006
+ sets.push("variants = ?");
1007
+ args.push(JSON.stringify(updates.variants));
1008
+ }
1009
+ if (updates.metrics !== undefined) {
1010
+ sets.push("metrics = ?");
1011
+ args.push(JSON.stringify(updates.metrics));
1012
+ }
1013
+ if (updates.endedAt !== undefined) {
1014
+ sets.push("ended_at = ?");
1015
+ args.push(updates.endedAt);
1016
+ }
1017
+ if (sets.length === 0) return;
1018
+ args.push(id);
1019
+ await client.execute({
1020
+ sql: `UPDATE agent_experiments SET ${sets.join(", ")} WHERE id = ?`,
1021
+ args,
1022
+ });
1023
+ }
1024
+
1025
+ export async function listExperiments(): Promise<Experiment[]> {
1026
+ await ensureObservabilityTables();
1027
+ const client = getDbExec();
1028
+ const { rows } = await client.execute(
1029
+ `SELECT * FROM agent_experiments ORDER BY created_at DESC`,
1030
+ );
1031
+ return (rows as any[]).map(rowToExperiment);
1032
+ }
1033
+
1034
+ export async function getExperiment(id: string): Promise<Experiment | null> {
1035
+ await ensureObservabilityTables();
1036
+ const client = getDbExec();
1037
+ const { rows } = await client.execute({
1038
+ sql: `SELECT * FROM agent_experiments WHERE id = ?`,
1039
+ args: [id],
1040
+ });
1041
+ if (rows.length === 0) return null;
1042
+ return rowToExperiment(rows[0] as any);
1043
+ }
1044
+
1045
+ // ─── Experiment assignments CRUD ────────────────────────────────────
1046
+
1047
+ export async function upsertAssignment(
1048
+ assignment: ExperimentAssignment,
1049
+ ): Promise<void> {
1050
+ await ensureObservabilityTables();
1051
+ const client = getDbExec();
1052
+ if (isPostgres()) {
1053
+ await client.execute({
1054
+ sql: `INSERT INTO agent_experiment_assignments
1055
+ (experiment_id, user_id, variant_id, assigned_at)
1056
+ VALUES (?, ?, ?, ?)
1057
+ ON CONFLICT (experiment_id, user_id) DO UPDATE SET
1058
+ variant_id = EXCLUDED.variant_id,
1059
+ assigned_at = EXCLUDED.assigned_at`,
1060
+ args: [
1061
+ assignment.experimentId,
1062
+ assignment.userId,
1063
+ assignment.variantId,
1064
+ assignment.assignedAt,
1065
+ ],
1066
+ });
1067
+ } else {
1068
+ await client.execute({
1069
+ sql: `INSERT OR REPLACE INTO agent_experiment_assignments
1070
+ (experiment_id, user_id, variant_id, assigned_at)
1071
+ VALUES (?, ?, ?, ?)`,
1072
+ args: [
1073
+ assignment.experimentId,
1074
+ assignment.userId,
1075
+ assignment.variantId,
1076
+ assignment.assignedAt,
1077
+ ],
1078
+ });
1079
+ }
1080
+ }
1081
+
1082
+ export async function getAssignment(
1083
+ experimentId: string,
1084
+ userId: string,
1085
+ ): Promise<ExperimentAssignment | null> {
1086
+ await ensureObservabilityTables();
1087
+ const client = getDbExec();
1088
+ const { rows } = await client.execute({
1089
+ sql: `SELECT * FROM agent_experiment_assignments
1090
+ WHERE experiment_id = ? AND user_id = ?`,
1091
+ args: [experimentId, userId],
1092
+ });
1093
+ if (rows.length === 0) return null;
1094
+ const r = rows[0] as any;
1095
+ return {
1096
+ experimentId: r.experiment_id,
1097
+ userId: r.user_id,
1098
+ variantId: r.variant_id,
1099
+ assignedAt: Number(r.assigned_at),
1100
+ };
1101
+ }
1102
+
1103
+ // ─── Experiment results CRUD ─────────────────────────────────────────
1104
+
1105
+ export async function insertExperimentResult(
1106
+ result: ExperimentMetricResult,
1107
+ ): Promise<void> {
1108
+ await ensureObservabilityTables();
1109
+ const client = getDbExec();
1110
+ await client.execute({
1111
+ sql: `INSERT INTO agent_experiment_results
1112
+ (id, experiment_id, variant_id, metric, value,
1113
+ sample_size, confidence_low, confidence_high, computed_at)
1114
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
1115
+ args: [
1116
+ result.id,
1117
+ result.experimentId,
1118
+ result.variantId,
1119
+ result.metric,
1120
+ result.value,
1121
+ result.sampleSize,
1122
+ result.confidenceLow,
1123
+ result.confidenceHigh,
1124
+ result.computedAt,
1125
+ ],
1126
+ });
1127
+ }
1128
+
1129
+ export async function getExperimentResults(
1130
+ experimentId: string,
1131
+ ): Promise<ExperimentMetricResult[]> {
1132
+ await ensureObservabilityTables();
1133
+ const client = getDbExec();
1134
+ const { rows } = await client.execute({
1135
+ sql: `SELECT * FROM agent_experiment_results
1136
+ WHERE experiment_id = ?
1137
+ ORDER BY computed_at DESC`,
1138
+ args: [experimentId],
1139
+ });
1140
+ return (rows as any[]).map(rowToExperimentResult);
1141
+ }
1142
+
1143
+ // ─── Aggregate queries for dashboard ─────────────────────────────────
1144
+
1145
+ export async function getObservabilityOverview(
1146
+ sinceMs: number,
1147
+ opts: { userId?: string } = {},
1148
+ ): Promise<{
1149
+ totalRuns: number;
1150
+ totalCostCents: number;
1151
+ avgDurationMs: number;
1152
+ toolSuccessRate: number;
1153
+ avgFrustrationScore: number;
1154
+ thumbsUpRate: number;
1155
+ avgEvalScore: number;
1156
+ }> {
1157
+ await ensureObservabilityTables();
1158
+ const client = getDbExec();
1159
+
1160
+ // Three of the four sub-queries time-key on `created_at`; satisfaction
1161
+ // uses `computed_at`. Each gets its own `withUserFilter` invocation so
1162
+ // the args array isn't aliased across calls (some drivers mutate args
1163
+ // for prepared-statement caching).
1164
+ const created = withUserFilter("created_at >= ?", [sinceMs], opts.userId);
1165
+ const computed = withUserFilter("computed_at >= ?", [sinceMs], opts.userId);
1166
+
1167
+ const [tracesResult, satisfactionResult, feedbackResult, evalsResult] =
1168
+ await Promise.all([
1169
+ client.execute({
1170
+ sql: `SELECT
1171
+ COUNT(*) as total_runs,
1172
+ COALESCE(SUM(total_cost_cents_x100), 0) as total_cost,
1173
+ COALESCE(AVG(total_duration_ms), 0) as avg_duration,
1174
+ COALESCE(SUM(successful_tools), 0) as success_tools,
1175
+ COALESCE(SUM(tool_calls), 0) as total_tools
1176
+ FROM agent_trace_summaries WHERE ${created.where}`,
1177
+ args: created.args,
1178
+ }),
1179
+ client.execute({
1180
+ sql: `SELECT COALESCE(AVG(frustration_score), 0) as avg_frustration
1181
+ FROM agent_satisfaction_scores WHERE ${computed.where}`,
1182
+ args: computed.args,
1183
+ }),
1184
+ client.execute({
1185
+ sql: `SELECT
1186
+ COALESCE(SUM(CASE WHEN feedback_type = 'thumbs_up' THEN 1 ELSE 0 END), 0) as up,
1187
+ COALESCE(SUM(CASE WHEN feedback_type IN ('thumbs_up', 'thumbs_down') THEN 1 ELSE 0 END), 0) as total
1188
+ FROM agent_feedback WHERE ${created.where}`,
1189
+ args: created.args,
1190
+ }),
1191
+ client.execute({
1192
+ sql: `SELECT COALESCE(AVG(score), 0) as avg_score
1193
+ FROM agent_evals WHERE ${created.where}`,
1194
+ args: created.args,
1195
+ }),
1196
+ ]);
1197
+
1198
+ const t = (tracesResult.rows[0] ?? {}) as Record<string, number | null>;
1199
+ const s = (satisfactionResult.rows[0] ?? {}) as Record<string, number | null>;
1200
+ const f = (feedbackResult.rows[0] ?? {}) as Record<string, number | null>;
1201
+ const e = (evalsResult.rows[0] ?? {}) as Record<string, number | null>;
1202
+
1203
+ const totalTools = Number(t.total_tools ?? 0);
1204
+ const successTools = Number(t.success_tools ?? 0);
1205
+ const feedbackTotal = Number(f.total ?? 0);
1206
+ const feedbackUp = Number(f.up ?? 0);
1207
+
1208
+ return {
1209
+ totalRuns: Number(t.total_runs ?? 0),
1210
+ totalCostCents: Number(t.total_cost ?? 0) / 100,
1211
+ avgDurationMs: Number(t.avg_duration ?? 0),
1212
+ toolSuccessRate: totalTools > 0 ? successTools / totalTools : 1,
1213
+ avgFrustrationScore: Number(s.avg_frustration ?? 0),
1214
+ thumbsUpRate: feedbackTotal > 0 ? feedbackUp / feedbackTotal : 0,
1215
+ avgEvalScore: Number(e.avg_score ?? 0),
1216
+ };
1217
+ }
1218
+
1219
+ // ─── Row mappers ─────────────────────────────────────────────────────
1220
+
1221
+ function rowToTraceSpan(row: Record<string, any>): TraceSpan {
1222
+ return {
1223
+ id: String(row.id),
1224
+ runId: String(row.run_id),
1225
+ threadId: row.thread_id ? String(row.thread_id) : null,
1226
+ userId: row.user_id ? String(row.user_id) : null,
1227
+ parentSpanId: row.parent_span_id ? String(row.parent_span_id) : null,
1228
+ spanType: row.span_type as TraceSpan["spanType"],
1229
+ name: String(row.name),
1230
+ inputTokens: Number(row.input_tokens ?? 0),
1231
+ outputTokens: Number(row.output_tokens ?? 0),
1232
+ cacheReadTokens: Number(row.cache_read_tokens ?? 0),
1233
+ cacheWriteTokens: Number(row.cache_write_tokens ?? 0),
1234
+ costCentsX100: Number(row.cost_cents_x100 ?? 0),
1235
+ durationMs: Number(row.duration_ms ?? 0),
1236
+ status: row.status as TraceSpan["status"],
1237
+ errorMessage: row.error_message ? String(row.error_message) : null,
1238
+ metadata: safeJsonParse(row.metadata, null),
1239
+ createdAt: Number(row.created_at),
1240
+ };
1241
+ }
1242
+
1243
+ function rowToTraceSummary(row: Record<string, any>): TraceSummary {
1244
+ return {
1245
+ runId: String(row.run_id),
1246
+ threadId: row.thread_id ? String(row.thread_id) : null,
1247
+ userId: row.user_id ? String(row.user_id) : null,
1248
+ totalSpans: Number(row.total_spans ?? 0),
1249
+ llmCalls: Number(row.llm_calls ?? 0),
1250
+ toolCalls: Number(row.tool_calls ?? 0),
1251
+ successfulTools: Number(row.successful_tools ?? 0),
1252
+ failedTools: Number(row.failed_tools ?? 0),
1253
+ totalDurationMs: Number(row.total_duration_ms ?? 0),
1254
+ totalCostCentsX100: Number(row.total_cost_cents_x100 ?? 0),
1255
+ totalInputTokens: Number(row.total_input_tokens ?? 0),
1256
+ totalOutputTokens: Number(row.total_output_tokens ?? 0),
1257
+ model: String(row.model ?? ""),
1258
+ createdAt: Number(row.created_at),
1259
+ };
1260
+ }
1261
+
1262
+ function rowToFeedback(row: Record<string, any>): FeedbackEntry {
1263
+ return {
1264
+ id: String(row.id),
1265
+ runId: row.run_id ? String(row.run_id) : null,
1266
+ threadId: row.thread_id ? String(row.thread_id) : null,
1267
+ messageSeq: row.message_seq != null ? Number(row.message_seq) : null,
1268
+ feedbackType: row.feedback_type as FeedbackEntry["feedbackType"],
1269
+ value: String(row.value ?? ""),
1270
+ userId: row.user_id ? String(row.user_id) : null,
1271
+ createdAt: Number(row.created_at),
1272
+ };
1273
+ }
1274
+
1275
+ function rowToSatisfaction(row: Record<string, any>): SatisfactionScore {
1276
+ return {
1277
+ id: String(row.id),
1278
+ threadId: String(row.thread_id),
1279
+ userId: row.user_id ? String(row.user_id) : null,
1280
+ frustrationScore: Number(row.frustration_score ?? 0),
1281
+ rephrasingScore: Number(row.rephrasing_score ?? 0),
1282
+ abandonmentScore: Number(row.abandonment_score ?? 0),
1283
+ sentimentScore: Number(row.sentiment_score ?? 0),
1284
+ lengthTrendScore: Number(row.length_trend_score ?? 0),
1285
+ computedAt: Number(row.computed_at),
1286
+ };
1287
+ }
1288
+
1289
+ function rowToEval(row: Record<string, any>): EvalResult {
1290
+ return {
1291
+ id: String(row.id),
1292
+ runId: String(row.run_id),
1293
+ threadId: row.thread_id ? String(row.thread_id) : null,
1294
+ userId: row.user_id ? String(row.user_id) : null,
1295
+ evalType: row.eval_type as EvalResult["evalType"],
1296
+ criteria: String(row.criteria),
1297
+ score: Number(row.score ?? 0),
1298
+ reasoning: row.reasoning ? String(row.reasoning) : null,
1299
+ metadata: safeJsonParse(row.metadata, null),
1300
+ createdAt: Number(row.created_at),
1301
+ };
1302
+ }
1303
+
1304
+ function rowToDataset(row: Record<string, any>): EvalDataset {
1305
+ return {
1306
+ id: String(row.id),
1307
+ name: String(row.name),
1308
+ description: String(row.description ?? ""),
1309
+ entries: safeJsonParse(row.entries, []),
1310
+ createdAt: Number(row.created_at),
1311
+ updatedAt: Number(row.updated_at),
1312
+ };
1313
+ }
1314
+
1315
+ function rowToExperiment(row: Record<string, any>): Experiment {
1316
+ return {
1317
+ id: String(row.id),
1318
+ name: String(row.name),
1319
+ status: row.status as Experiment["status"],
1320
+ variants: safeJsonParse(row.variants, []),
1321
+ metrics: safeJsonParse(row.metrics, []),
1322
+ assignmentLevel: (row.assignment_level as "user" | "session") ?? "user",
1323
+ startedAt: row.started_at ? Number(row.started_at) : null,
1324
+ endedAt: row.ended_at ? Number(row.ended_at) : null,
1325
+ createdAt: Number(row.created_at),
1326
+ ownerEmail:
1327
+ typeof row.owner_email === "string" && row.owner_email
1328
+ ? row.owner_email
1329
+ : null,
1330
+ };
1331
+ }
1332
+
1333
+ function rowToExperimentResult(
1334
+ row: Record<string, any>,
1335
+ ): ExperimentMetricResult {
1336
+ return {
1337
+ id: String(row.id),
1338
+ experimentId: String(row.experiment_id),
1339
+ variantId: String(row.variant_id),
1340
+ metric: String(row.metric),
1341
+ value: Number(row.value ?? 0),
1342
+ sampleSize: Number(row.sample_size ?? 0),
1343
+ confidenceLow: Number(row.confidence_low ?? 0),
1344
+ confidenceHigh: Number(row.confidence_high ?? 0),
1345
+ computedAt: Number(row.computed_at),
1346
+ };
1347
+ }