@agent-native/core 0.92.12 → 0.93.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 (772) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +39 -0
  3. package/corpus/core/docs/content/automation-connectors.mdx +80 -0
  4. package/corpus/core/docs/content/extensions.mdx +8 -0
  5. package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +8 -0
  6. package/corpus/core/docs/content/locales/ar-SA/messaging.mdx +84 -15
  7. package/corpus/core/docs/content/locales/ar-SA/template-clips.mdx +1 -0
  8. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +1 -0
  9. package/corpus/core/docs/content/locales/de-DE/extensions.mdx +10 -0
  10. package/corpus/core/docs/content/locales/de-DE/messaging.mdx +92 -15
  11. package/corpus/core/docs/content/locales/de-DE/template-clips.mdx +1 -0
  12. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +1 -0
  13. package/corpus/core/docs/content/locales/es-ES/extensions.mdx +10 -0
  14. package/corpus/core/docs/content/locales/es-ES/messaging.mdx +91 -15
  15. package/corpus/core/docs/content/locales/es-ES/template-clips.mdx +1 -0
  16. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +1 -0
  17. package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +10 -0
  18. package/corpus/core/docs/content/locales/fr-FR/messaging.mdx +91 -15
  19. package/corpus/core/docs/content/locales/fr-FR/template-clips.mdx +1 -0
  20. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +1 -0
  21. package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +8 -0
  22. package/corpus/core/docs/content/locales/hi-IN/messaging.mdx +81 -15
  23. package/corpus/core/docs/content/locales/hi-IN/template-clips.mdx +1 -0
  24. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +1 -0
  25. package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +9 -0
  26. package/corpus/core/docs/content/locales/ja-JP/messaging.mdx +81 -15
  27. package/corpus/core/docs/content/locales/ja-JP/template-clips.mdx +1 -0
  28. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +1 -0
  29. package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +8 -0
  30. package/corpus/core/docs/content/locales/ko-KR/messaging.mdx +80 -15
  31. package/corpus/core/docs/content/locales/ko-KR/template-clips.mdx +1 -0
  32. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +1 -0
  33. package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +9 -0
  34. package/corpus/core/docs/content/locales/pt-BR/messaging.mdx +88 -15
  35. package/corpus/core/docs/content/locales/pt-BR/template-clips.mdx +1 -0
  36. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +1 -0
  37. package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +6 -0
  38. package/corpus/core/docs/content/locales/zh-CN/messaging.mdx +78 -15
  39. package/corpus/core/docs/content/locales/zh-CN/template-clips.mdx +1 -0
  40. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +1 -0
  41. package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +6 -0
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.mdx +78 -15
  43. package/corpus/core/docs/content/locales/zh-TW/template-clips.mdx +1 -0
  44. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +1 -0
  45. package/corpus/core/docs/content/messaging.mdx +227 -45
  46. package/corpus/core/docs/content/template-clips.mdx +3 -0
  47. package/corpus/core/docs/content/template-design.mdx +4 -0
  48. package/corpus/core/package.json +5 -1
  49. package/corpus/core/src/a2a/artifact-response.ts +131 -2
  50. package/corpus/core/src/a2a/client.ts +10 -0
  51. package/corpus/core/src/a2a/handlers.ts +40 -76
  52. package/corpus/core/src/a2a/types.ts +2 -0
  53. package/corpus/core/src/agent/durable-background.ts +24 -0
  54. package/corpus/core/src/agent/production-agent.ts +15 -3
  55. package/corpus/core/src/agent/run-manager.ts +130 -10
  56. package/corpus/core/src/agent/run-store.ts +225 -15
  57. package/corpus/core/src/agent/types.ts +23 -0
  58. package/corpus/core/src/audit/record.ts +31 -0
  59. package/corpus/core/src/audit/store.ts +69 -3
  60. package/corpus/core/src/audit/types.ts +13 -0
  61. package/corpus/core/src/automation/index.ts +802 -0
  62. package/corpus/core/src/cli/create.ts +12 -5
  63. package/corpus/core/src/cli/design-connect.ts +596 -36
  64. package/corpus/core/src/client/AgentPanel.tsx +51 -6
  65. package/corpus/core/src/client/AssistantChat.tsx +274 -147
  66. package/corpus/core/src/client/MultiTabAssistantChat.tsx +3 -0
  67. package/corpus/core/src/client/RunStuckBanner.tsx +69 -20
  68. package/corpus/core/src/client/agent-chat-adapter.ts +54 -5
  69. package/corpus/core/src/client/automation.ts +22 -0
  70. package/corpus/core/src/client/chat/run-recovery.tsx +67 -50
  71. package/corpus/core/src/client/composer/TiptapComposer.tsx +8 -0
  72. package/corpus/core/src/client/index.ts +30 -0
  73. package/corpus/core/src/client/integrations/api.ts +295 -0
  74. package/corpus/core/src/client/integrations/index.ts +26 -0
  75. package/corpus/core/src/client/transcription/use-live-transcription.ts +68 -5
  76. package/corpus/core/src/client/use-run-stuck-detection.ts +41 -3
  77. package/corpus/core/src/deploy/build.ts +59 -3
  78. package/corpus/core/src/deploy/workspace-deploy.ts +37 -2
  79. package/corpus/core/src/file-upload/types.ts +2 -0
  80. package/corpus/core/src/index.ts +37 -0
  81. package/corpus/core/src/integrations/a2a-continuations-store.ts +6 -4
  82. package/corpus/core/src/integrations/adapters/discord.ts +362 -0
  83. package/corpus/core/src/integrations/adapters/index.ts +29 -0
  84. package/corpus/core/src/integrations/adapters/microsoft-teams.ts +411 -0
  85. package/corpus/core/src/integrations/adapters/slack.ts +861 -27
  86. package/corpus/core/src/integrations/adapters/telegram.ts +54 -15
  87. package/corpus/core/src/integrations/adapters/whatsapp.ts +41 -17
  88. package/corpus/core/src/integrations/catalog.ts +571 -0
  89. package/corpus/core/src/integrations/controls-store.ts +187 -0
  90. package/corpus/core/src/integrations/index.ts +100 -0
  91. package/corpus/core/src/integrations/installations-store.ts +677 -0
  92. package/corpus/core/src/integrations/integration-memory.ts +187 -0
  93. package/corpus/core/src/integrations/pending-tasks-retry-job.ts +6 -6
  94. package/corpus/core/src/integrations/pending-tasks-store.ts +83 -5
  95. package/corpus/core/src/integrations/plugin.ts +685 -47
  96. package/corpus/core/src/integrations/scope-store.ts +498 -0
  97. package/corpus/core/src/integrations/slack-manifest.ts +78 -0
  98. package/corpus/core/src/integrations/slack-oauth.ts +343 -0
  99. package/corpus/core/src/integrations/types.ts +179 -0
  100. package/corpus/core/src/integrations/usage-budget-store.ts +906 -0
  101. package/corpus/core/src/integrations/webhook-handler.ts +562 -51
  102. package/corpus/core/src/jobs/scheduler.ts +100 -2
  103. package/corpus/core/src/jobs/tools.ts +45 -9
  104. package/corpus/core/src/provider-api/index.ts +72 -1
  105. package/corpus/core/src/resources/handlers.ts +88 -14
  106. package/corpus/core/src/resources/script-helpers.ts +36 -7
  107. package/corpus/core/src/resources/store.ts +59 -52
  108. package/corpus/core/src/scripts/call-agent.ts +107 -1
  109. package/corpus/core/src/server/agent-chat-plugin.ts +294 -119
  110. package/corpus/core/src/server/auth.ts +10 -14
  111. package/corpus/core/src/server/builder-design-systems.ts +16 -1
  112. package/corpus/core/src/server/edge.ts +18 -0
  113. package/corpus/core/src/server/index.ts +26 -0
  114. package/corpus/core/src/server/request-context.ts +18 -0
  115. package/corpus/core/src/server/social-og-image.ts +3 -2
  116. package/corpus/core/src/styles/agent-native.css +62 -44
  117. package/corpus/core/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  118. package/corpus/core/src/templates/default/AGENTS.md +7 -3
  119. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  120. package/corpus/core/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  121. package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  122. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  123. package/corpus/core/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  124. package/corpus/core/src/templates/workspace-core/AGENTS.md +3 -2
  125. package/corpus/core/src/usage/store.ts +37 -2
  126. package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +22 -9
  127. package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +23 -0
  128. package/corpus/templates/analytics/.builder/skills/provider-api/SKILL.md +15 -0
  129. package/corpus/templates/analytics/actions/save-monitor.ts +25 -2
  130. package/corpus/templates/analytics/app/lib/data-sources.ts +28 -0
  131. package/corpus/templates/analytics/changelog/2026-07-10-agent-created-uptime-monitors-now-return-a-direct-link-to-th.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-10-dashboard-email-reports-still-arrive-when-screenshot-capture-temporarily-fails.md +6 -0
  133. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +3 -7
  134. package/corpus/templates/analytics/server/lib/credential-keys.ts +12 -0
  135. package/corpus/templates/analytics/server/lib/dashboard-report.ts +5 -1
  136. package/corpus/templates/analytics/server/lib/provider-credentials.ts +2 -0
  137. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +16 -0
  138. package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +22 -9
  139. package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +22 -9
  140. package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +22 -9
  141. package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +98 -108
  142. package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +97 -90
  143. package/corpus/templates/calendar/changelog/2026-07-10-event-guest-details-and-option-menus-now-use-valid-accessibl.md +6 -0
  144. package/corpus/templates/calendar/changelog/2026-07-10-natural-language-event-phrases-stay-available-as-quick-creat.md +6 -0
  145. package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +22 -9
  146. package/corpus/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  147. package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +22 -9
  148. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +17 -1
  149. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +8 -0
  150. package/corpus/templates/clips/AGENTS.md +8 -3
  151. package/corpus/templates/clips/actions/finalize-recording.ts +63 -23
  152. package/corpus/templates/clips/actions/get-recording-player-data.ts +6 -2
  153. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +72 -9
  154. package/corpus/templates/clips/actions/list-recordings.ts +19 -3
  155. package/corpus/templates/clips/actions/navigate.ts +2 -0
  156. package/corpus/templates/clips/actions/reprocess-recording.ts +20 -6
  157. package/corpus/templates/clips/actions/request-transcript.ts +16 -31
  158. package/corpus/templates/clips/actions/view-screen.ts +57 -5
  159. package/corpus/templates/clips/app/components/layout/Header.tsx +1 -0
  160. package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -0
  161. package/corpus/templates/clips/app/components/library/library-grid.tsx +69 -42
  162. package/corpus/templates/clips/app/components/library/library-layout.tsx +15 -1
  163. package/corpus/templates/clips/app/components/library/recording-card.tsx +81 -68
  164. package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -3
  165. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +9 -3
  166. package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
  167. package/corpus/templates/clips/app/hooks/use-library.ts +1 -1
  168. package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
  169. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  170. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  171. package/corpus/templates/clips/app/i18n/en-US.ts +7 -1
  172. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  173. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  174. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  175. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  176. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  177. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  178. package/corpus/templates/clips/app/i18n/zh-CN.ts +8 -1
  179. package/corpus/templates/clips/app/i18n/zh-TW.ts +8 -1
  180. package/corpus/templates/clips/app/lib/recording-visibility.ts +70 -0
  181. package/corpus/templates/clips/app/routes/_app.shared.tsx +20 -0
  182. package/corpus/templates/clips/app/routes/download.tsx +24 -8
  183. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +115 -2
  184. package/corpus/templates/clips/app/routes/record.tsx +62 -0
  185. package/corpus/templates/clips/app/routes/share.$shareId.tsx +25 -16
  186. package/corpus/templates/clips/changelog/2026-07-10-clips-desktop-is-now-available-for-linux-with-appimage-debia.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-10-clips-downloads-updates-sooner-in-the-background-and-offers-.md +6 -0
  188. package/corpus/templates/clips/changelog/2026-07-10-clips-shared-with-you-now-appear-in-a-searchable-shared-with.md +6 -0
  189. package/corpus/templates/clips/changelog/2026-07-10-clips-with-missing-mobile-video-frames-can-be-repaired-witho.md +6 -0
  190. package/corpus/templates/clips/changelog/2026-07-10-mobile-camera-recordings-pause-while-backgrounded.md +6 -0
  191. package/corpus/templates/clips/changelog/2026-07-10-mp4-downloads-now-show-progress-immediately-after-the-option.md +6 -0
  192. package/corpus/templates/clips/changelog/2026-07-10-recording-pages-now-open-as-soon-as-you-stop-with-a-share-li.md +6 -0
  193. package/corpus/templates/clips/changelog/2026-07-10-recordings-now-seek-smoothly-downloads-use-the-correct-file-.md +6 -0
  194. package/corpus/templates/clips/changelog/2026-07-10-s3-compatible-storage-now-saves-hosted-recordings-without-re.md +6 -0
  195. package/corpus/templates/clips/desktop/README.md +22 -6
  196. package/corpus/templates/clips/desktop/package.json +1 -1
  197. package/corpus/templates/clips/desktop/src/app.tsx +32 -19
  198. package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +15 -9
  199. package/corpus/templates/clips/desktop/src/lib/finalization-guard.ts +22 -0
  200. package/corpus/templates/clips/desktop/src/lib/permissions.ts +3 -1
  201. package/corpus/templates/clips/desktop/src/lib/recorder.ts +97 -120
  202. package/corpus/templates/clips/desktop/src/lib/updater.ts +26 -4
  203. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +4 -8
  204. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +1 -1
  205. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
  206. package/corpus/templates/clips/desktop/src-tauri/src/permission_status.rs +11 -7
  207. package/corpus/templates/clips/desktop/src-tauri/tauri.linux.conf.json +11 -0
  208. package/corpus/templates/clips/netlify.toml +3 -0
  209. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +106 -0
  210. package/corpus/templates/clips/server/lib/public-agent-context.ts +9 -1
  211. package/corpus/templates/clips/server/lib/resumable-upload-provider.ts +52 -0
  212. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +433 -85
  213. package/corpus/templates/clips/server/lib/video-remux.ts +114 -0
  214. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +109 -0
  215. package/corpus/templates/clips/server/routes/api/clips-updater.json.get.ts +22 -11
  216. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +4 -2
  217. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +47 -5
  218. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +10 -2
  219. package/corpus/templates/clips/shared/share-loader-response.ts +12 -0
  220. package/corpus/templates/clips/shared/transcript-status.ts +40 -0
  221. package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +22 -9
  222. package/corpus/templates/content/.agents/skills/content/SKILL.md +57 -5
  223. package/corpus/templates/content/AGENTS.md +65 -55
  224. package/corpus/templates/content/actions/_builder-cms-read-client.ts +10 -16
  225. package/corpus/templates/content/actions/_database-source-utils.ts +58 -11
  226. package/corpus/templates/content/actions/_property-utils.ts +30 -2
  227. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +312 -114
  228. package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
  229. package/corpus/templates/content/actions/update-content-database-view.ts +8 -1
  230. package/corpus/templates/content/actions/view-screen.ts +4 -1
  231. package/corpus/templates/content/agent-native.app-skill.json +1 -1
  232. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +250 -64
  233. package/corpus/templates/content/app/components/editor/database/FormView.tsx +460 -0
  234. package/corpus/templates/content/app/components/editor/database/navigation-state.ts +3 -0
  235. package/corpus/templates/content/app/components/editor/database/settings.tsx +30 -37
  236. package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
  237. package/corpus/templates/content/app/components/editor/database/view-config.ts +29 -1
  238. package/corpus/templates/content/app/components/ui/textarea.tsx +1 -0
  239. package/corpus/templates/content/app/hooks/use-content-database.ts +22 -0
  240. package/corpus/templates/content/app/i18n/zh-TW.ts +21 -0
  241. package/corpus/templates/content/app/i18n-data.ts +225 -0
  242. package/corpus/templates/content/changelog/2026-07-10-builder-backed-properties-now-load-current-source-values-as-.md +6 -0
  243. package/corpus/templates/content/changelog/2026-07-10-builder-database-refreshes-now-stay-explicit-and-accurate.md +6 -0
  244. package/corpus/templates/content/changelog/2026-07-10-database-form-views-now-collect-ordered-required-answers-and.md +6 -0
  245. package/corpus/templates/content/changelog/2026-07-10-database-tables-now-use-a-quieter-more-compact-layout-with-c.md +6 -0
  246. package/corpus/templates/content/changelog/2026-07-10-slack-intake-routes-to-content-database-forms.md +6 -0
  247. package/corpus/templates/content/parity/matrix.md +1 -0
  248. package/corpus/templates/content/parity/matrix.ts +18 -0
  249. package/corpus/templates/content/shared/api.ts +27 -1
  250. package/corpus/templates/content/shared/database-form.ts +53 -0
  251. package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +22 -9
  252. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +26 -0
  253. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +85 -12
  254. package/corpus/templates/design/AGENTS.md +72 -18
  255. package/corpus/templates/design/DESIGN.md +1 -1
  256. package/corpus/templates/design/DEVELOPING.md +1 -1
  257. package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +116 -0
  258. package/corpus/templates/design/actions/create-design-from-template.ts +220 -0
  259. package/corpus/templates/design/actions/create-design-system.ts +92 -16
  260. package/corpus/templates/design/actions/delete-design-template.ts +28 -0
  261. package/corpus/templates/design/actions/delete-file.ts +7 -0
  262. package/corpus/templates/design/actions/edit-design.ts +3 -0
  263. package/corpus/templates/design/actions/export-design-as-figma-svg.ts +137 -5
  264. package/corpus/templates/design/actions/export-pdf.ts +1 -1
  265. package/corpus/templates/design/actions/generate-design.ts +3 -0
  266. package/corpus/templates/design/actions/get-design-snapshot.ts +9 -0
  267. package/corpus/templates/design/actions/get-figma-connection-status.ts +26 -0
  268. package/corpus/templates/design/actions/get-figma-design-context.ts +138 -0
  269. package/corpus/templates/design/actions/get-figma-styles.ts +2 -2
  270. package/corpus/templates/design/actions/import-figma-clipboard.ts +112 -16
  271. package/corpus/templates/design/actions/import-figma-frame.ts +15 -4
  272. package/corpus/templates/design/actions/index-design-system-with-builder.ts +4 -0
  273. package/corpus/templates/design/actions/list-design-templates.ts +118 -0
  274. package/corpus/templates/design/actions/navigate.ts +16 -2
  275. package/corpus/templates/design/actions/provider-api-request.ts +11 -1
  276. package/corpus/templates/design/actions/save-design-as-template.ts +156 -0
  277. package/corpus/templates/design/actions/set-active-breakpoint.ts +13 -4
  278. package/corpus/templates/design/actions/take-design-screenshot.ts +73 -3
  279. package/corpus/templates/design/actions/update-file.ts +39 -22
  280. package/corpus/templates/design/actions/view-screen.ts +36 -1
  281. package/corpus/templates/design/actions/write-local-file.ts +50 -38
  282. package/corpus/templates/design/app/components/design/AutoLayoutSuggestionDialog.tsx +151 -0
  283. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +20 -0
  284. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +251 -22
  285. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +3 -3
  286. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +384 -9
  287. package/corpus/templates/design/app/components/design/EditPanel.tsx +105 -32
  288. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +58 -28
  289. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -0
  290. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +539 -53
  291. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +40 -0
  292. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +1 -0
  293. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +1 -0
  294. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +5 -1
  295. package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +2 -0
  296. package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +3 -1
  297. package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +2 -0
  298. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +19 -0
  299. package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +1 -0
  300. package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +27 -0
  301. package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +137 -81
  302. package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +25 -5
  303. package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +1 -1
  304. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +220 -3
  305. package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +13 -0
  306. package/corpus/templates/design/app/components/design/multi-screen/types.ts +22 -1
  307. package/corpus/templates/design/app/components/design/types.ts +4 -0
  308. package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +208 -0
  309. package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +321 -0
  310. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +24 -4
  311. package/corpus/templates/design/app/components/layout/Layout.tsx +16 -2
  312. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
  313. package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +72 -0
  314. package/corpus/templates/design/app/global.css +2 -35
  315. package/corpus/templates/design/app/hooks/use-navigation-state.ts +10 -0
  316. package/corpus/templates/design/app/i18n/zh-TW.ts +127 -5
  317. package/corpus/templates/design/app/i18n-breakpoints.ts +209 -0
  318. package/corpus/templates/design/app/i18n-data.ts +1317 -59
  319. package/corpus/templates/design/app/i18n-template-feature.ts +458 -0
  320. package/corpus/templates/design/app/lib/design-clipboard.ts +202 -0
  321. package/corpus/templates/design/app/lib/design-file-upload.ts +87 -0
  322. package/corpus/templates/design/app/lib/design-import.ts +168 -11
  323. package/corpus/templates/design/app/lib/desktop-design-preview.ts +423 -0
  324. package/corpus/templates/design/app/lib/figma-clipboard.ts +74 -8
  325. package/corpus/templates/design/app/lib/figma-connection.ts +161 -0
  326. package/corpus/templates/design/app/lib/figma-svg-copy.ts +814 -22
  327. package/corpus/templates/design/app/lib/figma-url.ts +77 -0
  328. package/corpus/templates/design/app/lib/pending-generation.ts +35 -0
  329. package/corpus/templates/design/app/pages/DesignSystems.tsx +236 -177
  330. package/corpus/templates/design/app/pages/Index.tsx +38 -0
  331. package/corpus/templates/design/app/pages/Templates.tsx +498 -0
  332. package/corpus/templates/design/app/pages/design-editor/auto-layout-suggestion.ts +328 -0
  333. package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +113 -0
  334. package/corpus/templates/design/app/pages/design-editor/created-screen-navigation.ts +55 -0
  335. package/corpus/templates/design/app/pages/design-editor/editor-session.ts +32 -0
  336. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +49 -2
  337. package/corpus/templates/design/app/pages/design-editor/export-capture.ts +296 -0
  338. package/corpus/templates/design/app/pages/design-editor/history.ts +101 -2
  339. package/corpus/templates/design/app/pages/design-editor/layout-operations.ts +28 -1
  340. package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +34 -0
  341. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +202 -6
  342. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +92 -0
  343. package/corpus/templates/design/app/pages/design-editor/save-failure.ts +58 -0
  344. package/corpus/templates/design/app/routes/templates.tsx +4 -6
  345. package/corpus/templates/design/changelog/2026-07-10-app-workspaces-now-use-clean-borderless-main-surfaces-throug.md +6 -0
  346. package/corpus/templates/design/changelog/2026-07-10-ask-chat-what-s-in-a-figma-file-or-frame-structure-screensho.md +6 -0
  347. package/corpus/templates/design/changelog/2026-07-10-canvas-edits-now-reject-malformed-html-before-it-can-corrupt.md +6 -0
  348. package/corpus/templates/design/changelog/2026-07-10-complex-designs-now-export-as-valid-secure-svgs-and-crisp-ra.md +6 -0
  349. package/corpus/templates/design/changelog/2026-07-10-complex-figma-masks-arcs-rich-text-transformed-images-and-ad.md +6 -0
  350. package/corpus/templates/design/changelog/2026-07-10-copied-layers-paste-across-designs-and-browser-tabs.md +6 -0
  351. package/corpus/templates/design/changelog/2026-07-10-copy-and-download-editable-figma-svg.md +6 -0
  352. package/corpus/templates/design/changelog/2026-07-10-copying-design-text-now-pastes-readable-text-into-other-apps.md +6 -0
  353. package/corpus/templates/design/changelog/2026-07-10-deleted-screens-can-be-restored-with-undo-and-removed-again-.md +6 -0
  354. package/corpus/templates/design/changelog/2026-07-10-design-changes-now-save-before-switching-apps-and-retry-when.md +6 -0
  355. package/corpus/templates/design/changelog/2026-07-10-design-stays-usable-on-phones-by-keeping-editor-panels-and-f.md +6 -0
  356. package/corpus/templates/design/changelog/2026-07-10-download-all-screens-as-one-multi-page-pdf-from-the-overview.md +6 -0
  357. package/corpus/templates/design/changelog/2026-07-10-duplicated-layers-now-keep-labels-aria-relationships-fragmen.md +6 -0
  358. package/corpus/templates/design/changelog/2026-07-10-fig-import-results-stay-compact.md +6 -0
  359. package/corpus/templates/design/changelog/2026-07-10-figma-imports-now-load-real-fonts-fix-rotated-gradient-dashe.md +6 -0
  360. package/corpus/templates/design/changelog/2026-07-10-figma-links-in-chat-and-the-import-tab-now-offer-secure-one-.md +6 -0
  361. package/corpus/templates/design/changelog/2026-07-10-fixed-cmd-z-not-restoring-content-after-an-agent-driven-desi.md +6 -0
  362. package/corpus/templates/design/changelog/2026-07-10-fixed-download-pdf-being-unreachable-from-the-export-panel-e.md +6 -0
  363. package/corpus/templates/design/changelog/2026-07-10-fixed-dragging-a-layer-out-of-an-auto-layout-row-column-no-l.md +6 -0
  364. package/corpus/templates/design/changelog/2026-07-10-fixed-figma-svg-export-text-wrapping-sizing-and-inner-layer.md +6 -0
  365. package/corpus/templates/design/changelog/2026-07-10-fixed-hiding-or-locking-one-layer-no-longer-hides-or-blocks-.md +6 -0
  366. package/corpus/templates/design/changelog/2026-07-10-fixed-png-screenshots-of-tall-screens-being-cropped-to-one-v.md +6 -0
  367. package/corpus/templates/design/changelog/2026-07-10-fixed-png-svg-exports-capturing-broken-layout-when-webfonts-.md +6 -0
  368. package/corpus/templates/design/changelog/2026-07-10-frame-tool-now-offers-standard-ad-unit-size-presets-medium-r.md +6 -0
  369. package/corpus/templates/design/changelog/2026-07-10-full-view-controls-stay-within-their-frame-instead-of-coveri.md +6 -0
  370. package/corpus/templates/design/changelog/2026-07-10-hover-focus-focus-visible-pressed-and-disabled-states-now-pr.md +6 -0
  371. package/corpus/templates/design/changelog/2026-07-10-layer-drops-now-land-in-the-intended-grid-row-stay-visually-.md +6 -0
  372. package/corpus/templates/design/changelog/2026-07-10-local-code-workspaces-now-keep-unsaved-edits-across-panel-sw.md +6 -0
  373. package/corpus/templates/design/changelog/2026-07-10-local-visual-editing-now-keeps-authenticated-sessions-shared.md +6 -0
  374. package/corpus/templates/design/changelog/2026-07-10-long-running-agent-work-no-longer-shows-a-premature-stuck-wa.md +6 -0
  375. package/corpus/templates/design/changelog/2026-07-10-managed-figma-connections-are-recognized-automatically.md +6 -0
  376. package/corpus/templates/design/changelog/2026-07-10-new-designs-can-open-directly-in-the-editor-without-a-pr.md +6 -0
  377. package/corpus/templates/design/changelog/2026-07-10-new-screens-are-selected-and-revealed-immediately.md +6 -0
  378. package/corpus/templates/design/changelog/2026-07-10-new-text-layers-undo-as-one-safe-creation.md +6 -0
  379. package/corpus/templates/design/changelog/2026-07-10-preview-and-apply-inferred-auto-layout-without-changing-yo.md +5 -0
  380. package/corpus/templates/design/changelog/2026-07-10-print-pdf-exports-and-paper-size-presets-letter-a4-now-match.md +6 -0
  381. package/corpus/templates/design/changelog/2026-07-10-responsive-frame-editing.md +6 -0
  382. package/corpus/templates/design/changelog/2026-07-10-reusable-design-templates.md +6 -0
  383. package/corpus/templates/design/changelog/2026-07-10-screen-overview-frames-now-use-a-clearer-interact-action-wit.md +6 -0
  384. package/corpus/templates/design/changelog/2026-07-10-start-designs-from-source-linked-material-3-carbon-or-primer.md +6 -0
  385. package/corpus/templates/design/changelog/2026-07-10-tweaks-guidance.md +6 -0
  386. package/corpus/templates/design/changelog/2026-07-10-uploaded-fig-files-can-now-become-editable-design-screens-wi.md +6 -0
  387. package/corpus/templates/design/e2e/helpers.ts +3 -3
  388. package/corpus/templates/design/package.json +2 -0
  389. package/corpus/templates/design/scripts/qa-figma-stress-import.ts +96 -0
  390. package/corpus/templates/design/server/db/index.ts +10 -0
  391. package/corpus/templates/design/server/db/schema.ts +44 -0
  392. package/corpus/templates/design/server/handlers/import-design-file.ts +114 -80
  393. package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +19 -6
  394. package/corpus/templates/design/server/lib/design-export.ts +240 -3
  395. package/corpus/templates/design/server/lib/design-template-data.ts +89 -0
  396. package/corpus/templates/design/server/lib/design-to-figma-svg.ts +250 -26
  397. package/corpus/templates/design/server/lib/fig-file-decoder.ts +839 -0
  398. package/corpus/templates/design/server/lib/fig-file-import.ts +287 -0
  399. package/corpus/templates/design/server/lib/fig-file-limits.ts +3 -0
  400. package/corpus/templates/design/server/lib/fig-file-to-html.ts +2568 -0
  401. package/corpus/templates/design/server/lib/figma-design-context.ts +359 -0
  402. package/corpus/templates/design/server/lib/figma-node-import.ts +478 -22
  403. package/corpus/templates/design/server/lib/figma-node-to-html.ts +554 -29
  404. package/corpus/templates/design/server/lib/local-figma-qa-upload.ts +112 -0
  405. package/corpus/templates/design/server/lib/verify-write-grant.ts +16 -2
  406. package/corpus/templates/design/server/lib/visible-clipboard-html.ts +13 -3
  407. package/corpus/templates/design/server/plugins/agent-chat.ts +7 -0
  408. package/corpus/templates/design/server/plugins/db.ts +42 -0
  409. package/corpus/templates/design/server/plugins/local-figma-qa-upload.ts +7 -0
  410. package/corpus/templates/design/server/register-secrets.ts +8 -8
  411. package/corpus/templates/design/server/routes/api/qa-figma-import-assets/[assetId].get.ts +46 -0
  412. package/corpus/templates/design/server/source-workspace.ts +104 -12
  413. package/corpus/templates/design/shared/code-layer.ts +105 -28
  414. package/corpus/templates/design/shared/design-system-templates.ts +301 -0
  415. package/corpus/templates/design/shared/design-template-presets.ts +195 -0
  416. package/corpus/templates/design/shared/figma-url.ts +8 -0
  417. package/corpus/templates/design/shared/html-integrity.ts +306 -0
  418. package/corpus/templates/design/shared/interaction-states.ts +318 -23
  419. package/corpus/templates/design/shared/locked-layers.ts +151 -0
  420. package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +22 -9
  421. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +48 -0
  422. package/corpus/templates/dispatch/app/i18n-data.ts +536 -1
  423. package/corpus/templates/dispatch/changelog/2026-07-10-connect-slack-workspaces-with-oauth-and-manage-channel-ident.md +6 -0
  424. package/corpus/templates/dispatch/changelog/2026-07-10-microsoft-teams-bots-and-discord-slash-commands-can-now-conn.md +6 -0
  425. package/corpus/templates/dispatch/changelog/2026-07-10-slack-and-telegram-now-route-uptime-monitor-requests-to-anal.md +6 -0
  426. package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +22 -9
  427. package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +7 -0
  428. package/corpus/templates/forms/AGENTS.md +4 -0
  429. package/corpus/templates/forms/actions/create-form.ts +44 -7
  430. package/corpus/templates/forms/actions/lib/assert-publishable-form.ts +38 -0
  431. package/corpus/templates/forms/actions/patch-form-fields.ts +4 -0
  432. package/corpus/templates/forms/actions/update-form.ts +2 -36
  433. package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
  434. package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
  435. package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
  436. package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
  437. package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
  438. package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
  439. package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
  440. package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
  441. package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
  442. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  443. package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
  444. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +17 -0
  445. package/corpus/templates/forms/changelog/2026-07-10-agent-created-published-forms-now-return-the-anonymous-publi.md +6 -0
  446. package/corpus/templates/forms/changelog/2026-07-10-published-forms-can-no-longer-be-edited-into-an-unusable-emp.md +6 -0
  447. package/corpus/templates/forms/server/handlers/submissions.ts +4 -3
  448. package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
  449. package/corpus/templates/forms/shared/types.ts +5 -0
  450. package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +22 -9
  451. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
  452. package/corpus/templates/mail/changelog/2026-07-10-mail-navigation-now-uses-a-clean-borderless-drawer.md +6 -0
  453. package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +22 -9
  454. package/corpus/templates/plan/app/lib/plan-local-bridge.ts +4 -1
  455. package/corpus/templates/plan/changelog/2026-07-10-local-plans-now-keep-valid-content-visible-when-one-generate.md +6 -0
  456. package/corpus/templates/plan/server/lib/local-plan-files.ts +4 -1
  457. package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +22 -9
  458. package/dist/a2a/artifact-response.d.ts.map +1 -1
  459. package/dist/a2a/artifact-response.js +88 -2
  460. package/dist/a2a/artifact-response.js.map +1 -1
  461. package/dist/a2a/client.d.ts +9 -0
  462. package/dist/a2a/client.d.ts.map +1 -1
  463. package/dist/a2a/client.js +1 -0
  464. package/dist/a2a/client.js.map +1 -1
  465. package/dist/a2a/handlers.d.ts.map +1 -1
  466. package/dist/a2a/handlers.js +24 -69
  467. package/dist/a2a/handlers.js.map +1 -1
  468. package/dist/a2a/types.d.ts +2 -0
  469. package/dist/a2a/types.d.ts.map +1 -1
  470. package/dist/a2a/types.js.map +1 -1
  471. package/dist/agent/durable-background.d.ts +11 -0
  472. package/dist/agent/durable-background.d.ts.map +1 -1
  473. package/dist/agent/durable-background.js +17 -0
  474. package/dist/agent/durable-background.js.map +1 -1
  475. package/dist/agent/production-agent.d.ts +2 -2
  476. package/dist/agent/production-agent.d.ts.map +1 -1
  477. package/dist/agent/production-agent.js +15 -5
  478. package/dist/agent/production-agent.js.map +1 -1
  479. package/dist/agent/run-manager.d.ts +44 -2
  480. package/dist/agent/run-manager.d.ts.map +1 -1
  481. package/dist/agent/run-manager.js +90 -9
  482. package/dist/agent/run-manager.js.map +1 -1
  483. package/dist/agent/run-store.d.ts +109 -0
  484. package/dist/agent/run-store.d.ts.map +1 -1
  485. package/dist/agent/run-store.js +206 -15
  486. package/dist/agent/run-store.js.map +1 -1
  487. package/dist/agent/types.d.ts +22 -0
  488. package/dist/agent/types.d.ts.map +1 -1
  489. package/dist/agent/types.js.map +1 -1
  490. package/dist/audit/record.d.ts.map +1 -1
  491. package/dist/audit/record.js +29 -0
  492. package/dist/audit/record.js.map +1 -1
  493. package/dist/audit/store.d.ts.map +1 -1
  494. package/dist/audit/store.js +62 -3
  495. package/dist/audit/store.js.map +1 -1
  496. package/dist/audit/types.d.ts +13 -0
  497. package/dist/audit/types.d.ts.map +1 -1
  498. package/dist/audit/types.js.map +1 -1
  499. package/dist/automation/index.d.ts +193 -0
  500. package/dist/automation/index.d.ts.map +1 -0
  501. package/dist/automation/index.js +464 -0
  502. package/dist/automation/index.js.map +1 -0
  503. package/dist/cli/create.d.ts.map +1 -1
  504. package/dist/cli/create.js +10 -3
  505. package/dist/cli/create.js.map +1 -1
  506. package/dist/cli/design-connect.d.ts.map +1 -1
  507. package/dist/cli/design-connect.js +492 -35
  508. package/dist/cli/design-connect.js.map +1 -1
  509. package/dist/client/AgentPanel.d.ts +7 -1
  510. package/dist/client/AgentPanel.d.ts.map +1 -1
  511. package/dist/client/AgentPanel.js +32 -8
  512. package/dist/client/AgentPanel.js.map +1 -1
  513. package/dist/client/AssistantChat.d.ts +15 -0
  514. package/dist/client/AssistantChat.d.ts.map +1 -1
  515. package/dist/client/AssistantChat.js +115 -47
  516. package/dist/client/AssistantChat.js.map +1 -1
  517. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  518. package/dist/client/MultiTabAssistantChat.js +1 -1
  519. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  520. package/dist/client/RunStuckBanner.d.ts +14 -1
  521. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  522. package/dist/client/RunStuckBanner.js +35 -7
  523. package/dist/client/RunStuckBanner.js.map +1 -1
  524. package/dist/client/agent-chat-adapter.d.ts +4 -1
  525. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  526. package/dist/client/agent-chat-adapter.js +49 -4
  527. package/dist/client/agent-chat-adapter.js.map +1 -1
  528. package/dist/client/automation.d.ts +14 -0
  529. package/dist/client/automation.d.ts.map +1 -0
  530. package/dist/client/automation.js +9 -0
  531. package/dist/client/automation.js.map +1 -0
  532. package/dist/client/chat/run-recovery.d.ts +4 -0
  533. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  534. package/dist/client/chat/run-recovery.js +12 -10
  535. package/dist/client/chat/run-recovery.js.map +1 -1
  536. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  537. package/dist/client/composer/TiptapComposer.js +8 -0
  538. package/dist/client/composer/TiptapComposer.js.map +1 -1
  539. package/dist/client/index.d.ts +2 -0
  540. package/dist/client/index.d.ts.map +1 -1
  541. package/dist/client/index.js +2 -0
  542. package/dist/client/index.js.map +1 -1
  543. package/dist/client/integrations/api.d.ts +115 -0
  544. package/dist/client/integrations/api.d.ts.map +1 -0
  545. package/dist/client/integrations/api.js +123 -0
  546. package/dist/client/integrations/api.js.map +1 -0
  547. package/dist/client/integrations/index.d.ts +1 -0
  548. package/dist/client/integrations/index.d.ts.map +1 -1
  549. package/dist/client/integrations/index.js +1 -0
  550. package/dist/client/integrations/index.js.map +1 -1
  551. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  552. package/dist/client/transcription/use-live-transcription.js +59 -5
  553. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  554. package/dist/client/use-run-stuck-detection.d.ts +16 -1
  555. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  556. package/dist/client/use-run-stuck-detection.js +23 -4
  557. package/dist/client/use-run-stuck-detection.js.map +1 -1
  558. package/dist/collab/struct-routes.d.ts +1 -1
  559. package/dist/deploy/build.d.ts.map +1 -1
  560. package/dist/deploy/build.js +49 -4
  561. package/dist/deploy/build.js.map +1 -1
  562. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  563. package/dist/deploy/workspace-deploy.js +31 -2
  564. package/dist/deploy/workspace-deploy.js.map +1 -1
  565. package/dist/file-upload/types.d.ts +2 -0
  566. package/dist/file-upload/types.d.ts.map +1 -1
  567. package/dist/file-upload/types.js.map +1 -1
  568. package/dist/index.d.ts +2 -0
  569. package/dist/index.d.ts.map +1 -1
  570. package/dist/index.js +2 -0
  571. package/dist/index.js.map +1 -1
  572. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  573. package/dist/integrations/a2a-continuations-store.js +6 -4
  574. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  575. package/dist/integrations/adapters/discord.d.ts +3 -0
  576. package/dist/integrations/adapters/discord.d.ts.map +1 -0
  577. package/dist/integrations/adapters/discord.js +261 -0
  578. package/dist/integrations/adapters/discord.js.map +1 -0
  579. package/dist/integrations/adapters/index.d.ts +4 -0
  580. package/dist/integrations/adapters/index.d.ts.map +1 -0
  581. package/dist/integrations/adapters/index.js +26 -0
  582. package/dist/integrations/adapters/index.js.map +1 -0
  583. package/dist/integrations/adapters/microsoft-teams.d.ts +5 -0
  584. package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -0
  585. package/dist/integrations/adapters/microsoft-teams.js +295 -0
  586. package/dist/integrations/adapters/microsoft-teams.js.map +1 -0
  587. package/dist/integrations/adapters/slack.d.ts +8 -2
  588. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  589. package/dist/integrations/adapters/slack.js +736 -27
  590. package/dist/integrations/adapters/slack.js.map +1 -1
  591. package/dist/integrations/adapters/telegram.d.ts +0 -2
  592. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  593. package/dist/integrations/adapters/telegram.js +49 -15
  594. package/dist/integrations/adapters/telegram.js.map +1 -1
  595. package/dist/integrations/adapters/whatsapp.d.ts +0 -2
  596. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  597. package/dist/integrations/adapters/whatsapp.js +40 -17
  598. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  599. package/dist/integrations/catalog.d.ts +75 -0
  600. package/dist/integrations/catalog.d.ts.map +1 -0
  601. package/dist/integrations/catalog.js +451 -0
  602. package/dist/integrations/catalog.js.map +1 -0
  603. package/dist/integrations/controls-store.d.ts +44 -0
  604. package/dist/integrations/controls-store.d.ts.map +1 -0
  605. package/dist/integrations/controls-store.js +129 -0
  606. package/dist/integrations/controls-store.js.map +1 -0
  607. package/dist/integrations/index.d.ts +13 -1
  608. package/dist/integrations/index.d.ts.map +1 -1
  609. package/dist/integrations/index.js +9 -0
  610. package/dist/integrations/index.js.map +1 -1
  611. package/dist/integrations/installations-store.d.ts +112 -0
  612. package/dist/integrations/installations-store.d.ts.map +1 -0
  613. package/dist/integrations/installations-store.js +493 -0
  614. package/dist/integrations/installations-store.js.map +1 -0
  615. package/dist/integrations/integration-memory.d.ts +24 -0
  616. package/dist/integrations/integration-memory.d.ts.map +1 -0
  617. package/dist/integrations/integration-memory.js +136 -0
  618. package/dist/integrations/integration-memory.js.map +1 -0
  619. package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
  620. package/dist/integrations/pending-tasks-retry-job.js +6 -5
  621. package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
  622. package/dist/integrations/pending-tasks-store.d.ts +17 -0
  623. package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
  624. package/dist/integrations/pending-tasks-store.js +71 -5
  625. package/dist/integrations/pending-tasks-store.js.map +1 -1
  626. package/dist/integrations/plugin.d.ts.map +1 -1
  627. package/dist/integrations/plugin.js +520 -35
  628. package/dist/integrations/plugin.js.map +1 -1
  629. package/dist/integrations/scope-store.d.ts +65 -0
  630. package/dist/integrations/scope-store.d.ts.map +1 -0
  631. package/dist/integrations/scope-store.js +361 -0
  632. package/dist/integrations/scope-store.js.map +1 -0
  633. package/dist/integrations/slack-manifest.d.ts +66 -0
  634. package/dist/integrations/slack-manifest.d.ts.map +1 -0
  635. package/dist/integrations/slack-manifest.js +70 -0
  636. package/dist/integrations/slack-manifest.js.map +1 -0
  637. package/dist/integrations/slack-oauth.d.ts +99 -0
  638. package/dist/integrations/slack-oauth.d.ts.map +1 -0
  639. package/dist/integrations/slack-oauth.js +226 -0
  640. package/dist/integrations/slack-oauth.js.map +1 -0
  641. package/dist/integrations/types.d.ts +144 -0
  642. package/dist/integrations/types.d.ts.map +1 -1
  643. package/dist/integrations/types.js +16 -1
  644. package/dist/integrations/types.js.map +1 -1
  645. package/dist/integrations/usage-budget-store.d.ts +84 -0
  646. package/dist/integrations/usage-budget-store.d.ts.map +1 -0
  647. package/dist/integrations/usage-budget-store.js +650 -0
  648. package/dist/integrations/usage-budget-store.js.map +1 -0
  649. package/dist/integrations/webhook-handler.d.ts +4 -0
  650. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  651. package/dist/integrations/webhook-handler.js +415 -47
  652. package/dist/integrations/webhook-handler.js.map +1 -1
  653. package/dist/jobs/scheduler.d.ts +6 -0
  654. package/dist/jobs/scheduler.d.ts.map +1 -1
  655. package/dist/jobs/scheduler.js +83 -4
  656. package/dist/jobs/scheduler.js.map +1 -1
  657. package/dist/jobs/tools.d.ts.map +1 -1
  658. package/dist/jobs/tools.js +43 -11
  659. package/dist/jobs/tools.js.map +1 -1
  660. package/dist/observability/routes.d.ts +5 -5
  661. package/dist/progress/routes.d.ts +1 -1
  662. package/dist/provider-api/index.d.ts +4 -4
  663. package/dist/provider-api/index.d.ts.map +1 -1
  664. package/dist/provider-api/index.js +72 -1
  665. package/dist/provider-api/index.js.map +1 -1
  666. package/dist/resources/handlers.d.ts +3 -3
  667. package/dist/resources/handlers.d.ts.map +1 -1
  668. package/dist/resources/handlers.js +57 -15
  669. package/dist/resources/handlers.js.map +1 -1
  670. package/dist/resources/script-helpers.d.ts.map +1 -1
  671. package/dist/resources/script-helpers.js +34 -8
  672. package/dist/resources/script-helpers.js.map +1 -1
  673. package/dist/resources/store.d.ts +10 -0
  674. package/dist/resources/store.d.ts.map +1 -1
  675. package/dist/resources/store.js +54 -47
  676. package/dist/resources/store.js.map +1 -1
  677. package/dist/scripts/call-agent.d.ts.map +1 -1
  678. package/dist/scripts/call-agent.js +106 -1
  679. package/dist/scripts/call-agent.js.map +1 -1
  680. package/dist/server/agent-chat-plugin.d.ts +15 -4
  681. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  682. package/dist/server/agent-chat-plugin.js +248 -113
  683. package/dist/server/agent-chat-plugin.js.map +1 -1
  684. package/dist/server/auth.d.ts.map +1 -1
  685. package/dist/server/auth.js +10 -14
  686. package/dist/server/auth.js.map +1 -1
  687. package/dist/server/builder-design-systems.d.ts +3 -1
  688. package/dist/server/builder-design-systems.d.ts.map +1 -1
  689. package/dist/server/builder-design-systems.js +9 -2
  690. package/dist/server/builder-design-systems.js.map +1 -1
  691. package/dist/server/edge.d.ts +1 -1
  692. package/dist/server/edge.d.ts.map +1 -1
  693. package/dist/server/edge.js +1 -1
  694. package/dist/server/edge.js.map +1 -1
  695. package/dist/server/index.d.ts +2 -1
  696. package/dist/server/index.d.ts.map +1 -1
  697. package/dist/server/index.js +2 -1
  698. package/dist/server/index.js.map +1 -1
  699. package/dist/server/request-context.d.ts +18 -0
  700. package/dist/server/request-context.d.ts.map +1 -1
  701. package/dist/server/request-context.js.map +1 -1
  702. package/dist/server/social-og-image.d.ts.map +1 -1
  703. package/dist/server/social-og-image.js +3 -2
  704. package/dist/server/social-og-image.js.map +1 -1
  705. package/dist/server/transcribe-voice.d.ts +1 -1
  706. package/dist/styles/agent-native.css +62 -44
  707. package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  708. package/dist/templates/default/AGENTS.md +7 -3
  709. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  710. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  711. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  712. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  713. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  714. package/dist/templates/workspace-core/AGENTS.md +3 -2
  715. package/dist/usage/store.d.ts +7 -0
  716. package/dist/usage/store.d.ts.map +1 -1
  717. package/dist/usage/store.js +24 -3
  718. package/dist/usage/store.js.map +1 -1
  719. package/docs/content/automation-connectors.mdx +80 -0
  720. package/docs/content/extensions.mdx +8 -0
  721. package/docs/content/locales/ar-SA/extensions.mdx +8 -0
  722. package/docs/content/locales/ar-SA/messaging.mdx +84 -15
  723. package/docs/content/locales/ar-SA/template-clips.mdx +1 -0
  724. package/docs/content/locales/ar-SA/template-design.mdx +1 -0
  725. package/docs/content/locales/de-DE/extensions.mdx +10 -0
  726. package/docs/content/locales/de-DE/messaging.mdx +92 -15
  727. package/docs/content/locales/de-DE/template-clips.mdx +1 -0
  728. package/docs/content/locales/de-DE/template-design.mdx +1 -0
  729. package/docs/content/locales/es-ES/extensions.mdx +10 -0
  730. package/docs/content/locales/es-ES/messaging.mdx +91 -15
  731. package/docs/content/locales/es-ES/template-clips.mdx +1 -0
  732. package/docs/content/locales/es-ES/template-design.mdx +1 -0
  733. package/docs/content/locales/fr-FR/extensions.mdx +10 -0
  734. package/docs/content/locales/fr-FR/messaging.mdx +91 -15
  735. package/docs/content/locales/fr-FR/template-clips.mdx +1 -0
  736. package/docs/content/locales/fr-FR/template-design.mdx +1 -0
  737. package/docs/content/locales/hi-IN/extensions.mdx +8 -0
  738. package/docs/content/locales/hi-IN/messaging.mdx +81 -15
  739. package/docs/content/locales/hi-IN/template-clips.mdx +1 -0
  740. package/docs/content/locales/hi-IN/template-design.mdx +1 -0
  741. package/docs/content/locales/ja-JP/extensions.mdx +9 -0
  742. package/docs/content/locales/ja-JP/messaging.mdx +81 -15
  743. package/docs/content/locales/ja-JP/template-clips.mdx +1 -0
  744. package/docs/content/locales/ja-JP/template-design.mdx +1 -0
  745. package/docs/content/locales/ko-KR/extensions.mdx +8 -0
  746. package/docs/content/locales/ko-KR/messaging.mdx +80 -15
  747. package/docs/content/locales/ko-KR/template-clips.mdx +1 -0
  748. package/docs/content/locales/ko-KR/template-design.mdx +1 -0
  749. package/docs/content/locales/pt-BR/extensions.mdx +9 -0
  750. package/docs/content/locales/pt-BR/messaging.mdx +88 -15
  751. package/docs/content/locales/pt-BR/template-clips.mdx +1 -0
  752. package/docs/content/locales/pt-BR/template-design.mdx +1 -0
  753. package/docs/content/locales/zh-CN/extensions.mdx +6 -0
  754. package/docs/content/locales/zh-CN/messaging.mdx +78 -15
  755. package/docs/content/locales/zh-CN/template-clips.mdx +1 -0
  756. package/docs/content/locales/zh-CN/template-design.mdx +1 -0
  757. package/docs/content/locales/zh-TW/extensions.mdx +6 -0
  758. package/docs/content/locales/zh-TW/messaging.mdx +78 -15
  759. package/docs/content/locales/zh-TW/template-clips.mdx +1 -0
  760. package/docs/content/locales/zh-TW/template-design.mdx +1 -0
  761. package/docs/content/messaging.mdx +227 -45
  762. package/docs/content/template-clips.mdx +3 -0
  763. package/docs/content/template-design.mdx +4 -0
  764. package/package.json +5 -1
  765. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  766. package/src/templates/default/AGENTS.md +7 -3
  767. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  768. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  769. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  770. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  771. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  772. package/src/templates/workspace-core/AGENTS.md +3 -2
