@agent-native/core 0.88.0 → 0.90.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/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +82 -2
  3. package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -146
  4. package/corpus/core/docs/content/cloneable-saas.mdx +19 -19
  5. package/corpus/core/docs/content/components.mdx +16 -4
  6. package/corpus/core/docs/content/data-programs.mdx +329 -0
  7. package/corpus/core/docs/content/deployment.mdx +9 -9
  8. package/corpus/core/docs/content/extensions.mdx +8 -7
  9. package/corpus/core/docs/content/generative-ui.mdx +5 -3
  10. package/corpus/core/docs/content/key-concepts.mdx +6 -9
  11. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +100 -70
  12. package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +19 -19
  13. package/corpus/core/docs/content/locales/ar-SA/components.mdx +12 -2
  14. package/corpus/core/docs/content/locales/ar-SA/data-programs.mdx +329 -0
  15. package/corpus/core/docs/content/locales/ar-SA/deployment.mdx +8 -9
  16. package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +6 -4
  17. package/corpus/core/docs/content/locales/ar-SA/key-concepts.mdx +7 -9
  18. package/corpus/core/docs/content/locales/ar-SA/real-time-collaboration.mdx +9 -10
  19. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +100 -74
  20. package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +19 -19
  21. package/corpus/core/docs/content/locales/de-DE/components.mdx +12 -2
  22. package/corpus/core/docs/content/locales/de-DE/data-programs.mdx +329 -0
  23. package/corpus/core/docs/content/locales/de-DE/deployment.mdx +8 -9
  24. package/corpus/core/docs/content/locales/de-DE/extensions.mdx +6 -4
  25. package/corpus/core/docs/content/locales/de-DE/key-concepts.mdx +8 -10
  26. package/corpus/core/docs/content/locales/de-DE/real-time-collaboration.mdx +9 -10
  27. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +100 -74
  28. package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +19 -19
  29. package/corpus/core/docs/content/locales/es-ES/components.mdx +12 -2
  30. package/corpus/core/docs/content/locales/es-ES/data-programs.mdx +329 -0
  31. package/corpus/core/docs/content/locales/es-ES/deployment.mdx +8 -9
  32. package/corpus/core/docs/content/locales/es-ES/extensions.mdx +6 -4
  33. package/corpus/core/docs/content/locales/es-ES/key-concepts.mdx +8 -10
  34. package/corpus/core/docs/content/locales/es-ES/real-time-collaboration.mdx +9 -10
  35. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +100 -76
  36. package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +19 -19
  37. package/corpus/core/docs/content/locales/fr-FR/components.mdx +12 -2
  38. package/corpus/core/docs/content/locales/fr-FR/data-programs.mdx +329 -0
  39. package/corpus/core/docs/content/locales/fr-FR/deployment.mdx +8 -9
  40. package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +6 -4
  41. package/corpus/core/docs/content/locales/fr-FR/key-concepts.mdx +8 -10
  42. package/corpus/core/docs/content/locales/fr-FR/real-time-collaboration.mdx +9 -10
  43. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +100 -71
  44. package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +19 -19
  45. package/corpus/core/docs/content/locales/hi-IN/components.mdx +20 -10
  46. package/corpus/core/docs/content/locales/hi-IN/data-programs.mdx +329 -0
  47. package/corpus/core/docs/content/locales/hi-IN/deployment.mdx +8 -9
  48. package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +6 -4
  49. package/corpus/core/docs/content/locales/hi-IN/key-concepts.mdx +8 -10
  50. package/corpus/core/docs/content/locales/hi-IN/real-time-collaboration.mdx +9 -10
  51. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +100 -64
  52. package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +19 -19
  53. package/corpus/core/docs/content/locales/ja-JP/components.mdx +12 -2
  54. package/corpus/core/docs/content/locales/ja-JP/data-programs.mdx +329 -0
  55. package/corpus/core/docs/content/locales/ja-JP/deployment.mdx +8 -9
  56. package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +6 -4
  57. package/corpus/core/docs/content/locales/ja-JP/key-concepts.mdx +9 -11
  58. package/corpus/core/docs/content/locales/ja-JP/real-time-collaboration.mdx +9 -10
  59. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +100 -60
  60. package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +19 -19
  61. package/corpus/core/docs/content/locales/ko-KR/components.mdx +20 -10
  62. package/corpus/core/docs/content/locales/ko-KR/data-programs.mdx +329 -0
  63. package/corpus/core/docs/content/locales/ko-KR/deployment.mdx +8 -9
  64. package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +16 -14
  65. package/corpus/core/docs/content/locales/ko-KR/key-concepts.mdx +9 -11
  66. package/corpus/core/docs/content/locales/ko-KR/real-time-collaboration.mdx +9 -10
  67. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +100 -74
  68. package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +19 -19
  69. package/corpus/core/docs/content/locales/pt-BR/components.mdx +12 -2
  70. package/corpus/core/docs/content/locales/pt-BR/data-programs.mdx +329 -0
  71. package/corpus/core/docs/content/locales/pt-BR/deployment.mdx +8 -9
  72. package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +6 -4
  73. package/corpus/core/docs/content/locales/pt-BR/key-concepts.mdx +8 -11
  74. package/corpus/core/docs/content/locales/pt-BR/real-time-collaboration.mdx +9 -10
  75. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +100 -58
  76. package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +19 -19
  77. package/corpus/core/docs/content/locales/zh-CN/components.mdx +20 -10
  78. package/corpus/core/docs/content/locales/zh-CN/data-programs.mdx +329 -0
  79. package/corpus/core/docs/content/locales/zh-CN/deployment.mdx +7 -9
  80. package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +16 -14
  81. package/corpus/core/docs/content/locales/zh-CN/key-concepts.mdx +7 -11
  82. package/corpus/core/docs/content/locales/zh-CN/real-time-collaboration.mdx +10 -11
  83. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +100 -58
  84. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +19 -19
  85. package/corpus/core/docs/content/locales/zh-TW/components.mdx +20 -10
  86. package/corpus/core/docs/content/locales/zh-TW/data-programs.mdx +329 -0
  87. package/corpus/core/docs/content/locales/zh-TW/deployment.mdx +7 -9
  88. package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +16 -14
  89. package/corpus/core/docs/content/locales/zh-TW/key-concepts.mdx +7 -11
  90. package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.mdx +10 -11
  91. package/corpus/core/docs/content/real-time-collaboration.mdx +10 -11
  92. package/corpus/core/docs/content/toolkit-app-adapters.mdx +46 -0
  93. package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +48 -0
  94. package/corpus/core/docs/content/toolkit-sharing-ui.mdx +33 -0
  95. package/corpus/core/docs/content/toolkit-shell-hooks.mdx +27 -0
  96. package/corpus/core/docs/content/toolkit-ui.mdx +69 -0
  97. package/corpus/core/package.json +5 -1
  98. package/corpus/core/src/agent/durable-background.ts +53 -0
  99. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +7 -1
  100. package/corpus/core/src/agent/engine/anthropic-engine.ts +29 -1
  101. package/corpus/core/src/agent/engine/builder-engine.ts +1 -0
  102. package/corpus/core/src/agent/engine/output-tokens.ts +26 -13
  103. package/corpus/core/src/agent/engine/registry.ts +45 -26
  104. package/corpus/core/src/agent/engine/translate-ai-sdk.ts +56 -7
  105. package/corpus/core/src/agent/engine/translate-anthropic.ts +43 -1
  106. package/corpus/core/src/agent/engine/types.ts +16 -0
  107. package/corpus/core/src/agent/model-config.ts +100 -0
  108. package/corpus/core/src/agent/production-agent.ts +492 -241
  109. package/corpus/core/src/agent/runtime-context.ts +50 -12
  110. package/corpus/core/src/agent/tool-result-images.ts +178 -0
  111. package/corpus/core/src/brand-kit/fig/index.ts +8 -4
  112. package/corpus/core/src/client/AgentPanel.tsx +88 -31
  113. package/corpus/core/src/client/AssistantChat.tsx +95 -46
  114. package/corpus/core/src/client/KeepTabOpenNotice.tsx +176 -0
  115. package/corpus/core/src/client/MultiTabAssistantChat.tsx +7 -0
  116. package/corpus/core/src/client/RunStuckBanner.tsx +13 -1
  117. package/corpus/core/src/client/chat/run-recovery.tsx +7 -1
  118. package/corpus/core/src/client/clipboard.ts +17 -13
  119. package/corpus/core/src/client/components/AgentPresenceChip.tsx +4 -69
  120. package/corpus/core/src/client/components/LiveCursorOverlay.tsx +5 -240
  121. package/corpus/core/src/client/components/PresenceBar.tsx +4 -346
  122. package/corpus/core/src/client/components/RecentEditHighlights.tsx +4 -219
  123. package/corpus/core/src/client/components/RemoteSelectionRings.tsx +5 -220
  124. package/corpus/core/src/client/composer/TiptapComposer.tsx +94 -38
  125. package/corpus/core/src/client/db-admin/SqlEditor.tsx +13 -3
  126. package/corpus/core/src/client/dynamic-suggestions.ts +6 -1
  127. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +0 -14
  128. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +29 -30
  129. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +2 -1
  130. package/corpus/core/src/client/host-bridge.ts +29 -8
  131. package/corpus/core/src/client/i18n.tsx +7 -1
  132. package/corpus/core/src/client/index.ts +5 -0
  133. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -69
  134. package/corpus/core/src/client/rich-markdown-editor/SharedRichEditor.tsx +4 -0
  135. package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +7 -1
  136. package/corpus/core/src/client/settings/SettingsPanel.tsx +409 -230
  137. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +5 -7
  138. package/corpus/core/src/client/settings/index.ts +5 -1
  139. package/corpus/core/src/client/sharing/VisibilityBadge.tsx +4 -37
  140. package/corpus/core/src/client/use-run-stuck-detection.ts +10 -1
  141. package/corpus/core/src/coding-tools/run-code.ts +473 -74
  142. package/corpus/core/src/coding-tools/sandbox/background.ts +406 -0
  143. package/corpus/core/src/coding-tools/sandbox/executions-store.ts +517 -0
  144. package/corpus/core/src/coding-tools/sandbox/index.ts +53 -13
  145. package/corpus/core/src/coding-tools/sandbox/local-child-process-adapter.ts +61 -4
  146. package/corpus/core/src/collab/client.ts +870 -562
  147. package/corpus/core/src/collab/presence.ts +12 -23
  148. package/corpus/core/src/collab/recent-edits.ts +13 -32
  149. package/corpus/core/src/data-programs/actions.ts +335 -0
  150. package/corpus/core/src/data-programs/contract.ts +284 -0
  151. package/corpus/core/src/data-programs/execute.ts +693 -0
  152. package/corpus/core/src/data-programs/index.ts +72 -0
  153. package/corpus/core/src/data-programs/schema.ts +148 -0
  154. package/corpus/core/src/data-programs/store.ts +755 -0
  155. package/corpus/core/src/deploy/build.ts +34 -0
  156. package/corpus/core/src/extensions/actions.ts +2 -2
  157. package/corpus/core/src/file-upload/builder.ts +11 -0
  158. package/corpus/core/src/integrations/webhook-handler.ts +27 -8
  159. package/corpus/core/src/local-artifacts/index.ts +1 -1
  160. package/corpus/core/src/localization/default-messages.ts +1 -2
  161. package/corpus/core/src/mcp-client/index.ts +29 -0
  162. package/corpus/core/src/onboarding/default-steps.ts +5 -2
  163. package/corpus/core/src/resources/store.ts +34 -3
  164. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +4 -8
  165. package/corpus/core/src/scripts/agent-engines/test-agent-engine.ts +9 -2
  166. package/corpus/core/src/scripts/db/tool-mode.ts +2 -2
  167. package/corpus/core/src/scripts/resources/migrate-learnings.ts +9 -13
  168. package/corpus/core/src/server/agent-chat-plugin.ts +154 -62
  169. package/corpus/core/src/server/agent-discovery.ts +67 -7
  170. package/corpus/core/src/server/auth.ts +90 -3
  171. package/corpus/core/src/server/builder-design-systems.ts +2 -2
  172. package/corpus/core/src/server/core-routes-plugin.ts +119 -22
  173. package/corpus/core/src/server/credential-provider.ts +28 -8
  174. package/corpus/core/src/server/csrf.ts +3 -0
  175. package/corpus/core/src/server/oauth-helpers.ts +11 -1
  176. package/corpus/core/src/server/onboarding-html.ts +80 -48
  177. package/corpus/core/src/server/prompts/shared-rules.ts +2 -2
  178. package/corpus/core/src/server/transcribe-voice.ts +93 -9
  179. package/corpus/core/src/styles/agent-native.css +57 -45
  180. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +55 -0
  181. package/corpus/core/src/templates/default/AGENTS.md +11 -14
  182. package/corpus/core/src/templates/default/actions/navigate.ts +1 -1
  183. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +0 -1
  184. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +0 -1
  185. package/corpus/core/src/templates/default/app/i18n/en-US.ts +0 -1
  186. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +0 -1
  187. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +0 -1
  188. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +0 -1
  189. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +0 -1
  190. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +0 -1
  191. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +0 -1
  192. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +0 -1
  193. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +0 -1
  194. package/corpus/core/src/templates/default/app/routes/settings.tsx +22 -33
  195. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +20 -7
  196. package/corpus/core/src/templates/headless/AGENTS.md +9 -6
  197. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +55 -0
  198. package/corpus/core/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +128 -0
  199. package/corpus/core/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +10 -4
  200. package/corpus/core/src/vite/agents-bundle-plugin.ts +26 -1
  201. package/corpus/core/src/vite/client.ts +12 -0
  202. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +55 -0
  203. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +8 -0
  204. package/corpus/templates/analytics/.agents/skills/data-programs/SKILL.md +348 -0
  205. package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +10 -0
  206. package/corpus/templates/analytics/AGENTS.md +31 -32
  207. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +1 -1
  208. package/corpus/templates/analytics/actions/delete-data-source-credentials.ts +32 -0
  209. package/corpus/templates/analytics/actions/ensure-risk-meeting-dashboard.ts +247 -0
  210. package/corpus/templates/analytics/actions/update-data-source-credentials.ts +123 -0
  211. package/corpus/templates/analytics/app/components/InlineMetric.tsx +2 -2
  212. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +2 -7
  213. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +11 -16
  214. package/corpus/templates/analytics/app/components/dashboard/DateRangePicker.tsx +1 -2
  215. package/corpus/templates/analytics/app/components/dashboard/MetricCard.tsx +2 -7
  216. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +3 -6
  217. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +1 -6
  218. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +2 -7
  219. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +11 -15
  220. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +1 -7
  221. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +2 -7
  222. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +16 -16
  223. package/corpus/templates/analytics/app/components/layout/Header.tsx +2 -2
  224. package/corpus/templates/analytics/app/components/layout/HeaderActions.tsx +2 -1
  225. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -2
  226. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +33 -17
  227. package/corpus/templates/analytics/app/components/layout/NewAnalysisDialog.tsx +6 -6
  228. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +4 -3
  229. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +119 -68
  230. package/corpus/templates/analytics/app/components/ui/alert-dialog.tsx +1 -0
  231. package/corpus/templates/analytics/app/components/ui/alert.tsx +1 -0
  232. package/corpus/templates/analytics/app/components/ui/avatar.tsx +1 -0
  233. package/corpus/templates/analytics/app/components/ui/badge.tsx +1 -0
  234. package/corpus/templates/analytics/app/components/ui/button.tsx +1 -0
  235. package/corpus/templates/analytics/app/components/ui/calendar.tsx +1 -1
  236. package/corpus/templates/analytics/app/components/ui/card.tsx +1 -0
  237. package/corpus/templates/analytics/app/components/ui/checkbox.tsx +1 -0
  238. package/corpus/templates/analytics/app/components/ui/collapsible.tsx +1 -0
  239. package/corpus/templates/analytics/app/components/ui/command.tsx +1 -0
  240. package/corpus/templates/analytics/app/components/ui/date-picker.tsx +1 -0
  241. package/corpus/templates/analytics/app/components/ui/dialog.tsx +1 -0
  242. package/corpus/templates/analytics/app/components/ui/dropdown-menu.tsx +1 -0
  243. package/corpus/templates/analytics/app/components/ui/input.tsx +1 -0
  244. package/corpus/templates/analytics/app/components/ui/label.tsx +1 -0
  245. package/corpus/templates/analytics/app/components/ui/popover.tsx +1 -0
  246. package/corpus/templates/analytics/app/components/ui/progress.tsx +1 -0
  247. package/corpus/templates/analytics/app/components/ui/select.tsx +1 -0
  248. package/corpus/templates/analytics/app/components/ui/sheet.tsx +1 -0
  249. package/corpus/templates/analytics/app/components/ui/skeleton.tsx +1 -0
  250. package/corpus/templates/analytics/app/components/ui/sonner.tsx +1 -0
  251. package/corpus/templates/analytics/app/components/ui/spinner.tsx +1 -0
  252. package/corpus/templates/analytics/app/components/ui/switch.tsx +1 -0
  253. package/corpus/templates/analytics/app/components/ui/table.tsx +1 -0
  254. package/corpus/templates/analytics/app/components/ui/tabs.tsx +1 -0
  255. package/corpus/templates/analytics/app/components/ui/textarea.tsx +1 -0
  256. package/corpus/templates/analytics/app/components/ui/toaster.tsx +1 -0
  257. package/corpus/templates/analytics/app/components/ui/toggle-group.tsx +1 -0
  258. package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +12 -0
  259. package/corpus/templates/analytics/app/components/ui/tooltip.tsx +1 -0
  260. package/corpus/templates/analytics/app/global.css +26 -3
  261. package/corpus/templates/analytics/app/i18n/zh-TW.ts +27 -4
  262. package/corpus/templates/analytics/app/i18n-data.ts +277 -42
  263. package/corpus/templates/analytics/app/pages/Agents.tsx +19 -19
  264. package/corpus/templates/analytics/app/pages/DataDictionary.tsx +21 -21
  265. package/corpus/templates/analytics/app/pages/DataSources.tsx +31 -54
  266. package/corpus/templates/analytics/app/pages/NotFound.tsx +2 -1
  267. package/corpus/templates/analytics/app/pages/Placeholder.tsx +2 -1
  268. package/corpus/templates/analytics/app/pages/Settings.tsx +19 -37
  269. package/corpus/templates/analytics/app/pages/adhoc/DashboardSkeleton.tsx +3 -2
  270. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +8 -13
  271. package/corpus/templates/analytics/app/pages/adhoc/_shared/components/DateRangeInput.tsx +1 -2
  272. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ChartTypePicker.tsx +2 -4
  273. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/DateRangePicker.tsx +1 -2
  274. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventCombobox.tsx +7 -7
  275. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventPanel.tsx +2 -1
  276. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventRow.tsx +2 -1
  277. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ExplorerChart.tsx +3 -8
  278. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/FilterBuilder.tsx +5 -4
  279. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/GroupByPicker.tsx +2 -1
  280. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/PropertyCombobox.tsx +7 -7
  281. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/PropertyValueCombobox.tsx +7 -7
  282. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +1 -1
  283. package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +16 -16
  284. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +16 -21
  285. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +32 -32
  286. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +14 -14
  287. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +14 -13
  288. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +200 -52
  289. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +23 -28
  290. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewSqlPopover.tsx +13 -12
  291. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +15 -15
  292. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +32 -36
  293. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +2 -1
  294. package/corpus/templates/analytics/app/pages/analyses/AnalysesList.tsx +8 -7
  295. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +19 -19
  296. package/corpus/templates/analytics/app/pages/analyses/LegacyFusionAnalysis.tsx +11 -15
  297. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +14 -14
  298. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +7 -12
  299. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +12 -12
  300. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +25 -25
  301. package/corpus/templates/analytics/app/root.tsx +22 -19
  302. package/corpus/templates/analytics/app/routes/catalog.tsx +8 -8
  303. package/corpus/templates/analytics/changelog/2026-07-06-dashboard-lists-and-headers-stay-compact.md +6 -0
  304. package/corpus/templates/analytics/changelog/2026-07-06-dashboards-can-now-chart-data-programs-saved-server-side-scr.md +6 -0
  305. package/corpus/templates/analytics/changelog/2026-07-06-extension-pages-and-mobile-headers-now-share-one-background-shade.md +6 -0
  306. package/corpus/templates/analytics/changelog/2026-07-06-mobile-chat-header-is-more-compact-and-the-menu-button-opens-navigation.md +5 -0
  307. package/corpus/templates/analytics/learnings.defaults.md +36 -0
  308. package/corpus/templates/analytics/seeds/data-programs/risk-meeting-cohort.js +254 -0
  309. package/corpus/templates/analytics/seeds/data-programs/risk-meeting-pylon-early-warning.js +184 -0
  310. package/corpus/templates/analytics/server/handlers/sql-query.ts +1 -1
  311. package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +109 -1
  312. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +55 -0
  313. package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +3 -2
  314. package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +16 -10
  315. package/corpus/templates/assets/app/components/layout/Header.tsx +1 -1
  316. package/corpus/templates/assets/app/components/layout/PageShell.tsx +4 -4
  317. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +12 -12
  318. package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +8 -8
  319. package/corpus/templates/assets/app/components/library/EditLibraryDialog.tsx +7 -7
  320. package/corpus/templates/assets/app/components/library/LibraryCard.tsx +8 -8
  321. package/corpus/templates/assets/app/components/library/LibraryPresetGrid.tsx +3 -2
  322. package/corpus/templates/assets/app/components/ui/alert-dialog.tsx +1 -0
  323. package/corpus/templates/assets/app/components/ui/badge.tsx +1 -0
  324. package/corpus/templates/assets/app/components/ui/button.tsx +1 -0
  325. package/corpus/templates/assets/app/components/ui/card.tsx +1 -0
  326. package/corpus/templates/assets/app/components/ui/checkbox.tsx +1 -0
  327. package/corpus/templates/assets/app/components/ui/dialog.tsx +1 -0
  328. package/corpus/templates/assets/app/components/ui/dropdown-menu.tsx +1 -0
  329. package/corpus/templates/assets/app/components/ui/input.tsx +1 -0
  330. package/corpus/templates/assets/app/components/ui/label.tsx +1 -0
  331. package/corpus/templates/assets/app/components/ui/popover.tsx +1 -0
  332. package/corpus/templates/assets/app/components/ui/select.tsx +1 -0
  333. package/corpus/templates/assets/app/components/ui/separator.tsx +1 -0
  334. package/corpus/templates/assets/app/components/ui/sheet.tsx +1 -0
  335. package/corpus/templates/assets/app/components/ui/skeleton.tsx +1 -0
  336. package/corpus/templates/assets/app/components/ui/sonner.tsx +1 -0
  337. package/corpus/templates/assets/app/components/ui/spinner.tsx +1 -0
  338. package/corpus/templates/assets/app/components/ui/tabs.tsx +1 -0
  339. package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +12 -0
  340. package/corpus/templates/assets/app/components/ui/tooltip.tsx +1 -0
  341. package/corpus/templates/assets/app/global.css +1 -0
  342. package/corpus/templates/assets/app/root.tsx +12 -9
  343. package/corpus/templates/assets/app/routes/asset.$id.tsx +19 -19
  344. package/corpus/templates/assets/app/routes/audit.tsx +15 -14
  345. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +49 -54
  346. package/corpus/templates/assets/app/routes/library.tsx +31 -31
  347. package/corpus/templates/assets/app/routes/settings.tsx +21 -35
  348. package/corpus/templates/assets/changelog/2026-07-06-mobile-layouts-no-longer-stack-two-top-headers.md +5 -0
  349. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +55 -0
  350. package/corpus/templates/brain/.agents/skills/ask-across-everything/SKILL.md +6 -1
  351. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +63 -5
  352. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +112 -0
  353. package/corpus/templates/brain/AGENTS.md +93 -8
  354. package/corpus/templates/brain/app/components/brain/CanonicalPreviewSheet.tsx +6 -5
  355. package/corpus/templates/brain/app/components/brain/Surface.tsx +3 -8
  356. package/corpus/templates/brain/app/components/layout/Layout.tsx +7 -7
  357. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +6 -6
  358. package/corpus/templates/brain/app/components/ui/badge.tsx +1 -0
  359. package/corpus/templates/brain/app/components/ui/button.tsx +1 -0
  360. package/corpus/templates/brain/app/components/ui/card.tsx +1 -0
  361. package/corpus/templates/brain/app/components/ui/input.tsx +1 -0
  362. package/corpus/templates/brain/app/components/ui/label.tsx +1 -0
  363. package/corpus/templates/brain/app/components/ui/progress.tsx +1 -0
  364. package/corpus/templates/brain/app/components/ui/select.tsx +1 -0
  365. package/corpus/templates/brain/app/components/ui/separator.tsx +1 -0
  366. package/corpus/templates/brain/app/components/ui/sheet.tsx +1 -0
  367. package/corpus/templates/brain/app/components/ui/skeleton.tsx +1 -0
  368. package/corpus/templates/brain/app/components/ui/switch.tsx +1 -0
  369. package/corpus/templates/brain/app/components/ui/table.tsx +1 -0
  370. package/corpus/templates/brain/app/components/ui/textarea.tsx +1 -0
  371. package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +12 -0
  372. package/corpus/templates/brain/app/components/ui/tooltip.tsx +1 -0
  373. package/corpus/templates/brain/app/global.css +1 -0
  374. package/corpus/templates/brain/app/hooks/use-distillation-bridge.ts +9 -4
  375. package/corpus/templates/brain/app/root.tsx +11 -8
  376. package/corpus/templates/brain/app/routes/knowledge.tsx +19 -19
  377. package/corpus/templates/brain/app/routes/ops.tsx +18 -18
  378. package/corpus/templates/brain/app/routes/review.tsx +22 -27
  379. package/corpus/templates/brain/app/routes/search.tsx +20 -20
  380. package/corpus/templates/brain/app/routes/settings.tsx +25 -40
  381. package/corpus/templates/brain/app/routes/sources.tsx +23 -23
  382. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +55 -0
  383. package/corpus/templates/calendar/actions/find-a-time.ts +29 -16
  384. package/corpus/templates/calendar/actions/list-bookings.ts +33 -2
  385. package/corpus/templates/calendar/actions/list-events.ts +34 -8
  386. package/corpus/templates/calendar/actions/update-calendar-visual-preferences.ts +105 -34
  387. package/corpus/templates/calendar/app/components/ThemeToggle.tsx +5 -5
  388. package/corpus/templates/calendar/app/components/TimezoneCombobox.tsx +6 -6
  389. package/corpus/templates/calendar/app/components/booking/BookingConfirmation.tsx +2 -1
  390. package/corpus/templates/calendar/app/components/booking/BookingForm.tsx +9 -8
  391. package/corpus/templates/calendar/app/components/booking/DatePicker.tsx +2 -2
  392. package/corpus/templates/calendar/app/components/booking/TimeSlotPicker.tsx +3 -2
  393. package/corpus/templates/calendar/app/components/calendar/AddCalendarDialog.tsx +10 -15
  394. package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +6 -6
  395. package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +73 -3
  396. package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +27 -27
  397. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +553 -267
  398. package/corpus/templates/calendar/app/components/calendar/DeleteEventDialog.tsx +9 -12
  399. package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +10 -13
  400. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +7 -7
  401. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -21
  402. package/corpus/templates/calendar/app/components/calendar/EventDialog.tsx +11 -11
  403. package/corpus/templates/calendar/app/components/calendar/EventOptionControls.tsx +9 -9
  404. package/corpus/templates/calendar/app/components/calendar/FindTimePanel.tsx +9 -9
  405. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +6 -6
  406. package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +3 -3
  407. package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +1 -1
  408. package/corpus/templates/calendar/app/components/calendar/GuestNotificationDialog.tsx +8 -10
  409. package/corpus/templates/calendar/app/components/calendar/IntegrationsSidebar.tsx +12 -12
  410. package/corpus/templates/calendar/app/components/calendar/KeyboardShortcutsHelp.tsx +2 -2
  411. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +93 -41
  412. package/corpus/templates/calendar/app/components/calendar/PeopleSearchDialog.tsx +6 -6
  413. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +530 -299
  414. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +229 -134
  415. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +135 -108
  416. package/corpus/templates/calendar/app/components/ui/alert-dialog.tsx +1 -0
  417. package/corpus/templates/calendar/app/components/ui/badge.tsx +1 -0
  418. package/corpus/templates/calendar/app/components/ui/button.tsx +1 -0
  419. package/corpus/templates/calendar/app/components/ui/card.tsx +1 -0
  420. package/corpus/templates/calendar/app/components/ui/checkbox.tsx +1 -0
  421. package/corpus/templates/calendar/app/components/ui/collapsible.tsx +1 -0
  422. package/corpus/templates/calendar/app/components/ui/command.tsx +1 -0
  423. package/corpus/templates/calendar/app/components/ui/dialog.tsx +1 -0
  424. package/corpus/templates/calendar/app/components/ui/dropdown-menu.tsx +1 -0
  425. package/corpus/templates/calendar/app/components/ui/input.tsx +1 -0
  426. package/corpus/templates/calendar/app/components/ui/label.tsx +1 -0
  427. package/corpus/templates/calendar/app/components/ui/popover.tsx +1 -0
  428. package/corpus/templates/calendar/app/components/ui/radio-group.tsx +1 -0
  429. package/corpus/templates/calendar/app/components/ui/select.tsx +1 -0
  430. package/corpus/templates/calendar/app/components/ui/separator.tsx +1 -0
  431. package/corpus/templates/calendar/app/components/ui/skeleton.tsx +1 -0
  432. package/corpus/templates/calendar/app/components/ui/spinner.tsx +1 -0
  433. package/corpus/templates/calendar/app/components/ui/switch.tsx +1 -0
  434. package/corpus/templates/calendar/app/components/ui/table.tsx +1 -0
  435. package/corpus/templates/calendar/app/components/ui/tabs.tsx +1 -0
  436. package/corpus/templates/calendar/app/components/ui/textarea.tsx +1 -0
  437. package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +12 -0
  438. package/corpus/templates/calendar/app/components/ui/tooltip.tsx +1 -0
  439. package/corpus/templates/calendar/app/global.css +1 -0
  440. package/corpus/templates/calendar/app/hooks/use-event-drag.ts +63 -9
  441. package/corpus/templates/calendar/app/hooks/use-google-auth.ts +15 -27
  442. package/corpus/templates/calendar/app/hooks/use-grid-create-drag.ts +254 -0
  443. package/corpus/templates/calendar/app/hooks/use-mobile.ts +1 -0
  444. package/corpus/templates/calendar/app/hooks/use-view-preferences.ts +287 -21
  445. package/corpus/templates/calendar/app/hooks/use-zoom-auth.ts +56 -19
  446. package/corpus/templates/calendar/app/i18n/zh-TW.ts +3 -0
  447. package/corpus/templates/calendar/app/i18n-data.ts +31 -0
  448. package/corpus/templates/calendar/app/lib/event-colors.ts +29 -8
  449. package/corpus/templates/calendar/app/pages/AvailabilitySettings.tsx +11 -11
  450. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +45 -50
  451. package/corpus/templates/calendar/app/pages/BookingPage.tsx +2 -2
  452. package/corpus/templates/calendar/app/pages/BookingsList.tsx +12 -12
  453. package/corpus/templates/calendar/app/pages/CalendarView.tsx +438 -271
  454. package/corpus/templates/calendar/app/pages/ManageBookingPage.tsx +13 -13
  455. package/corpus/templates/calendar/app/pages/Settings.tsx +15 -29
  456. package/corpus/templates/calendar/app/root.tsx +19 -15
  457. package/corpus/templates/calendar/app/routes/event.tsx +2 -2
  458. package/corpus/templates/calendar/changelog/2026-07-06-calendar-now-loads-view-preferences-much-more-efficiently.md +6 -0
  459. package/corpus/templates/calendar/changelog/2026-07-06-connected-calendars-keep-their-own-color-when-you-customize-.md +6 -0
  460. package/corpus/templates/calendar/changelog/2026-07-06-create-events-from-the-command-menu-with-natural-phrases-lik.md +6 -0
  461. package/corpus/templates/calendar/changelog/2026-07-06-drag-across-empty-week-or-day-slots-to-create-an-event-with-.md +6 -0
  462. package/corpus/templates/calendar/changelog/2026-07-06-dragging-and-resizing-events-is-much-smoother-especially-on-.md +6 -0
  463. package/corpus/templates/calendar/changelog/2026-07-06-each-connected-google-account-can-now-have-its-own-calendar-.md +6 -0
  464. package/corpus/templates/calendar/changelog/2026-07-06-events-spanning-multiple-days-now-show-on-every-day-they-cov.md +6 -0
  465. package/corpus/templates/calendar/changelog/2026-07-06-google-calendar-now-finishes-connecting-correctly-after-sign.md +6 -0
  466. package/corpus/templates/calendar/changelog/2026-07-06-public-booking-pages-respond-faster.md +6 -0
  467. package/corpus/templates/calendar/changelog/2026-07-06-the-app-header-no-longer-shows-the-global-notifications-bell.md +6 -0
  468. package/corpus/templates/calendar/package.json +1 -0
  469. package/corpus/templates/calendar/server/handlers/bookings.ts +46 -52
  470. package/corpus/templates/calendar/server/handlers/google-auth.ts +21 -5
  471. package/corpus/templates/calendar/server/lib/google-calendar.ts +32 -3
  472. package/corpus/templates/calendar/shared/calendar-view-preferences.ts +66 -2
  473. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +55 -0
  474. package/corpus/templates/chat/app/components/layout/Layout.tsx +6 -6
  475. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +12 -12
  476. package/corpus/templates/chat/app/components/ui/button.tsx +1 -0
  477. package/corpus/templates/chat/app/components/ui/card.tsx +1 -0
  478. package/corpus/templates/chat/app/components/ui/dropdown-menu.tsx +1 -0
  479. package/corpus/templates/chat/app/components/ui/input.tsx +1 -0
  480. package/corpus/templates/chat/app/components/ui/label.tsx +1 -0
  481. package/corpus/templates/chat/app/components/ui/sheet.tsx +1 -0
  482. package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +12 -0
  483. package/corpus/templates/chat/app/components/ui/tooltip.tsx +1 -0
  484. package/corpus/templates/chat/app/global.css +1 -0
  485. package/corpus/templates/chat/app/root.tsx +7 -4
  486. package/corpus/templates/chat/app/routes/settings.tsx +6 -21
  487. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +55 -0
  488. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +18 -4
  489. package/corpus/templates/clips/.env.example +8 -0
  490. package/corpus/templates/clips/actions/accept-invite.ts +3 -0
  491. package/corpus/templates/clips/actions/add-recording-to-space.ts +55 -27
  492. package/corpus/templates/clips/actions/add-vocabulary-term.ts +3 -1
  493. package/corpus/templates/clips/actions/archive-recording.ts +5 -12
  494. package/corpus/templates/clips/actions/cleanup-transcript.ts +5 -4
  495. package/corpus/templates/clips/actions/clear-edits.ts +42 -29
  496. package/corpus/templates/clips/actions/create-meeting.ts +87 -40
  497. package/corpus/templates/clips/actions/create-recording.ts +6 -3
  498. package/corpus/templates/clips/actions/delete-meeting.ts +25 -0
  499. package/corpus/templates/clips/actions/delete-recording-permanent.ts +3 -0
  500. package/corpus/templates/clips/actions/disconnect-calendar.ts +10 -4
  501. package/corpus/templates/clips/actions/export-insights-csv.ts +28 -8
  502. package/corpus/templates/clips/actions/finalize-meeting.ts +106 -33
  503. package/corpus/templates/clips/actions/finalize-recording.ts +201 -3
  504. package/corpus/templates/clips/actions/get-organization-insights.ts +51 -7
  505. package/corpus/templates/clips/actions/import-loom-recording.ts +17 -0
  506. package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +18 -1
  507. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +7 -1
  508. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +16 -0
  509. package/corpus/templates/clips/actions/list-clip-views.ts +60 -0
  510. package/corpus/templates/clips/actions/regenerate-summary.ts +10 -0
  511. package/corpus/templates/clips/actions/remove-vocabulary-term.ts +59 -0
  512. package/corpus/templates/clips/actions/request-transcript.ts +170 -25
  513. package/corpus/templates/clips/actions/restore-recording.ts +5 -12
  514. package/corpus/templates/clips/actions/save-browser-transcript.ts +13 -2
  515. package/corpus/templates/clips/actions/set-chapters.ts +6 -15
  516. package/corpus/templates/clips/actions/set-thumbnail.ts +77 -36
  517. package/corpus/templates/clips/actions/split-recording.ts +49 -35
  518. package/corpus/templates/clips/actions/stitch-recordings.ts +7 -4
  519. package/corpus/templates/clips/actions/stop-meeting-recording.ts +15 -1
  520. package/corpus/templates/clips/actions/sync-calendars.ts +10 -108
  521. package/corpus/templates/clips/actions/trash-recording.ts +43 -14
  522. package/corpus/templates/clips/actions/trim-recording.ts +48 -27
  523. package/corpus/templates/clips/actions/undo-edit.ts +49 -37
  524. package/corpus/templates/clips/app/components/capture-install-options.tsx +6 -6
  525. package/corpus/templates/clips/app/components/dictate/vocabulary-section.tsx +208 -0
  526. package/corpus/templates/clips/app/components/editable-recording-title.tsx +2 -2
  527. package/corpus/templates/clips/app/components/editor/chapters-editor.tsx +7 -7
  528. package/corpus/templates/clips/app/components/editor/editor-toolbar.tsx +26 -26
  529. package/corpus/templates/clips/app/components/editor/split-button.tsx +5 -4
  530. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +9 -9
  531. package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +11 -16
  532. package/corpus/templates/clips/app/components/editor/timeline.tsx +3 -3
  533. package/corpus/templates/clips/app/components/editor/transcript-editor.tsx +5 -5
  534. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +4 -4
  535. package/corpus/templates/clips/app/components/library/create-space-dialog.tsx +8 -8
  536. package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -1
  537. package/corpus/templates/clips/app/components/library/folder-tree.tsx +14 -14
  538. package/corpus/templates/clips/app/components/library/library-grid.tsx +24 -98
  539. package/corpus/templates/clips/app/components/library/library-layout.tsx +18 -19
  540. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +11 -11
  541. package/corpus/templates/clips/app/components/library/recording-card.tsx +44 -50
  542. package/corpus/templates/clips/app/components/library/search-bar.tsx +5 -5
  543. package/corpus/templates/clips/app/components/library/sort-menu.tsx +4 -3
  544. package/corpus/templates/clips/app/components/library/tag-input.tsx +4 -4
  545. package/corpus/templates/clips/app/components/meetings/attendee-stack.tsx +2 -6
  546. package/corpus/templates/clips/app/components/meetings/auto-record-prompt.tsx +1 -1
  547. package/corpus/templates/clips/app/components/meetings/bullet-link.tsx +4 -4
  548. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +5 -5
  549. package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +3 -3
  550. package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +17 -9
  551. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +6 -11
  552. package/corpus/templates/clips/app/components/meetings/transcript-bubbles.tsx +215 -21
  553. package/corpus/templates/clips/app/components/player/access-password-prompt.tsx +3 -2
  554. package/corpus/templates/clips/app/components/player/comments-panel.tsx +14 -14
  555. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +7 -6
  556. package/corpus/templates/clips/app/components/player/insights-panel.tsx +18 -6
  557. package/corpus/templates/clips/app/components/player/player-controls.tsx +42 -36
  558. package/corpus/templates/clips/app/components/player/reactions-tray.tsx +4 -4
  559. package/corpus/templates/clips/app/components/player/settings-panel.tsx +13 -12
  560. package/corpus/templates/clips/app/components/player/share-dialog.tsx +80 -49
  561. package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +3 -2
  562. package/corpus/templates/clips/app/components/player/timestamped-comment-button.tsx +2 -2
  563. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +7 -7
  564. package/corpus/templates/clips/app/components/player/video-player.tsx +182 -15
  565. package/corpus/templates/clips/app/components/recorder/camera-visualizer.tsx +1 -1
  566. package/corpus/templates/clips/app/components/recorder/microphone-visualizer.tsx +1 -1
  567. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +49 -36
  568. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +285 -24
  569. package/corpus/templates/clips/app/components/recorder/recording-toolbar.tsx +6 -5
  570. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +7 -6
  571. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +10 -10
  572. package/corpus/templates/clips/app/components/sharing/viewed-by-popover.tsx +132 -0
  573. package/corpus/templates/clips/app/components/ui/alert-dialog.tsx +1 -0
  574. package/corpus/templates/clips/app/components/ui/avatar.tsx +1 -0
  575. package/corpus/templates/clips/app/components/ui/badge.tsx +1 -0
  576. package/corpus/templates/clips/app/components/ui/button.tsx +1 -0
  577. package/corpus/templates/clips/app/components/ui/card.tsx +1 -0
  578. package/corpus/templates/clips/app/components/ui/checkbox.tsx +1 -0
  579. package/corpus/templates/clips/app/components/ui/collapsible.tsx +1 -0
  580. package/corpus/templates/clips/app/components/ui/context-menu.tsx +1 -0
  581. package/corpus/templates/clips/app/components/ui/dialog.tsx +1 -0
  582. package/corpus/templates/clips/app/components/ui/dropdown-menu.tsx +1 -0
  583. package/corpus/templates/clips/app/components/ui/input.tsx +1 -0
  584. package/corpus/templates/clips/app/components/ui/label.tsx +1 -0
  585. package/corpus/templates/clips/app/components/ui/popover.tsx +1 -0
  586. package/corpus/templates/clips/app/components/ui/scroll-area.tsx +1 -0
  587. package/corpus/templates/clips/app/components/ui/select.tsx +1 -0
  588. package/corpus/templates/clips/app/components/ui/separator.tsx +1 -0
  589. package/corpus/templates/clips/app/components/ui/sheet.tsx +1 -0
  590. package/corpus/templates/clips/app/components/ui/skeleton.tsx +1 -0
  591. package/corpus/templates/clips/app/components/ui/slider.tsx +1 -0
  592. package/corpus/templates/clips/app/components/ui/sonner.tsx +1 -0
  593. package/corpus/templates/clips/app/components/ui/spinner.tsx +1 -0
  594. package/corpus/templates/clips/app/components/ui/switch.tsx +1 -0
  595. package/corpus/templates/clips/app/components/ui/table.tsx +1 -0
  596. package/corpus/templates/clips/app/components/ui/tabs.tsx +1 -0
  597. package/corpus/templates/clips/app/components/ui/textarea.tsx +1 -0
  598. package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +12 -0
  599. package/corpus/templates/clips/app/components/ui/tooltip.tsx +1 -0
  600. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +5 -9
  601. package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +9 -19
  602. package/corpus/templates/clips/app/components/workspace/invite-dialog.tsx +10 -9
  603. package/corpus/templates/clips/app/components/workspace/members-list.tsx +11 -10
  604. package/corpus/templates/clips/app/components/workspace/notifications-list.tsx +2 -1
  605. package/corpus/templates/clips/app/components/workspace/top-creators-table.tsx +3 -2
  606. package/corpus/templates/clips/app/components/workspace/top-videos-table.tsx +3 -2
  607. package/corpus/templates/clips/app/global.css +1 -0
  608. package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +2 -1
  609. package/corpus/templates/clips/app/hooks/use-mobile.ts +1 -0
  610. package/corpus/templates/clips/app/hooks/use-player-shortcuts.ts +14 -10
  611. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +14 -0
  612. package/corpus/templates/clips/app/i18n/ar-SA.ts +56 -0
  613. package/corpus/templates/clips/app/i18n/de-DE.ts +53 -0
  614. package/corpus/templates/clips/app/i18n/en-US.ts +52 -0
  615. package/corpus/templates/clips/app/i18n/es-ES.ts +53 -0
  616. package/corpus/templates/clips/app/i18n/fr-FR.ts +53 -0
  617. package/corpus/templates/clips/app/i18n/hi-IN.ts +52 -0
  618. package/corpus/templates/clips/app/i18n/ja-JP.ts +53 -0
  619. package/corpus/templates/clips/app/i18n/ko-KR.ts +52 -0
  620. package/corpus/templates/clips/app/i18n/pt-BR.ts +53 -0
  621. package/corpus/templates/clips/app/i18n/zh-CN.ts +51 -0
  622. package/corpus/templates/clips/app/i18n/zh-TW.ts +51 -0
  623. package/corpus/templates/clips/app/lib/recorder-preferences.ts +4 -0
  624. package/corpus/templates/clips/app/lib/timestamp-mapping.ts +5 -0
  625. package/corpus/templates/clips/app/root.tsx +26 -23
  626. package/corpus/templates/clips/app/routes/_app.dictate.tsx +39 -23
  627. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +134 -39
  628. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +20 -20
  629. package/corpus/templates/clips/app/routes/_app.notifications.tsx +3 -3
  630. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +92 -60
  631. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +8 -13
  632. package/corpus/templates/clips/app/routes/_app.spaces._index.tsx +1 -1
  633. package/corpus/templates/clips/app/routes/_app.trash.tsx +96 -31
  634. package/corpus/templates/clips/app/routes/bug-report.done.tsx +1 -1
  635. package/corpus/templates/clips/app/routes/bug-report.tsx +11 -11
  636. package/corpus/templates/clips/app/routes/download.tsx +2 -2
  637. package/corpus/templates/clips/app/routes/embed.$shareId.tsx +2 -1
  638. package/corpus/templates/clips/app/routes/invite.$token.tsx +8 -13
  639. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +263 -251
  640. package/corpus/templates/clips/app/routes/record.tsx +28 -10
  641. package/corpus/templates/clips/app/routes/share.$shareId.tsx +51 -29
  642. package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +71 -16
  643. package/corpus/templates/clips/changelog/2026-07-05-mobile-clip-pages-use-a-tighter-viewer-layout-with-inline-ac.md +6 -0
  644. package/corpus/templates/clips/changelog/2026-07-06-ai-setup-now-switches-to-your-saved-provider-key-and-uses-fa.md +6 -0
  645. package/corpus/templates/clips/changelog/2026-07-06-browsers-that-can-t-play-a-clip-s-video-format-now-see-a-cle.md +6 -0
  646. package/corpus/templates/clips/changelog/2026-07-06-calendar-connections-no-longer-ask-you-to-reconnect-after-te.md +6 -0
  647. package/corpus/templates/clips/changelog/2026-07-06-chrome-extension-recordings-keep-your-selected-microphone.md +6 -0
  648. package/corpus/templates/clips/changelog/2026-07-06-clip-recordings-now-use-streaming-uploads-by-default.md +6 -0
  649. package/corpus/templates/clips/changelog/2026-07-06-clip-titles-in-the-library-grid-now-open-the-clip-instead-of.md +6 -0
  650. package/corpus/templates/clips/changelog/2026-07-06-desktop-countdown-now-dims-the-screen-before-recording.md +5 -0
  651. package/corpus/templates/clips/changelog/2026-07-06-desktop-popover-no-longer-drops-bluetooth-headphones-into-call-quality-mode.md +6 -0
  652. package/corpus/templates/clips/changelog/2026-07-06-desktop-recorder-now-refreshes-cameras-and-mics-when-the-pop.md +6 -0
  653. package/corpus/templates/clips/changelog/2026-07-06-desktop-recordings-keep-microphone-volume-clear-while-recor.md +5 -0
  654. package/corpus/templates/clips/changelog/2026-07-06-desktop-recordings-no-longer-get-stuck-optimizing-when-scree.md +6 -0
  655. package/corpus/templates/clips/changelog/2026-07-06-dictation-history-from-the-desktop-app-now-appears-in-the-di.md +6 -0
  656. package/corpus/templates/clips/changelog/2026-07-06-dictation-no-longer-overwrites-your-clipboard-and-messaging-.md +6 -0
  657. package/corpus/templates/clips/changelog/2026-07-06-double-tap-your-dictation-key-for-hands-free-dictation-tap-a.md +6 -0
  658. package/corpus/templates/clips/changelog/2026-07-06-fixed-desktop-recordings-sometimes-uploading-without-audio-a.md +6 -0
  659. package/corpus/templates/clips/changelog/2026-07-06-fixed-desktop-recordings-that-could-get-stuck-uploading-and-.md +6 -0
  660. package/corpus/templates/clips/changelog/2026-07-06-fixed-recordings-sometimes-capturing-from-the-wrong-micropho.md +6 -0
  661. package/corpus/templates/clips/changelog/2026-07-06-hands-free-dictation-and-meeting-cleanup-recover-more-reliab.md +6 -0
  662. package/corpus/templates/clips/changelog/2026-07-06-live-meetings-show-time-remaining-and-you-can-end-a-meeting-.md +6 -0
  663. package/corpus/templates/clips/changelog/2026-07-06-manage-your-personal-dictation-dictionary-from-the-dictate-t.md +6 -0
  664. package/corpus/templates/clips/changelog/2026-07-06-meetings-interrupted-by-quitting-or-crashing-now-close-out-c.md +6 -0
  665. package/corpus/templates/clips/changelog/2026-07-06-mic-only-desktop-recordings-now-use-the-selected-microphone-.md +6 -0
  666. package/corpus/templates/clips/changelog/2026-07-06-paste-your-last-dictation-anytime-with-cmd-ctrl-v-or-from-th.md +6 -0
  667. package/corpus/templates/clips/changelog/2026-07-06-press-esc-to-cancel-a-dictation-in-progress.md +6 -0
  668. package/corpus/templates/clips/changelog/2026-07-06-recordings-whose-video-file-contains-no-audio-track-no-longe.md +6 -0
  669. package/corpus/templates/clips/changelog/2026-07-06-search-inside-meeting-transcripts.md +6 -0
  670. package/corpus/templates/clips/changelog/2026-07-06-see-who-viewed-your-shared-clips-and-when-click-the-view-cou.md +6 -0
  671. package/corpus/templates/clips/changelog/2026-07-06-share-links-for-agents-now-appear-as-soon-as-the-share-menu-.md +6 -0
  672. package/corpus/templates/clips/changelog/2026-07-06-share-popovers-now-stay-above-video-playback-controls.md +6 -0
  673. package/corpus/templates/clips/changelog/2026-07-06-shared-clip-pages-now-recover-automatically-from-transient-v.md +6 -0
  674. package/corpus/templates/clips/changelog/2026-07-06-the-desktop-app-now-walks-you-through-permissions-on-first-l.md +6 -0
  675. package/corpus/templates/clips/changelog/2026-07-06-transcript-cleanup-preferences-now-save-per-user.md +6 -0
  676. package/corpus/templates/clips/changelog/2026-07-06-transcripts-now-retry-automatically-after-transient-failures.md +6 -0
  677. package/corpus/templates/clips/changelog/2026-07-06-video-compression-now-runs-in-the-background-without-blocking.md +6 -0
  678. package/corpus/templates/clips/changelog/2026-07-07-native-microphone-recordings-now-reduce-steady-background-noise.md +6 -0
  679. package/corpus/templates/clips/changelog/2026-07-07-recording-transcripts-now-line-up-with-the-video-start-afte.md +6 -0
  680. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  681. package/corpus/templates/clips/chrome-extension/src/background.ts +141 -48
  682. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +383 -59
  683. package/corpus/templates/clips/chrome-extension/src/overlay.ts +51 -10
  684. package/corpus/templates/clips/chrome-extension/src/popup.ts +57 -6
  685. package/corpus/templates/clips/desktop/package.json +1 -1
  686. package/corpus/templates/clips/desktop/scripts/sign-macos-local.ts +67 -0
  687. package/corpus/templates/clips/desktop/src/app.tsx +38 -13
  688. package/corpus/templates/clips/desktop/src/components/SourceRow.tsx +1 -0
  689. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +88 -28
  690. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +165 -55
  691. package/corpus/templates/clips/desktop/src/hooks/useMicMeter.ts +35 -10
  692. package/corpus/templates/clips/desktop/src/lib/backtrack.ts +12 -0
  693. package/corpus/templates/clips/desktop/src/lib/media-capture-constraints.ts +129 -34
  694. package/corpus/templates/clips/desktop/src/lib/media-device-selection.ts +157 -0
  695. package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
  696. package/corpus/templates/clips/desktop/src/lib/recorder.ts +109 -47
  697. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +22 -2
  698. package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +29 -1
  699. package/corpus/templates/clips/desktop/src/lib/updater.ts +6 -0
  700. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +372 -31
  701. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +90 -0
  702. package/corpus/templates/clips/desktop/src/overlays/flow-bar.tsx +4 -6
  703. package/corpus/templates/clips/desktop/src/overlays/onboarding.tsx +214 -9
  704. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +37 -52
  705. package/corpus/templates/clips/desktop/src/styles.css +1 -1
  706. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +7 -0
  707. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +371 -43
  708. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +79 -0
  709. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1418 -260
  710. package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +188 -44
  711. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +197 -8
  712. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +64 -8
  713. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +3 -2
  714. package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +10 -0
  715. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +29 -8
  716. package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +136 -13
  717. package/corpus/templates/clips/desktop/vite.config.ts +3 -0
  718. package/corpus/templates/clips/package.json +1 -1
  719. package/corpus/templates/clips/server/db/schema.ts +26 -0
  720. package/corpus/templates/clips/server/jobs/builder-media-compression.ts +41 -0
  721. package/corpus/templates/clips/server/jobs/stale-meeting-sweeper.ts +294 -0
  722. package/corpus/templates/clips/server/lib/builder-media-compression.ts +976 -0
  723. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +107 -56
  724. package/corpus/templates/clips/server/lib/env-flags.ts +4 -0
  725. package/corpus/templates/clips/server/lib/google-calendar-client.ts +8 -1
  726. package/corpus/templates/clips/server/lib/media-worker.ts +153 -0
  727. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +58 -17
  728. package/corpus/templates/clips/server/lib/streaming-upload-mode.ts +17 -5
  729. package/corpus/templates/clips/server/lib/video-remux.ts +90 -0
  730. package/corpus/templates/clips/server/plugins/calendar-jobs.ts +4 -0
  731. package/corpus/templates/clips/server/plugins/db.ts +196 -0
  732. package/corpus/templates/clips/server/register-secrets.ts +78 -0
  733. package/corpus/templates/clips/server/routes/_agent-native/clips/user-prefs.get.ts +15 -0
  734. package/corpus/templates/clips/server/routes/_agent-native/clips/user-prefs.put.ts +27 -0
  735. package/corpus/templates/clips/server/routes/api/media-worker/callback.post.ts +88 -0
  736. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +87 -7
  737. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +7 -0
  738. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +35 -10
  739. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +24 -42
  740. package/corpus/templates/clips/server/routes/api/view-event.post.ts +29 -1
  741. package/corpus/templates/clips/shared/media-device-selection.ts +157 -0
  742. package/corpus/templates/clips/shared/media-worker-contract.ts +146 -0
  743. package/corpus/templates/content/.agents/skills/actions/SKILL.md +55 -0
  744. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +67 -2
  745. package/corpus/templates/content/AGENTS.md +22 -14
  746. package/corpus/templates/content/actions/_local-file-documents.ts +90 -1
  747. package/corpus/templates/content/actions/_notion-action-utils.ts +6 -2
  748. package/corpus/templates/content/actions/delete-document.ts +8 -0
  749. package/corpus/templates/content/actions/remove-local-file-source.ts +100 -0
  750. package/corpus/templates/content/actions/sync-notion-comments.ts +174 -20
  751. package/corpus/templates/content/actions/update-document.ts +91 -5
  752. package/corpus/templates/content/app/blocks/SourceComponentBlock.tsx +31 -3
  753. package/corpus/templates/content/app/blocks/contentBlockRegistry.tsx +4 -4
  754. package/corpus/templates/content/app/components/EmptyState.tsx +1 -1
  755. package/corpus/templates/content/app/components/ThemeToggle.tsx +6 -6
  756. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
  757. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +5 -5
  758. package/corpus/templates/content/app/components/editor/ContentReferencePreview.tsx +1 -1
  759. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +10 -14630
  760. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +72 -51
  761. package/corpus/templates/content/app/components/editor/DocumentEditorSkeleton.tsx +36 -0
  762. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +29 -29
  763. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +29 -44
  764. package/corpus/templates/content/app/components/editor/EmojiPicker.tsx +5 -4
  765. package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +5 -4
  766. package/corpus/templates/content/app/components/editor/NotionConflictBanner.tsx +1 -1
  767. package/corpus/templates/content/app/components/editor/NotionSyncBar.tsx +2 -2
  768. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +5 -5
  769. package/corpus/templates/content/app/components/editor/TableHoverControls.tsx +13 -13
  770. package/corpus/templates/content/app/components/editor/VersionHistoryPanel.tsx +10 -10
  771. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +24 -7
  772. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +2856 -8389
  773. package/corpus/templates/content/app/components/editor/database/navigation-state.ts +36 -1
  774. package/corpus/templates/content/app/components/editor/database/settings.tsx +3224 -0
  775. package/corpus/templates/content/app/components/editor/database/shared.tsx +19 -19
  776. package/corpus/templates/content/app/components/editor/database/text.ts +23 -0
  777. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +9 -8
  778. package/corpus/templates/content/app/components/editor/extensions/AudioBlock.tsx +19 -18
  779. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +21 -20
  780. package/corpus/templates/content/app/components/editor/extensions/LocalMdxComponentNode.tsx +8 -8
  781. package/corpus/templates/content/app/components/editor/extensions/NotionExtensions.tsx +9 -0
  782. package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +19 -18
  783. package/corpus/templates/content/app/components/layout/Header.tsx +1 -5
  784. package/corpus/templates/content/app/components/layout/Layout.tsx +25 -8
  785. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +203 -55
  786. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +22 -22
  787. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +11 -11
  788. package/corpus/templates/content/app/components/sidebar/document-sidebar-sections.ts +109 -1
  789. package/corpus/templates/content/app/components/ui/alert-dialog.tsx +1 -0
  790. package/corpus/templates/content/app/components/ui/button.tsx +1 -0
  791. package/corpus/templates/content/app/components/ui/dialog.tsx +1 -0
  792. package/corpus/templates/content/app/components/ui/dropdown-menu.tsx +1 -0
  793. package/corpus/templates/content/app/components/ui/input.tsx +1 -0
  794. package/corpus/templates/content/app/components/ui/label.tsx +1 -0
  795. package/corpus/templates/content/app/components/ui/popover.tsx +1 -0
  796. package/corpus/templates/content/app/components/ui/separator.tsx +1 -0
  797. package/corpus/templates/content/app/components/ui/sheet.tsx +1 -0
  798. package/corpus/templates/content/app/components/ui/skeleton.tsx +1 -0
  799. package/corpus/templates/content/app/components/ui/sonner.tsx +1 -0
  800. package/corpus/templates/content/app/components/ui/spinner.tsx +1 -0
  801. package/corpus/templates/content/app/components/ui/table.tsx +1 -0
  802. package/corpus/templates/content/app/components/ui/toaster.tsx +1 -0
  803. package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +12 -0
  804. package/corpus/templates/content/app/components/ui/tooltip.tsx +1 -0
  805. package/corpus/templates/content/app/global.css +1 -0
  806. package/corpus/templates/content/app/hooks/use-documents.ts +89 -37
  807. package/corpus/templates/content/app/hooks/use-mobile.ts +1 -0
  808. package/corpus/templates/content/app/hooks/use-notion.ts +73 -5
  809. package/corpus/templates/content/app/i18n/zh-TW.ts +14 -0
  810. package/corpus/templates/content/app/i18n-data.ts +153 -0
  811. package/corpus/templates/content/app/root.tsx +35 -29
  812. package/corpus/templates/content/app/routes/_app._index.tsx +1 -1
  813. package/corpus/templates/content/app/routes/_app.local-files.tsx +268 -81
  814. package/corpus/templates/content/app/routes/_app.settings.tsx +4 -21
  815. package/corpus/templates/content/changelog/2026-07-01-builder-source-components-show-preservation-and-review-states.md +6 -0
  816. package/corpus/templates/content/changelog/2026-07-06-document-headers-and-page-bodies-now-share-one-background-shade.md +6 -0
  817. package/corpus/templates/content/changelog/2026-07-06-export-submenus-stay-visible-outside-the-page-actions-menu.md +6 -0
  818. package/corpus/templates/content/changelog/2026-07-06-fixed-collaborative-documents-reapplying-content-before-save.md +6 -0
  819. package/corpus/templates/content/changelog/2026-07-06-local-files-now-remember-sidebar-collapse-state-and-include-.md +6 -0
  820. package/corpus/templates/content/changelog/2026-07-06-notion-comment-sync-now-preserves-threads-replies-stay-attac.md +6 -0
  821. package/corpus/templates/content/changelog/2026-07-06-notion-sync-is-far-more-reliable-auto-sync-no-longer-overwri.md +6 -0
  822. package/corpus/templates/content/changelog/2026-07-06-opening-pages-now-highlights-the-sidebar-item-and-shows-the-.md +6 -0
  823. package/corpus/templates/content/changelog/2026-07-06-presence-markers-in-the-editor-are-now-compact-instead-of-co.md +6 -0
  824. package/corpus/templates/content/changelog/2026-07-06-sidebar-collapse-now-keeps-the-same-background-shade-as-the-.md +6 -0
  825. package/corpus/templates/content/changelog/2026-07-06-the-content-header-no-longer-shows-the-global-notifications-.md +6 -0
  826. package/corpus/templates/content/parity/matrix.md +24 -24
  827. package/corpus/templates/content/parity/matrix.ts +7 -3
  828. package/corpus/templates/content/server/db/schema.ts +15 -0
  829. package/corpus/templates/content/server/lib/notion-sync.ts +481 -39
  830. package/corpus/templates/content/server/lib/notion.ts +212 -48
  831. package/corpus/templates/content/server/plugins/db.ts +20 -0
  832. package/corpus/templates/content/server/routes/api/documents/[id]/notion/resolve.post.ts +14 -2
  833. package/corpus/templates/content/server/routes/api/notion/callback.get.ts +54 -6
  834. package/corpus/templates/content/shared/builder-mdx.ts +68 -12
  835. package/corpus/templates/content/shared/builder-source-component-registry.ts +177 -0
  836. package/corpus/templates/content/shared/nfm.ts +459 -66
  837. package/corpus/templates/content/shared/source-component-block.ts +72 -6
  838. package/corpus/templates/content/vite.config.ts +17 -1
  839. package/corpus/templates/design/.agents/skills/actions/SKILL.md +55 -0
  840. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +21 -12
  841. package/corpus/templates/design/AGENTS.md +3 -2
  842. package/corpus/templates/design/actions/import-design-source.ts +8 -58
  843. package/corpus/templates/design/actions/run-design-audit.ts +127 -1
  844. package/corpus/templates/design/actions/take-design-screenshot.ts +673 -0
  845. package/corpus/templates/design/app/components/ThemeToggle.tsx +6 -6
  846. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +11 -11
  847. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +2 -2
  848. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +16 -21
  849. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +6 -97
  850. package/corpus/templates/design/app/components/design/DrawOverlay.tsx +7 -7
  851. package/corpus/templates/design/app/components/design/EditPanel.tsx +30 -30
  852. package/corpus/templates/design/app/components/design/FusionAppBanner.tsx +9 -8
  853. package/corpus/templates/design/app/components/design/LayersPanel.tsx +14 -14
  854. package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +6 -5
  855. package/corpus/templates/design/app/components/design/MotionDock.tsx +15 -15
  856. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +3 -3
  857. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +3 -3
  858. package/corpus/templates/design/app/components/design/StatesPanel.tsx +13 -13
  859. package/corpus/templates/design/app/components/design/TokensPanel.tsx +14 -14
  860. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -6
  861. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +39 -9
  862. package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +3 -3
  863. package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +4 -7
  864. package/corpus/templates/design/app/components/design/code-workbench/editor/EditorTabs.tsx +6 -6
  865. package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +2 -1
  866. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +17 -17
  867. package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +6 -6
  868. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +3 -3
  869. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +7 -7
  870. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +3 -3
  871. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +18 -18
  872. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +6 -6
  873. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +6 -6
  874. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +7 -7
  875. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +7 -7
  876. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -14
  877. package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +9 -9
  878. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +6 -6
  879. package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +3 -2
  880. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +15 -18
  881. package/corpus/templates/design/app/components/layout/Header.tsx +2 -2
  882. package/corpus/templates/design/app/components/layout/Sidebar.tsx +5 -5
  883. package/corpus/templates/design/app/components/ui/alert-dialog.tsx +1 -0
  884. package/corpus/templates/design/app/components/ui/avatar.tsx +1 -0
  885. package/corpus/templates/design/app/components/ui/badge.tsx +1 -0
  886. package/corpus/templates/design/app/components/ui/button.tsx +1 -0
  887. package/corpus/templates/design/app/components/ui/card.tsx +1 -0
  888. package/corpus/templates/design/app/components/ui/checkbox.tsx +1 -0
  889. package/corpus/templates/design/app/components/ui/collapsible.tsx +1 -0
  890. package/corpus/templates/design/app/components/ui/context-menu.tsx +1 -0
  891. package/corpus/templates/design/app/components/ui/dialog.tsx +1 -0
  892. package/corpus/templates/design/app/components/ui/dropdown-menu.tsx +1 -0
  893. package/corpus/templates/design/app/components/ui/input.tsx +1 -0
  894. package/corpus/templates/design/app/components/ui/label.tsx +1 -0
  895. package/corpus/templates/design/app/components/ui/popover.tsx +1 -0
  896. package/corpus/templates/design/app/components/ui/select.tsx +1 -0
  897. package/corpus/templates/design/app/components/ui/separator.tsx +1 -0
  898. package/corpus/templates/design/app/components/ui/sheet.tsx +1 -0
  899. package/corpus/templates/design/app/components/ui/skeleton.tsx +1 -0
  900. package/corpus/templates/design/app/components/ui/slider.tsx +1 -0
  901. package/corpus/templates/design/app/components/ui/sonner.tsx +1 -0
  902. package/corpus/templates/design/app/components/ui/spinner.tsx +1 -0
  903. package/corpus/templates/design/app/components/ui/switch.tsx +1 -0
  904. package/corpus/templates/design/app/components/ui/tabs.tsx +1 -0
  905. package/corpus/templates/design/app/components/ui/textarea.tsx +1 -0
  906. package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +12 -0
  907. package/corpus/templates/design/app/components/ui/tooltip.tsx +1 -0
  908. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +7 -7
  909. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +7 -7
  910. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +3 -3
  911. package/corpus/templates/design/app/global.css +1 -0
  912. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -4
  913. package/corpus/templates/design/app/i18n-data.ts +38 -35
  914. package/corpus/templates/design/app/pages/DesignEditor.tsx +47 -51
  915. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +6 -6
  916. package/corpus/templates/design/app/pages/DesignSystems.tsx +31 -31
  917. package/corpus/templates/design/app/pages/Index.tsx +25 -29
  918. package/corpus/templates/design/app/pages/NotFound.tsx +2 -1
  919. package/corpus/templates/design/app/pages/Present.tsx +2 -1
  920. package/corpus/templates/design/app/pages/VisualEdit.tsx +2 -1
  921. package/corpus/templates/design/app/root.tsx +7 -4
  922. package/corpus/templates/design/app/routes/settings.tsx +22 -49
  923. package/corpus/templates/design/changelog/2026-07-05-code-sidebar-tabs-now-use-a-quieter-active-highlight-that-ma.md +6 -0
  924. package/corpus/templates/design/changelog/2026-07-06-fig-files-now-stay-on-the-builder-indexing-path-through-desi.md +6 -0
  925. package/corpus/templates/design/changelog/2026-07-06-mobile-layouts-no-longer-stack-two-top-headers.md +5 -0
  926. package/corpus/templates/design/changelog/2026-07-06-the-design-agent-now-visually-reviews-rendered-screenshots-o.md +6 -0
  927. package/corpus/templates/design/server/handlers/import-design-file.ts +4 -43
  928. package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +2 -2
  929. package/corpus/templates/design/server/lib/visible-clipboard-html.ts +32 -0
  930. package/corpus/templates/design/shared/design-review.ts +1 -0
  931. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +55 -0
  932. package/corpus/templates/dispatch/actions/list-staged-datasets.ts +3 -0
  933. package/corpus/templates/dispatch/app/routes/settings.tsx +3 -17
  934. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +55 -0
  935. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +10 -10
  936. package/corpus/templates/forms/app/components/ThemeToggle.tsx +5 -5
  937. package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +11 -10
  938. package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +10 -13
  939. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +17 -17
  940. package/corpus/templates/forms/app/components/ui/alert-dialog.tsx +1 -0
  941. package/corpus/templates/forms/app/components/ui/badge.tsx +1 -0
  942. package/corpus/templates/forms/app/components/ui/button.tsx +1 -0
  943. package/corpus/templates/forms/app/components/ui/calendar.tsx +1 -1
  944. package/corpus/templates/forms/app/components/ui/card.tsx +1 -0
  945. package/corpus/templates/forms/app/components/ui/checkbox.tsx +1 -0
  946. package/corpus/templates/forms/app/components/ui/command.tsx +1 -1
  947. package/corpus/templates/forms/app/components/ui/dialog.tsx +1 -0
  948. package/corpus/templates/forms/app/components/ui/dropdown-menu.tsx +1 -0
  949. package/corpus/templates/forms/app/components/ui/input.tsx +1 -0
  950. package/corpus/templates/forms/app/components/ui/label.tsx +1 -0
  951. package/corpus/templates/forms/app/components/ui/popover.tsx +1 -0
  952. package/corpus/templates/forms/app/components/ui/radio-group.tsx +1 -0
  953. package/corpus/templates/forms/app/components/ui/scroll-area.tsx +1 -0
  954. package/corpus/templates/forms/app/components/ui/select.tsx +1 -0
  955. package/corpus/templates/forms/app/components/ui/separator.tsx +1 -0
  956. package/corpus/templates/forms/app/components/ui/skeleton.tsx +1 -0
  957. package/corpus/templates/forms/app/components/ui/slider.tsx +1 -0
  958. package/corpus/templates/forms/app/components/ui/switch.tsx +1 -0
  959. package/corpus/templates/forms/app/components/ui/table.tsx +1 -0
  960. package/corpus/templates/forms/app/components/ui/tabs.tsx +1 -0
  961. package/corpus/templates/forms/app/components/ui/textarea.tsx +1 -0
  962. package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +12 -0
  963. package/corpus/templates/forms/app/components/ui/tooltip.tsx +1 -0
  964. package/corpus/templates/forms/app/global.css +1 -0
  965. package/corpus/templates/forms/app/hooks/use-mobile.ts +1 -0
  966. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +0 -1
  967. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +24 -26
  968. package/corpus/templates/forms/app/pages/FormFillPage.tsx +2 -2
  969. package/corpus/templates/forms/app/pages/FormsListPage.tsx +21 -21
  970. package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +11 -11
  971. package/corpus/templates/forms/app/pages/ResponsesPage.tsx +4 -4
  972. package/corpus/templates/forms/app/root.tsx +11 -8
  973. package/corpus/templates/forms/app/routes/_app.settings.tsx +6 -21
  974. package/corpus/templates/forms/app/routes/form-preview.tsx +3 -3
  975. package/corpus/templates/forms/changelog/2026-07-06-the-form-builder-header-no-longer-shows-the-global-notificat.md +6 -0
  976. package/corpus/templates/macros/app/components/AddExerciseDialog.tsx +1 -1
  977. package/corpus/templates/macros/app/components/AddMealDialog.tsx +1 -1
  978. package/corpus/templates/macros/app/components/AddWeightDialog.tsx +1 -1
  979. package/corpus/templates/macros/app/components/DailyProgress.tsx +7 -7
  980. package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +2 -1
  981. package/corpus/templates/macros/app/components/WeightCard.tsx +10 -10
  982. package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
  983. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +6 -10
  984. package/corpus/templates/macros/app/components/ui/alert-dialog.tsx +1 -0
  985. package/corpus/templates/macros/app/components/ui/label.tsx +1 -0
  986. package/corpus/templates/macros/app/components/ui/select.tsx +1 -0
  987. package/corpus/templates/macros/app/components/ui/sheet.tsx +1 -0
  988. package/corpus/templates/macros/app/components/ui/skeleton.tsx +1 -0
  989. package/corpus/templates/macros/app/components/ui/sonner.tsx +1 -0
  990. package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +12 -0
  991. package/corpus/templates/macros/app/components/ui/tooltip.tsx +1 -0
  992. package/corpus/templates/macros/app/global.css +1 -0
  993. package/corpus/templates/macros/app/root.tsx +17 -14
  994. package/corpus/templates/macros/app/routes/_index.tsx +1 -1
  995. package/corpus/templates/macros/app/routes/analytics.tsx +8 -8
  996. package/corpus/templates/macros/app/routes/settings.tsx +4 -19
  997. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +55 -0
  998. package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +67 -0
  999. package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +35 -1
  1000. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +74 -33
  1001. package/corpus/templates/mail/AGENTS.md +102 -16
  1002. package/corpus/templates/mail/actions/archive-email.ts +67 -11
  1003. package/corpus/templates/mail/actions/manage-snippets.ts +106 -0
  1004. package/corpus/templates/mail/actions/mark-read.ts +45 -11
  1005. package/corpus/templates/mail/actions/send-queued-drafts.ts +77 -42
  1006. package/corpus/templates/mail/actions/star-email.ts +55 -10
  1007. package/corpus/templates/mail/actions/trash-email.ts +48 -9
  1008. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +1 -1
  1009. package/corpus/templates/mail/app/components/ThemeToggle.tsx +6 -6
  1010. package/corpus/templates/mail/app/components/agent-engine-picker.tsx +10 -10
  1011. package/corpus/templates/mail/app/components/email/CodeBlockLangPicker.tsx +4 -3
  1012. package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +5 -5
  1013. package/corpus/templates/mail/app/components/email/ComposeEditor.tsx +109 -10
  1014. package/corpus/templates/mail/app/components/email/ComposeModal.tsx +44 -19
  1015. package/corpus/templates/mail/app/components/email/ComposeSlashMenu.tsx +139 -17
  1016. package/corpus/templates/mail/app/components/email/EmailList.tsx +522 -314
  1017. package/corpus/templates/mail/app/components/email/EmailListItem.tsx +130 -45
  1018. package/corpus/templates/mail/app/components/email/EmailThread.tsx +9 -9
  1019. package/corpus/templates/mail/app/components/email/InlineReplyComposer.tsx +35 -13
  1020. package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +13 -13
  1021. package/corpus/templates/mail/app/components/email/MobileActionBar.tsx +13 -13
  1022. package/corpus/templates/mail/app/components/email/RecipientInput.tsx +53 -42
  1023. package/corpus/templates/mail/app/components/email/SendLaterButton.tsx +5 -4
  1024. package/corpus/templates/mail/app/components/email/SnoozeModal.tsx +1 -1
  1025. package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +6 -6
  1026. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +19 -23
  1027. package/corpus/templates/mail/app/components/layout/HeaderActions.tsx +12 -4
  1028. package/corpus/templates/mail/app/components/layout/SearchBar.tsx +138 -18
  1029. package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +23 -23
  1030. package/corpus/templates/mail/app/components/settings/SnippetsSection.tsx +303 -0
  1031. package/corpus/templates/mail/app/components/ui/alert-dialog.tsx +1 -0
  1032. package/corpus/templates/mail/app/components/ui/badge.tsx +1 -0
  1033. package/corpus/templates/mail/app/components/ui/button.tsx +1 -0
  1034. package/corpus/templates/mail/app/components/ui/calendar.tsx +1 -1
  1035. package/corpus/templates/mail/app/components/ui/command.tsx +1 -1
  1036. package/corpus/templates/mail/app/components/ui/dialog.tsx +1 -0
  1037. package/corpus/templates/mail/app/components/ui/drawer.tsx +1 -0
  1038. package/corpus/templates/mail/app/components/ui/dropdown-menu.tsx +1 -0
  1039. package/corpus/templates/mail/app/components/ui/popover.tsx +1 -0
  1040. package/corpus/templates/mail/app/components/ui/select.tsx +1 -0
  1041. package/corpus/templates/mail/app/components/ui/skeleton.tsx +1 -0
  1042. package/corpus/templates/mail/app/components/ui/spinner.tsx +1 -0
  1043. package/corpus/templates/mail/app/components/ui/switch.tsx +1 -0
  1044. package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +12 -0
  1045. package/corpus/templates/mail/app/components/ui/tooltip.tsx +1 -0
  1046. package/corpus/templates/mail/app/global.css +20 -3
  1047. package/corpus/templates/mail/app/hooks/use-emails.ts +187 -0
  1048. package/corpus/templates/mail/app/hooks/use-snippets.ts +103 -0
  1049. package/corpus/templates/mail/app/i18n/ar-SA.ts +17 -0
  1050. package/corpus/templates/mail/app/i18n/de-DE.ts +18 -0
  1051. package/corpus/templates/mail/app/i18n/en-US.ts +17 -0
  1052. package/corpus/templates/mail/app/i18n/es-ES.ts +17 -0
  1053. package/corpus/templates/mail/app/i18n/fr-FR.ts +18 -0
  1054. package/corpus/templates/mail/app/i18n/hi-IN.ts +17 -0
  1055. package/corpus/templates/mail/app/i18n/ja-JP.ts +18 -0
  1056. package/corpus/templates/mail/app/i18n/ko-KR.ts +17 -0
  1057. package/corpus/templates/mail/app/i18n/pt-BR.ts +17 -0
  1058. package/corpus/templates/mail/app/i18n/zh-CN.ts +16 -0
  1059. package/corpus/templates/mail/app/i18n/zh-TW.ts +16 -0
  1060. package/corpus/templates/mail/app/pages/DraftQueuePage.tsx +14 -14
  1061. package/corpus/templates/mail/app/pages/InboxPage.tsx +3 -3
  1062. package/corpus/templates/mail/app/pages/NotFound.tsx +2 -1
  1063. package/corpus/templates/mail/app/pages/SettingsPage.tsx +64 -66
  1064. package/corpus/templates/mail/app/root.tsx +21 -18
  1065. package/corpus/templates/mail/app/routes/_index.tsx +2 -1
  1066. package/corpus/templates/mail/app/routes/email.tsx +2 -2
  1067. package/corpus/templates/mail/changelog/2026-07-06-a-queued-draft-can-no-longer-be-sent-twice-by-simultaneous-s.md +6 -0
  1068. package/corpus/templates/mail/changelog/2026-07-06-bulk-archive-trash-star-and-mark-read-now-complete-in-one-fa.md +6 -0
  1069. package/corpus/templates/mail/changelog/2026-07-06-dark-mode-sidebars-and-notifications-now-use-the-softer-gray.md +6 -0
  1070. package/corpus/templates/mail/changelog/2026-07-06-inbox-automations-pick-up-new-mail-faster.md +6 -0
  1071. package/corpus/templates/mail/changelog/2026-07-06-inbox-lists-stay-fast-as-scheduled-and-snoozed-mail-accumula.md +6 -0
  1072. package/corpus/templates/mail/changelog/2026-07-06-long-inboxes-scroll-smoothly-and-stay-fast-as-more-mail-load.md +6 -0
  1073. package/corpus/templates/mail/changelog/2026-07-06-paste-or-drop-images-straight-into-the-composer-to-send-them.md +6 -0
  1074. package/corpus/templates/mail/changelog/2026-07-06-save-reusable-snippets-and-insert-them-from-the-compose-slas.md +6 -0
  1075. package/corpus/templates/mail/changelog/2026-07-06-scrolling-older-mail-keeps-loading-correctly-when-no-gmail-a.md +6 -0
  1076. package/corpus/templates/mail/changelog/2026-07-06-search-shows-instant-matches-from-already-loaded-mail-while-.md +6 -0
  1077. package/corpus/templates/mail/changelog/2026-07-06-sends-now-fail-with-a-clear-error-instead-of-quietly-missing.md +6 -0
  1078. package/corpus/templates/mail/changelog/2026-07-06-the-mail-header-no-longer-shows-the-global-notifications-bel.md +6 -0
  1079. package/corpus/templates/mail/package.json +1 -0
  1080. package/corpus/templates/mail/server/db/schema.ts +11 -0
  1081. package/corpus/templates/mail/server/handlers/emails.ts +20 -1
  1082. package/corpus/templates/mail/server/lib/automation-engine.ts +53 -25
  1083. package/corpus/templates/mail/server/lib/google-auth.ts +140 -9
  1084. package/corpus/templates/mail/server/lib/jobs.ts +22 -6
  1085. package/corpus/templates/mail/server/lib/outgoing-email.ts +11 -2
  1086. package/corpus/templates/mail/server/lib/queued-drafts.ts +145 -4
  1087. package/corpus/templates/mail/server/plugins/db.ts +29 -0
  1088. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +55 -0
  1089. package/corpus/templates/plan/app/components/editor/PlanDocumentEditor.tsx +42 -3
  1090. package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -4
  1091. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +20 -20
  1092. package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +3 -2
  1093. package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +2 -2
  1094. package/corpus/templates/plan/app/components/plan/GuestModeBanner.tsx +2 -1
  1095. package/corpus/templates/plan/app/components/plan/LocalCodebasePicker.tsx +8 -8
  1096. package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +6 -1
  1097. package/corpus/templates/plan/app/components/plan/PlanImageViewer.tsx +8 -12
  1098. package/corpus/templates/plan/app/components/plan/PlanMarkdownEditor.tsx +6 -1
  1099. package/corpus/templates/plan/app/components/plan/PlanVisualSurface.tsx +3 -3
  1100. package/corpus/templates/plan/app/components/plan/planBlocks.tsx +4 -4
  1101. package/corpus/templates/plan/app/components/plan/wireframe/kit/rough.tsx +61 -27
  1102. package/corpus/templates/plan/app/components/ui/alert-dialog.tsx +1 -0
  1103. package/corpus/templates/plan/app/components/ui/avatar.tsx +1 -0
  1104. package/corpus/templates/plan/app/components/ui/badge.tsx +1 -0
  1105. package/corpus/templates/plan/app/components/ui/button.tsx +1 -0
  1106. package/corpus/templates/plan/app/components/ui/card.tsx +1 -0
  1107. package/corpus/templates/plan/app/components/ui/checkbox.tsx +1 -0
  1108. package/corpus/templates/plan/app/components/ui/collapsible.tsx +1 -0
  1109. package/corpus/templates/plan/app/components/ui/dialog.tsx +1 -0
  1110. package/corpus/templates/plan/app/components/ui/dropdown-menu.tsx +1 -0
  1111. package/corpus/templates/plan/app/components/ui/input.tsx +1 -0
  1112. package/corpus/templates/plan/app/components/ui/label.tsx +1 -0
  1113. package/corpus/templates/plan/app/components/ui/popover.tsx +1 -0
  1114. package/corpus/templates/plan/app/components/ui/scroll-area.tsx +1 -0
  1115. package/corpus/templates/plan/app/components/ui/select.tsx +1 -0
  1116. package/corpus/templates/plan/app/components/ui/separator.tsx +1 -0
  1117. package/corpus/templates/plan/app/components/ui/sheet.tsx +1 -0
  1118. package/corpus/templates/plan/app/components/ui/skeleton.tsx +1 -0
  1119. package/corpus/templates/plan/app/components/ui/sonner.tsx +1 -0
  1120. package/corpus/templates/plan/app/components/ui/spinner.tsx +1 -0
  1121. package/corpus/templates/plan/app/components/ui/textarea.tsx +1 -0
  1122. package/corpus/templates/plan/app/components/ui/toggle-group.tsx +1 -0
  1123. package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +12 -0
  1124. package/corpus/templates/plan/app/components/ui/tooltip.tsx +1 -0
  1125. package/corpus/templates/plan/app/global.css +13 -0
  1126. package/corpus/templates/plan/app/hooks/use-plan-presence.ts +11 -1
  1127. package/corpus/templates/plan/app/lib/plan-access-prompt.ts +74 -0
  1128. package/corpus/templates/plan/app/lib/plan-annotation-runtime.ts +1435 -0
  1129. package/corpus/templates/plan/app/lib/plan-comment-editor-helpers.ts +142 -0
  1130. package/corpus/templates/plan/app/lib/plan-local-bridge.ts +376 -0
  1131. package/corpus/templates/plan/app/lib/plan-native-anchors.ts +682 -0
  1132. package/corpus/templates/plan/app/pages/PlansPage.tsx +216 -2747
  1133. package/corpus/templates/plan/app/root.tsx +13 -10
  1134. package/corpus/templates/plan/app/routes/_index.tsx +1 -2
  1135. package/corpus/templates/plan/app/routes/local-plans.$slug.tsx +1 -1
  1136. package/corpus/templates/plan/app/routes/plans.$id.tsx +1 -2
  1137. package/corpus/templates/plan/app/routes/plans.tsx +1 -2
  1138. package/corpus/templates/plan/app/routes/recaps.$id.tsx +1 -2
  1139. package/corpus/templates/plan/app/routes/recaps.tsx +1 -2
  1140. package/corpus/templates/plan/app/routes/settings.tsx +7 -21
  1141. package/corpus/templates/plan/changelog/2026-07-05-plan-pages-open-at-the-top-unless-a-shared-link-targets-a-sp.md +6 -0
  1142. package/corpus/templates/plan/changelog/2026-07-06-fixed-collaborative-plan-editing-so-content-no-longer-duplic.md +6 -0
  1143. package/corpus/templates/plan/changelog/2026-07-06-fixed-visual-reports-using-excessive-cpu-while-rendering-ske.md +6 -0
  1144. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +55 -0
  1145. package/corpus/templates/slides/app/components/ThemeToggle.tsx +6 -6
  1146. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +5 -5
  1147. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +7 -7
  1148. package/corpus/templates/slides/app/components/deck/ExcalidrawSlide.tsx +2 -1
  1149. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +1 -1
  1150. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +3 -2
  1151. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +15 -14
  1152. package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +7 -7
  1153. package/corpus/templates/slides/app/components/editor/BlockBubbleMenu.tsx +5 -5
  1154. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +6 -6
  1155. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +14 -14
  1156. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +10 -9
  1157. package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +6 -5
  1158. package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +12 -12
  1159. package/corpus/templates/slides/app/components/editor/ImageDropPromptPopover.tsx +4 -3
  1160. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +5 -4
  1161. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +4 -3
  1162. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +2 -1
  1163. package/corpus/templates/slides/app/components/editor/ShareDialog.tsx +10 -10
  1164. package/corpus/templates/slides/app/components/editor/SlideBubbleMenu.tsx +10 -10
  1165. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +6 -6
  1166. package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +2 -1
  1167. package/corpus/templates/slides/app/components/editor/TweaksPanel.tsx +1 -1
  1168. package/corpus/templates/slides/app/components/layout/Header.tsx +2 -2
  1169. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
  1170. package/corpus/templates/slides/app/components/ui/alert-dialog.tsx +1 -0
  1171. package/corpus/templates/slides/app/components/ui/button.tsx +1 -0
  1172. package/corpus/templates/slides/app/components/ui/card.tsx +1 -0
  1173. package/corpus/templates/slides/app/components/ui/dialog.tsx +1 -0
  1174. package/corpus/templates/slides/app/components/ui/dropdown-menu.tsx +1 -0
  1175. package/corpus/templates/slides/app/components/ui/input.tsx +1 -0
  1176. package/corpus/templates/slides/app/components/ui/label.tsx +1 -0
  1177. package/corpus/templates/slides/app/components/ui/popover.tsx +1 -0
  1178. package/corpus/templates/slides/app/components/ui/scroll-area.tsx +1 -0
  1179. package/corpus/templates/slides/app/components/ui/select.tsx +1 -0
  1180. package/corpus/templates/slides/app/components/ui/separator.tsx +1 -0
  1181. package/corpus/templates/slides/app/components/ui/sheet.tsx +1 -0
  1182. package/corpus/templates/slides/app/components/ui/skeleton.tsx +1 -0
  1183. package/corpus/templates/slides/app/components/ui/spinner.tsx +1 -0
  1184. package/corpus/templates/slides/app/components/ui/textarea.tsx +1 -0
  1185. package/corpus/templates/slides/app/components/ui/toast.tsx +1 -0
  1186. package/corpus/templates/slides/app/components/ui/toaster.tsx +1 -0
  1187. package/corpus/templates/slides/app/components/ui/toggle-group.tsx +1 -0
  1188. package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +12 -0
  1189. package/corpus/templates/slides/app/components/ui/tooltip.tsx +1 -0
  1190. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +6 -6
  1191. package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +7 -7
  1192. package/corpus/templates/slides/app/global.css +1 -0
  1193. package/corpus/templates/slides/app/hooks/use-toast.ts +1 -0
  1194. package/corpus/templates/slides/app/pages/DeckEditor.tsx +3 -3
  1195. package/corpus/templates/slides/app/pages/DesignSystems.tsx +1 -1
  1196. package/corpus/templates/slides/app/pages/Index.tsx +14 -17
  1197. package/corpus/templates/slides/app/root.tsx +13 -10
  1198. package/corpus/templates/slides/app/routes/settings.tsx +6 -21
  1199. package/corpus/templates/slides/changelog/2026-07-06-mobile-layouts-no-longer-stack-two-top-headers.md +5 -0
  1200. package/corpus/templates/slides/server/handlers/uploads.ts +7 -2
  1201. package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
  1202. package/dist/agent/durable-background.d.ts +29 -0
  1203. package/dist/agent/durable-background.d.ts.map +1 -1
  1204. package/dist/agent/durable-background.js +46 -0
  1205. package/dist/agent/durable-background.js.map +1 -1
  1206. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  1207. package/dist/agent/engine/ai-sdk-engine.js +7 -2
  1208. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  1209. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  1210. package/dist/agent/engine/anthropic-engine.js +28 -2
  1211. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  1212. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  1213. package/dist/agent/engine/builder-engine.js +1 -1
  1214. package/dist/agent/engine/builder-engine.js.map +1 -1
  1215. package/dist/agent/engine/output-tokens.d.ts +3 -3
  1216. package/dist/agent/engine/output-tokens.d.ts.map +1 -1
  1217. package/dist/agent/engine/output-tokens.js +16 -14
  1218. package/dist/agent/engine/output-tokens.js.map +1 -1
  1219. package/dist/agent/engine/registry.d.ts +3 -3
  1220. package/dist/agent/engine/registry.d.ts.map +1 -1
  1221. package/dist/agent/engine/registry.js +28 -25
  1222. package/dist/agent/engine/registry.js.map +1 -1
  1223. package/dist/agent/engine/translate-ai-sdk.d.ts +14 -2
  1224. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  1225. package/dist/agent/engine/translate-ai-sdk.js +33 -18
  1226. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  1227. package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
  1228. package/dist/agent/engine/translate-anthropic.js +42 -1
  1229. package/dist/agent/engine/translate-anthropic.js.map +1 -1
  1230. package/dist/agent/engine/types.d.ts +15 -0
  1231. package/dist/agent/engine/types.d.ts.map +1 -1
  1232. package/dist/agent/engine/types.js.map +1 -1
  1233. package/dist/agent/model-config.d.ts +8 -0
  1234. package/dist/agent/model-config.d.ts.map +1 -1
  1235. package/dist/agent/model-config.js +86 -0
  1236. package/dist/agent/model-config.js.map +1 -1
  1237. package/dist/agent/production-agent.d.ts +91 -5
  1238. package/dist/agent/production-agent.d.ts.map +1 -1
  1239. package/dist/agent/production-agent.js +389 -180
  1240. package/dist/agent/production-agent.js.map +1 -1
  1241. package/dist/agent/runtime-context.d.ts +29 -0
  1242. package/dist/agent/runtime-context.d.ts.map +1 -1
  1243. package/dist/agent/runtime-context.js +40 -11
  1244. package/dist/agent/runtime-context.js.map +1 -1
  1245. package/dist/agent/tool-result-images.d.ts +49 -0
  1246. package/dist/agent/tool-result-images.d.ts.map +1 -0
  1247. package/dist/agent/tool-result-images.js +141 -0
  1248. package/dist/agent/tool-result-images.js.map +1 -0
  1249. package/dist/brand-kit/fig/index.d.ts.map +1 -1
  1250. package/dist/brand-kit/fig/index.js +6 -3
  1251. package/dist/brand-kit/fig/index.js.map +1 -1
  1252. package/dist/client/AgentPanel.d.ts.map +1 -1
  1253. package/dist/client/AgentPanel.js +66 -17
  1254. package/dist/client/AgentPanel.js.map +1 -1
  1255. package/dist/client/AssistantChat.d.ts.map +1 -1
  1256. package/dist/client/AssistantChat.js +72 -40
  1257. package/dist/client/AssistantChat.js.map +1 -1
  1258. package/dist/client/KeepTabOpenNotice.d.ts +55 -0
  1259. package/dist/client/KeepTabOpenNotice.d.ts.map +1 -0
  1260. package/dist/client/KeepTabOpenNotice.js +85 -0
  1261. package/dist/client/KeepTabOpenNotice.js.map +1 -0
  1262. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  1263. package/dist/client/MultiTabAssistantChat.js +2 -1
  1264. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  1265. package/dist/client/RunStuckBanner.d.ts +7 -1
  1266. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  1267. package/dist/client/RunStuckBanner.js +7 -2
  1268. package/dist/client/RunStuckBanner.js.map +1 -1
  1269. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  1270. package/dist/client/chat/run-recovery.js +7 -1
  1271. package/dist/client/chat/run-recovery.js.map +1 -1
  1272. package/dist/client/clipboard.d.ts.map +1 -1
  1273. package/dist/client/clipboard.js +5 -6
  1274. package/dist/client/clipboard.js.map +1 -1
  1275. package/dist/client/components/AgentPresenceChip.d.ts +1 -11
  1276. package/dist/client/components/AgentPresenceChip.d.ts.map +1 -1
  1277. package/dist/client/components/AgentPresenceChip.js +1 -41
  1278. package/dist/client/components/AgentPresenceChip.js.map +1 -1
  1279. package/dist/client/components/LiveCursorOverlay.d.ts +1 -44
  1280. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
  1281. package/dist/client/components/LiveCursorOverlay.js +1 -123
  1282. package/dist/client/components/LiveCursorOverlay.js.map +1 -1
  1283. package/dist/client/components/PresenceBar.d.ts +1 -26
  1284. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  1285. package/dist/client/components/PresenceBar.js +1 -164
  1286. package/dist/client/components/PresenceBar.js.map +1 -1
  1287. package/dist/client/components/RecentEditHighlights.d.ts +1 -42
  1288. package/dist/client/components/RecentEditHighlights.d.ts.map +1 -1
  1289. package/dist/client/components/RecentEditHighlights.js +1 -145
  1290. package/dist/client/components/RecentEditHighlights.js.map +1 -1
  1291. package/dist/client/components/RemoteSelectionRings.d.ts +1 -51
  1292. package/dist/client/components/RemoteSelectionRings.d.ts.map +1 -1
  1293. package/dist/client/components/RemoteSelectionRings.js +1 -129
  1294. package/dist/client/components/RemoteSelectionRings.js.map +1 -1
  1295. package/dist/client/composer/TiptapComposer.d.ts +4 -0
  1296. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  1297. package/dist/client/composer/TiptapComposer.js +74 -26
  1298. package/dist/client/composer/TiptapComposer.js.map +1 -1
  1299. package/dist/client/db-admin/SqlEditor.d.ts.map +1 -1
  1300. package/dist/client/db-admin/SqlEditor.js +13 -3
  1301. package/dist/client/db-admin/SqlEditor.js.map +1 -1
  1302. package/dist/client/dynamic-suggestions.d.ts.map +1 -1
  1303. package/dist/client/dynamic-suggestions.js +7 -1
  1304. package/dist/client/dynamic-suggestions.js.map +1 -1
  1305. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  1306. package/dist/client/extensions/ExtensionViewer.js +7 -7
  1307. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  1308. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  1309. package/dist/client/extensions/ExtensionsListPage.js +5 -7
  1310. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  1311. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  1312. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  1313. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  1314. package/dist/client/host-bridge.d.ts +2 -0
  1315. package/dist/client/host-bridge.d.ts.map +1 -1
  1316. package/dist/client/host-bridge.js +26 -10
  1317. package/dist/client/host-bridge.js.map +1 -1
  1318. package/dist/client/i18n.d.ts +1 -0
  1319. package/dist/client/i18n.d.ts.map +1 -1
  1320. package/dist/client/i18n.js +3 -1
  1321. package/dist/client/i18n.js.map +1 -1
  1322. package/dist/client/index.d.ts +2 -1
  1323. package/dist/client/index.d.ts.map +1 -1
  1324. package/dist/client/index.js +2 -1
  1325. package/dist/client/index.js.map +1 -1
  1326. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  1327. package/dist/client/resources/McpIntegrationDialog.js +12 -31
  1328. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  1329. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +3 -1
  1330. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
  1331. package/dist/client/rich-markdown-editor/SharedRichEditor.js +2 -1
  1332. package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
  1333. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts +3 -1
  1334. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
  1335. package/dist/client/rich-markdown-editor/useCollabReconcile.js +6 -2
  1336. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
  1337. package/dist/client/settings/SettingsPanel.d.ts +3 -1
  1338. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  1339. package/dist/client/settings/SettingsPanel.js +103 -9
  1340. package/dist/client/settings/SettingsPanel.js.map +1 -1
  1341. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  1342. package/dist/client/settings/SettingsTabsPage.js +5 -5
  1343. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  1344. package/dist/client/settings/index.d.ts +1 -1
  1345. package/dist/client/settings/index.d.ts.map +1 -1
  1346. package/dist/client/settings/index.js +1 -1
  1347. package/dist/client/settings/index.js.map +1 -1
  1348. package/dist/client/sharing/VisibilityBadge.d.ts +1 -10
  1349. package/dist/client/sharing/VisibilityBadge.d.ts.map +1 -1
  1350. package/dist/client/sharing/VisibilityBadge.js +1 -18
  1351. package/dist/client/sharing/VisibilityBadge.js.map +1 -1
  1352. package/dist/client/use-run-stuck-detection.d.ts +8 -1
  1353. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  1354. package/dist/client/use-run-stuck-detection.js +3 -2
  1355. package/dist/client/use-run-stuck-detection.js.map +1 -1
  1356. package/dist/coding-tools/run-code.d.ts +36 -0
  1357. package/dist/coding-tools/run-code.d.ts.map +1 -1
  1358. package/dist/coding-tools/run-code.js +333 -62
  1359. package/dist/coding-tools/run-code.js.map +1 -1
  1360. package/dist/coding-tools/sandbox/background.d.ts +141 -0
  1361. package/dist/coding-tools/sandbox/background.d.ts.map +1 -0
  1362. package/dist/coding-tools/sandbox/background.js +279 -0
  1363. package/dist/coding-tools/sandbox/background.js.map +1 -0
  1364. package/dist/coding-tools/sandbox/executions-store.d.ts +138 -0
  1365. package/dist/coding-tools/sandbox/executions-store.d.ts.map +1 -0
  1366. package/dist/coding-tools/sandbox/executions-store.js +380 -0
  1367. package/dist/coding-tools/sandbox/executions-store.js.map +1 -0
  1368. package/dist/coding-tools/sandbox/index.d.ts +22 -13
  1369. package/dist/coding-tools/sandbox/index.d.ts.map +1 -1
  1370. package/dist/coding-tools/sandbox/index.js +31 -13
  1371. package/dist/coding-tools/sandbox/index.js.map +1 -1
  1372. package/dist/coding-tools/sandbox/local-child-process-adapter.d.ts.map +1 -1
  1373. package/dist/coding-tools/sandbox/local-child-process-adapter.js +61 -4
  1374. package/dist/coding-tools/sandbox/local-child-process-adapter.js.map +1 -1
  1375. package/dist/collab/awareness.d.ts +2 -2
  1376. package/dist/collab/awareness.d.ts.map +1 -1
  1377. package/dist/collab/client.d.ts +16 -12
  1378. package/dist/collab/client.d.ts.map +1 -1
  1379. package/dist/collab/client.js +744 -496
  1380. package/dist/collab/client.js.map +1 -1
  1381. package/dist/collab/presence.d.ts +2 -20
  1382. package/dist/collab/presence.d.ts.map +1 -1
  1383. package/dist/collab/presence.js +3 -0
  1384. package/dist/collab/presence.js.map +1 -1
  1385. package/dist/collab/recent-edits.d.ts +2 -37
  1386. package/dist/collab/recent-edits.d.ts.map +1 -1
  1387. package/dist/collab/recent-edits.js +2 -9
  1388. package/dist/collab/recent-edits.js.map +1 -1
  1389. package/dist/collab/routes.d.ts +1 -1
  1390. package/dist/data-programs/actions.d.ts +19 -0
  1391. package/dist/data-programs/actions.d.ts.map +1 -0
  1392. package/dist/data-programs/actions.js +279 -0
  1393. package/dist/data-programs/actions.js.map +1 -0
  1394. package/dist/data-programs/contract.d.ts +70 -0
  1395. package/dist/data-programs/contract.d.ts.map +1 -0
  1396. package/dist/data-programs/contract.js +225 -0
  1397. package/dist/data-programs/contract.js.map +1 -0
  1398. package/dist/data-programs/execute.d.ts +96 -0
  1399. package/dist/data-programs/execute.d.ts.map +1 -0
  1400. package/dist/data-programs/execute.js +454 -0
  1401. package/dist/data-programs/execute.js.map +1 -0
  1402. package/dist/data-programs/index.d.ts +11 -0
  1403. package/dist/data-programs/index.d.ts.map +1 -0
  1404. package/dist/data-programs/index.js +11 -0
  1405. package/dist/data-programs/index.js.map +1 -0
  1406. package/dist/data-programs/schema.d.ts +517 -0
  1407. package/dist/data-programs/schema.d.ts.map +1 -0
  1408. package/dist/data-programs/schema.js +138 -0
  1409. package/dist/data-programs/schema.js.map +1 -0
  1410. package/dist/data-programs/store.d.ts +158 -0
  1411. package/dist/data-programs/store.d.ts.map +1 -0
  1412. package/dist/data-programs/store.js +493 -0
  1413. package/dist/data-programs/store.js.map +1 -0
  1414. package/dist/deploy/build.d.ts.map +1 -1
  1415. package/dist/deploy/build.js +34 -0
  1416. package/dist/deploy/build.js.map +1 -1
  1417. package/dist/extensions/actions.js +2 -2
  1418. package/dist/extensions/actions.js.map +1 -1
  1419. package/dist/file-upload/builder.d.ts.map +1 -1
  1420. package/dist/file-upload/builder.js +9 -0
  1421. package/dist/file-upload/builder.js.map +1 -1
  1422. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  1423. package/dist/integrations/webhook-handler.js +21 -10
  1424. package/dist/integrations/webhook-handler.js.map +1 -1
  1425. package/dist/local-artifacts/index.js +1 -1
  1426. package/dist/local-artifacts/index.js.map +1 -1
  1427. package/dist/localization/default-messages.d.ts +0 -1
  1428. package/dist/localization/default-messages.d.ts.map +1 -1
  1429. package/dist/localization/default-messages.js +1 -2
  1430. package/dist/localization/default-messages.js.map +1 -1
  1431. package/dist/mcp-client/index.d.ts +9 -0
  1432. package/dist/mcp-client/index.d.ts.map +1 -1
  1433. package/dist/mcp-client/index.js +23 -0
  1434. package/dist/mcp-client/index.js.map +1 -1
  1435. package/dist/observability/routes.d.ts +5 -5
  1436. package/dist/onboarding/default-steps.d.ts.map +1 -1
  1437. package/dist/onboarding/default-steps.js +2 -2
  1438. package/dist/onboarding/default-steps.js.map +1 -1
  1439. package/dist/progress/routes.d.ts +1 -1
  1440. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  1441. package/dist/resources/store.d.ts.map +1 -1
  1442. package/dist/resources/store.js +35 -3
  1443. package/dist/resources/store.js.map +1 -1
  1444. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  1445. package/dist/scripts/agent-engines/list-agent-engines.js +4 -8
  1446. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  1447. package/dist/scripts/agent-engines/test-agent-engine.d.ts.map +1 -1
  1448. package/dist/scripts/agent-engines/test-agent-engine.js +7 -2
  1449. package/dist/scripts/agent-engines/test-agent-engine.js.map +1 -1
  1450. package/dist/scripts/db/tool-mode.js +3 -3
  1451. package/dist/scripts/db/tool-mode.js.map +1 -1
  1452. package/dist/scripts/resources/migrate-learnings.d.ts +5 -1
  1453. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
  1454. package/dist/scripts/resources/migrate-learnings.js +8 -10
  1455. package/dist/scripts/resources/migrate-learnings.js.map +1 -1
  1456. package/dist/secrets/routes.d.ts +9 -9
  1457. package/dist/server/agent-chat-plugin.d.ts +20 -6
  1458. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  1459. package/dist/server/agent-chat-plugin.js +138 -59
  1460. package/dist/server/agent-chat-plugin.js.map +1 -1
  1461. package/dist/server/agent-discovery.d.ts.map +1 -1
  1462. package/dist/server/agent-discovery.js +62 -8
  1463. package/dist/server/agent-discovery.js.map +1 -1
  1464. package/dist/server/auth.d.ts.map +1 -1
  1465. package/dist/server/auth.js +75 -3
  1466. package/dist/server/auth.js.map +1 -1
  1467. package/dist/server/builder-design-systems.js +2 -2
  1468. package/dist/server/builder-design-systems.js.map +1 -1
  1469. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  1470. package/dist/server/core-routes-plugin.js +100 -20
  1471. package/dist/server/core-routes-plugin.js.map +1 -1
  1472. package/dist/server/credential-provider.d.ts +6 -3
  1473. package/dist/server/credential-provider.d.ts.map +1 -1
  1474. package/dist/server/credential-provider.js +25 -8
  1475. package/dist/server/credential-provider.js.map +1 -1
  1476. package/dist/server/csrf.d.ts.map +1 -1
  1477. package/dist/server/csrf.js +3 -0
  1478. package/dist/server/csrf.js.map +1 -1
  1479. package/dist/server/oauth-helpers.d.ts.map +1 -1
  1480. package/dist/server/oauth-helpers.js +9 -1
  1481. package/dist/server/oauth-helpers.js.map +1 -1
  1482. package/dist/server/onboarding-html.d.ts.map +1 -1
  1483. package/dist/server/onboarding-html.js +80 -48
  1484. package/dist/server/onboarding-html.js.map +1 -1
  1485. package/dist/server/prompts/shared-rules.js +2 -2
  1486. package/dist/server/prompts/shared-rules.js.map +1 -1
  1487. package/dist/server/transcribe-voice.d.ts +1 -1
  1488. package/dist/server/transcribe-voice.d.ts.map +1 -1
  1489. package/dist/server/transcribe-voice.js +77 -15
  1490. package/dist/server/transcribe-voice.js.map +1 -1
  1491. package/dist/styles/agent-native.css +57 -45
  1492. package/dist/templates/default/.agents/skills/actions/SKILL.md +55 -0
  1493. package/dist/templates/default/AGENTS.md +11 -14
  1494. package/dist/templates/default/actions/navigate.ts +1 -1
  1495. package/dist/templates/default/app/i18n/ar-SA.ts +0 -1
  1496. package/dist/templates/default/app/i18n/de-DE.ts +0 -1
  1497. package/dist/templates/default/app/i18n/en-US.ts +0 -1
  1498. package/dist/templates/default/app/i18n/es-ES.ts +0 -1
  1499. package/dist/templates/default/app/i18n/fr-FR.ts +0 -1
  1500. package/dist/templates/default/app/i18n/hi-IN.ts +0 -1
  1501. package/dist/templates/default/app/i18n/ja-JP.ts +0 -1
  1502. package/dist/templates/default/app/i18n/ko-KR.ts +0 -1
  1503. package/dist/templates/default/app/i18n/pt-BR.ts +0 -1
  1504. package/dist/templates/default/app/i18n/zh-CN.ts +0 -1
  1505. package/dist/templates/default/app/i18n/zh-TW.ts +0 -1
  1506. package/dist/templates/default/app/routes/settings.tsx +22 -33
  1507. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +20 -7
  1508. package/dist/templates/headless/AGENTS.md +9 -6
  1509. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +55 -0
  1510. package/dist/templates/workspace-core/.agents/skills/data-programs/SKILL.md +128 -0
  1511. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +10 -4
  1512. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  1513. package/dist/vite/agents-bundle-plugin.js +26 -1
  1514. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  1515. package/dist/vite/client.d.ts.map +1 -1
  1516. package/dist/vite/client.js +11 -0
  1517. package/dist/vite/client.js.map +1 -1
  1518. package/docs/content/agent-native-toolkit.mdx +87 -146
  1519. package/docs/content/cloneable-saas.mdx +19 -19
  1520. package/docs/content/components.mdx +16 -4
  1521. package/docs/content/data-programs.mdx +329 -0
  1522. package/docs/content/deployment.mdx +9 -9
  1523. package/docs/content/extensions.mdx +8 -7
  1524. package/docs/content/generative-ui.mdx +5 -3
  1525. package/docs/content/key-concepts.mdx +6 -9
  1526. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +100 -70
  1527. package/docs/content/locales/ar-SA/cloneable-saas.mdx +19 -19
  1528. package/docs/content/locales/ar-SA/components.mdx +12 -2
  1529. package/docs/content/locales/ar-SA/data-programs.mdx +329 -0
  1530. package/docs/content/locales/ar-SA/deployment.mdx +8 -9
  1531. package/docs/content/locales/ar-SA/extensions.mdx +6 -4
  1532. package/docs/content/locales/ar-SA/key-concepts.mdx +7 -9
  1533. package/docs/content/locales/ar-SA/real-time-collaboration.mdx +9 -10
  1534. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +100 -74
  1535. package/docs/content/locales/de-DE/cloneable-saas.mdx +19 -19
  1536. package/docs/content/locales/de-DE/components.mdx +12 -2
  1537. package/docs/content/locales/de-DE/data-programs.mdx +329 -0
  1538. package/docs/content/locales/de-DE/deployment.mdx +8 -9
  1539. package/docs/content/locales/de-DE/extensions.mdx +6 -4
  1540. package/docs/content/locales/de-DE/key-concepts.mdx +8 -10
  1541. package/docs/content/locales/de-DE/real-time-collaboration.mdx +9 -10
  1542. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +100 -74
  1543. package/docs/content/locales/es-ES/cloneable-saas.mdx +19 -19
  1544. package/docs/content/locales/es-ES/components.mdx +12 -2
  1545. package/docs/content/locales/es-ES/data-programs.mdx +329 -0
  1546. package/docs/content/locales/es-ES/deployment.mdx +8 -9
  1547. package/docs/content/locales/es-ES/extensions.mdx +6 -4
  1548. package/docs/content/locales/es-ES/key-concepts.mdx +8 -10
  1549. package/docs/content/locales/es-ES/real-time-collaboration.mdx +9 -10
  1550. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +100 -76
  1551. package/docs/content/locales/fr-FR/cloneable-saas.mdx +19 -19
  1552. package/docs/content/locales/fr-FR/components.mdx +12 -2
  1553. package/docs/content/locales/fr-FR/data-programs.mdx +329 -0
  1554. package/docs/content/locales/fr-FR/deployment.mdx +8 -9
  1555. package/docs/content/locales/fr-FR/extensions.mdx +6 -4
  1556. package/docs/content/locales/fr-FR/key-concepts.mdx +8 -10
  1557. package/docs/content/locales/fr-FR/real-time-collaboration.mdx +9 -10
  1558. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +100 -71
  1559. package/docs/content/locales/hi-IN/cloneable-saas.mdx +19 -19
  1560. package/docs/content/locales/hi-IN/components.mdx +20 -10
  1561. package/docs/content/locales/hi-IN/data-programs.mdx +329 -0
  1562. package/docs/content/locales/hi-IN/deployment.mdx +8 -9
  1563. package/docs/content/locales/hi-IN/extensions.mdx +6 -4
  1564. package/docs/content/locales/hi-IN/key-concepts.mdx +8 -10
  1565. package/docs/content/locales/hi-IN/real-time-collaboration.mdx +9 -10
  1566. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +100 -64
  1567. package/docs/content/locales/ja-JP/cloneable-saas.mdx +19 -19
  1568. package/docs/content/locales/ja-JP/components.mdx +12 -2
  1569. package/docs/content/locales/ja-JP/data-programs.mdx +329 -0
  1570. package/docs/content/locales/ja-JP/deployment.mdx +8 -9
  1571. package/docs/content/locales/ja-JP/extensions.mdx +6 -4
  1572. package/docs/content/locales/ja-JP/key-concepts.mdx +9 -11
  1573. package/docs/content/locales/ja-JP/real-time-collaboration.mdx +9 -10
  1574. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +100 -60
  1575. package/docs/content/locales/ko-KR/cloneable-saas.mdx +19 -19
  1576. package/docs/content/locales/ko-KR/components.mdx +20 -10
  1577. package/docs/content/locales/ko-KR/data-programs.mdx +329 -0
  1578. package/docs/content/locales/ko-KR/deployment.mdx +8 -9
  1579. package/docs/content/locales/ko-KR/extensions.mdx +16 -14
  1580. package/docs/content/locales/ko-KR/key-concepts.mdx +9 -11
  1581. package/docs/content/locales/ko-KR/real-time-collaboration.mdx +9 -10
  1582. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +100 -74
  1583. package/docs/content/locales/pt-BR/cloneable-saas.mdx +19 -19
  1584. package/docs/content/locales/pt-BR/components.mdx +12 -2
  1585. package/docs/content/locales/pt-BR/data-programs.mdx +329 -0
  1586. package/docs/content/locales/pt-BR/deployment.mdx +8 -9
  1587. package/docs/content/locales/pt-BR/extensions.mdx +6 -4
  1588. package/docs/content/locales/pt-BR/key-concepts.mdx +8 -11
  1589. package/docs/content/locales/pt-BR/real-time-collaboration.mdx +9 -10
  1590. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +100 -58
  1591. package/docs/content/locales/zh-CN/cloneable-saas.mdx +19 -19
  1592. package/docs/content/locales/zh-CN/components.mdx +20 -10
  1593. package/docs/content/locales/zh-CN/data-programs.mdx +329 -0
  1594. package/docs/content/locales/zh-CN/deployment.mdx +7 -9
  1595. package/docs/content/locales/zh-CN/extensions.mdx +16 -14
  1596. package/docs/content/locales/zh-CN/key-concepts.mdx +7 -11
  1597. package/docs/content/locales/zh-CN/real-time-collaboration.mdx +10 -11
  1598. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +100 -58
  1599. package/docs/content/locales/zh-TW/cloneable-saas.mdx +19 -19
  1600. package/docs/content/locales/zh-TW/components.mdx +20 -10
  1601. package/docs/content/locales/zh-TW/data-programs.mdx +329 -0
  1602. package/docs/content/locales/zh-TW/deployment.mdx +7 -9
  1603. package/docs/content/locales/zh-TW/extensions.mdx +16 -14
  1604. package/docs/content/locales/zh-TW/key-concepts.mdx +7 -11
  1605. package/docs/content/locales/zh-TW/real-time-collaboration.mdx +10 -11
  1606. package/docs/content/real-time-collaboration.mdx +10 -11
  1607. package/docs/content/toolkit-app-adapters.mdx +46 -0
  1608. package/docs/content/toolkit-collaboration-ui.mdx +48 -0
  1609. package/docs/content/toolkit-sharing-ui.mdx +33 -0
  1610. package/docs/content/toolkit-shell-hooks.mdx +27 -0
  1611. package/docs/content/toolkit-ui.mdx +69 -0
  1612. package/package.json +6 -2
  1613. package/src/templates/default/.agents/skills/actions/SKILL.md +55 -0
  1614. package/src/templates/default/AGENTS.md +11 -14
  1615. package/src/templates/default/actions/navigate.spec.ts +53 -0
  1616. package/src/templates/default/actions/navigate.ts +1 -1
  1617. package/src/templates/default/app/i18n/ar-SA.ts +0 -1
  1618. package/src/templates/default/app/i18n/de-DE.ts +0 -1
  1619. package/src/templates/default/app/i18n/en-US.ts +0 -1
  1620. package/src/templates/default/app/i18n/es-ES.ts +0 -1
  1621. package/src/templates/default/app/i18n/fr-FR.ts +0 -1
  1622. package/src/templates/default/app/i18n/hi-IN.ts +0 -1
  1623. package/src/templates/default/app/i18n/ja-JP.ts +0 -1
  1624. package/src/templates/default/app/i18n/ko-KR.ts +0 -1
  1625. package/src/templates/default/app/i18n/pt-BR.ts +0 -1
  1626. package/src/templates/default/app/i18n/zh-CN.ts +0 -1
  1627. package/src/templates/default/app/i18n/zh-TW.ts +0 -1
  1628. package/src/templates/default/app/routes/settings.tsx +22 -33
  1629. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +20 -7
  1630. package/src/templates/headless/AGENTS.md +9 -6
  1631. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +55 -0
  1632. package/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +128 -0
  1633. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +10 -4
  1634. package/corpus/templates/design/server/lib/figma-import/clipboard.ts +0 -122
  1635. package/corpus/templates/design/server/lib/figma-import/decode.ts +0 -455
  1636. package/corpus/templates/design/server/lib/figma-import/processor.ts +0 -116
  1637. package/corpus/templates/design/server/lib/figma-import/render-html.ts +0 -397
  1638. package/corpus/templates/design/server/lib/figma-import/types.ts +0 -60
