@agent-native/core 0.103.0 → 0.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +36 -0
  3. package/corpus/core/package.json +9 -2
  4. package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
  5. package/corpus/core/src/agent/production-agent.ts +30 -0
  6. package/corpus/core/src/agent/run-store.ts +12 -2
  7. package/corpus/core/src/cli/create.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
  9. package/corpus/core/src/cli/templates-meta.ts +4 -3
  10. package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
  11. package/corpus/core/src/client/AgentChatHome.tsx +4 -0
  12. package/corpus/core/src/client/AgentPanel.tsx +321 -223
  13. package/corpus/core/src/client/AssistantChat.tsx +6 -10
  14. package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
  15. package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
  16. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
  17. package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
  18. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
  19. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
  20. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
  21. package/corpus/core/src/client/agent-page/types.ts +1 -1
  22. package/corpus/core/src/client/analytics.ts +51 -5
  23. package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
  24. package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
  25. package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
  26. package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
  27. package/corpus/core/src/client/index.ts +16 -1
  28. package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
  30. package/corpus/core/src/client/session-replay.ts +158 -5
  31. package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
  34. package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
  35. package/corpus/core/src/client/use-chat-threads.ts +2 -0
  36. package/corpus/core/src/connections/catalog.ts +49 -7
  37. package/corpus/core/src/db/index.ts +6 -1
  38. package/corpus/core/src/extensions/actions.ts +106 -16
  39. package/corpus/core/src/extensions/content-patch.ts +22 -0
  40. package/corpus/core/src/extensions/routes.ts +18 -0
  41. package/corpus/core/src/extensions/store.ts +8 -0
  42. package/corpus/core/src/index.ts +3 -0
  43. package/corpus/core/src/ingestion/docx.ts +158 -0
  44. package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
  45. package/corpus/core/src/ingestion/figma.ts +548 -0
  46. package/corpus/core/src/ingestion/index.ts +107 -0
  47. package/corpus/core/src/ingestion/media.ts +264 -0
  48. package/corpus/core/src/ingestion/notion.ts +121 -0
  49. package/corpus/core/src/ingestion/office.ts +214 -0
  50. package/corpus/core/src/ingestion/orchestration.ts +160 -0
  51. package/corpus/core/src/ingestion/pptx.ts +333 -0
  52. package/corpus/core/src/ingestion/selection.ts +81 -0
  53. package/corpus/core/src/ingestion/website.ts +151 -0
  54. package/corpus/core/src/integrations/plugin.ts +45 -37
  55. package/corpus/core/src/localization/default-messages.ts +35 -12
  56. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  57. package/corpus/core/src/observability/traces.ts +5 -3
  58. package/corpus/core/src/provider-api/index.ts +452 -8
  59. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
  60. package/corpus/core/src/search-utils/index.ts +112 -0
  61. package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
  62. package/corpus/core/src/server/action-discovery.ts +33 -8
  63. package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
  64. package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
  65. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  66. package/corpus/core/src/server/core-routes-plugin.ts +12 -0
  67. package/corpus/core/src/server/index.ts +30 -0
  68. package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
  69. package/corpus/core/src/styles/agent-native.css +9 -0
  70. package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
  71. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  72. package/corpus/core/src/templates/workspace-root/.env.example +12 -0
  73. package/corpus/core/src/vite/client.ts +2 -0
  74. package/corpus/core/src/workspace-connections/index.ts +6 -0
  75. package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
  76. package/corpus/core/src/workspace-connections/store.ts +16 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
  78. package/corpus/templates/analytics/AGENTS.md +9 -0
  79. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
  80. package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
  81. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
  82. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
  83. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
  84. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
  85. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
  86. package/corpus/templates/analytics/app/i18n-data.ts +3 -3
  87. package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
  88. package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
  92. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
  93. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
  98. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
  99. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
  100. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
  101. package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  103. package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
  104. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
  105. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
  106. package/corpus/templates/assets/AGENTS.md +10 -0
  107. package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
  108. package/corpus/templates/assets/actions/edit-image.ts +2 -0
  109. package/corpus/templates/assets/actions/generate-asset.ts +52 -0
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
  111. package/corpus/templates/assets/actions/generate-image.ts +219 -1
  112. package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
  113. package/corpus/templates/assets/actions/refine-image.ts +3 -0
  114. package/corpus/templates/assets/actions/restyle-image.ts +2 -0
  115. package/corpus/templates/assets/agent-native.app-skill.json +4 -0
  116. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
  117. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  118. package/corpus/templates/assets/app/i18n-data.ts +29 -13
  119. package/corpus/templates/assets/app/routes/agent.tsx +7 -1
  120. package/corpus/templates/assets/app/routes/library.tsx +9 -0
  121. package/corpus/templates/assets/app/routes/settings.tsx +3 -0
  122. package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
  123. package/corpus/templates/assets/package.json +1 -0
  124. package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
  125. package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
  126. package/corpus/templates/brain/app/i18n-data.ts +3 -3
  127. package/corpus/templates/brain/app/lib/brain.ts +1 -1
  128. package/corpus/templates/brain/server/lib/search.ts +17 -67
  129. package/corpus/templates/calendar/app/i18n-data.ts +3 -3
  130. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
  131. package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
  132. package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
  133. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  134. package/corpus/templates/clips/AGENTS.md +4 -0
  135. package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
  136. package/corpus/templates/clips/actions/create-meeting.ts +6 -2
  137. package/corpus/templates/clips/actions/create-organization.ts +3 -2
  138. package/corpus/templates/clips/actions/create-recording.ts +4 -1
  139. package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
  140. package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
  141. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
  142. package/corpus/templates/clips/actions/list-meetings.ts +23 -5
  143. package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
  144. package/corpus/templates/clips/actions/remove-silences.ts +10 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +53 -11
  146. package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
  147. package/corpus/templates/clips/actions/search-recordings.ts +5 -8
  148. package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
  149. package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
  150. package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
  151. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
  152. package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
  153. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
  154. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
  155. package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
  156. package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
  157. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
  158. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  159. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  160. package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
  161. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  162. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  163. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  164. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  165. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  166. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  167. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
  168. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
  170. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
  171. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
  172. package/corpus/templates/clips/app/routes/record.tsx +23 -2
  173. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
  174. package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
  175. package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
  187. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  188. package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
  189. package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
  190. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
  191. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
  192. package/corpus/templates/clips/desktop/src/app.tsx +66 -28
  193. package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
  194. package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
  195. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
  196. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
  197. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
  198. package/corpus/templates/clips/desktop/src/styles.css +13 -11
  199. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
  200. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
  201. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
  202. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
  204. package/corpus/templates/clips/server/db/schema.ts +2 -2
  205. package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
  206. package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
  207. package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
  208. package/corpus/templates/clips/server/lib/recordings.ts +40 -1
  209. package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
  210. package/corpus/templates/clips/server/plugins/db.ts +2 -2
  211. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
  212. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
  213. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
  214. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
  215. package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
  216. package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
  217. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
  218. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
  219. package/corpus/templates/content/AGENTS.md +9 -0
  220. package/corpus/templates/content/actions/create-document.ts +94 -0
  221. package/corpus/templates/content/actions/edit-document.ts +144 -4
  222. package/corpus/templates/content/actions/update-document.ts +138 -0
  223. package/corpus/templates/content/agent-native.app-skill.json +4 -0
  224. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  225. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  226. package/corpus/templates/content/app/i18n-data.ts +13 -4
  227. package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
  228. package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
  229. package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
  230. package/corpus/templates/content/package.json +1 -0
  231. package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
  232. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
  233. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  234. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  235. package/corpus/templates/design/AGENTS.md +6 -0
  236. package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
  237. package/corpus/templates/design/actions/edit-design.ts +128 -0
  238. package/corpus/templates/design/actions/generate-design.ts +278 -14
  239. package/corpus/templates/design/actions/generate-screens.ts +42 -1
  240. package/corpus/templates/design/agent-native.app-skill.json +4 -0
  241. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
  242. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  243. package/corpus/templates/design/app/i18n-data.ts +10 -4
  244. package/corpus/templates/design/app/routes/agent.tsx +2 -1
  245. package/corpus/templates/design/app/routes/settings.tsx +3 -0
  246. package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
  247. package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  248. package/corpus/templates/design/package.json +1 -0
  249. package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
  250. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
  251. package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
  252. package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
  253. package/corpus/templates/design/shared/generation-session.ts +7 -0
  254. package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
  255. package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
  256. package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
  257. package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
  258. package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
  259. package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
  260. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
  261. package/corpus/templates/plan/AGENTS.md +21 -1
  262. package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
  263. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
  264. package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
  265. package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
  266. package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
  267. package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
  268. package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
  269. package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
  270. package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
  271. package/corpus/templates/plan/server/plan-mdx.ts +75 -2
  272. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
  273. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
  274. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
  275. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
  276. package/corpus/templates/slides/AGENTS.md +6 -0
  277. package/corpus/templates/slides/actions/add-slide.ts +230 -14
  278. package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
  279. package/corpus/templates/slides/actions/create-deck.ts +130 -0
  280. package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
  281. package/corpus/templates/slides/actions/import-file.ts +5 -4
  282. package/corpus/templates/slides/actions/patch-deck.ts +200 -10
  283. package/corpus/templates/slides/actions/update-slide.ts +208 -15
  284. package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
  285. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
  286. package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
  287. package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
  288. package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
  289. package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
  290. package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
  291. package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
  292. package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
  293. package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
  294. package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
  295. package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
  296. package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
  297. package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
  298. package/corpus/templates/slides/app/routes/agent.tsx +7 -1
  299. package/corpus/templates/slides/app/routes/settings.tsx +3 -0
  300. package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
  301. package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
  302. package/corpus/templates/slides/package.json +1 -0
  303. package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
  304. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
  305. package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
  306. package/dist/agent/engine/credential-errors.d.ts +1 -1
  307. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  308. package/dist/agent/engine/credential-errors.js +2 -2
  309. package/dist/agent/engine/credential-errors.js.map +1 -1
  310. package/dist/agent/production-agent.d.ts.map +1 -1
  311. package/dist/agent/production-agent.js +25 -0
  312. package/dist/agent/production-agent.js.map +1 -1
  313. package/dist/agent/run-store.d.ts.map +1 -1
  314. package/dist/agent/run-store.js +12 -2
  315. package/dist/agent/run-store.js.map +1 -1
  316. package/dist/cli/create.d.ts.map +1 -1
  317. package/dist/cli/create.js +1 -0
  318. package/dist/cli/create.js.map +1 -1
  319. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  320. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  321. package/dist/cli/skills-content/visual-plan-skill.js +30 -11
  322. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  323. package/dist/cli/templates-meta.d.ts.map +1 -1
  324. package/dist/cli/templates-meta.js +4 -3
  325. package/dist/cli/templates-meta.js.map +1 -1
  326. package/dist/client/AgentAskPopover.d.ts +11 -0
  327. package/dist/client/AgentAskPopover.d.ts.map +1 -0
  328. package/dist/client/AgentAskPopover.js +30 -0
  329. package/dist/client/AgentAskPopover.js.map +1 -0
  330. package/dist/client/AgentChatHome.d.ts +1 -1
  331. package/dist/client/AgentChatHome.d.ts.map +1 -1
  332. package/dist/client/AgentChatHome.js +2 -2
  333. package/dist/client/AgentChatHome.js.map +1 -1
  334. package/dist/client/AgentPanel.d.ts +9 -19
  335. package/dist/client/AgentPanel.d.ts.map +1 -1
  336. package/dist/client/AgentPanel.js +119 -80
  337. package/dist/client/AgentPanel.js.map +1 -1
  338. package/dist/client/AssistantChat.d.ts.map +1 -1
  339. package/dist/client/AssistantChat.js +4 -4
  340. package/dist/client/AssistantChat.js.map +1 -1
  341. package/dist/client/MultiTabAssistantChat.d.ts +3 -9
  342. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  343. package/dist/client/MultiTabAssistantChat.js +49 -189
  344. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  345. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  346. package/dist/client/agent-chat-adapter.js +12 -1
  347. package/dist/client/agent-chat-adapter.js.map +1 -1
  348. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
  349. package/dist/client/agent-page/AgentContextTab.js +26 -28
  350. package/dist/client/agent-page/AgentContextTab.js.map +1 -1
  351. package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
  352. package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
  353. package/dist/client/agent-page/AgentEmptyState.js +6 -0
  354. package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
  355. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
  356. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  357. package/dist/client/agent-page/AgentJobsTab.js +90 -58
  358. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  359. package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
  360. package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
  361. package/dist/client/agent-page/AgentTabFrame.js +7 -0
  362. package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
  363. package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
  364. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  365. package/dist/client/agent-page/AgentTabsPage.js +135 -99
  366. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  367. package/dist/client/agent-page/types.d.ts +1 -1
  368. package/dist/client/agent-page/types.d.ts.map +1 -1
  369. package/dist/client/agent-page/types.js.map +1 -1
  370. package/dist/client/analytics.d.ts +10 -3
  371. package/dist/client/analytics.d.ts.map +1 -1
  372. package/dist/client/analytics.js +37 -2
  373. package/dist/client/analytics.js.map +1 -1
  374. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  375. package/dist/client/chat/run-recovery.js +10 -3
  376. package/dist/client/chat/run-recovery.js.map +1 -1
  377. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  378. package/dist/client/composer/PromptComposer.js +2 -2
  379. package/dist/client/composer/PromptComposer.js.map +1 -1
  380. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  381. package/dist/client/composer/TiptapComposer.js +15 -3
  382. package/dist/client/composer/TiptapComposer.js.map +1 -1
  383. package/dist/client/dynamic-suggestions.js +3 -3
  384. package/dist/client/dynamic-suggestions.js.map +1 -1
  385. package/dist/client/index.d.ts +4 -3
  386. package/dist/client/index.d.ts.map +1 -1
  387. package/dist/client/index.js +3 -2
  388. package/dist/client/index.js.map +1 -1
  389. package/dist/client/resources/ResourceTree.d.ts +5 -1
  390. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  391. package/dist/client/resources/ResourceTree.js +74 -5
  392. package/dist/client/resources/ResourceTree.js.map +1 -1
  393. package/dist/client/resources/ResourcesPanel.d.ts +11 -2
  394. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  395. package/dist/client/resources/ResourcesPanel.js +105 -31
  396. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  397. package/dist/client/session-replay.d.ts +28 -0
  398. package/dist/client/session-replay.d.ts.map +1 -1
  399. package/dist/client/session-replay.js +122 -8
  400. package/dist/client/session-replay.js.map +1 -1
  401. package/dist/client/settings/AutomationsSection.d.ts +3 -1
  402. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  403. package/dist/client/settings/AutomationsSection.js +16 -6
  404. package/dist/client/settings/AutomationsSection.js.map +1 -1
  405. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  406. package/dist/client/settings/SettingsPanel.js +3 -3
  407. package/dist/client/settings/SettingsPanel.js.map +1 -1
  408. package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
  409. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  410. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  411. package/dist/client/settings/agent-settings-search.js +2 -2
  412. package/dist/client/settings/agent-settings-search.js.map +1 -1
  413. package/dist/client/use-chat-threads.d.ts +2 -0
  414. package/dist/client/use-chat-threads.d.ts.map +1 -1
  415. package/dist/client/use-chat-threads.js.map +1 -1
  416. package/dist/collab/awareness.d.ts +2 -2
  417. package/dist/collab/awareness.d.ts.map +1 -1
  418. package/dist/collab/routes.d.ts +1 -1
  419. package/dist/connections/catalog.d.ts +41 -7
  420. package/dist/connections/catalog.d.ts.map +1 -1
  421. package/dist/connections/catalog.js +40 -7
  422. package/dist/connections/catalog.js.map +1 -1
  423. package/dist/db/index.d.ts +2 -2
  424. package/dist/db/index.d.ts.map +1 -1
  425. package/dist/db/index.js +2 -2
  426. package/dist/db/index.js.map +1 -1
  427. package/dist/extensions/actions.d.ts.map +1 -1
  428. package/dist/extensions/actions.js +85 -15
  429. package/dist/extensions/actions.js.map +1 -1
  430. package/dist/extensions/content-patch.d.ts +4 -0
  431. package/dist/extensions/content-patch.d.ts.map +1 -1
  432. package/dist/extensions/content-patch.js +18 -0
  433. package/dist/extensions/content-patch.js.map +1 -1
  434. package/dist/extensions/routes.d.ts.map +1 -1
  435. package/dist/extensions/routes.js +14 -0
  436. package/dist/extensions/routes.js.map +1 -1
  437. package/dist/extensions/store.d.ts +1 -0
  438. package/dist/extensions/store.d.ts.map +1 -1
  439. package/dist/extensions/store.js +4 -1
  440. package/dist/extensions/store.js.map +1 -1
  441. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  442. package/dist/index.d.ts +1 -1
  443. package/dist/index.d.ts.map +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/index.js.map +1 -1
  446. package/dist/ingestion/docx.d.ts +16 -0
  447. package/dist/ingestion/docx.d.ts.map +1 -0
  448. package/dist/ingestion/docx.js +129 -0
  449. package/dist/ingestion/docx.js.map +1 -0
  450. package/dist/ingestion/figma-node-to-html.d.ts +304 -0
  451. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
  452. package/dist/ingestion/figma-node-to-html.js +1292 -0
  453. package/dist/ingestion/figma-node-to-html.js.map +1 -0
  454. package/dist/ingestion/figma.d.ts +115 -0
  455. package/dist/ingestion/figma.d.ts.map +1 -0
  456. package/dist/ingestion/figma.js +399 -0
  457. package/dist/ingestion/figma.js.map +1 -0
  458. package/dist/ingestion/index.d.ts +11 -0
  459. package/dist/ingestion/index.d.ts.map +1 -0
  460. package/dist/ingestion/index.js +11 -0
  461. package/dist/ingestion/index.js.map +1 -0
  462. package/dist/ingestion/media.d.ts +36 -0
  463. package/dist/ingestion/media.d.ts.map +1 -0
  464. package/dist/ingestion/media.js +178 -0
  465. package/dist/ingestion/media.js.map +1 -0
  466. package/dist/ingestion/notion.d.ts +12 -0
  467. package/dist/ingestion/notion.d.ts.map +1 -0
  468. package/dist/ingestion/notion.js +104 -0
  469. package/dist/ingestion/notion.js.map +1 -0
  470. package/dist/ingestion/office.d.ts +45 -0
  471. package/dist/ingestion/office.d.ts.map +1 -0
  472. package/dist/ingestion/office.js +141 -0
  473. package/dist/ingestion/office.js.map +1 -0
  474. package/dist/ingestion/orchestration.d.ts +52 -0
  475. package/dist/ingestion/orchestration.d.ts.map +1 -0
  476. package/dist/ingestion/orchestration.js +89 -0
  477. package/dist/ingestion/orchestration.js.map +1 -0
  478. package/dist/ingestion/pptx.d.ts +28 -0
  479. package/dist/ingestion/pptx.d.ts.map +1 -0
  480. package/dist/ingestion/pptx.js +255 -0
  481. package/dist/ingestion/pptx.js.map +1 -0
  482. package/dist/ingestion/selection.d.ts +20 -0
  483. package/dist/ingestion/selection.d.ts.map +1 -0
  484. package/dist/ingestion/selection.js +52 -0
  485. package/dist/ingestion/selection.js.map +1 -0
  486. package/dist/ingestion/website.d.ts +27 -0
  487. package/dist/ingestion/website.d.ts.map +1 -0
  488. package/dist/ingestion/website.js +100 -0
  489. package/dist/ingestion/website.js.map +1 -0
  490. package/dist/integrations/plugin.d.ts.map +1 -1
  491. package/dist/integrations/plugin.js +32 -27
  492. package/dist/integrations/plugin.js.map +1 -1
  493. package/dist/localization/default-messages.d.ts +22 -0
  494. package/dist/localization/default-messages.d.ts.map +1 -1
  495. package/dist/localization/default-messages.js +31 -9
  496. package/dist/localization/default-messages.js.map +1 -1
  497. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  498. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  499. package/dist/observability/hosted-model-experiment.js +90 -0
  500. package/dist/observability/hosted-model-experiment.js.map +1 -0
  501. package/dist/observability/routes.d.ts +5 -5
  502. package/dist/observability/traces.d.ts.map +1 -1
  503. package/dist/observability/traces.js +5 -3
  504. package/dist/observability/traces.js.map +1 -1
  505. package/dist/progress/routes.d.ts +1 -1
  506. package/dist/provider-api/index.d.ts +35 -4
  507. package/dist/provider-api/index.d.ts.map +1 -1
  508. package/dist/provider-api/index.js +339 -8
  509. package/dist/provider-api/index.js.map +1 -1
  510. package/dist/resources/handlers.d.ts +1 -1
  511. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  512. package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
  513. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  514. package/dist/search-utils/index.d.ts +12 -0
  515. package/dist/search-utils/index.d.ts.map +1 -0
  516. package/dist/search-utils/index.js +95 -0
  517. package/dist/search-utils/index.js.map +1 -0
  518. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  519. package/dist/secrets/register-framework-secrets.js +57 -0
  520. package/dist/secrets/register-framework-secrets.js.map +1 -1
  521. package/dist/secrets/routes.d.ts +9 -9
  522. package/dist/server/action-discovery.d.ts +8 -0
  523. package/dist/server/action-discovery.d.ts.map +1 -1
  524. package/dist/server/action-discovery.js +26 -9
  525. package/dist/server/action-discovery.js.map +1 -1
  526. package/dist/server/agent-chat/framework-prompts.js +2 -2
  527. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  528. package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
  529. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  530. package/dist/server/agent-chat/prompt-resources.js +95 -0
  531. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  532. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  533. package/dist/server/agent-chat-plugin.js +7 -0
  534. package/dist/server/agent-chat-plugin.js.map +1 -1
  535. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  536. package/dist/server/core-routes-plugin.js +5 -0
  537. package/dist/server/core-routes-plugin.js.map +1 -1
  538. package/dist/server/index.d.ts +5 -1
  539. package/dist/server/index.d.ts.map +1 -1
  540. package/dist/server/index.js +5 -1
  541. package/dist/server/index.js.map +1 -1
  542. package/dist/server/workspace-provider-oauth.d.ts +48 -0
  543. package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
  544. package/dist/server/workspace-provider-oauth.js +415 -0
  545. package/dist/server/workspace-provider-oauth.js.map +1 -0
  546. package/dist/styles/agent-native.css +9 -0
  547. package/dist/templates/chat/app/i18n/en-US.ts +3 -3
  548. package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
  549. package/dist/templates/default/app/i18n/en-US.ts +3 -3
  550. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  551. package/dist/templates/workspace-root/.env.example +12 -0
  552. package/dist/vite/client.d.ts.map +1 -1
  553. package/dist/vite/client.js +2 -0
  554. package/dist/vite/client.js.map +1 -1
  555. package/dist/workspace-connections/index.d.ts +1 -0
  556. package/dist/workspace-connections/index.d.ts.map +1 -1
  557. package/dist/workspace-connections/index.js +1 -0
  558. package/dist/workspace-connections/index.js.map +1 -1
  559. package/dist/workspace-connections/lifecycle.d.ts +16 -0
  560. package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
  561. package/dist/workspace-connections/lifecycle.js +14 -0
  562. package/dist/workspace-connections/lifecycle.js.map +1 -0
  563. package/dist/workspace-connections/store.d.ts.map +1 -1
  564. package/dist/workspace-connections/store.js +16 -0
  565. package/dist/workspace-connections/store.js.map +1 -1
  566. package/package.json +10 -3
  567. package/src/templates/chat/app/i18n/en-US.ts +3 -3
  568. package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
  569. package/src/templates/chat/app/lib/agent-page.tsx +10 -1
  570. package/src/templates/default/app/i18n/en-US.ts +3 -3
  571. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  572. package/src/templates/workspace-root/.env.example +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/connections/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["export type WorkspaceConnectionCapability =\n | \"search\"\n | \"import\"\n | \"messages\"\n | \"meetings\"\n | \"crm\"\n | \"code\"\n | \"docs\";\n\nexport type WorkspaceConnectionTemplateUse =\n | \"analytics\"\n | \"brain\"\n | \"calendar\"\n | \"clips\"\n | \"content\"\n | \"design\"\n | \"dispatch\"\n | \"forms\"\n | \"mail\"\n | \"slides\";\n\nexport type WorkspaceConnectionProviderId =\n | \"slack\"\n | \"github\"\n | \"notion\"\n | \"gmail\"\n | \"google_drive\"\n | \"hubspot\"\n | \"granola\"\n | \"clips\"\n | \"generic\";\n\nexport interface WorkspaceConnectionCredentialKey {\n key: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface WorkspaceConnectionProvider {\n id: WorkspaceConnectionProviderId;\n label: string;\n description: string;\n credentialKeys: readonly WorkspaceConnectionCredentialKey[];\n capabilities: readonly WorkspaceConnectionCapability[];\n recommendedTemplateUses: readonly WorkspaceConnectionTemplateUse[];\n}\n\nexport interface ListWorkspaceConnectionProvidersOptions {\n capability?: WorkspaceConnectionCapability;\n templateUse?: WorkspaceConnectionTemplateUse;\n}\n\nexport function defineWorkspaceConnectionProvider<\n const T extends WorkspaceConnectionProvider,\n>(provider: T): T {\n return provider;\n}\n\nexport const WORKSPACE_CONNECTION_PROVIDERS = [\n defineWorkspaceConnectionProvider({\n id: \"slack\",\n label: \"Slack\",\n description:\n \"Workspace conversations and channel history for company memory, support workflows, and messaging automations.\",\n credentialKeys: [\n {\n key: \"SLACK_BOT_TOKEN\",\n label: \"Slack bot token (legacy)\",\n description:\n \"Legacy single-workspace fallback. For new messaging automations, connect Slack from Settings → Messaging instead.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"brain\", \"dispatch\", \"analytics\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"github\",\n label: \"GitHub\",\n description:\n \"Repository, issue, pull request, and code context for product memory, engineering workflows, and analytics.\",\n credentialKeys: [\n {\n key: \"GITHUB_TOKEN\",\n label: \"GitHub token\",\n description:\n \"Fine-grained token or app credential scoped to the repositories the workspace should access.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"analytics\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"notion\",\n label: \"Notion\",\n description:\n \"Workspace docs, wikis, pages, and databases for knowledge capture and search.\",\n credentialKeys: [\n {\n key: \"NOTION_API_KEY\",\n label: \"Notion API key\",\n description:\n \"Integration secret with access to the pages or databases shared with the integration.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"gmail\",\n label: \"Gmail\",\n description:\n \"Mailbox messages and threads for search, triage, customer context, and agent replies.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"mail\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"google_drive\",\n label: \"Google Drive\",\n description:\n \"Drive files, Docs, Sheets, and Slides for document search and import workflows.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"hubspot\",\n label: \"HubSpot\",\n description:\n \"CRM records, companies, contacts, deals, and engagement history for customer-aware apps.\",\n credentialKeys: [\n {\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n label: \"HubSpot private app token\",\n description:\n \"Private app token scoped to the CRM objects the workspace needs.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"mail\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"granola\",\n label: \"Granola\",\n description:\n \"Meeting notes and transcripts for company memory and follow-up workflows.\",\n credentialKeys: [\n {\n key: \"GRANOLA_API_KEY\",\n label: \"Granola API key\",\n description:\n \"API key for accessible team notes; templates should respect Granola's workspace visibility.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"meetings\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"calendar\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"clips\",\n label: \"Clips\",\n description:\n \"Agent-native Clips exports and recordings for transcript import and searchable meeting context.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"meetings\"],\n recommendedTemplateUses: [\"brain\", \"clips\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"generic\",\n label: \"Generic\",\n description:\n \"Custom webhooks, CSV exports, transcript drops, and one-off sources that do not need a first-class provider yet.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\n \"brain\",\n \"analytics\",\n \"content\",\n \"dispatch\",\n \"forms\",\n ],\n }),\n] as const satisfies readonly WorkspaceConnectionProvider[];\n\nconst PROVIDERS_BY_ID = new Map<\n WorkspaceConnectionProviderId,\n WorkspaceConnectionProvider\n>(WORKSPACE_CONNECTION_PROVIDERS.map((provider) => [provider.id, provider]));\n\nexport function listWorkspaceConnectionProviders(\n options: ListWorkspaceConnectionProvidersOptions = {},\n): WorkspaceConnectionProvider[] {\n return WORKSPACE_CONNECTION_PROVIDERS.filter((provider) => {\n if (\n options.capability &&\n !includesWorkspaceConnectionCapability(\n provider.capabilities,\n options.capability,\n )\n ) {\n return false;\n }\n if (\n options.templateUse &&\n !includesWorkspaceConnectionTemplateUse(\n provider.recommendedTemplateUses,\n options.templateUse,\n )\n ) {\n return false;\n }\n return true;\n }).map((provider) => ({ ...provider }));\n}\n\nexport function getWorkspaceConnectionProvider(\n id: string,\n): WorkspaceConnectionProvider | undefined {\n const provider = PROVIDERS_BY_ID.get(id as WorkspaceConnectionProviderId);\n return provider ? { ...provider } : undefined;\n}\n\nexport function isWorkspaceConnectionProviderId(\n id: string,\n): id is WorkspaceConnectionProviderId {\n return PROVIDERS_BY_ID.has(id as WorkspaceConnectionProviderId);\n}\n\nexport function listWorkspaceConnectionProvidersForTemplate(\n templateUse: WorkspaceConnectionTemplateUse,\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ templateUse });\n}\n\nexport function listWorkspaceConnectionProvidersForCapability(\n capability: WorkspaceConnectionCapability,\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ capability });\n}\n\nexport function workspaceConnectionProviderSupports(\n providerOrId: WorkspaceConnectionProvider | string,\n capability: WorkspaceConnectionCapability,\n): boolean {\n const provider =\n typeof providerOrId === \"string\"\n ? getWorkspaceConnectionProvider(providerOrId)\n : providerOrId;\n return provider?.capabilities.includes(capability) ?? false;\n}\n\nfunction includesWorkspaceConnectionCapability(\n capabilities: readonly WorkspaceConnectionCapability[],\n capability: WorkspaceConnectionCapability,\n): boolean {\n return capabilities.includes(capability);\n}\n\nfunction includesWorkspaceConnectionTemplateUse(\n templateUses: readonly WorkspaceConnectionTemplateUse[],\n templateUse: WorkspaceConnectionTemplateUse,\n): boolean {\n return templateUses.includes(templateUse);\n}\n"]}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/connections/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["export type WorkspaceConnectionCapability =\n | \"search\"\n | \"import\"\n | \"messages\"\n | \"meetings\"\n | \"crm\"\n | \"code\"\n | \"docs\";\n\nexport type WorkspaceConnectionTemplateUse =\n | \"analytics\"\n | \"brain\"\n | \"calendar\"\n | \"clips\"\n | \"content\"\n | \"design\"\n | \"dispatch\"\n | \"forms\"\n | \"mail\"\n | \"slides\";\n\nexport type WorkspaceConnectionProviderId =\n | \"slack\"\n | \"github\"\n | \"figma\"\n | \"notion\"\n | \"gmail\"\n | \"google_drive\"\n | \"hubspot\"\n | \"granola\"\n | \"clips\"\n | \"generic\";\n\nexport interface WorkspaceConnectionCredentialKey {\n key: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface WorkspaceConnectionProvider {\n id: WorkspaceConnectionProviderId;\n label: string;\n description: string;\n credentialKeys: readonly WorkspaceConnectionCredentialKey[];\n capabilities: readonly WorkspaceConnectionCapability[];\n recommendedTemplateUses: readonly WorkspaceConnectionTemplateUse[];\n oauth?: {\n provider: string;\n authorizationUrl: string;\n tokenUrl: string;\n refreshUrl?: string;\n scopes: readonly string[];\n };\n}\n\nexport interface ListWorkspaceConnectionProvidersOptions {\n capability?: WorkspaceConnectionCapability;\n templateUse?: WorkspaceConnectionTemplateUse;\n}\n\nexport function defineWorkspaceConnectionProvider<\n const T extends WorkspaceConnectionProvider,\n>(provider: T): T {\n return provider;\n}\n\nexport const WORKSPACE_CONNECTION_PROVIDERS = [\n defineWorkspaceConnectionProvider({\n id: \"slack\",\n label: \"Slack\",\n description:\n \"Workspace conversations and channel history for company memory, support workflows, and messaging automations.\",\n credentialKeys: [\n {\n key: \"SLACK_BOT_TOKEN\",\n label: \"Slack bot token (legacy)\",\n description:\n \"Legacy single-workspace fallback. For new messaging automations, connect Slack from Settings → Messaging instead.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"brain\", \"dispatch\", \"analytics\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"github\",\n label: \"GitHub\",\n description:\n \"Repository, issue, pull request, and code context for product memory, engineering workflows, and analytics.\",\n credentialKeys: [\n {\n key: \"GITHUB_TOKEN\",\n label: \"GitHub token\",\n description:\n \"Fine-grained token or app credential scoped to the repositories the workspace should access.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"analytics\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"figma\",\n label: \"Figma\",\n description:\n \"Design files, frames, components, rendered previews, and library context for creative workflows.\",\n credentialKeys: [\n {\n key: \"FIGMA_ACCESS_TOKEN\",\n label: \"Figma personal access token (fallback)\",\n description:\n \"Optional fallback for local or individual use. Workspace OAuth is preferred.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"figma\",\n authorizationUrl: \"https://www.figma.com/oauth\",\n tokenUrl: \"https://api.figma.com/v1/oauth/token\",\n refreshUrl: \"https://api.figma.com/v1/oauth/token\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"projects:read\",\n ],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"design\", \"slides\", \"content\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"notion\",\n label: \"Notion\",\n description:\n \"Workspace docs, wikis, pages, and databases for knowledge capture and search.\",\n credentialKeys: [],\n oauth: {\n provider: \"notion\",\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.notion.com/v1/oauth/token\",\n refreshUrl: \"https://api.notion.com/v1/oauth/token\",\n scopes: [],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"gmail\",\n label: \"Gmail\",\n description:\n \"Mailbox messages and threads for search, triage, customer context, and agent replies.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"mail\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"google_drive\",\n label: \"Google Drive\",\n description:\n \"Drive files, Docs, Sheets, and Slides for document search and import workflows.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n oauth: {\n provider: \"google\",\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\"https://www.googleapis.com/auth/drive.file\"],\n },\n }),\n defineWorkspaceConnectionProvider({\n id: \"hubspot\",\n label: \"HubSpot\",\n description:\n \"CRM records, companies, contacts, deals, and engagement history for customer-aware apps.\",\n credentialKeys: [\n {\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n label: \"HubSpot private app token\",\n description:\n \"Private app token scoped to the CRM objects the workspace needs.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"mail\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"granola\",\n label: \"Granola\",\n description:\n \"Meeting notes and transcripts for company memory and follow-up workflows.\",\n credentialKeys: [\n {\n key: \"GRANOLA_API_KEY\",\n label: \"Granola API key\",\n description:\n \"API key for accessible team notes; templates should respect Granola's workspace visibility.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"meetings\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"calendar\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"clips\",\n label: \"Clips\",\n description:\n \"Agent-native Clips exports and recordings for transcript import and searchable meeting context.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"meetings\"],\n recommendedTemplateUses: [\"brain\", \"clips\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"generic\",\n label: \"Generic\",\n description:\n \"Custom webhooks, CSV exports, transcript drops, and one-off sources that do not need a first-class provider yet.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\n \"brain\",\n \"analytics\",\n \"content\",\n \"dispatch\",\n \"forms\",\n ],\n }),\n] as const satisfies readonly WorkspaceConnectionProvider[];\n\nconst PROVIDERS_BY_ID = new Map<\n WorkspaceConnectionProviderId,\n WorkspaceConnectionProvider\n>(WORKSPACE_CONNECTION_PROVIDERS.map((provider) => [provider.id, provider]));\n\nexport function listWorkspaceConnectionProviders(\n options: ListWorkspaceConnectionProvidersOptions = {},\n): WorkspaceConnectionProvider[] {\n return WORKSPACE_CONNECTION_PROVIDERS.filter((provider) => {\n if (\n options.capability &&\n !includesWorkspaceConnectionCapability(\n provider.capabilities,\n options.capability,\n )\n ) {\n return false;\n }\n if (\n options.templateUse &&\n !includesWorkspaceConnectionTemplateUse(\n provider.recommendedTemplateUses,\n options.templateUse,\n )\n ) {\n return false;\n }\n return true;\n }).map((provider) => ({ ...provider }));\n}\n\nexport function getWorkspaceConnectionProvider(\n id: string,\n): WorkspaceConnectionProvider | undefined {\n const provider = PROVIDERS_BY_ID.get(id as WorkspaceConnectionProviderId);\n return provider ? { ...provider } : undefined;\n}\n\nexport function isWorkspaceConnectionProviderId(\n id: string,\n): id is WorkspaceConnectionProviderId {\n return PROVIDERS_BY_ID.has(id as WorkspaceConnectionProviderId);\n}\n\nexport function listWorkspaceConnectionProvidersForTemplate(\n templateUse: WorkspaceConnectionTemplateUse,\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ templateUse });\n}\n\nexport function listWorkspaceConnectionProvidersForCapability(\n capability: WorkspaceConnectionCapability,\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ capability });\n}\n\nexport function workspaceConnectionProviderSupports(\n providerOrId: WorkspaceConnectionProvider | string,\n capability: WorkspaceConnectionCapability,\n): boolean {\n const provider =\n typeof providerOrId === \"string\"\n ? getWorkspaceConnectionProvider(providerOrId)\n : providerOrId;\n return provider?.capabilities.includes(capability) ?? false;\n}\n\nfunction includesWorkspaceConnectionCapability(\n capabilities: readonly WorkspaceConnectionCapability[],\n capability: WorkspaceConnectionCapability,\n): boolean {\n return capabilities.includes(capability);\n}\n\nfunction includesWorkspaceConnectionTemplateUse(\n templateUses: readonly WorkspaceConnectionTemplateUse[],\n templateUse: WorkspaceConnectionTemplateUse,\n): boolean {\n return templateUses.includes(templateUse);\n}\n"]}