@@ -0,0 +1,295 @@
1
+ import { agentNativePath } from "../api-path.js";
2
+
3
+ export interface IntegrationEnvStatus {
4
+ key: string;
5
+ label: string;
6
+ required: boolean;
7
+ configured: boolean;
8
+ helpText?: string;
9
+ }
10
+
11
+ export interface ClientIntegrationStatus {
12
+ platform: string;
13
+ label: string;
14
+ enabled: boolean;
15
+ configured: boolean;
16
+ details?: Record<string, unknown>;
17
+ error?: string;
18
+ webhookUrl?: string;
19
+ requiredEnvKeys?: IntegrationEnvStatus[];
20
+ }
21
+
22
+ export interface SavedEnvVarsResult {
23
+ saved: string[];
24
+ storage?: string;
25
+ }
26
+
27
+ export interface ClientIntegrationInstallation {
28
+ id: string;
29
+ platform: string;
30
+ installationKey: string;
31
+ teamId: string | null;
32
+ teamName: string | null;
33
+ enterpriseId: string | null;
34
+ enterpriseName: string | null;
35
+ scopes: string[];
36
+ ownerEmail: string;
37
+ orgId: string | null;
38
+ status: "connected" | "disconnected" | "revoked" | "error";
39
+ health: "unknown" | "healthy" | "degraded" | "revoked";
40
+ lastError: string | null;
41
+ healthCheckedAt: number | null;
42
+ tokenExpiresAt: number | null;
43
+ updatedAt: number;
44
+ }
45
+
46
+ export interface ClientIntegrationScope {
47
+ id: string;
48
+ platform: string;
49
+ tenantId: string;
50
+ conversationId: string;
51
+ conversationType: "channel" | "direct_message" | "group_direct_message";
52
+ trust: "trusted" | "guest" | "external_shared" | "unknown";
53
+ orgId: string | null;
54
+ serviceOwnerEmail: string;
55
+ defaultModel: string | null;
56
+ policy: {
57
+ requireMention: boolean;
58
+ allowDirectMessages: boolean;
59
+ allowGuests: boolean;
60
+ allowExternalShared: boolean;
61
+ allowUnknownTrust: boolean;
62
+ };
63
+ updatedAt: number;
64
+ }
65
+
66
+ export interface ClientIntegrationUsageBudget {
67
+ id: string;
68
+ subjectType: "org" | "user" | "scope";
69
+ subjectId: string;
70
+ period: "day" | "month";
71
+ limitMicros: number;
72
+ thresholdBps: number;
73
+ updatedAt: number;
74
+ }
75
+
76
+ export interface ClientIntegrationMemory {
77
+ name: string;
78
+ path: string;
79
+ updatedAt: number;
80
+ size: number;
81
+ }
82
+
83
+ export class IntegrationClientError extends Error {
84
+ constructor(
85
+ message: string,
86
+ readonly status: number,
87
+ ) {
88
+ super(message);
89
+ this.name = "IntegrationClientError";
90
+ }
91
+ }
92
+
93
+ async function readResponse<T>(response: Response): Promise<T> {
94
+ let payload: unknown;
95
+ try {
96
+ payload = await response.json();
97
+ } catch {
98
+ if (response.ok) {
99
+ throw new IntegrationClientError(
100
+ "Integration response was not valid JSON.",
101
+ response.status,
102
+ );
103
+ }
104
+ payload = null;
105
+ }
106
+ if (response.ok) return payload as T;
107
+
108
+ const error =
109
+ payload &&
110
+ typeof payload === "object" &&
111
+ typeof (payload as { error?: unknown }).error === "string"
112
+ ? (payload as { error: string }).error
113
+ : response.statusText || `Request failed (HTTP ${response.status})`;
114
+ throw new IntegrationClientError(error, response.status);
115
+ }
116
+
117
+ async function integrationRequest<T>(
118
+ path: string,
119
+ init?: RequestInit,
120
+ ): Promise<T> {
121
+ return readResponse<T>(await fetch(agentNativePath(path), init));
122
+ }
123
+
124
+ export async function listIntegrationStatuses(): Promise<
125
+ ClientIntegrationStatus[]
126
+ > {
127
+ const result = await integrationRequest<unknown>(
128
+ "/_agent-native/integrations/status",
129
+ );
130
+ return Array.isArray(result) ? (result as ClientIntegrationStatus[]) : [];
131
+ }
132
+
133
+ export async function setIntegrationEnabled(
134
+ platform: string,
135
+ enabled: boolean,
136
+ ): Promise<unknown> {
137
+ return integrationRequest(
138
+ `/_agent-native/integrations/${encodeURIComponent(platform)}/${enabled ? "enable" : "disable"}`,
139
+ { method: "POST" },
140
+ );
141
+ }
142
+
143
+ export async function setupIntegration(platform: string): Promise<unknown> {
144
+ return integrationRequest(
145
+ `/_agent-native/integrations/${encodeURIComponent(platform)}/setup`,
146
+ { method: "POST" },
147
+ );
148
+ }
149
+
150
+ export function managedIntegrationOAuthUrl(
151
+ platform: string,
152
+ returnPath = "/messaging",
153
+ ): string {
154
+ const query = new URLSearchParams({ return: returnPath });
155
+ return agentNativePath(
156
+ `/_agent-native/integrations/${encodeURIComponent(platform)}/oauth/install?${query}`,
157
+ );
158
+ }
159
+
160
+ export function managedSlackAgentManifestUrl(): string {
161
+ return agentNativePath("/_agent-native/integrations/slack/manifest");
162
+ }
163
+
164
+ export async function listManagedIntegrationInstallations(
165
+ platform?: string,
166
+ ): Promise<ClientIntegrationInstallation[]> {
167
+ const query = platform
168
+ ? `?${new URLSearchParams({ platform }).toString()}`
169
+ : "";
170
+ const result = await integrationRequest<{
171
+ installations?: ClientIntegrationInstallation[];
172
+ }>(`/_agent-native/integrations/installations${query}`);
173
+ return Array.isArray(result.installations) ? result.installations : [];
174
+ }
175
+
176
+ export async function testManagedIntegrationInstallation(
177
+ id: string,
178
+ ): Promise<ClientIntegrationInstallation | null> {
179
+ const result = await integrationRequest<{
180
+ installation?: ClientIntegrationInstallation | null;
181
+ }>("/_agent-native/integrations/installations", {
182
+ method: "POST",
183
+ headers: { "Content-Type": "application/json" },
184
+ body: JSON.stringify({ id, action: "test" }),
185
+ });
186
+ return result.installation ?? null;
187
+ }
188
+
189
+ export async function disconnectManagedIntegrationInstallation(
190
+ id: string,
191
+ ): Promise<ClientIntegrationInstallation | null> {
192
+ const result = await integrationRequest<{
193
+ installation?: ClientIntegrationInstallation | null;
194
+ }>("/_agent-native/integrations/installations", {
195
+ method: "POST",
196
+ headers: { "Content-Type": "application/json" },
197
+ body: JSON.stringify({ id, action: "disconnect" }),
198
+ });
199
+ return result.installation ?? null;
200
+ }
201
+
202
+ export async function listManagedIntegrationScopes(
203
+ platform?: string,
204
+ ): Promise<ClientIntegrationScope[]> {
205
+ const query = platform
206
+ ? `?${new URLSearchParams({ platform }).toString()}`
207
+ : "";
208
+ const result = await integrationRequest<{
209
+ scopes?: ClientIntegrationScope[];
210
+ }>(`/_agent-native/integrations/scopes${query}`);
211
+ return Array.isArray(result.scopes) ? result.scopes : [];
212
+ }
213
+
214
+ export async function saveManagedIntegrationScope(
215
+ scope: Omit<ClientIntegrationScope, "id" | "updatedAt">,
216
+ ): Promise<ClientIntegrationScope> {
217
+ const result = await integrationRequest<{ scope: ClientIntegrationScope }>(
218
+ "/_agent-native/integrations/scopes",
219
+ {
220
+ method: "POST",
221
+ headers: { "Content-Type": "application/json" },
222
+ body: JSON.stringify(scope),
223
+ },
224
+ );
225
+ return result.scope;
226
+ }
227
+
228
+ export async function listManagedIntegrationBudgets(): Promise<
229
+ ClientIntegrationUsageBudget[]
230
+ > {
231
+ const result = await integrationRequest<{
232
+ budgets?: ClientIntegrationUsageBudget[];
233
+ }>("/_agent-native/integrations/budgets");
234
+ return Array.isArray(result.budgets) ? result.budgets : [];
235
+ }
236
+
237
+ export async function saveManagedIntegrationBudget(input: {
238
+ subject:
239
+ | { type: "org"; orgId: string }
240
+ | { type: "user"; userEmail: string }
241
+ | {
242
+ type: "scope";
243
+ scope: { platform: string; tenantId: string; conversationId: string };
244
+ };
245
+ period: "day" | "month";
246
+ limitMicros: number;
247
+ thresholdBps?: number;
248
+ }): Promise<ClientIntegrationUsageBudget> {
249
+ const result = await integrationRequest<{
250
+ budget: ClientIntegrationUsageBudget;
251
+ }>("/_agent-native/integrations/budgets", {
252
+ method: "POST",
253
+ headers: { "Content-Type": "application/json" },
254
+ body: JSON.stringify(input),
255
+ });
256
+ return result.budget;
257
+ }
258
+
259
+ export async function listManagedIntegrationMemory(
260
+ scopeId: string,
261
+ ): Promise<ClientIntegrationMemory[]> {
262
+ const query = new URLSearchParams({ scopeId });
263
+ const result = await integrationRequest<{
264
+ memories?: ClientIntegrationMemory[];
265
+ }>(`/_agent-native/integrations/memory?${query}`);
266
+ return Array.isArray(result.memories) ? result.memories : [];
267
+ }
268
+
269
+ export async function forgetManagedIntegrationMemory(
270
+ scopeId: string,
271
+ name: string,
272
+ ): Promise<void> {
273
+ await integrationRequest("/_agent-native/integrations/memory", {
274
+ method: "POST",
275
+ headers: { "Content-Type": "application/json" },
276
+ body: JSON.stringify({ action: "forget", scopeId, name }),
277
+ });
278
+ }
279
+
280
+ export async function listIntegrationEnvStatuses(): Promise<
281
+ IntegrationEnvStatus[]
282
+ > {
283
+ const result = await integrationRequest<unknown>("/_agent-native/env-status");
284
+ return Array.isArray(result) ? (result as IntegrationEnvStatus[]) : [];
285
+ }
286
+
287
+ export async function saveIntegrationEnvVars(
288
+ vars: Array<{ key: string; value: string }>,
289
+ ): Promise<SavedEnvVarsResult> {
290
+ return integrationRequest<SavedEnvVarsResult>("/_agent-native/env-vars", {
291
+ method: "POST",
292
+ headers: { "Content-Type": "application/json" },
293
+ body: JSON.stringify({ vars }),
294
+ });
295
+ }
@@ -1,3 +1,29 @@
1
1
  export { IntegrationsPanel } from "./IntegrationsPanel.js";