@@ -1 +1 @@
1
- {"version":3,"file":"translate-anthropic.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between the AgentEngine normalized types and\n * @anthropic-ai/sdk's wire types.\n *\n * AnthropicEngine does very little translation because the framework's\n * EngineMessage / EngineTool shapes were modeled on Anthropic's types.\n * The main differences are: camelCase vs snake_case, and that\n * Anthropic uses `input_schema` while we use `inputSchema`.\n *\n * Builder's Gemini-backed gateway requires `tool_name` and `tool_input` on\n * every `tool_result` block. Use `engineMessagesToBuilderGatewayAnthropic` for\n * that path. The native Anthropic API keeps the strict `tool_result` shape\n * (`engineMessagesToAnthropic`).\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → Anthropic.Tool\n// ---------------------------------------------------------------------------\n\nconst ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS = [\n \"oneOf\",\n \"anyOf\",\n \"allOf\",\n] as const;\n\ntype JsonSchemaRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonSchemaRecord {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeDbExecAnthropicInputSchema(\n schema: EngineTool[\"inputSchema\"],\n): Anthropic.Tool[\"input_schema\"] {\n const sourceProperties = isRecord(schema.properties) ? schema.properties : {};\n const statements = isRecord(sourceProperties.statements)\n ? { ...sourceProperties.statements }\n : {\n type: \"string\",\n description: \"JSON array of write statements to execute.\",\n };\n const description =\n typeof statements.description === \"string\" &&\n statements.description.trim().length > 0\n ? `${statements.description} For a single write, pass a one-item JSON array.`\n : \"JSON array of write statements to execute. For a single write, pass a one-item JSON array.\";\n statements.description = description;\n\n const properties: JsonSchemaRecord = { statements };\n if (isRecord(sourceProperties.format)) {\n properties.format = sourceProperties.format;\n }\n\n return {\n type: \"object\",\n properties,\n required: [\"statements\"],\n additionalProperties: false,\n };\n}\n\nfunction normalizeAnthropicInputSchema(\n toolName: string,\n schema: EngineTool[\"inputSchema\"],\n): Anthropic.Tool[\"input_schema\"] {\n if (toolName === \"db-exec\") {\n return normalizeDbExecAnthropicInputSchema(schema);\n }\n\n if (\n !ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS.some((key) => key in schema)\n ) {\n return schema as Anthropic.Tool[\"input_schema\"];\n }\n\n const normalized: Record<string, unknown> = { ...schema };\n for (const key of ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS) {\n delete normalized[key];\n }\n normalized.type = \"object\";\n return normalized as Anthropic.Tool[\"input_schema\"];\n}\n\nexport function engineToolToAnthropic(tool: EngineTool): Anthropic.Tool {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: normalizeAnthropicInputSchema(tool.name, tool.inputSchema),\n };\n}\n\nexport function engineToolsToAnthropic(tools: EngineTool[]): Anthropic.Tool[] {\n return tools.map(engineToolToAnthropic);\n}\n\n// ---------------------------------------------------------------------------\n// Tool result backfill (Gemini / Builder gateway)\n// ---------------------------------------------------------------------------\n\n/** JSON.stringify for tool_use inputs; never throws. */\nexport function stringifyToolUseInputForGateway(input: unknown): string {\n try {\n if (input === undefined || input === null) return \"{}\";\n return JSON.stringify(input);\n } catch {\n return \"{}\";\n }\n}\n\n/** Same lead-in as structured-history replay when a tool_result cannot be paired. */\nexport const UNMATCHED_TOOL_RESULT_REPLAY_PREFIX =\n \"(Omitted unmatched tool results from replayed history.)\";\n\n/**\n * Human/LLM-visible note when a tool_result cannot be matched to a tool_use\n * (replay from DB, or malformed engine history). Preserves tool_use_id and\n * a truncated payload instead of silently dropping the turn.\n */\nexport function unmatchedToolResultReplayText(part: {\n toolCallId: string;\n content: unknown;\n isError?: boolean;\n}): string {\n const max = 2000;\n let body =\n typeof part.content === \"string\"\n ? part.content\n : part.content === undefined || part.content === null\n ? \"\"\n : (() => {\n try {\n return JSON.stringify(part.content);\n } catch {\n return String(part.content);\n }\n })();\n if (body.length > max) body = `${body.slice(0, max)}…`;\n const err = part.isError ? \" isError=true\" : \"\";\n return `${UNMATCHED_TOOL_RESULT_REPLAY_PREFIX} [tool_use_id=${part.toolCallId}${err}] ${body}`;\n}\n\nfunction interruptedToolResultPart(part: {\n id: string;\n name: string;\n input: unknown;\n}): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId: part.id,\n toolName: part.name,\n toolInput: stringifyToolUseInputForGateway(part.input),\n content: \"Interrupted before this tool returned a result.\",\n };\n}\n\n/**\n * Ensure every `tool-result` has a non-empty `toolName` and `toolInput` string,\n * using the matching assistant `tool-call` in the same conversation.\n * Assistant `tool-call` blocks without an immediately following result get a\n * synthetic interrupted result so replayed history stays provider-protocol safe.\n * Orphan tool-results (no resolvable tool name) become `text` notes so nothing\n * is silently dropped from replayed history.\n */\nexport function backfillEngineMessagesToolResults(\n messages: EngineMessage[],\n): EngineMessage[] {\n // Walk messages in order. User tool-result blocks are valid only when they\n // answer the immediately preceding assistant tool-call turn. This prevents\n // older tool-results from being backfilled with later, unrelated tool-calls\n // when ids are reused (e.g. `continuation_tc_1` reset across adapter\n // recreations).\n const toolUseById = new Map<string, { name: string; input: unknown }>();\n const out: EngineMessage[] = [];\n let pendingToolUses: Array<{ id: string; name: string; input: unknown }> = [];\n\n const flushInterruptedToolResults = () => {\n if (pendingToolUses.length === 0) return;\n out.push({\n role: \"user\",\n content: pendingToolUses.map(interruptedToolResultPart),\n });\n pendingToolUses = [];\n };\n\n for (const msg of messages) {\n if (msg.role === \"assistant\") {\n flushInterruptedToolResults();\n for (const part of msg.content) {\n if (part.type === \"tool-call\") {\n toolUseById.set(part.id, { name: part.name, input: part.input });\n }\n }\n out.push(msg);\n pendingToolUses = msg.content\n .filter(\n (part): part is Extract<EngineContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n )\n .map((part) => ({\n id: part.id,\n name: part.name,\n input: part.input,\n }));\n continue;\n }\n if (msg.role !== \"user\") {\n flushInterruptedToolResults();\n out.push(msg);\n continue;\n }\n const newContent: EngineContentPart[] = [];\n const pendingById = new Map(\n pendingToolUses.map((part) => [part.id, part] as const),\n );\n const matchedPendingToolResults = new Map<string, EngineContentPart>();\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") {\n newContent.push(part);\n continue;\n }\n const lookup = toolUseById.get(part.toolCallId);\n const pendingLookup = pendingById.get(part.toolCallId);\n const toolName =\n typeof part.toolName === \"string\" && part.toolName.trim().length > 0\n ? part.toolName\n : pendingLookup?.name;\n if (!toolName?.trim()) {\n const id =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId != null\n ? String(part.toolCallId).trim()\n : \"\";\n newContent.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: id.length > 0 ? id : \"(missing)\",\n content: part.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n if (pendingToolUses.length > 0 && !pendingLookup) {\n const id =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId != null\n ? String(part.toolCallId).trim()\n : \"\";\n newContent.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: id.length > 0 ? id : \"(missing)\",\n content: part.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n const toolInput =\n typeof part.toolInput === \"string\" && part.toolInput.length > 0\n ? part.toolInput\n : stringifyToolUseInputForGateway(\n pendingLookup?.input ?? lookup?.input,\n );\n const filled: EngineContentPart = {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName,\n toolInput,\n content: part.content,\n ...(part.isError ? { isError: true } : {}),\n };\n if (pendingLookup) {\n matchedPendingToolResults.set(part.toolCallId, filled);\n } else {\n newContent.push(filled);\n }\n }\n if (pendingToolUses.length > 0) {\n const pairedResults = pendingToolUses.map(\n (part) =>\n matchedPendingToolResults.get(part.id) ??\n interruptedToolResultPart(part),\n );\n newContent.unshift(...pairedResults);\n pendingToolUses = [];\n }\n if (newContent.length === 0) {\n out.push({\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: UNMATCHED_TOOL_RESULT_REPLAY_PREFIX,\n },\n ],\n });\n continue;\n }\n out.push({ role: \"user\", content: newContent });\n }\n\n flushInterruptedToolResults();\n\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → Anthropic.MessageParam\n// ---------------------------------------------------------------------------\n\nexport function engineMessageToAnthropic(\n msg: EngineMessage,\n opts?: { builderGateway?: boolean },\n): Anthropic.MessageParam {\n const builderGateway = opts?.builderGateway === true;\n return {\n role: msg.role,\n content: msg.content.map((p) => enginePartToAnthropic(p, builderGateway)),\n };\n}\n\n/** Messages for the Anthropic HTTP API (strict schema — no extra tool_result fields). */\nexport function engineMessagesToAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n const normalized = backfillEngineMessagesToolResults(messages);\n return normalized.map((m) => engineMessageToAnthropic(m));\n}\n\n/**\n * Messages for the Builder LLM gateway (Gemini-backed). Same Anthropic-shaped\n * envelope, but every `tool_result` includes `tool_name` and `tool_input`.\n */\nexport function engineMessagesToBuilderGatewayAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n const normalized = backfillEngineMessagesToolResults(messages);\n return normalized.map((m) =>\n engineMessageToAnthropic(m, { builderGateway: true }),\n );\n}\n\nfunction enginePartToAnthropic(\n part: EngineContentPart,\n builderGateway: boolean,\n): Anthropic.ContentBlockParam {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"image\":\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: part.mediaType,\n data: part.data,\n },\n };\n\n case \"file\":\n if (part.mediaType === \"application/pdf\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: \"application/pdf\",\n data: part.data,\n },\n ...(part.filename ? { title: part.filename } : {}),\n } as any;\n }\n return {\n type: \"text\",\n text: `[Attached file: ${part.filename ?? \"attachment\"} (${part.mediaType})]`,\n };\n\n case \"tool-call\":\n return {\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input as Record<string, unknown>,\n } as any; // tool_use is a ContentBlockParam in Anthropic SDK\n\n case \"tool-result\": {\n if (builderGateway) {\n const tool_name = part.toolName.trim();\n const tool_input = part.toolInput;\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n tool_name,\n tool_input,\n content: part.content,\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n }\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n content: part.content,\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n }\n\n case \"thinking\":\n // Anthropic thinking blocks — pass through with signature for context window continuity\n return {\n type: \"thinking\",\n thinking: part.text,\n signature: part.signature ?? \"\",\n } as any;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic.ContentBlock → EngineContentPart (from final message)\n// ---------------------------------------------------------------------------\n\nexport function anthropicContentToEngine(\n content: Anthropic.ContentBlock[],\n): EngineContentPart[] {\n return content\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\" as const, text: block.text };\n }\n if (block.type === \"tool_use\") {\n return {\n type: \"tool-call\" as const,\n id: block.id,\n name: block.name,\n input: block.input,\n };\n }\n if ((block as any).type === \"thinking\") {\n const b = block as any;\n return {\n type: \"thinking\" as const,\n text: b.thinking ?? \"\",\n signature: b.signature,\n };\n }\n // Unknown block type — skip\n return { type: \"text\" as const, text: \"\" };\n })\n .filter((p) => !(p.type === \"text\" && p.text === \"\"));\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic stream chunk → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Mutable state threaded across `anthropicChunkToEngineEvents` calls within a\n * single stream. Anthropic's `content_block_delta` chunks carry only the block\n * `index`, not the tool-call id/name — those arrive once on the matching\n * `content_block_start`. We remember `index → { id, name }` here so each\n * `input_json_delta` can be surfaced as a `tool-input-delta` carrying the same\n * id/name the consumer expects (mirroring the Builder gateway shape).\n */\nexport interface AnthropicChunkStreamState {\n toolUseByIndex: Map<number, { id: string; name: string }>;\n}\n\nexport function createAnthropicChunkStreamState(): AnthropicChunkStreamState {\n return { toolUseByIndex: new Map() };\n}\n\n/**\n * Translate an Anthropic stream chunk into zero or more EngineEvents.\n * Called in a loop as chunks arrive from client.messages.stream().\n *\n * Pass a per-stream `state` (from `createAnthropicChunkStreamState`) to also\n * emit `tool-input-start` / `tool-input-delta` progress events while a tool\n * call's JSON input streams in. These are progress-only signals: the\n * authoritative `tool-call` blocks are still emitted from `finalMessage()` by\n * the engine, so omitting `state` simply drops the progress events without\n * changing tool dispatch.\n */\nexport function anthropicChunkToEngineEvents(\n chunk: any,\n state?: AnthropicChunkStreamState,\n): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n if (chunk.type === \"content_block_start\") {\n const block = chunk.content_block;\n if (block?.type === \"tool_use\") {\n const id = typeof block.id === \"string\" ? block.id : undefined;\n const name = typeof block.name === \"string\" ? block.name : undefined;\n if (state && typeof chunk.index === \"number\" && id && name) {\n state.toolUseByIndex.set(chunk.index, { id, name });\n }\n events.push({\n type: \"tool-input-start\",\n ...(id ? { id } : {}),\n ...(name ? { name } : {}),\n });\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta?.type === \"text_delta\") {\n events.push({ type: \"text-delta\", text: chunk.delta.text });\n } else if (chunk.delta?.type === \"thinking_delta\") {\n events.push({ type: \"thinking-delta\", text: chunk.delta.thinking ?? \"\" });\n } else if (chunk.delta?.type === \"signature_delta\") {\n // Signature arrives after thinking — emit as a thinking-delta with empty text\n // but carry the signature for the caller to store\n events.push({\n type: \"thinking-delta\",\n text: \"\",\n signature: chunk.delta.signature,\n });\n } else if (chunk.delta?.type === \"input_json_delta\") {\n // Partial JSON for a streaming tool-call input. Surface as countable\n // progress so long tool inputs (e.g. large extension HTML) don't look\n // hung to the agent loop's tool-input activity heartbeat.\n const active =\n state && typeof chunk.index === \"number\"\n ? state.toolUseByIndex.get(chunk.index)\n : undefined;\n events.push({\n type: \"tool-input-delta\",\n ...(active?.id ? { id: active.id } : {}),\n ...(active?.name ? { name: active.name } : {}),\n text:\n typeof chunk.delta.partial_json === \"string\"\n ? chunk.delta.partial_json\n : \"\",\n });\n }\n }\n\n return events;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool_result blocks to append to messages after tool dispatch\n// ---------------------------------------------------------------------------\n\nexport function buildToolResultPart(\n toolCallId: string,\n toolName: string,\n content: string,\n toolInput: unknown = {},\n isError = false,\n): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId,\n toolName,\n toolInput: stringifyToolUseInputForGateway(toolInput),\n content,\n ...(isError ? { isError } : {}),\n };\n}\n"]}
1
+ {"version":3,"file":"translate-anthropic.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between the AgentEngine normalized types and\n * @anthropic-ai/sdk's wire types.\n *\n * AnthropicEngine does very little translation because the framework's\n * EngineMessage / EngineTool shapes were modeled on Anthropic's types.\n * The main differences are: camelCase vs snake_case, and that\n * Anthropic uses `input_schema` while we use `inputSchema`.\n *\n * Builder's Gemini-backed gateway requires `tool_name` and `tool_input` on\n * every `tool_result` block. Use `engineMessagesToBuilderGatewayAnthropic` for\n * that path. The native Anthropic API keeps the strict `tool_result` shape\n * (`engineMessagesToAnthropic`).\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → Anthropic.Tool\n// ---------------------------------------------------------------------------\n\nconst ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS = [\n \"oneOf\",\n \"anyOf\",\n \"allOf\",\n] as const;\n\ntype JsonSchemaRecord = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonSchemaRecord {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeDbExecAnthropicInputSchema(\n schema: EngineTool[\"inputSchema\"],\n): Anthropic.Tool[\"input_schema\"] {\n const sourceProperties = isRecord(schema.properties) ? schema.properties : {};\n const statements = isRecord(sourceProperties.statements)\n ? { ...sourceProperties.statements }\n : {\n type: \"string\",\n description: \"JSON array of write statements to execute.\",\n };\n const description =\n typeof statements.description === \"string\" &&\n statements.description.trim().length > 0\n ? `${statements.description} For a single write, pass a one-item JSON array.`\n : \"JSON array of write statements to execute. For a single write, pass a one-item JSON array.\";\n statements.description = description;\n\n const properties: JsonSchemaRecord = { statements };\n if (isRecord(sourceProperties.format)) {\n properties.format = sourceProperties.format;\n }\n\n return {\n type: \"object\",\n properties,\n required: [\"statements\"],\n additionalProperties: false,\n };\n}\n\nfunction normalizeAnthropicInputSchema(\n toolName: string,\n schema: EngineTool[\"inputSchema\"],\n): Anthropic.Tool[\"input_schema\"] {\n if (toolName === \"db-exec\") {\n return normalizeDbExecAnthropicInputSchema(schema);\n }\n\n if (\n !ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS.some((key) => key in schema)\n ) {\n return schema as Anthropic.Tool[\"input_schema\"];\n }\n\n const normalized: Record<string, unknown> = { ...schema };\n for (const key of ANTHROPIC_UNSUPPORTED_TOP_LEVEL_SCHEMA_KEYS) {\n delete normalized[key];\n }\n normalized.type = \"object\";\n return normalized as Anthropic.Tool[\"input_schema\"];\n}\n\nexport function engineToolToAnthropic(tool: EngineTool): Anthropic.Tool {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: normalizeAnthropicInputSchema(tool.name, tool.inputSchema),\n };\n}\n\nexport function engineToolsToAnthropic(tools: EngineTool[]): Anthropic.Tool[] {\n return tools.map(engineToolToAnthropic);\n}\n\n// ---------------------------------------------------------------------------\n// Tool result backfill (Gemini / Builder gateway)\n// ---------------------------------------------------------------------------\n\n/** JSON.stringify for tool_use inputs; never throws. */\nexport function stringifyToolUseInputForGateway(input: unknown): string {\n try {\n if (input === undefined || input === null) return \"{}\";\n return JSON.stringify(input);\n } catch {\n return \"{}\";\n }\n}\n\n/** Same lead-in as structured-history replay when a tool_result cannot be paired. */\nexport const UNMATCHED_TOOL_RESULT_REPLAY_PREFIX =\n \"(Omitted unmatched tool results from replayed history.)\";\n\n/**\n * Human/LLM-visible note when a tool_result cannot be matched to a tool_use\n * (replay from DB, or malformed engine history). Preserves tool_use_id and\n * a truncated payload instead of silently dropping the turn.\n */\nexport function unmatchedToolResultReplayText(part: {\n toolCallId: string;\n content: unknown;\n isError?: boolean;\n}): string {\n const max = 2000;\n let body =\n typeof part.content === \"string\"\n ? part.content\n : part.content === undefined || part.content === null\n ? \"\"\n : (() => {\n try {\n return JSON.stringify(part.content);\n } catch {\n return String(part.content);\n }\n })();\n if (body.length > max) body = `${body.slice(0, max)}…`;\n const err = part.isError ? \" isError=true\" : \"\";\n return `${UNMATCHED_TOOL_RESULT_REPLAY_PREFIX} [tool_use_id=${part.toolCallId}${err}] ${body}`;\n}\n\nfunction interruptedToolResultPart(part: {\n id: string;\n name: string;\n input: unknown;\n}): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId: part.id,\n toolName: part.name,\n toolInput: stringifyToolUseInputForGateway(part.input),\n content: \"Interrupted before this tool returned a result.\",\n };\n}\n\n/**\n * Ensure every `tool-result` has a non-empty `toolName` and `toolInput` string,\n * using the matching assistant `tool-call` in the same conversation.\n * Assistant `tool-call` blocks without an immediately following result get a\n * synthetic interrupted result so replayed history stays provider-protocol safe.\n * Orphan tool-results (no resolvable tool name) become `text` notes so nothing\n * is silently dropped from replayed history.\n */\nexport function backfillEngineMessagesToolResults(\n messages: EngineMessage[],\n): EngineMessage[] {\n // Walk messages in order. User tool-result blocks are valid only when they\n // answer the immediately preceding assistant tool-call turn. This prevents\n // older tool-results from being backfilled with later, unrelated tool-calls\n // when ids are reused (e.g. `continuation_tc_1` reset across adapter\n // recreations).\n const toolUseById = new Map<string, { name: string; input: unknown }>();\n const out: EngineMessage[] = [];\n let pendingToolUses: Array<{ id: string; name: string; input: unknown }> = [];\n\n const flushInterruptedToolResults = () => {\n if (pendingToolUses.length === 0) return;\n out.push({\n role: \"user\",\n content: pendingToolUses.map(interruptedToolResultPart),\n });\n pendingToolUses = [];\n };\n\n for (const msg of messages) {\n if (msg.role === \"assistant\") {\n flushInterruptedToolResults();\n for (const part of msg.content) {\n if (part.type === \"tool-call\") {\n toolUseById.set(part.id, { name: part.name, input: part.input });\n }\n }\n out.push(msg);\n pendingToolUses = msg.content\n .filter(\n (part): part is Extract<EngineContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n )\n .map((part) => ({\n id: part.id,\n name: part.name,\n input: part.input,\n }));\n continue;\n }\n if (msg.role !== \"user\") {\n flushInterruptedToolResults();\n out.push(msg);\n continue;\n }\n const newContent: EngineContentPart[] = [];\n const pendingById = new Map(\n pendingToolUses.map((part) => [part.id, part] as const),\n );\n const matchedPendingToolResults = new Map<string, EngineContentPart>();\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") {\n newContent.push(part);\n continue;\n }\n const lookup = toolUseById.get(part.toolCallId);\n const pendingLookup = pendingById.get(part.toolCallId);\n const toolName =\n typeof part.toolName === \"string\" && part.toolName.trim().length > 0\n ? part.toolName\n : pendingLookup?.name;\n if (!toolName?.trim()) {\n const id =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId != null\n ? String(part.toolCallId).trim()\n : \"\";\n newContent.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: id.length > 0 ? id : \"(missing)\",\n content: part.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n if (pendingToolUses.length > 0 && !pendingLookup) {\n const id =\n typeof part.toolCallId === \"string\"\n ? part.toolCallId.trim()\n : part.toolCallId != null\n ? String(part.toolCallId).trim()\n : \"\";\n newContent.push({\n type: \"text\",\n text: unmatchedToolResultReplayText({\n toolCallId: id.length > 0 ? id : \"(missing)\",\n content: part.content,\n isError: part.isError,\n }),\n });\n continue;\n }\n const toolInput =\n typeof part.toolInput === \"string\" && part.toolInput.length > 0\n ? part.toolInput\n : stringifyToolUseInputForGateway(\n pendingLookup?.input ?? lookup?.input,\n );\n const filled: EngineContentPart = {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName,\n toolInput,\n content: part.content,\n ...(part.isError ? { isError: true } : {}),\n ...(part.images && part.images.length > 0\n ? { images: part.images }\n : {}),\n };\n if (pendingLookup) {\n matchedPendingToolResults.set(part.toolCallId, filled);\n } else {\n newContent.push(filled);\n }\n }\n if (pendingToolUses.length > 0) {\n const pairedResults = pendingToolUses.map(\n (part) =>\n matchedPendingToolResults.get(part.id) ??\n interruptedToolResultPart(part),\n );\n newContent.unshift(...pairedResults);\n pendingToolUses = [];\n }\n if (newContent.length === 0) {\n out.push({\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: UNMATCHED_TOOL_RESULT_REPLAY_PREFIX,\n },\n ],\n });\n continue;\n }\n out.push({ role: \"user\", content: newContent });\n }\n\n flushInterruptedToolResults();\n\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → Anthropic.MessageParam\n// ---------------------------------------------------------------------------\n\nexport function engineMessageToAnthropic(\n msg: EngineMessage,\n opts?: { builderGateway?: boolean },\n): Anthropic.MessageParam {\n const builderGateway = opts?.builderGateway === true;\n return {\n role: msg.role,\n content: msg.content.map((p) => enginePartToAnthropic(p, builderGateway)),\n };\n}\n\n/** Messages for the Anthropic HTTP API (strict schema — no extra tool_result fields). */\nexport function engineMessagesToAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n const normalized = backfillEngineMessagesToolResults(messages);\n return normalized.map((m) => engineMessageToAnthropic(m));\n}\n\n/**\n * Messages for the Builder LLM gateway (Gemini-backed). Same Anthropic-shaped\n * envelope, but every `tool_result` includes `tool_name` and `tool_input`.\n */\nexport function engineMessagesToBuilderGatewayAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n const normalized = backfillEngineMessagesToolResults(messages);\n return normalized.map((m) =>\n engineMessageToAnthropic(m, { builderGateway: true }),\n );\n}\n\nfunction enginePartToAnthropic(\n part: EngineContentPart,\n builderGateway: boolean,\n): Anthropic.ContentBlockParam {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"image\":\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: part.mediaType,\n data: part.data,\n },\n };\n\n case \"file\":\n if (part.mediaType === \"application/pdf\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: \"application/pdf\",\n data: part.data,\n },\n ...(part.filename ? { title: part.filename } : {}),\n } as any;\n }\n return {\n type: \"text\",\n text: `[Attached file: ${part.filename ?? \"attachment\"} (${part.mediaType})]`,\n };\n\n case \"tool-call\":\n return {\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input as Record<string, unknown>,\n } as any; // tool_use is a ContentBlockParam in Anthropic SDK\n\n case \"tool-result\": {\n if (builderGateway) {\n const tool_name = part.toolName.trim();\n const tool_input = part.toolInput;\n // Gateway degrade: the Builder gateway multiplexes to non-Anthropic\n // models whose tool_result handling is string-only, so images are\n // dropped here. The content string already carries a `[image: …]`\n // note per image (appended by runToolCall), so the model still knows\n // an image existed and any https URL survives.\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n tool_name,\n tool_input,\n content: part.content,\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n }\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n content: toolResultContentToAnthropic(part),\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n }\n\n case \"thinking\":\n // Anthropic thinking blocks — pass through with signature for context window continuity\n return {\n type: \"thinking\",\n thinking: part.text,\n signature: part.signature ?? \"\",\n } as any;\n }\n}\n\n/**\n * tool_result `content` for the native Anthropic API: a plain string normally,\n * or a text + image block array when the result carries vision images\n * (https://platform.claude.com/docs — \"Example of tool result with images\").\n * Error results stay string-only; malformed image entries are skipped.\n */\nfunction toolResultContentToAnthropic(\n part: Extract<EngineContentPart, { type: \"tool-result\" }>,\n): string | Anthropic.ContentBlockParam[] {\n if (part.isError || !part.images || part.images.length === 0) {\n return part.content;\n }\n const imageBlocks: Anthropic.ImageBlockParam[] = [];\n for (const image of part.images) {\n if (image.url) {\n imageBlocks.push({\n type: \"image\",\n source: { type: \"url\", url: image.url },\n });\n } else if (image.data && image.mediaType) {\n imageBlocks.push({\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: image.mediaType,\n data: image.data,\n },\n });\n }\n }\n if (imageBlocks.length === 0) return part.content;\n return [{ type: \"text\", text: part.content }, ...imageBlocks];\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic.ContentBlock → EngineContentPart (from final message)\n// ---------------------------------------------------------------------------\n\nexport function anthropicContentToEngine(\n content: Anthropic.ContentBlock[],\n): EngineContentPart[] {\n return content\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\" as const, text: block.text };\n }\n if (block.type === \"tool_use\") {\n return {\n type: \"tool-call\" as const,\n id: block.id,\n name: block.name,\n input: block.input,\n };\n }\n if ((block as any).type === \"thinking\") {\n const b = block as any;\n return {\n type: \"thinking\" as const,\n text: b.thinking ?? \"\",\n signature: b.signature,\n };\n }\n // Unknown block type — skip\n return { type: \"text\" as const, text: \"\" };\n })\n .filter((p) => !(p.type === \"text\" && p.text === \"\"));\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic stream chunk → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Mutable state threaded across `anthropicChunkToEngineEvents` calls within a\n * single stream. Anthropic's `content_block_delta` chunks carry only the block\n * `index`, not the tool-call id/name — those arrive once on the matching\n * `content_block_start`. We remember `index → { id, name }` here so each\n * `input_json_delta` can be surfaced as a `tool-input-delta` carrying the same\n * id/name the consumer expects (mirroring the Builder gateway shape).\n */\nexport interface AnthropicChunkStreamState {\n toolUseByIndex: Map<number, { id: string; name: string }>;\n}\n\nexport function createAnthropicChunkStreamState(): AnthropicChunkStreamState {\n return { toolUseByIndex: new Map() };\n}\n\n/**\n * Translate an Anthropic stream chunk into zero or more EngineEvents.\n * Called in a loop as chunks arrive from client.messages.stream().\n *\n * Pass a per-stream `state` (from `createAnthropicChunkStreamState`) to also\n * emit `tool-input-start` / `tool-input-delta` progress events while a tool\n * call's JSON input streams in. These are progress-only signals: the\n * authoritative `tool-call` blocks are still emitted from `finalMessage()` by\n * the engine, so omitting `state` simply drops the progress events without\n * changing tool dispatch.\n */\nexport function anthropicChunkToEngineEvents(\n chunk: any,\n state?: AnthropicChunkStreamState,\n): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n if (chunk.type === \"content_block_start\") {\n const block = chunk.content_block;\n if (block?.type === \"tool_use\") {\n const id = typeof block.id === \"string\" ? block.id : undefined;\n const name = typeof block.name === \"string\" ? block.name : undefined;\n if (state && typeof chunk.index === \"number\" && id && name) {\n state.toolUseByIndex.set(chunk.index, { id, name });\n }\n events.push({\n type: \"tool-input-start\",\n ...(id ? { id } : {}),\n ...(name ? { name } : {}),\n });\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta?.type === \"text_delta\") {\n events.push({ type: \"text-delta\", text: chunk.delta.text });\n } else if (chunk.delta?.type === \"thinking_delta\") {\n events.push({ type: \"thinking-delta\", text: chunk.delta.thinking ?? \"\" });\n } else if (chunk.delta?.type === \"signature_delta\") {\n // Signature arrives after thinking — emit as a thinking-delta with empty text\n // but carry the signature for the caller to store\n events.push({\n type: \"thinking-delta\",\n text: \"\",\n signature: chunk.delta.signature,\n });\n } else if (chunk.delta?.type === \"input_json_delta\") {\n // Partial JSON for a streaming tool-call input. Surface as countable\n // progress so long tool inputs (e.g. large extension HTML) don't look\n // hung to the agent loop's tool-input activity heartbeat.\n const active =\n state && typeof chunk.index === \"number\"\n ? state.toolUseByIndex.get(chunk.index)\n : undefined;\n events.push({\n type: \"tool-input-delta\",\n ...(active?.id ? { id: active.id } : {}),\n ...(active?.name ? { name: active.name } : {}),\n text:\n typeof chunk.delta.partial_json === \"string\"\n ? chunk.delta.partial_json\n : \"\",\n });\n }\n }\n\n return events;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool_result blocks to append to messages after tool dispatch\n// ---------------------------------------------------------------------------\n\nexport function buildToolResultPart(\n toolCallId: string,\n toolName: string,\n content: string,\n toolInput: unknown = {},\n isError = false,\n): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId,\n toolName,\n toolInput: stringifyToolUseInputForGateway(toolInput),\n content,\n ...(isError ? { isError } : {}),\n };\n}\n"]}
@@ -76,6 +76,19 @@ export interface EngineToolCallPart {
76
76
  name: string;
77
77
  input: unknown;
78
78
  }