@@ -21,8 +21,8 @@ export declare function createDb(config: DbConfig): Promise<(import("drizzle-orm
21
21
  })>;
22
22
  export type DrizzleDb = Awaited<ReturnType<typeof createDb>>;
23
23
  export { createGetDb } from "./create-get-db.js";
24
- export { runMigrations } from "./migrations.js";
25
- export { getDbExec, createDbExec, getDialect, isPostgres, intType, closeDbExec, type DbExec, type DbExecConfig, type Dialect, } from "./client.js";
24
+ export { runMigrations, type MigrationEntry, type MigrationSql, } from "./migrations.js";
25
+ export { getDbExec, createDbExec, getDialect, isLocalDatabase, isPostgres, intType, closeDbExec, type DbExec, type DbExecConfig, type Dialect, } from "./client.js";
26
26
  export { table, text, integer, now } from "./schema.js";
27
27
  export { ensureAdditiveColumns, type EnsureAdditiveColumnsOptions, type EnsureAdditiveColumnsResult, type EnsureAdditiveColumnsLogger, } from "./ensure-additive-columns.js";
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,MAAM,QAAQ,GAChB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,QAAQ;;;;IAe9C;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,OAAO,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,MAAM,QAAQ,GAChB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,QAAQ;;;;IAe9C;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,eAAe,EACf,UAAU,EACV,OAAO,EACP,WAAW,EACX,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,OAAO,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAC"}
package/dist/db/index.js CHANGED
@@ -20,8 +20,8 @@ export async function createDb(config) {
20
20
  throw new Error(`Unsupported driver: ${config.driver}`);
21
21
  }