2
2
  export { useIntegrationStatus } from "./useIntegrationStatus.js";
3
3
  export type { IntegrationStatus } from "./useIntegrationStatus.js";
4
+ export {
5
+ listIntegrationEnvStatuses,
6
+ listIntegrationStatuses,
7
+ saveIntegrationEnvVars,
8
+ setIntegrationEnabled,
9
+ setupIntegration,
10
+ disconnectManagedIntegrationInstallation,
11
+ listManagedIntegrationInstallations,
12
+ managedIntegrationOAuthUrl,
13
+ managedSlackAgentManifestUrl,
14
+ listManagedIntegrationScopes,
15
+ saveManagedIntegrationScope,
16
+ listManagedIntegrationBudgets,
17
+ listManagedIntegrationMemory,
18
+ forgetManagedIntegrationMemory,
19
+ saveManagedIntegrationBudget,
20
+ testManagedIntegrationInstallation,
21
+ IntegrationClientError,
22
+ type ClientIntegrationInstallation,
23
+ type ClientIntegrationScope,
24
+ type ClientIntegrationUsageBudget,
25
+ type ClientIntegrationMemory,
26
+ type ClientIntegrationStatus,
27
+ type IntegrationEnvStatus,
28
+ type SavedEnvVarsResult,
29
+ } from "./api.js";
@@ -13,6 +13,9 @@
13
13
 