79
+ /**
80
+ * A vision image attached to a tool result (screenshot, chart preview, …).
81
+ * Exactly one of `url` (public https URL the provider fetches) or `data`
82
+ * (base64 without a `data:` prefix, `mediaType` required) is set. These live
83
+ * only on the in-memory turn — they are never persisted to the run ledger.
84
+ */
85
+ export interface EngineToolResultImagePart {
86
+ url?: string;
87
+ data?: string;
88
+ mediaType?: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
89
+ /** Short label tying the image to the text result (e.g. "dashboard tab"). */
90
+ label?: string;
91
+ }
79
92
  export interface EngineToolResultPart {
80
93
  type: "tool-result";
81
94
  toolCallId: string;
@@ -85,6 +98,8 @@ export interface EngineToolResultPart {
85
98
  toolInput: string;
86
99
  content: string;
87
100
  isError?: boolean;
101
+ /** Vision images shown to the model alongside `content` (engines that can). */
102
+ images?: EngineToolResultImagePart[];
88
103
  }
89
104
  export interface EngineThinkingPart {
90
105
  type: "thinking";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,YACE,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,EAQF;CACF;AAMD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;CACpE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAMxD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/D;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACD;IACE;sEACkE;IAClE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EACF,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAMN,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,aAAa,EAAE,OAAO,CAAC;IACvB,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAMD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE;gBAAE,IAAI,EAAE,SAAS,CAAC;gBAAC,YAAY,EAAE,MAAM,CAAA;aAAE,CAAC;YACrD,YAAY,CAAC,EAAE;gBAAE,IAAI,EAAE,WAAW,CAAA;aAAE,GAAG,OAAO,CAAC;YAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KACzD,CAAC;CACH;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAE1C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;CAC/D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,SAAS,CAAU;IACnB,UAAU,CAAU;IAC7B,0EAA0E;IACjE,UAAU,CAAU;IAC7B,sEAAsE;IAC7D,iBAAiB,CAAW;IACrC,YACE,OAAe,EACf,IAKC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,CAAC;IACnD,CAAC;CACF","sourcesContent":["import type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\n\n/**\n * Pluggable Agent Engine abstraction.\n *\n * AgentEngine is the thin LLM adapter that sits beneath runAgentLoop.\n * Every caller (HTTP handler, A2A, MCP, sub-agents, webhooks, jobs) uses\n * an AgentEngine instead of a raw @anthropic-ai/sdk client.\n *\n * The framework's tool dispatch loop, sub-agents, SSE event stream, and all\n * other harness features live above this layer and are unaffected by engine\n * selection.\n */\n\n/**\n * Thrown when an engine emits a terminal stop-error event. Carries optional\n * structured fields (errorCode / upgradeUrl) that propagate up to the SSE\n * \"error\" event so the chat UI can render a structured CTA — e.g. an\n * Upgrade button for Builder gateway 402 quota errors.\n *\n * Lives in the engine types module (not production-agent) so run-manager and\n * other consumers can `instanceof` it without an import cycle.\n */\nexport class EngineError extends Error {\n readonly errorCode?: string;\n readonly upgradeUrl?: string;\n /** HTTP status code from the provider (429, 529, 503, etc.), if known. */\n readonly statusCode?: number;\n /** Whether the provider explicitly marked this error as retryable. */\n readonly providerRetryable?: boolean;\n constructor(\n message: string,\n opts?: {\n errorCode?: string;\n upgradeUrl?: string;\n statusCode?: number;\n providerRetryable?: boolean;\n },\n ) {\n super(message);\n this.name = \"EngineError\";\n this.errorCode = opts?.errorCode;\n this.upgradeUrl = opts?.upgradeUrl;\n this.statusCode = opts?.statusCode;\n this.providerRetryable = opts?.providerRetryable;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tool / parameter types\n// ---------------------------------------------------------------------------\n\n/**\n * Engine-normalized tool definition. Structurally identical to Anthropic's\n * Tool type, with snake_case renamed to camelCase for consistency.\n */\nexport interface EngineTool {\n name: string;\n description: string;\n /** JSON Schema for the tool's input parameters */\n inputSchema: {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n [key: string]: unknown;\n };\n /**\n * Provider-specific options for this tool.\n * E.g. `{ anthropic: { cacheControl: { type: \"ephemeral\" } } }`\n */\n providerOptions?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Message / content part types\n// ---------------------------------------------------------------------------\n\nexport interface EngineTextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface EngineImagePart {\n type: \"image\";\n /** Base64-encoded image data */\n data: string;\n mediaType: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n}\n\nexport interface EngineFilePart {\n type: \"file\";\n /** Base64-encoded file data */\n data: string;\n mediaType: string;\n filename?: string;\n}\n\nexport interface EngineToolCallPart {\n type: \"tool-call\";\n id: string;\n name: string;\n input: unknown;\n}\n\nexport interface EngineToolResultPart {\n type: \"tool-result\";\n toolCallId: string;\n /** Same as the originating `tool-call.name` (required for Builder / Gemini). */\n toolName: string;\n /** JSON string of the originating tool_use `input` object (Builder / Gemini). */\n toolInput: string;\n content: string;\n isError?: boolean;\n}\n\nexport interface EngineThinkingPart {\n type: \"thinking\";\n text: string;\n /** Opaque signature for pass-through on next turn (Anthropic extended thinking) */\n signature?: string;\n}\n\nexport type EngineContentPart =\n | EngineTextPart\n | EngineImagePart\n | EngineFilePart\n | EngineToolCallPart\n | EngineToolResultPart\n | EngineThinkingPart;\n\nexport type EngineMessage =\n | { role: \"user\"; content: EngineContentPart[] }\n | { role: \"assistant\"; content: EngineContentPart[] };\n\n// ---------------------------------------------------------------------------\n// Streaming event types\n// ---------------------------------------------------------------------------\n\nexport type EngineEvent =\n | { type: \"text-delta\"; text: string }\n | { type: \"thinking-delta\"; text: string; signature?: string }\n | { type: \"tool-input-start\"; id?: string; name?: string }\n | { type: \"tool-input-delta\"; id?: string; name?: string; text?: string }\n | { type: \"gateway-heartbeat\" }\n | { type: \"tool-call\"; id: string; name: string; input: unknown }\n | {\n type: \"tool-call-error\";\n id: string;\n name: string;\n input: unknown;\n error: string;\n }\n | {\n type: \"usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n }\n | {\n /** Final assistant content for the turn. Engines MUST emit this\n * exactly once, immediately before the terminal `stop` event. */\n type: \"assistant-content\";\n parts: EngineContentPart[];\n }\n | {\n type: \"stop\";\n reason:\n | \"end_turn\"\n | \"tool_use\"\n | \"max_tokens\"\n | \"stop_sequence\"\n | \"error\";\n error?: string;\n /**\n * Optional machine-readable error code for structured UI handling.\n * Used by the Builder gateway engine to signal quota/auth failures\n * (e.g. \"credits-limit-monthly\", \"gateway_not_enabled\") so the UI\n * can render an upgrade CTA instead of a plain error string.\n */\n errorCode?: string;\n /**\n * Optional URL the UI should link to when rendering the error.\n * Paired with errorCode — e.g. credits-limit-* stop events carry\n * a link to the user's Builder billing page.\n */\n upgradeUrl?: string;\n /**\n * HTTP status code from the provider (e.g. 429, 529, 503).\n * Populated by engines that have structured error information so\n * isRetryableError can check the code directly instead of keyword-\n * matching the message string.\n */\n statusCode?: number;\n /**\n * Whether the provider explicitly marked this error as retryable\n * (e.g. AI SDK APICallError.isRetryable). When true, isRetryableError\n * should retry even if status code / message patterns don't match.\n */\n providerRetryable?: boolean;\n };\n\n// ---------------------------------------------------------------------------\n// Capabilities\n// ---------------------------------------------------------------------------\n\nexport interface EngineCapabilities {\n /** Extended / adaptive thinking support */\n thinking: boolean;\n /** Anthropic-style prompt caching (cache_control blocks) */\n promptCaching: boolean;\n /** Vision / image input */\n vision: boolean;\n /** Computer use tool support */\n computerUse: boolean;\n /** Multiple tool calls in a single response */\n parallelToolCalls: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stream options\n// ---------------------------------------------------------------------------\n\nexport interface EngineStreamOptions {\n model: string;\n systemPrompt: string;\n messages: EngineMessage[];\n tools: EngineTool[];\n abortSignal: AbortSignal;\n maxOutputTokens?: number;\n temperature?: number;\n reasoningEffort?: ReasoningEffort;\n /**\n * Provider-specific options passed opaquely.\n * Engines forward options they understand and ignore unknown keys.\n *\n * Example (Anthropic):\n * ```ts\n * providerOptions: {\n * anthropic: {\n * thinking: { type: \"enabled\", budgetTokens: 8000 },\n * cacheControl: { type: \"ephemeral\" },\n * }\n * }\n * ```\n */\n providerOptions?: {\n anthropic?: {\n thinking?: { type: \"enabled\"; budgetTokens: number };\n cacheControl?: { type: \"ephemeral\" } | boolean;\n topK?: number;\n };\n openai?: Record<string, unknown>;\n google?: Record<string, unknown>;\n [provider: string]: Record<string, unknown> | undefined;\n };\n}\n\n// ---------------------------------------------------------------------------\n// AgentEngine interface\n// ---------------------------------------------------------------------------\n\n/**\n * The pluggable LLM adapter interface.\n *\n * Each engine performs one LLM API round-trip per `stream()` call.\n * The framework's runAgentLoop drives the tool-calling loop by calling\n * stream() repeatedly with updated messages.\n *\n * Engines yield EngineEvent items as they receive them from the LLM.\n * They MUST yield a `stop` event as the last item, even on error.\n */\nexport interface AgentEngine {\n /** Unique identifier, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n readonly name: string;\n /** Human-readable label for UI display */\n readonly label: string;\n /** Default model for this engine */\n readonly defaultModel: string;\n /** Models this engine supports */\n readonly supportedModels: readonly string[];\n /** Capability flags used to gate provider-specific features */\n readonly capabilities: EngineCapabilities;\n\n /**\n * Stream a single LLM API call. Yields EngineEvent items.\n * The caller (runAgentLoop) handles retries, tool dispatch, and looping.\n */\n stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,SAAS,CAAU;IACnB,UAAU,CAAU;IAC7B,0EAA0E;IACjE,UAAU,CAAU;IAC7B,sEAAsE;IAC7D,iBAAiB,CAAW;IACrC,YACE,OAAe,EACf,IAKC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,CAAC;IACnD,CAAC;CACF","sourcesContent":["import type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\n\n/**\n * Pluggable Agent Engine abstraction.\n *\n * AgentEngine is the thin LLM adapter that sits beneath runAgentLoop.\n * Every caller (HTTP handler, A2A, MCP, sub-agents, webhooks, jobs) uses\n * an AgentEngine instead of a raw @anthropic-ai/sdk client.\n *\n * The framework's tool dispatch loop, sub-agents, SSE event stream, and all\n * other harness features live above this layer and are unaffected by engine\n * selection.\n */\n\n/**\n * Thrown when an engine emits a terminal stop-error event. Carries optional\n * structured fields (errorCode / upgradeUrl) that propagate up to the SSE\n * \"error\" event so the chat UI can render a structured CTA — e.g. an\n * Upgrade button for Builder gateway 402 quota errors.\n *\n * Lives in the engine types module (not production-agent) so run-manager and\n * other consumers can `instanceof` it without an import cycle.\n */\nexport class EngineError extends Error {\n readonly errorCode?: string;\n readonly upgradeUrl?: string;\n /** HTTP status code from the provider (429, 529, 503, etc.), if known. */\n readonly statusCode?: number;\n /** Whether the provider explicitly marked this error as retryable. */\n readonly providerRetryable?: boolean;\n constructor(\n message: string,\n opts?: {\n errorCode?: string;\n upgradeUrl?: string;\n statusCode?: number;\n providerRetryable?: boolean;\n },\n ) {\n super(message);\n this.name = \"EngineError\";\n this.errorCode = opts?.errorCode;\n this.upgradeUrl = opts?.upgradeUrl;\n this.statusCode = opts?.statusCode;\n this.providerRetryable = opts?.providerRetryable;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tool / parameter types\n// ---------------------------------------------------------------------------\n\n/**\n * Engine-normalized tool definition. Structurally identical to Anthropic's\n * Tool type, with snake_case renamed to camelCase for consistency.\n */\nexport interface EngineTool {\n name: string;\n description: string;\n /** JSON Schema for the tool's input parameters */\n inputSchema: {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n [key: string]: unknown;\n };\n /**\n * Provider-specific options for this tool.\n * E.g. `{ anthropic: { cacheControl: { type: \"ephemeral\" } } }`\n */\n providerOptions?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Message / content part types\n// ---------------------------------------------------------------------------\n\nexport interface EngineTextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface EngineImagePart {\n type: \"image\";\n /** Base64-encoded image data */\n data: string;\n mediaType: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n}\n\nexport interface EngineFilePart {\n type: \"file\";\n /** Base64-encoded file data */\n data: string;\n mediaType: string;\n filename?: string;\n}\n\nexport interface EngineToolCallPart {\n type: \"tool-call\";\n id: string;\n name: string;\n input: unknown;\n}\n\n/**\n * A vision image attached to a tool result (screenshot, chart preview, …).\n * Exactly one of `url` (public https URL the provider fetches) or `data`\n * (base64 without a `data:` prefix, `mediaType` required) is set. These live\n * only on the in-memory turn — they are never persisted to the run ledger.\n */\nexport interface EngineToolResultImagePart {\n url?: string;\n data?: string;\n mediaType?: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n /** Short label tying the image to the text result (e.g. \"dashboard tab\"). */\n label?: string;\n}\n\nexport interface EngineToolResultPart {\n type: \"tool-result\";\n toolCallId: string;\n /** Same as the originating `tool-call.name` (required for Builder / Gemini). */\n toolName: string;\n /** JSON string of the originating tool_use `input` object (Builder / Gemini). */\n toolInput: string;\n content: string;\n isError?: boolean;\n /** Vision images shown to the model alongside `content` (engines that can). */\n images?: EngineToolResultImagePart[];\n}\n\nexport interface EngineThinkingPart {\n type: \"thinking\";\n text: string;\n /** Opaque signature for pass-through on next turn (Anthropic extended thinking) */\n signature?: string;\n}\n\nexport type EngineContentPart =\n | EngineTextPart\n | EngineImagePart\n | EngineFilePart\n | EngineToolCallPart\n | EngineToolResultPart\n | EngineThinkingPart;\n\nexport type EngineMessage =\n | { role: \"user\"; content: EngineContentPart[] }\n | { role: \"assistant\"; content: EngineContentPart[] };\n\n// ---------------------------------------------------------------------------\n// Streaming event types\n// ---------------------------------------------------------------------------\n\nexport type EngineEvent =\n | { type: \"text-delta\"; text: string }\n | { type: \"thinking-delta\"; text: string; signature?: string }\n | { type: \"tool-input-start\"; id?: string; name?: string }\n | { type: \"tool-input-delta\"; id?: string; name?: string; text?: string }\n | { type: \"gateway-heartbeat\" }\n | { type: \"tool-call\"; id: string; name: string; input: unknown }\n | {\n type: \"tool-call-error\";\n id: string;\n name: string;\n input: unknown;\n error: string;\n }\n | {\n type: \"usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n }\n | {\n /** Final assistant content for the turn. Engines MUST emit this\n * exactly once, immediately before the terminal `stop` event. */\n type: \"assistant-content\";\n parts: EngineContentPart[];\n }\n | {\n type: \"stop\";\n reason:\n | \"end_turn\"\n | \"tool_use\"\n | \"max_tokens\"\n | \"stop_sequence\"\n | \"error\";\n error?: string;\n /**\n * Optional machine-readable error code for structured UI handling.\n * Used by the Builder gateway engine to signal quota/auth failures\n * (e.g. \"credits-limit-monthly\", \"gateway_not_enabled\") so the UI\n * can render an upgrade CTA instead of a plain error string.\n */\n errorCode?: string;\n /**\n * Optional URL the UI should link to when rendering the error.\n * Paired with errorCode — e.g. credits-limit-* stop events carry\n * a link to the user's Builder billing page.\n */\n upgradeUrl?: string;\n /**\n * HTTP status code from the provider (e.g. 429, 529, 503).\n * Populated by engines that have structured error information so\n * isRetryableError can check the code directly instead of keyword-\n * matching the message string.\n */\n statusCode?: number;\n /**\n * Whether the provider explicitly marked this error as retryable\n * (e.g. AI SDK APICallError.isRetryable). When true, isRetryableError\n * should retry even if status code / message patterns don't match.\n */\n providerRetryable?: boolean;\n };\n\n// ---------------------------------------------------------------------------\n// Capabilities\n// ---------------------------------------------------------------------------\n\nexport interface EngineCapabilities {\n /** Extended / adaptive thinking support */\n thinking: boolean;\n /** Anthropic-style prompt caching (cache_control blocks) */\n promptCaching: boolean;\n /** Vision / image input */\n vision: boolean;\n /** Computer use tool support */\n computerUse: boolean;\n /** Multiple tool calls in a single response */\n parallelToolCalls: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stream options\n// ---------------------------------------------------------------------------\n\nexport interface EngineStreamOptions {\n model: string;\n systemPrompt: string;\n messages: EngineMessage[];\n tools: EngineTool[];\n abortSignal: AbortSignal;\n maxOutputTokens?: number;\n temperature?: number;\n reasoningEffort?: ReasoningEffort;\n /**\n * Provider-specific options passed opaquely.\n * Engines forward options they understand and ignore unknown keys.\n *\n * Example (Anthropic):\n * ```ts\n * providerOptions: {\n * anthropic: {\n * thinking: { type: \"enabled\", budgetTokens: 8000 },\n * cacheControl: { type: \"ephemeral\" },\n * }\n * }\n * ```\n */\n providerOptions?: {\n anthropic?: {\n thinking?: { type: \"enabled\"; budgetTokens: number };\n cacheControl?: { type: \"ephemeral\" } | boolean;\n topK?: number;\n };\n openai?: Record<string, unknown>;\n google?: Record<string, unknown>;\n [provider: string]: Record<string, unknown> | undefined;\n };\n}\n\n// ---------------------------------------------------------------------------\n// AgentEngine interface\n// ---------------------------------------------------------------------------\n\n/**\n * The pluggable LLM adapter interface.\n *\n * Each engine performs one LLM API round-trip per `stream()` call.\n * The framework's runAgentLoop drives the tool-calling loop by calling\n * stream() repeatedly with updated messages.\n *\n * Engines yield EngineEvent items as they receive them from the LLM.\n * They MUST yield a `stop` event as the last item, even on error.\n */\nexport interface AgentEngine {\n /** Unique identifier, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n readonly name: string;\n /** Human-readable label for UI display */\n readonly label: string;\n /** Default model for this engine */\n readonly defaultModel: string;\n /** Models this engine supports */\n readonly supportedModels: readonly string[];\n /** Capability flags used to gate provider-specific features */\n readonly capabilities: EngineCapabilities;\n\n /**\n * Stream a single LLM API call. Yields EngineEvent items.\n * The caller (runAgentLoop) handles retries, tool dispatch, and looping.\n */\n stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent>;\n}\n"]}
@@ -13,6 +13,14 @@
13
13
  * integer.
14
14
  */
15
15
  export declare function getContextWindowForModel(modelId: string): number;
16
+ /**
17
+ * Return the documented max output-token ceiling for the given model ID.
18
+ *
19
+ * Uses an exact-match table first, then falls back to family-prefix
20
+ * heuristics, then a conservative 64 K default. Never throws — always returns
21
+ * a positive integer.
22
+ */
23
+ export declare function getMaxOutputTokensForModel(modelId: string | undefined): number;
16
24
  export declare const CLAUDE_SONNET_MODEL_ID: string;
17
25
  export declare const CLAUDE_SONNET_MODEL_LABEL: string;
18
26
  export declare const AGENT_MODEL_CONFIG: {
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/agent/model-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/agent/model-config.ts"],"names":[],"mappings":"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"}
@@ -103,6 +103,92 @@ export function getContextWindowForModel(modelId) {
103
103
  return 1_048_576;
104
104
  return DEFAULT_CONTEXT_WINDOW;
105
105
  }
106
+ // ---------------------------------------------------------------------------
107
+ // Per-model max output token table (documented output-token ceilings)
108
+ //
109
+ // Sources (July 2026):
110
+ // Anthropic https://platform.claude.com/docs/en/docs/about-claude/models/overview
111
+ // (Fable 5 / Opus 4.8 / Opus 4.7 / Sonnet 5 / Sonnet 4.6 = 128K;
112
+ // Haiku 4.5 / Sonnet 4.5 / Opus 4.5 = 64K)
113
+ // OpenAI https://developers.openai.com/api/docs/models/gpt-5.5
114
+ // https://developers.openai.com/api/docs/models/gpt-5.4
115
+ // https://developers.openai.com/api/docs/models/gpt-5.4-mini
116
+ // (GPT-5.5 / GPT-5.4 / GPT-5.4-mini = 128K)
117
+ //
118
+ // Family defaults (used when a model id isn't listed explicitly):
119
+ // claude flagship (fable-5 / opus-4.6+ / sonnet-5 / sonnet-4.6) → 128_000
120
+ // claude-* (Haiku 4.5, older/unknown Claude ids) → 64_000
121
+ // gpt-5* → 128_000
122
+ // everything else → 64_000
123
+ // (safe conservative ceiling that matches the previous global clamp)
124
+ // ---------------------------------------------------------------------------
125
+ const MODEL_MAX_OUTPUT_TOKENS = {
126
+ // ── Anthropic / Claude (via Builder gateway or Anthropic direct) ──────────
127
+ "claude-fable-5": 128_000,
128
+ "claude-opus-4-8": 128_000,
129
+ "claude-opus-4-7": 128_000,
130
+ "claude-sonnet-5": 128_000,
131
+ "claude-sonnet-4-6": 128_000,
132
+ "claude-haiku-4-5": 64_000,
133
+ "claude-haiku-4-5-20251001": 64_000,
134
+ // ── Builder gateway OpenAI IDs (dot→dash) ────────────────────────────────
135
+ "gpt-5-5": 128_000,
136
+ "gpt-5-4": 128_000,
137
+ "gpt-5-4-mini": 128_000,
138
+ // ── OpenRouter model IDs ──────────────────────────────────────────────────
139
+ "anthropic/claude-fable-5": 128_000,
140
+ "anthropic/claude-opus-4.8": 128_000,
141
+ "anthropic/claude-opus-4.7": 128_000,
142
+ "anthropic/claude-sonnet-5": 128_000,
143
+ "anthropic/claude-sonnet-4.6": 128_000,
144
+ "openai/gpt-5.5": 128_000,
145
+ "openai/gpt-5.4": 128_000,
146
+ // ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────
147
+ "gpt-5.5": 128_000,
148
+ "gpt-5.4": 128_000,
149
+ "gpt-5.4-mini": 128_000,
150
+ };
151
+ /**
152
+ * Conservative safe ceiling when a model is not in the table (matches the
153
+ * previous global output-token clamp, and current Claude Haiku 4.5 limits).
154
+ */
155
+ const DEFAULT_MAX_OUTPUT_TOKENS_CEILING = 64_000;
156
+ /**
157
+ * Return the documented max output-token ceiling for the given model ID.
158
+ *
159
+ * Uses an exact-match table first, then falls back to family-prefix
160
+ * heuristics, then a conservative 64 K default. Never throws — always returns
161
+ * a positive integer.
162
+ */
163
+ export function getMaxOutputTokensForModel(modelId) {
164
+ if (!modelId)
165
+ return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;
166
+ const exact = MODEL_MAX_OUTPUT_TOKENS[modelId];
167
+ if (exact !== undefined)
168
+ return exact;
169
+ // Family heuristics for unlisted model IDs
170
+ const id = modelId.toLowerCase();
171
+ // Anthropic Fable 5, Opus 4.6+, Sonnet 5, and Sonnet 4.6 = 128K output
172
+ if (id.includes("claude-fable-5") ||
173
+ id.includes("claude-opus-4-6") ||
174
+ id.includes("claude-opus-4.6") ||
175
+ id.includes("claude-opus-4-7") ||
176
+ id.includes("claude-opus-4.7") ||
177
+ id.includes("claude-opus-4-8") ||
178
+ id.includes("claude-opus-4.8") ||
179
+ id.includes("claude-sonnet-5") ||
180
+ id.includes("claude-sonnet-4-6") ||
181
+ id.includes("claude-sonnet-4.6"))
182
+ return 128_000;
183
+ // All other Claude models (Haiku 4.5, legacy) — 64K ceiling
184
+ if (id.startsWith("claude-") || id.includes("/claude-")) {
185
+ return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;
186
+ }
187
+ // GPT-5.x family — 128K output
188
+ if (id.startsWith("gpt-5") || id.startsWith("openai/gpt-5"))
189
+ return 128_000;
190
+ return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;
191
+ }
106
192
  const ENABLE_CLAUDE_SONNET_5 = true;
107
193
  export const CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5
108
194
  ? "claude-sonnet-5"
@@ -1 +1 @@
1
- {"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../src/agent/model-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Central model catalog for built-in agent engines.\n *\n * To bump the framework's managed default, update the Anthropic/OpenAI\n * constants below. Builder gateway and OpenRouter IDs are derived here so the\n * usual default bump stays in one file.\n */\n\n// ---------------------------------------------------------------------------\n// Per-model context window table (input token limit)\n//\n// Sources (June 2026):\n// Anthropic https://platform.claude.com/docs/en/about-claude/models/overview\n// OpenAI https://developers.openai.com/api/docs/models/gpt-5.5\n// https://developers.openai.com/api/docs/models/gpt-5.4\n// Google https://ai.google.dev/gemini-api/docs/models\n// OpenRouter https://openrouter.ai/api/v1/models\n//\n// Family defaults (used when a model id isn't listed explicitly):\n// claude-* → 200_000 (Haiku 4.5 and earlier models)\n// gpt-5* → 1_050_000 (GPT-5.4/5.5 flagship context)\n// gemini-2* / gemini-3* → 1_048_576\n// everything else → 128_000 (safe conservative floor)\n//\n// Note: Fable 5, Sonnet 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API\n// at standard prices.\n// ---------------------------------------------------------------------------\n\nconst MODEL_CONTEXT_WINDOWS: Record<string, number> = {\n // ── Anthropic / Claude (via Builder gateway or Anthropic direct) ──────────\n \"claude-fable-5\": 1_000_000,\n \"claude-opus-4-8\": 1_000_000,\n \"claude-opus-4-7\": 1_000_000,\n \"claude-sonnet-5\": 1_000_000,\n \"claude-sonnet-4-6\": 1_000_000,\n \"claude-haiku-4-5\": 200_000,\n \"claude-haiku-4-5-20251001\": 200_000,\n\n // ── Builder gateway OpenAI IDs (dot→dash) ────────────────────────────────\n \"gpt-5-5\": 1_050_000,\n \"gpt-5-4\": 1_050_000,\n \"gpt-5-4-mini\": 400_000,\n\n // ── Gemini (Builder gateway IDs) ─────────────────────────────────────────\n \"gemini-3-1-pro\": 1_048_576,\n \"gemini-3-5-flash\": 1_048_576,\n \"gemini-3-1-flash-lite\": 1_048_576,\n\n // ── OpenRouter model IDs ──────────────────────────────────────────────────\n \"anthropic/claude-fable-5\": 1_000_000,\n \"anthropic/claude-opus-4.8\": 1_000_000,\n \"anthropic/claude-opus-4.7\": 1_000_000,\n \"anthropic/claude-sonnet-5\": 1_000_000,\n \"anthropic/claude-sonnet-4.6\": 1_000_000,\n \"openai/gpt-5.5\": 1_050_000,\n \"openai/gpt-5.4\": 1_050_000,\n \"google/gemini-2.5-flash\": 1_048_576,\n \"z-ai/glm-5.2\": 1_048_576,\n\n // ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────\n \"gpt-5.5\": 1_050_000,\n \"gpt-5.4\": 1_050_000,\n \"gpt-5.4-mini\": 400_000,\n\n // ── AI-SDK native Google IDs ──────────────────────────────────────────────\n \"gemini-3.5-flash\": 1_048_576,\n \"gemini-3.1-pro-preview\": 1_048_576,\n \"gemini-2.5-flash\": 1_048_576,\n \"gemini-2.5-pro\": 1_048_576,\n};\n\n/** Conservative safe default when a model is not in the table. */\nconst DEFAULT_CONTEXT_WINDOW = 128_000;\n\n/**\n * Return the known input-token context window for the given model ID.\n *\n * Uses an exact-match table first, then falls back to family-prefix heuristics,\n * then a conservative 128 K default. Never throws — always returns a positive\n * integer.\n */\nexport function getContextWindowForModel(modelId: string): number {\n if (!modelId) return DEFAULT_CONTEXT_WINDOW;\n\n const exact = MODEL_CONTEXT_WINDOWS[modelId];\n if (exact !== undefined) return exact;\n\n // Family heuristics for unlisted model IDs\n const id = modelId.toLowerCase();\n\n // Anthropic Fable 5, Opus 4.x, Sonnet 5, and Sonnet 4.6 = 1M\n if (\n id === \"claude-fable-5\" ||\n id.includes(\"claude-fable-5\") ||\n id.startsWith(\"claude-opus-4\") ||\n id.includes(\"claude-sonnet-5\") ||\n id.includes(\"claude-sonnet-4-6\") ||\n id.includes(\"claude-sonnet-4.6\")\n )\n return 1_000_000;\n\n // All other Claude models — default 200K\n if (id.startsWith(\"claude-\")) return 200_000;\n\n // GPT-5.x family — 1.05M\n if (id.startsWith(\"gpt-5\") || id.startsWith(\"openai/gpt-5\")) return 1_050_000;\n\n // Gemini 2.x / 3.x — 1M\n if (\n id.startsWith(\"gemini-2\") ||\n id.startsWith(\"gemini-3\") ||\n id.includes(\"/gemini-2\") ||\n id.includes(\"/gemini-3\")\n )\n return 1_048_576;\n\n // Z.ai GLM 5.x on OpenRouter — 1M context.\n if (id.startsWith(\"glm-5\") || id.includes(\"/glm-5\")) return 1_048_576;\n\n return DEFAULT_CONTEXT_WINDOW;\n}\n\nconst ENABLE_CLAUDE_SONNET_5 = true;\n\nexport const CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5\n ? \"claude-sonnet-5\"\n : \"claude-sonnet-4-6\";\nexport const CLAUDE_SONNET_MODEL_LABEL = ENABLE_CLAUDE_SONNET_5\n ? \"Claude Sonnet 5\"\n : \"Claude Sonnet 4.6\";\n\nconst OPENROUTER_CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5\n ? \"anthropic/claude-sonnet-5\"\n : \"anthropic/claude-sonnet-4.6\";\n\nconst ANTHROPIC_DEFAULT_MODEL_ID = CLAUDE_SONNET_MODEL_ID;\n\nfunction builderGatewayModelId(model: string): string {\n return model.replace(/\\./g, \"-\");\n}\n\nfunction openRouterModelId(provider: string, model: string): string {\n return `${provider}/${model}`;\n}\n\nconst FRAMEWORK_DEFAULT_OPENAI_MODEL = \"gpt-5.5\";\nconst FRAMEWORK_DEFAULT_BUILDER_MODEL = ANTHROPIC_DEFAULT_MODEL_ID;\nconst FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL = builderGatewayModelId(\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n);\nconst FRAMEWORK_DEFAULT_OPENROUTER_MODEL = openRouterModelId(\n \"openai\",\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n);\n\nexport const AGENT_MODEL_CONFIG = {\n builder: {\n defaultModel: FRAMEWORK_DEFAULT_BUILDER_MODEL,\n supportedModels: [\n \"auto\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5\",\n FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL,\n \"gpt-5-4\",\n \"gpt-5-4-mini\",\n \"gemini-3-1-pro\",\n \"gemini-3-5-flash\",\n \"gemini-3-1-flash-lite\",\n \"grok-code-fast\",\n \"qwen3-coder\",\n ],\n },\n anthropic: {\n defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,\n supportedModels: [\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5-20251001\",\n ],\n },\n aiSdk: {\n anthropic: {\n defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,\n supportedModels: [\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5-20251001\",\n ],\n },\n openai: {\n defaultModel: FRAMEWORK_DEFAULT_OPENAI_MODEL,\n supportedModels: [\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n ],\n },\n openrouter: {\n defaultModel: FRAMEWORK_DEFAULT_OPENROUTER_MODEL,\n supportedModels: [\n \"anthropic/claude-fable-5\",\n \"anthropic/claude-opus-4.8\",\n OPENROUTER_CLAUDE_SONNET_MODEL_ID,\n FRAMEWORK_DEFAULT_OPENROUTER_MODEL,\n \"openai/gpt-5.4\",\n // Current stable Gemini on OpenRouter (2.5 Flash is GA)\n \"google/gemini-2.5-flash\",\n \"z-ai/glm-5.2\",\n ],\n },\n google: {\n defaultModel: \"gemini-3.5-flash\",\n supportedModels: [\"gemini-3.5-flash\", \"gemini-3.1-pro-preview\"],\n },\n groq: {\n // llama-3.1-70b-versatile and mixtral-8x7b-32768 were decommissioned\n // (errors since Jan 2025 and Mar 2025 respectively). Replace with current\n // Groq production models.\n defaultModel: \"llama-3.3-70b-versatile\",\n supportedModels: [\n \"llama-3.3-70b-versatile\",\n \"llama3-8b-8192\",\n \"llama-3.1-8b-instant\",\n ],\n },\n mistral: {\n defaultModel: \"mistral-large-latest\",\n supportedModels: [\n \"mistral-large-latest\",\n \"mistral-medium-latest\",\n \"mistral-small-latest\",\n ],\n },\n cohere: {\n // command-r-plus (unversioned) is an alias that may lag; the stable\n // dated release is command-r-plus-08-2024.\n defaultModel: \"command-r-plus-08-2024\",\n supportedModels: [\n \"command-r-plus-08-2024\",\n \"command-r-plus\",\n \"command-r\",\n ],\n },\n ollama: {\n defaultModel: \"llama3.1\",\n supportedModels: [\"llama3.1\", \"llama3.2\", \"mistral\", \"codestral\"],\n },\n },\n} as const;\n\nexport const BUILDER_MODEL_CONFIG = AGENT_MODEL_CONFIG.builder;\nexport const ANTHROPIC_MODEL_CONFIG = AGENT_MODEL_CONFIG.anthropic;\nexport const AI_SDK_MODEL_CONFIG = AGENT_MODEL_CONFIG.aiSdk;\n\nexport type AISDKProvider = keyof typeof AI_SDK_MODEL_CONFIG;\n\nexport const DEFAULT_MODEL = BUILDER_MODEL_CONFIG.defaultModel;\nexport const DEFAULT_OPENAI_MODEL = AI_SDK_MODEL_CONFIG.openai.defaultModel;\nexport const DEFAULT_ANTHROPIC_MODEL = ANTHROPIC_MODEL_CONFIG.defaultModel;\n"]}
1
+ {"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../src/agent/model-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Central model catalog for built-in agent engines.\n *\n * To bump the framework's managed default, update the Anthropic/OpenAI\n * constants below. Builder gateway and OpenRouter IDs are derived here so the\n * usual default bump stays in one file.\n */\n\n// ---------------------------------------------------------------------------\n// Per-model context window table (input token limit)\n//\n// Sources (June 2026):\n// Anthropic https://platform.claude.com/docs/en/about-claude/models/overview\n// OpenAI https://developers.openai.com/api/docs/models/gpt-5.5\n// https://developers.openai.com/api/docs/models/gpt-5.4\n// Google https://ai.google.dev/gemini-api/docs/models\n// OpenRouter https://openrouter.ai/api/v1/models\n//\n// Family defaults (used when a model id isn't listed explicitly):\n// claude-* → 200_000 (Haiku 4.5 and earlier models)\n// gpt-5* → 1_050_000 (GPT-5.4/5.5 flagship context)\n// gemini-2* / gemini-3* → 1_048_576\n// everything else → 128_000 (safe conservative floor)\n//\n// Note: Fable 5, Sonnet 5, Sonnet 4.6, and Opus 4.6/4.7/4.8 support 1M via the API\n// at standard prices.\n// ---------------------------------------------------------------------------\n\nconst MODEL_CONTEXT_WINDOWS: Record<string, number> = {\n // ── Anthropic / Claude (via Builder gateway or Anthropic direct) ──────────\n \"claude-fable-5\": 1_000_000,\n \"claude-opus-4-8\": 1_000_000,\n \"claude-opus-4-7\": 1_000_000,\n \"claude-sonnet-5\": 1_000_000,\n \"claude-sonnet-4-6\": 1_000_000,\n \"claude-haiku-4-5\": 200_000,\n \"claude-haiku-4-5-20251001\": 200_000,\n\n // ── Builder gateway OpenAI IDs (dot→dash) ────────────────────────────────\n \"gpt-5-5\": 1_050_000,\n \"gpt-5-4\": 1_050_000,\n \"gpt-5-4-mini\": 400_000,\n\n // ── Gemini (Builder gateway IDs) ─────────────────────────────────────────\n \"gemini-3-1-pro\": 1_048_576,\n \"gemini-3-5-flash\": 1_048_576,\n \"gemini-3-1-flash-lite\": 1_048_576,\n\n // ── OpenRouter model IDs ──────────────────────────────────────────────────\n \"anthropic/claude-fable-5\": 1_000_000,\n \"anthropic/claude-opus-4.8\": 1_000_000,\n \"anthropic/claude-opus-4.7\": 1_000_000,\n \"anthropic/claude-sonnet-5\": 1_000_000,\n \"anthropic/claude-sonnet-4.6\": 1_000_000,\n \"openai/gpt-5.5\": 1_050_000,\n \"openai/gpt-5.4\": 1_050_000,\n \"google/gemini-2.5-flash\": 1_048_576,\n \"z-ai/glm-5.2\": 1_048_576,\n\n // ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────\n \"gpt-5.5\": 1_050_000,\n \"gpt-5.4\": 1_050_000,\n \"gpt-5.4-mini\": 400_000,\n\n // ── AI-SDK native Google IDs ──────────────────────────────────────────────\n \"gemini-3.5-flash\": 1_048_576,\n \"gemini-3.1-pro-preview\": 1_048_576,\n \"gemini-2.5-flash\": 1_048_576,\n \"gemini-2.5-pro\": 1_048_576,\n};\n\n/** Conservative safe default when a model is not in the table. */\nconst DEFAULT_CONTEXT_WINDOW = 128_000;\n\n/**\n * Return the known input-token context window for the given model ID.\n *\n * Uses an exact-match table first, then falls back to family-prefix heuristics,\n * then a conservative 128 K default. Never throws — always returns a positive\n * integer.\n */\nexport function getContextWindowForModel(modelId: string): number {\n if (!modelId) return DEFAULT_CONTEXT_WINDOW;\n\n const exact = MODEL_CONTEXT_WINDOWS[modelId];\n if (exact !== undefined) return exact;\n\n // Family heuristics for unlisted model IDs\n const id = modelId.toLowerCase();\n\n // Anthropic Fable 5, Opus 4.x, Sonnet 5, and Sonnet 4.6 = 1M\n if (\n id === \"claude-fable-5\" ||\n id.includes(\"claude-fable-5\") ||\n id.startsWith(\"claude-opus-4\") ||\n id.includes(\"claude-sonnet-5\") ||\n id.includes(\"claude-sonnet-4-6\") ||\n id.includes(\"claude-sonnet-4.6\")\n )\n return 1_000_000;\n\n // All other Claude models — default 200K\n if (id.startsWith(\"claude-\")) return 200_000;\n\n // GPT-5.x family — 1.05M\n if (id.startsWith(\"gpt-5\") || id.startsWith(\"openai/gpt-5\")) return 1_050_000;\n\n // Gemini 2.x / 3.x — 1M\n if (\n id.startsWith(\"gemini-2\") ||\n id.startsWith(\"gemini-3\") ||\n id.includes(\"/gemini-2\") ||\n id.includes(\"/gemini-3\")\n )\n return 1_048_576;\n\n // Z.ai GLM 5.x on OpenRouter — 1M context.\n if (id.startsWith(\"glm-5\") || id.includes(\"/glm-5\")) return 1_048_576;\n\n return DEFAULT_CONTEXT_WINDOW;\n}\n\n// ---------------------------------------------------------------------------\n// Per-model max output token table (documented output-token ceilings)\n//\n// Sources (July 2026):\n// Anthropic https://platform.claude.com/docs/en/docs/about-claude/models/overview\n// (Fable 5 / Opus 4.8 / Opus 4.7 / Sonnet 5 / Sonnet 4.6 = 128K;\n// Haiku 4.5 / Sonnet 4.5 / Opus 4.5 = 64K)\n// OpenAI https://developers.openai.com/api/docs/models/gpt-5.5\n// https://developers.openai.com/api/docs/models/gpt-5.4\n// https://developers.openai.com/api/docs/models/gpt-5.4-mini\n// (GPT-5.5 / GPT-5.4 / GPT-5.4-mini = 128K)\n//\n// Family defaults (used when a model id isn't listed explicitly):\n// claude flagship (fable-5 / opus-4.6+ / sonnet-5 / sonnet-4.6) → 128_000\n// claude-* (Haiku 4.5, older/unknown Claude ids) → 64_000\n// gpt-5* → 128_000\n// everything else → 64_000\n// (safe conservative ceiling that matches the previous global clamp)\n// ---------------------------------------------------------------------------\n\nconst MODEL_MAX_OUTPUT_TOKENS: Record<string, number> = {\n // ── Anthropic / Claude (via Builder gateway or Anthropic direct) ──────────\n \"claude-fable-5\": 128_000,\n \"claude-opus-4-8\": 128_000,\n \"claude-opus-4-7\": 128_000,\n \"claude-sonnet-5\": 128_000,\n \"claude-sonnet-4-6\": 128_000,\n \"claude-haiku-4-5\": 64_000,\n \"claude-haiku-4-5-20251001\": 64_000,\n\n // ── Builder gateway OpenAI IDs (dot→dash) ────────────────────────────────\n \"gpt-5-5\": 128_000,\n \"gpt-5-4\": 128_000,\n \"gpt-5-4-mini\": 128_000,\n\n // ── OpenRouter model IDs ──────────────────────────────────────────────────\n \"anthropic/claude-fable-5\": 128_000,\n \"anthropic/claude-opus-4.8\": 128_000,\n \"anthropic/claude-opus-4.7\": 128_000,\n \"anthropic/claude-sonnet-5\": 128_000,\n \"anthropic/claude-sonnet-4.6\": 128_000,\n \"openai/gpt-5.5\": 128_000,\n \"openai/gpt-5.4\": 128_000,\n\n // ── AI-SDK native OpenAI IDs ──────────────────────────────────────────────\n \"gpt-5.5\": 128_000,\n \"gpt-5.4\": 128_000,\n \"gpt-5.4-mini\": 128_000,\n};\n\n/**\n * Conservative safe ceiling when a model is not in the table (matches the\n * previous global output-token clamp, and current Claude Haiku 4.5 limits).\n */\nconst DEFAULT_MAX_OUTPUT_TOKENS_CEILING = 64_000;\n\n/**\n * Return the documented max output-token ceiling for the given model ID.\n *\n * Uses an exact-match table first, then falls back to family-prefix\n * heuristics, then a conservative 64 K default. Never throws — always returns\n * a positive integer.\n */\nexport function getMaxOutputTokensForModel(\n modelId: string | undefined,\n): number {\n if (!modelId) return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;\n\n const exact = MODEL_MAX_OUTPUT_TOKENS[modelId];\n if (exact !== undefined) return exact;\n\n // Family heuristics for unlisted model IDs\n const id = modelId.toLowerCase();\n\n // Anthropic Fable 5, Opus 4.6+, Sonnet 5, and Sonnet 4.6 = 128K output\n if (\n id.includes(\"claude-fable-5\") ||\n id.includes(\"claude-opus-4-6\") ||\n id.includes(\"claude-opus-4.6\") ||\n id.includes(\"claude-opus-4-7\") ||\n id.includes(\"claude-opus-4.7\") ||\n id.includes(\"claude-opus-4-8\") ||\n id.includes(\"claude-opus-4.8\") ||\n id.includes(\"claude-sonnet-5\") ||\n id.includes(\"claude-sonnet-4-6\") ||\n id.includes(\"claude-sonnet-4.6\")\n )\n return 128_000;\n\n // All other Claude models (Haiku 4.5, legacy) — 64K ceiling\n if (id.startsWith(\"claude-\") || id.includes(\"/claude-\")) {\n return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;\n }\n\n // GPT-5.x family — 128K output\n if (id.startsWith(\"gpt-5\") || id.startsWith(\"openai/gpt-5\")) return 128_000;\n\n return DEFAULT_MAX_OUTPUT_TOKENS_CEILING;\n}\n\nconst ENABLE_CLAUDE_SONNET_5 = true;\n\nexport const CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5\n ? \"claude-sonnet-5\"\n : \"claude-sonnet-4-6\";\nexport const CLAUDE_SONNET_MODEL_LABEL = ENABLE_CLAUDE_SONNET_5\n ? \"Claude Sonnet 5\"\n : \"Claude Sonnet 4.6\";\n\nconst OPENROUTER_CLAUDE_SONNET_MODEL_ID = ENABLE_CLAUDE_SONNET_5\n ? \"anthropic/claude-sonnet-5\"\n : \"anthropic/claude-sonnet-4.6\";\n\nconst ANTHROPIC_DEFAULT_MODEL_ID = CLAUDE_SONNET_MODEL_ID;\n\nfunction builderGatewayModelId(model: string): string {\n return model.replace(/\\./g, \"-\");\n}\n\nfunction openRouterModelId(provider: string, model: string): string {\n return `${provider}/${model}`;\n}\n\nconst FRAMEWORK_DEFAULT_OPENAI_MODEL = \"gpt-5.5\";\nconst FRAMEWORK_DEFAULT_BUILDER_MODEL = ANTHROPIC_DEFAULT_MODEL_ID;\nconst FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL = builderGatewayModelId(\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n);\nconst FRAMEWORK_DEFAULT_OPENROUTER_MODEL = openRouterModelId(\n \"openai\",\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n);\n\nexport const AGENT_MODEL_CONFIG = {\n builder: {\n defaultModel: FRAMEWORK_DEFAULT_BUILDER_MODEL,\n supportedModels: [\n \"auto\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5\",\n FRAMEWORK_DEFAULT_BUILDER_OPENAI_MODEL,\n \"gpt-5-4\",\n \"gpt-5-4-mini\",\n \"gemini-3-1-pro\",\n \"gemini-3-5-flash\",\n \"gemini-3-1-flash-lite\",\n \"grok-code-fast\",\n \"qwen3-coder\",\n ],\n },\n anthropic: {\n defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,\n supportedModels: [\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5-20251001\",\n ],\n },\n aiSdk: {\n anthropic: {\n defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,\n supportedModels: [\n \"claude-fable-5\",\n \"claude-opus-4-8\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-haiku-4-5-20251001\",\n ],\n },\n openai: {\n defaultModel: FRAMEWORK_DEFAULT_OPENAI_MODEL,\n supportedModels: [\n FRAMEWORK_DEFAULT_OPENAI_MODEL,\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n ],\n },\n openrouter: {\n defaultModel: FRAMEWORK_DEFAULT_OPENROUTER_MODEL,\n supportedModels: [\n \"anthropic/claude-fable-5\",\n \"anthropic/claude-opus-4.8\",\n OPENROUTER_CLAUDE_SONNET_MODEL_ID,\n FRAMEWORK_DEFAULT_OPENROUTER_MODEL,\n \"openai/gpt-5.4\",\n // Current stable Gemini on OpenRouter (2.5 Flash is GA)\n \"google/gemini-2.5-flash\",\n \"z-ai/glm-5.2\",\n ],\n },\n google: {\n defaultModel: \"gemini-3.5-flash\",\n supportedModels: [\"gemini-3.5-flash\", \"gemini-3.1-pro-preview\"],\n },\n groq: {\n // llama-3.1-70b-versatile and mixtral-8x7b-32768 were decommissioned\n // (errors since Jan 2025 and Mar 2025 respectively). Replace with current\n // Groq production models.\n defaultModel: \"llama-3.3-70b-versatile\",\n supportedModels: [\n \"llama-3.3-70b-versatile\",\n \"llama3-8b-8192\",\n \"llama-3.1-8b-instant\",\n ],\n },\n mistral: {\n defaultModel: \"mistral-large-latest\",\n supportedModels: [\n \"mistral-large-latest\",\n \"mistral-medium-latest\",\n \"mistral-small-latest\",\n ],\n },\n cohere: {\n // command-r-plus (unversioned) is an alias that may lag; the stable\n // dated release is command-r-plus-08-2024.\n defaultModel: \"command-r-plus-08-2024\",\n supportedModels: [\n \"command-r-plus-08-2024\",\n \"command-r-plus\",\n \"command-r\",\n ],\n },\n ollama: {\n defaultModel: \"llama3.1\",\n supportedModels: [\"llama3.1\", \"llama3.2\", \"mistral\", \"codestral\"],\n },\n },\n} as const;\n\nexport const BUILDER_MODEL_CONFIG = AGENT_MODEL_CONFIG.builder;\nexport const ANTHROPIC_MODEL_CONFIG = AGENT_MODEL_CONFIG.anthropic;\nexport const AI_SDK_MODEL_CONFIG = AGENT_MODEL_CONFIG.aiSdk;\n\nexport type AISDKProvider = keyof typeof AI_SDK_MODEL_CONFIG;\n\nexport const DEFAULT_MODEL = BUILDER_MODEL_CONFIG.defaultModel;\nexport const DEFAULT_OPENAI_MODEL = AI_SDK_MODEL_CONFIG.openai.defaultModel;\nexport const DEFAULT_ANTHROPIC_MODEL = ANTHROPIC_MODEL_CONFIG.defaultModel;\n"]}