22
22
  export { createGetDb } from "./create-get-db.js";
23
- export { runMigrations } from "./migrations.js";
24
- export { getDbExec, createDbExec, getDialect, isPostgres, intType, closeDbExec, } from "./client.js";
23
+ export { runMigrations, } from "./migrations.js";
24
+ export { getDbExec, createDbExec, getDialect, isLocalDatabase, isPostgres, intType, closeDbExec, } from "./client.js";
25
25
  export { table, text, integer, now } from "./schema.js";
26
26
  export { ensureAdditiveColumns, } from "./ensure-additive-columns.js";
27
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAOrD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAgB;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACvE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,SAAS,CACd,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uBAAwB,MAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,CAAC;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,WAAW,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,qBAAqB,GAItB,MAAM,8BAA8B,CAAC","sourcesContent":["import Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\n\nexport type DbConfig =\n | { driver: \"sqlite\"; filename: string }\n | { driver: \"d1\"; binding: any }\n | { driver: \"postgres\"; connectionString: string };\n\n/**\n * Create a Drizzle ORM database instance.\n * Supports SQLite via better-sqlite3 and Postgres via postgres-js.\n * Postgres driver is loaded dynamically to avoid bundling in edge runtimes.\n */\nexport async function createDb(config: DbConfig) {\n if (config.driver === \"postgres\") {\n const { drizzle: drizzlePg } = await import(\"drizzle-orm/postgres-js\");\n const { default: pg } = await import(\"postgres\");\n const { pgPoolOptions } = await import(\"./client.js\");\n return drizzlePg(\n pg(config.connectionString, pgPoolOptions(config.connectionString)),\n );\n }\n if (config.driver === \"sqlite\") {\n const sqlite = new Database(config.filename);\n sqlite.pragma(\"journal_mode = WAL\");\n return drizzle(sqlite);\n }\n throw new Error(`Unsupported driver: ${(config as any).driver}`);\n}\n\nexport type DrizzleDb = Awaited<ReturnType<typeof createDb>>;\n\nexport { createGetDb } from \"./create-get-db.js\";\nexport { runMigrations } from \"./migrations.js\";\nexport {\n getDbExec,\n createDbExec,\n getDialect,\n isPostgres,\n intType,\n closeDbExec,\n type DbExec,\n type DbExecConfig,\n type Dialect,\n} from \"./client.js\";\nexport { table, text, integer, now } from \"./schema.js\";\nexport {\n ensureAdditiveColumns,\n type EnsureAdditiveColumnsOptions,\n type EnsureAdditiveColumnsResult,\n type EnsureAdditiveColumnsLogger,\n} from \"./ensure-additive-columns.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAOrD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAgB;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACvE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,SAAS,CACd,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uBAAwB,MAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,CAAC;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,aAAa,GAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,eAAe,EACf,UAAU,EACV,OAAO,EACP,WAAW,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,qBAAqB,GAItB,MAAM,8BAA8B,CAAC","sourcesContent":["import Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\n\nexport type DbConfig =\n | { driver: \"sqlite\"; filename: string }\n | { driver: \"d1\"; binding: any }\n | { driver: \"postgres\"; connectionString: string };\n\n/**\n * Create a Drizzle ORM database instance.\n * Supports SQLite via better-sqlite3 and Postgres via postgres-js.\n * Postgres driver is loaded dynamically to avoid bundling in edge runtimes.\n */\nexport async function createDb(config: DbConfig) {\n if (config.driver === \"postgres\") {\n const { drizzle: drizzlePg } = await import(\"drizzle-orm/postgres-js\");\n const { default: pg } = await import(\"postgres\");\n const { pgPoolOptions } = await import(\"./client.js\");\n return drizzlePg(\n pg(config.connectionString, pgPoolOptions(config.connectionString)),\n );\n }\n if (config.driver === \"sqlite\") {\n const sqlite = new Database(config.filename);\n sqlite.pragma(\"journal_mode = WAL\");\n return drizzle(sqlite);\n }\n throw new Error(`Unsupported driver: ${(config as any).driver}`);\n}\n\nexport type DrizzleDb = Awaited<ReturnType<typeof createDb>>;\n\nexport { createGetDb } from \"./create-get-db.js\";\nexport {\n runMigrations,\n type MigrationEntry,\n type MigrationSql,\n} from \"./migrations.js\";\nexport {\n getDbExec,\n createDbExec,\n getDialect,\n isLocalDatabase,\n isPostgres,\n intType,\n closeDbExec,\n type DbExec,\n type DbExecConfig,\n type Dialect,\n} from \"./client.js\";\nexport { table, text, integer, now } from \"./schema.js\";\nexport {\n ensureAdditiveColumns,\n type EnsureAdditiveColumnsOptions,\n type EnsureAdditiveColumnsResult,\n type EnsureAdditiveColumnsLogger,\n} from \"./ensure-additive-columns.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/extensions/actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AA8DhE,wBAAgB,4BAA4B,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAsgC1E"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/extensions/actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AA+DhE,wBAAgB,4BAA4B,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAslC1E"}
@@ -1,9 +1,11 @@
1
1
  import { ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER } from "../action-ui.js";
2
+ import { AgentActionStopError } from "../action.js";
2
3
  import { writeAppState } from "../application-state/script-helpers.js";
3
4
  import { readResource } from "../resources/script-helpers.js";
4
5
  import { getRequestOrgId, getRequestRunContext, getRequestUserEmail, } from "../server/request-context.js";
5
6
  import { resolveAccess } from "../sharing/access.js";
6
7
  import { readWorkspaceFile, } from "../workspace-files/store.js";
8
+ import { ExtensionContentEditError } from "./content-patch.js";
7
9
  import { getLocalExtension, isLocalExtensionRow, listLocalExtensions, } from "./local.js";
8
10
  import { extensionPath } from "./path.js";
9
11
  import { addExtensionSlotTarget, installExtensionSlot, uninstallExtensionSlot, listExtensionsForSlot, listSlotsForExtension, } from "./slots/store.js";
@@ -514,7 +516,7 @@ export function createExtensionActionEntries() {
514
516
  },
515
517
  "update-extension": {
516
518
  tool: {
517
- description: 'Update an existing sandboxed Alpine.js mini-app extension. If the user is viewing the extension, use the extensionId from <current-screen> or <current-url> directly; do not list extensions first just to find the current id. Prefer granular edits for surgical changes; use full content replacement only for broad rewrites. Supported edits include literal replace, insert-before/after marker, replace-between markers, replace-section/wrap-section/remove-section for <!-- agent-native:section name --> blocks, and regex-replace. Pass format=true to run Prettier on the final HTML. To replace the whole body with a large pasted file, pass contentFromAttachment (the attachment name, or "latest") instead of copying the file into `content` — that avoids re-emitting thousands of tokens.',
519
+ description: 'Update an existing sandboxed Alpine.js mini-app extension. If the user is viewing the extension, use the extensionId from <current-screen> or <current-url> directly; do not list extensions first just to find the current id. Prefer granular edits for surgical changes; full-body replacement is blocked by default to preserve existing layout, CSS, copy, and interactions during data-only fixes. Use `patches` or `edits` for targeted changes; set `allowFullReplacement=true` only when the user explicitly asks for a visual rewrite or supplies a complete replacement body. Supported edits include literal replace, insert-before/after marker, replace-between markers, replace-section/wrap-section/remove-section for <!-- agent-native:section name --> blocks, and regex-replace. Pass format=true to run Prettier on the final HTML. To replace the whole body with a large pasted file, pass contentFromAttachment (the attachment name, or "latest") instead of copying the file into `content` — that avoids re-emitting thousands of tokens.',
518
520
  parameters: {
519
521
  type: "object",
520
522
  properties: {
@@ -542,13 +544,23 @@ export function createExtensionActionEntries() {
542
544
  type: "string",
543
545
  description: 'Optional full replacement sourced from a workspace/shared resource file, by resource path (e.g. "intuit-analytics-extension.html"). The server reads the full file and uses it as the replacement body. Use instead of `content` when replacing the whole body with a large file that exists as a workspace resource. Ignored when `content` is provided.',
544
546
  },
547
+ allowFullReplacement: {
548
+ type: "boolean",
549
+ description: "Explicitly allow replacing the entire existing body. Omit or set false for data-only repairs so the existing visual design is protected. Use true only when the user explicitly requested a broad visual rewrite or supplied a complete replacement body.",
550
+ },
545
551
  patches: {
546
- type: "string",
547
- description: 'Legacy optional JSON array of { "find": "...", "replace": "...", "all"?: true, "expectedMatches"?: 1, "required"?: true } patches. Missing required targets fail instead of silently no-oping.',
552
+ anyOf: [
553
+ { type: "string" },
554
+ { type: "array", items: { type: "object" } },
555
+ ],
556
+ description: 'Optional patches as a JSON-encoded string or native array of { "find": "...", "replace": "...", "all"?: true, "expectedMatches"?: 1, "required"?: true } objects. Missing required targets fail instead of silently no-oping.',
548
557
  },
549
558
  edits: {
550
- type: "string",
551
- description: 'Preferred optional JSON array of granular edit operations. Examples: { "op": "insert-after", "marker": "<!-- section:metrics -->", "content": "..." }, { "op": "replace-section", "section": "npm-chart", "content": "..." }, { "op": "wrap-section", "section": "charts", "before": "<div>", "after": "</div>" }, { "op": "regex-replace", "pattern": "...", "replace": "...", "expectedMatches": 1 }.',
559
+ anyOf: [
560
+ { type: "string" },
561
+ { type: "array", items: { type: "object" } },
562
+ ],
563
+ description: 'Preferred optional granular edit operations as a JSON-encoded string or native array. Examples: { "op": "insert-after", "marker": "<!-- section:metrics -->", "content": "..." }, { "op": "replace-section", "section": "npm-chart", "content": "..." }, { "op": "wrap-section", "section": "charts", "before": "<div>", "after": "</div>" }, { "op": "regex-replace", "pattern": "...", "replace": "...", "expectedMatches": 1 }.',
552
564
  },
553
565
  format: {
554
566
  type: "boolean",
@@ -560,8 +572,8 @@ export function createExtensionActionEntries() {
560
572
  },
561
573
  visibility: {
562
574
  type: "string",
563
- description: "Optional sharing visibility.",
564
- enum: ["private", "org", "public"],
575
+ description: "Optional sharing visibility. Public extension sharing is not supported; use private or org.",
576
+ enum: ["private", "org"],
565
577
  },
566
578
  },
567
579
  required: ["id"],
@@ -574,6 +586,36 @@ export function createExtensionActionEntries() {
574
586
  const localMessage = await localExtensionEditMessage(id);
575
587
  if (localMessage)
576
588
  return localMessage;
589
+ if (typeof args?.visibility === "string" &&
590
+ args.visibility.trim().toLowerCase() === "public") {
591
+ const message = "Public extension sharing is not supported. Use visibility=private or visibility=org. No content changes were applied; do not retry visibility=public.";
592
+ throw new AgentActionStopError(message, {
593
+ errorCode: "extension_public_visibility_unsupported",
594
+ toolResult: JSON.stringify({
595
+ error: "extension_public_visibility_unsupported",
596
+ message,
597
+ recoverable: false,
598
+ next: "Retry only with visibility=private or visibility=org.",
599
+ }, null, 2),
600
+ });
601
+ }
602
+ const fullReplacementRequested = (typeof args?.content === "string" &&
603
+ args.content.trim().length > 0) ||
604
+ args?.contentFromAttachment !== undefined ||
605
+ args?.contentFromWorkspaceFile !== undefined;
606
+ if (fullReplacementRequested &&
607
+ !coerceBoolean(args?.allowFullReplacement)) {
608
+ const message = "Full extension-body replacement was blocked to preserve the existing visual design. Read the current extension and use focused patches/edits for a data-only repair. Only retry with allowFullReplacement=true when the user explicitly requested a broad visual rewrite or supplied a complete replacement body.";
609
+ throw new AgentActionStopError(message, {
610
+ errorCode: "extension_full_replacement_requires_explicit_intent",
611
+ toolResult: JSON.stringify({
612
+ error: "extension_full_replacement_requires_explicit_intent",
613
+ message,
614
+ recoverable: false,
615
+ next: "Call get-extension once, then update-extension with patches or edits that change only the data-loading code. Use allowFullReplacement=true only for an explicitly requested visual rewrite.",
616
+ }, null, 2),
617
+ });
618
+ }
577
619
  // Full-replacement content can come inline (`content`) or by reference
578
620
  // (`contentFromAttachment`) so the model never has to re-type a large
579
621
  // pasted file. Inline wins only when NON-EMPTY — the docstring tells
@@ -605,12 +647,30 @@ export function createExtensionActionEntries() {
605
647
  if (args?.edits !== undefined && !edits) {
606
648
  return "Error: edits must be a JSON array of supported extension edit operations.";
607
649
  }
608
- result = await updateExtensionContent(id, {
609
- content: replacementContent,
610
- patches,
611
- edits,
612
- format: coerceBoolean(args?.format),
613
- });
650
+ try {
651
+ result = await updateExtensionContent(id, {
652
+ content: replacementContent,
653
+ allowFullReplacement: coerceBoolean(args?.allowFullReplacement),
654
+ patches,
655
+ edits,
656
+ format: coerceBoolean(args?.format),
657
+ });
658
+ }
659
+ catch (error) {
660
+ if (!(error instanceof ExtensionContentEditError))
661
+ throw error;
662
+ const message = `The extension edit was not applied: ${error.message} ` +
663
+ "Do not retry the same arguments. Read the current extension and submit one focused patch or edit with an exact target.";
664
+ throw new AgentActionStopError(message, {
665
+ errorCode: "extension_content_edit_failed",
666
+ toolResult: JSON.stringify({
667
+ error: "extension_content_edit_failed",
668
+ message: error.message,
669
+ recoverable: false,
670
+ next: "Read the current extension with get-extension, then make one focused update-extension patches/edits call. Do not retry unchanged arguments.",
671
+ }, null, 2),
672
+ });
673
+ }
614
674
  }
615
675
  const meta = {};
616
676
  if (args?.name !== undefined)
@@ -1313,7 +1373,7 @@ function coerceLimit(value) {
1313
1373
  function parsePatches(value) {
1314
1374
  if (value === undefined)
1315
1375
  return undefined;
1316
- const parsed = typeof value === "string" ? JSON.parse(value) : value;
1376
+ const parsed = parseJsonArray(value);
1317
1377
  if (!Array.isArray(parsed))
1318
1378
  return undefined;
1319
1379
  if (parsed.some((patch) => !patch ||
@@ -1326,13 +1386,23 @@ function parsePatches(value) {
1326
1386
  function parseEdits(value) {
1327
1387
  if (value === undefined)
1328
1388
  return undefined;
1329
- const parsed = typeof value === "string" ? JSON.parse(value) : value;
1389
+ const parsed = parseJsonArray(value);
1330
1390
  if (!Array.isArray(parsed))
1331
1391
  return undefined;
1332
1392
  return parsed.every(isValidContentEdit)
1333
1393
  ? parsed
1334
1394
  : undefined;
1335
1395
  }
1396
+ function parseJsonArray(value) {
1397
+ if (typeof value !== "string")
1398
+ return value;
1399
+ try {
1400
+ return JSON.parse(value);
1401
+ }
1402
+ catch {
1403
+ return undefined;
1404
+ }
1405
+ }
1336
1406
  function isValidContentEdit(value) {
1337
1407
  if (!value || typeof value !== "object")
1338
1408
  return false;