14
14
  import { useCallback, useEffect, useRef, useState } from "react";
15
15
 
16
+ const NETWORK_RESTART_BASE_MS = 1_000;
17
+ const NETWORK_RESTART_MAX_MS = 30_000;
18
+
16
19
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
20
  function getSpeechRecognitionCtor(): any {
18
21
  if (typeof window === "undefined") return null;
@@ -57,6 +60,9 @@ export function useLiveTranscription(
57
60
  const transcriptRef = useRef("");
58
61
  const stoppedManuallyRef = useRef(false);
59
62
  const stopWaiterRef = useRef<((text: string) => void) | null>(null);
63
+ const restartTimerRef = useRef<number | null>(null);
64
+ const networkErrorCountRef = useRef(0);
65
+ const restartDelayRef = useRef(0);
60
66
 
61
67
  const supported = !!getSpeechRecognitionCtor();
62
68
 
@@ -65,6 +71,10 @@ export function useLiveTranscription(
65
71
  if (!Ctor) return;
66
72
 
67
73
  // Clean up any prior session.
74
+ if (restartTimerRef.current !== null) {
75
+ window.clearTimeout(restartTimerRef.current);
76
+ restartTimerRef.current = null;
77
+ }
68
78
  if (recognitionRef.current) {
69
79
  try {
70
80
  recognitionRef.current.abort();
@@ -80,6 +90,8 @@ export function useLiveTranscription(
80
90
  recognitionRef.current = recognition;
81
91
  transcriptRef.current = "";
82
92
  stoppedManuallyRef.current = false;
93
+ networkErrorCountRef.current = 0;
94
+ restartDelayRef.current = 0;
83
95
  setTranscript("");
84
96
  setInterimText("");
85
97
 
@@ -96,21 +108,60 @@ export function useLiveTranscription(
96
108
  }
97
109
  }
98
110
  setInterimText(interim);
111
+ if (event.results.length > 0) {
112
+ networkErrorCountRef.current = 0;
113
+ restartDelayRef.current = 0;
114
+ }
99
115
  };
100
116
 
101
117
  recognition.onerror = (event: any) => {
102
118
  if (event.error === "no-speech" || event.error === "aborted") return;
119
+ if (
120
+ event.error === "not-allowed" ||
121
+ event.error === "service-not-allowed" ||
122
+ event.error === "audio-capture"
123
+ ) {
124
+ stoppedManuallyRef.current = true;
125
+ setIsActive(false);
126
+ return;
127
+ }
128
+ if (event.error === "network") {
129
+ const retryIndex = networkErrorCountRef.current++;
130
+ restartDelayRef.current = Math.min(
131
+ NETWORK_RESTART_BASE_MS * 2 ** retryIndex,
132
+ NETWORK_RESTART_MAX_MS,
133
+ );
134
+ }
103
135
  console.warn("[live-transcription] error:", event.error);
104
136
  };
105
137
 
106
138
  recognition.onend = () => {
107
139
  // Web Speech sometimes stops on its own (silence timeout, network
108
140
  // hiccup). Restart automatically unless we stopped intentionally.
109
- if (!stoppedManuallyRef.current && recognitionRef.current) {
110
- try {
111
- recognition.start();
112
- } catch {
113
- setIsActive(false);
141
+ if (
142
+ !stoppedManuallyRef.current &&
143
+ recognitionRef.current === recognition
144
+ ) {
145
+ const restart = () => {
146
+ restartTimerRef.current = null;
147
+ if (
148
+ stoppedManuallyRef.current ||
149
+ recognitionRef.current !== recognition
150
+ ) {
151
+ return;
152
+ }
153
+ try {
154
+ recognition.start();
155
+ } catch {
156
+ setIsActive(false);
157
+ }
158
+ };
159
+ const delayMs = restartDelayRef.current;
160
+ restartDelayRef.current = 0;
161
+ if (delayMs > 0) {
162
+ restartTimerRef.current = window.setTimeout(restart, delayMs);
163
+ } else {
164
+ restart();
114
165
  }
115
166
  return;
116
167
  }
@@ -130,6 +181,10 @@ export function useLiveTranscription(
130
181
 
131
182
  const stop = useCallback((): string => {
132
183
  stoppedManuallyRef.current = true;
184
+ if (restartTimerRef.current !== null) {
185
+ window.clearTimeout(restartTimerRef.current);
186
+ restartTimerRef.current = null;
187
+ }
133
188
  setInterimText("");
134
189
  if (recognitionRef.current) {
135
190
  try {
@@ -145,6 +200,10 @@ export function useLiveTranscription(
145
200
 
146
201
  const stopAndWait = useCallback((timeoutMs = 1200): Promise<string> => {
147
202
  stoppedManuallyRef.current = true;
203
+ if (restartTimerRef.current !== null) {
204
+ window.clearTimeout(restartTimerRef.current);
205
+ restartTimerRef.current = null;
206
+ }
148
207
  setInterimText("");
149
208
 
150
209
  const recognition = recognitionRef.current;
@@ -185,6 +244,10 @@ export function useLiveTranscription(
185
244
  const pause = useCallback(() => {
186
245
  if (!recognitionRef.current) return;
187
246
  stoppedManuallyRef.current = true;
247
+ if (restartTimerRef.current !== null) {
248
+ window.clearTimeout(restartTimerRef.current);
249
+ restartTimerRef.current = null;
250
+ }
188
251
  try {
189
252
  recognitionRef.current.stop();
190
253
  } catch {
@@ -28,6 +28,13 @@ export interface RunStuckState {
28
28
  heartbeatSinceMs: number | null;
29
29
  /** How the run was dispatched/continued, e.g. foreground-self-chain or background-processing. */
30
30
  dispatchMode: string | null;
31
+ /**
32
+ * Server-authoritative: true when the run holds an open tool call or A2A
33
+ * `agent_call` delegation (`in_flight_since` marker set). Preferred over the
34
+ * client-side proxy for deciding whether Retry (which aborts the run) is
35
+ * safe to offer. Null when the server bundle predates this field.
36
+ */
37
+ hasInFlightWork: boolean | null;
31
38
  }
32
39
 
33
40
  export interface UseRunStuckDetectionOptions {
@@ -55,6 +62,13 @@ export interface UseRunStuckDetectionOptions {
55
62
  * from the same poll response that computes the elapsed time.
56
63
  */
57
64
  backgroundStuckThresholdMs?: number;
65
+ /**
66
+ * Threshold for a claimed durable background worker that is still sending
67
+ * fresh process heartbeats. These workers can legitimately spend up to the
68
+ * 12-minute tool/no-progress window on large Design, Plan, or Assets work.
69
+ * Default 13 minutes, matching the durable chunk handoff boundary.
70
+ */
71
+ liveBackgroundStuckThresholdMs?: number;
58
72
  /** Poll interval. Default 5_000ms. */
59
73
  pollIntervalMs?: number;
60
74
  /** API base path. Default `/_agent-native/agent-chat`. */
@@ -63,8 +77,10 @@ export interface UseRunStuckDetectionOptions {
63
77
 
64
78
  const DEFAULT_STUCK_THRESHOLD_MS = 90_000;
65
79
  export const DEFAULT_BACKGROUND_STUCK_THRESHOLD_MS = 180_000;
80
+ export const DEFAULT_LIVE_BACKGROUND_STUCK_THRESHOLD_MS = 13 * 60_000;
66
81
  const DEFAULT_POLL_INTERVAL_MS = 5_000;
67
82
  const IDLE_BACKOFF_INTERVAL_MS = 15_000;
83
+ const FRESH_BACKGROUND_HEARTBEAT_MS = 30_000;
68
84
 
69
85
  interface ActiveRunResponse {
70
86
  active: boolean;
@@ -75,6 +91,8 @@ interface ActiveRunResponse {
75
91
  dispatchMode?: string | null;
76
92
  /** Server clock at response time, used to compute elapsed server-relative. */
77
93
  serverNow?: number;
94
+ /** True when the run holds an open tool/A2A call (in_flight_since marker). */
95
+ hasInFlightWork?: boolean;
78
96
  }
79
97
 
80
98
  const EMPTY_STATE: RunStuckState = {
@@ -86,6 +104,7 @@ const EMPTY_STATE: RunStuckState = {
86
104
  heartbeatAt: null,
87
105
  heartbeatSinceMs: null,
88
106
  dispatchMode: null,
107
+ hasInFlightWork: null,
89
108
  };
90
109
 
91
110
  export function useRunStuckDetection({
@@ -93,6 +112,7 @@ export function useRunStuckDetection({
93
112
  enabled = true,
94
113
  stuckThresholdMs = DEFAULT_STUCK_THRESHOLD_MS,
95
114
  backgroundStuckThresholdMs = DEFAULT_BACKGROUND_STUCK_THRESHOLD_MS,
115
+ liveBackgroundStuckThresholdMs = DEFAULT_LIVE_BACKGROUND_STUCK_THRESHOLD_MS,
96
116
  pollIntervalMs = DEFAULT_POLL_INTERVAL_MS,
97
117
  apiUrl,
98
118
  }: UseRunStuckDetectionOptions): RunStuckState {
@@ -139,9 +159,22 @@ export function useRunStuckDetection({
139
159
  const serverContinued =
140
160
  dispatchMode === "foreground-self-chain" ||
141
161
  dispatchMode?.startsWith("background") === true;
142
- const effectiveThresholdMs = serverContinued
143
- ? backgroundStuckThresholdMs
144
- : stuckThresholdMs;
162
+ // A claimed durable worker with a fresh heartbeat can legitimately
163
+ // be waiting on a bounded long-running tool/sub-agent call. Showing
164
+ // Retry at the generic 3-minute continuation threshold aborts healthy
165
+ // work and starts the same call again. Let the worker's own 12-minute
166
+ // watchdog act first; a dead/stale heartbeat still gets the earlier
167
+ // background fallback below.
168
+ const liveBackgroundWorker =
169
+ dispatchMode === "background-processing" &&
170
+ heartbeatSinceMs != null &&
171
+ heartbeatSinceMs >= 0 &&
172
+ heartbeatSinceMs < FRESH_BACKGROUND_HEARTBEAT_MS;
173
+ const effectiveThresholdMs = liveBackgroundWorker
174
+ ? liveBackgroundStuckThresholdMs
175
+ : serverContinued
176
+ ? backgroundStuckThresholdMs
177
+ : stuckThresholdMs;
145
178
  const isStuck = Boolean(
146
179
  data.active &&
147
180
  data.status === "running" &&
@@ -157,6 +190,10 @@ export function useRunStuckDetection({
157
190
  heartbeatAt,
158
191
  heartbeatSinceMs,
159
192
  dispatchMode,
193
+ hasInFlightWork:
194
+ typeof data.hasInFlightWork === "boolean"
195
+ ? data.hasInFlightWork
196
+ : null,
160
197
  });
161
198
  // Back off polling when nothing is in flight — there's no point
162
199
  // hammering the endpoint while the chat is idle. We still poll
@@ -187,6 +224,7 @@ export function useRunStuckDetection({
187
224
  enabled,
188
225
  stuckThresholdMs,
189
226
  backgroundStuckThresholdMs,
227
+ liveBackgroundStuckThresholdMs,
190
228
  pollIntervalMs,
191
229
  apiUrl,
192
230
  ]);
@@ -22,6 +22,10 @@ import { fileURLToPath } from "url";
22
22
 
23
23
  import {
24
24
  AGENT_BACKGROUND_FUNCTION_NAME,
25
+ AGENT_BACKGROUND_PROCESSOR_A2A,
26
+ AGENT_BACKGROUND_PROCESSOR_FIELD,
27
+ AGENT_BACKGROUND_PROCESSOR_ROUTE,
28
+ AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD,
25
29
  AGENT_CHAT_PROCESS_RUN_PATH,
26
30
  } from "../agent/durable-background.js";
27
31
  import { normalizeAppBasePath } from "../server/app-base-path.js";
@@ -2344,6 +2348,17 @@ export function emitSingleTemplateNetlifyBackgroundFunction(
2344
2348
  fs.rmSync(path.join(dest, "server.mjs"), { force: true });
2345
2349
 
2346
2350
  const processRunPath = JSON.stringify(AGENT_CHAT_PROCESS_RUN_PATH);
2351
+ const a2aProcessTaskPath = JSON.stringify("/_agent-native/a2a/_process-task");
2352
+ const backgroundProcessorField = JSON.stringify(
2353
+ AGENT_BACKGROUND_PROCESSOR_FIELD,
2354
+ );
2355
+ const backgroundProcessorA2A = JSON.stringify(AGENT_BACKGROUND_PROCESSOR_A2A);
2356
+ const backgroundProcessorRoute = JSON.stringify(
2357
+ AGENT_BACKGROUND_PROCESSOR_ROUTE,
2358
+ );
2359
+ const backgroundProcessorRouteField = JSON.stringify(
2360
+ AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD,
2361
+ );
2347
2362
  const entry = `// Mark this isolate as the durable background runtime BEFORE the handler
2348
2363
  // bundle is imported, so isInBackgroundFunctionRuntime() reliably returns true
2349
2364
  // in this function. The deployed Lambda name is NOT guaranteed to end in
@@ -2355,6 +2370,35 @@ globalThis.__AGENT_NATIVE_BACKGROUND_RUNTIME__ = true;
2355
2370
 
2356
2371
  // The framework route the Nitro router dispatches to (the _process-run plugin).
2357
2372
  const PROCESS_RUN_PATH = ${processRunPath};
2373
+ const A2A_PROCESS_TASK_PATH = ${a2aProcessTaskPath};
2374
+ const BACKGROUND_PROCESSOR_FIELD = ${backgroundProcessorField};
2375
+ const BACKGROUND_PROCESSOR_A2A = ${backgroundProcessorA2A};
2376
+ const BACKGROUND_PROCESSOR_ROUTE = ${backgroundProcessorRoute};
2377
+ const BACKGROUND_PROCESSOR_ROUTE_FIELD = ${backgroundProcessorRouteField};
2378
+
2379
+ function processorPathFromBody(body) {
2380
+ if (!body) return null;
2381
+ try {
2382
+ const parsed = JSON.parse(body);
2383
+ if (parsed?.[BACKGROUND_PROCESSOR_FIELD] === BACKGROUND_PROCESSOR_A2A) {
2384
+ return A2A_PROCESS_TASK_PATH;
2385
+ }
2386
+ const route = parsed?.[BACKGROUND_PROCESSOR_ROUTE_FIELD];
2387
+ if (
2388
+ parsed?.[BACKGROUND_PROCESSOR_FIELD] === BACKGROUND_PROCESSOR_ROUTE &&
2389
+ typeof route === "string" &&
2390
+ route.startsWith("/") &&
2391
+ route.includes("/api/_agent-native-background/") &&
2392
+ !route.includes("?") &&
2393
+ !route.includes("#")
2394
+ ) {
2395
+ return route;
2396
+ }
2397
+ return null;
2398
+ } catch {
2399
+ return null;
2400
+ }
2401
+ }
2358
2402
 
2359
2403
  let cachedHandler;
2360
2404
 
@@ -2370,11 +2414,11 @@ export default async function handler(request, context) {
2370
2414
  try {
2371
2415
  cachedHandler ??= (await import("./main.mjs")).default;
2372
2416
  const url = new URL(request.url);
2373
- url.pathname = PROCESS_RUN_PATH;
2374
2417
  // Read the body once and pass it through. GET/HEAD have no body.
2375
2418
  const method = request.method || "POST";
2376
2419
  const hasBody = method !== "GET" && method !== "HEAD";
2377
2420
  const body = hasBody ? await request.text() : undefined;
2421
+ url.pathname = processorPathFromBody(body) || PROCESS_RUN_PATH;
2378
2422
  const rewritten = new Request(url.toString(), {
2379
2423
  method,
2380
2424
  headers: request.headers,
@@ -2526,6 +2570,18 @@ export function assertSingleTemplateNetlifyBuildOutput(
2526
2570
  ): void {
2527
2571
  const failures: string[] = [];
2528
2572
  const publishDir = path.join(projectCwd, "dist");
2573
+ const workspaceAppBasePath =
2574
+ process.env.AGENT_NATIVE_WORKSPACE === "1" ||
2575
+ process.env.VITE_AGENT_NATIVE_WORKSPACE === "1"
2576
+ ? normalizeConfiguredAppBasePath()
2577
+ : "";
2578
+ const assetsRelativeDir = workspaceAppBasePath
2579
+ ? path.join(workspaceAppBasePath.slice(1), "assets")
2580
+ : "assets";
2581
+ const assetsDisplayPath = path
2582
+ .join("dist", assetsRelativeDir)
2583
+ .split(path.sep)
2584
+ .join("/");
2529
2585
  const redirectsPath = path.join(publishDir, "_redirects");
2530
2586
  const internalDir = path.join(projectCwd, ".netlify", "functions-internal");
2531
2587
  const serverDir = path.join(internalDir, "server");
@@ -2535,13 +2591,13 @@ export function assertSingleTemplateNetlifyBuildOutput(
2535
2591
  if (!fs.existsSync(publishDir)) {
2536
2592
  failures.push("missing publish directory: dist");
2537
2593
  } else {
2538
- const assetsDir = path.join(publishDir, "assets");
2594
+ const assetsDir = path.join(publishDir, assetsRelativeDir);
2539
2595
  if (
2540
2596
  !fs.existsSync(assetsDir) ||
2541
2597
  fs.readdirSync(assetsDir).every((name) => name.startsWith("."))
2542
2598
  ) {
2543
2599
  failures.push(
2544
- "dist/assets is missing hashed client assets — the publish dir would load an infinite spinner",
2600
+ `${assetsDisplayPath} is missing hashed client assets — the publish dir would load an infinite spinner`,
2545
2601
  );
2546
2602
  }
2547
2603
  }