@agent-native/core 0.131.5 → 0.131.7

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 (350) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +70 -0
  3. package/corpus/core/docs/content/agent-native-toolkit.mdx +13 -6
  4. package/corpus/core/docs/content/cloneable-saas.mdx +5 -5
  5. package/corpus/core/docs/content/creating-templates.mdx +9 -0
  6. package/corpus/core/docs/content/deployment.mdx +18 -12
  7. package/corpus/core/docs/content/doctor.mdx +8 -1
  8. package/corpus/core/docs/content/drop-in-agent.mdx +1 -1
  9. package/corpus/core/docs/content/extensions.mdx +18 -18
  10. package/corpus/core/docs/content/faq.mdx +4 -4
  11. package/corpus/core/docs/content/key-concepts.mdx +30 -21
  12. package/corpus/core/docs/content/security.mdx +2 -2
  13. package/corpus/core/docs/content/template-brain-developers.mdx +4 -1
  14. package/corpus/core/docs/content/template-mail-developers.mdx +4 -1
  15. package/corpus/core/docs/content/what-is-agent-native.mdx +6 -6
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/a2a/client.ts +449 -66
  18. package/corpus/core/src/a2a/correlation.ts +31 -0
  19. package/corpus/core/src/a2a/invoke.ts +4 -2
  20. package/corpus/core/src/a2a/types.ts +4 -0
  21. package/corpus/core/src/action.ts +3 -0
  22. package/corpus/core/src/agent/action-continuation-guidance.ts +2 -1
  23. package/corpus/core/src/agent/engine/registry.ts +98 -6
  24. package/corpus/core/src/agent/production-agent.ts +151 -18
  25. package/corpus/core/src/agent/run-loop-with-resume.ts +190 -3
  26. package/corpus/core/src/agent/run-manager.ts +117 -41
  27. package/corpus/core/src/agent/thread-debug-history.ts +86 -0
  28. package/corpus/core/src/agent/types.ts +3 -1
  29. package/corpus/core/src/cli/create.ts +11 -1
  30. package/corpus/core/src/cli/templates-meta.ts +2 -2
  31. package/corpus/core/src/client/agent-chat-adapter.ts +91 -13
  32. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +11 -9
  33. package/corpus/core/src/client/sse-event-processor.ts +17 -3
  34. package/corpus/core/src/db/client.ts +57 -17
  35. package/corpus/core/src/guards/no-env-credentials.ts +2 -0
  36. package/corpus/core/src/integrations/adapters/slack.ts +8 -3
  37. package/corpus/core/src/localization/default-messages.ts +44 -0
  38. package/corpus/core/src/observability/traces.ts +78 -5
  39. package/corpus/core/src/scripts/call-agent.ts +294 -11
  40. package/corpus/core/src/scripts/describe-workspace-apps.ts +2 -2
  41. package/corpus/core/src/secrets/crypto.ts +156 -35
  42. package/corpus/core/src/secrets/storage.ts +64 -26
  43. package/corpus/core/src/server/agent-capabilities.ts +1 -1
  44. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +113 -7
  45. package/corpus/core/src/server/agent-chat/context-tools.ts +2 -0
  46. package/corpus/core/src/server/agent-chat/plugin-options.ts +34 -1
  47. package/corpus/core/src/server/agent-chat/prompt-resources.ts +1 -1
  48. package/corpus/core/src/server/agent-chat-plugin.ts +91 -59
  49. package/corpus/core/src/templates/default/.agents/skills/secrets/SKILL.md +19 -7
  50. package/corpus/core/src/templates/headless/.agents/skills/secrets/SKILL.md +19 -7
  51. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
  53. package/corpus/core/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +19 -7
  54. package/corpus/core/src/vite/client.ts +1 -0
  55. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +5 -4
  56. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +6 -4
  57. package/corpus/templates/analytics/AGENTS.md +7 -4
  58. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -3
  59. package/corpus/templates/analytics/changelog/2026-07-30-delegated-analytics-questions-now-return-a-useful-current-me.md +6 -0
  60. package/corpus/templates/analytics/changelog/2026-07-30-scheduled-dashboard-emails-complete-every-panel-without-pool.md +6 -0
  61. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +28 -1
  62. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +18 -11
  63. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +4 -4
  64. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +9 -5
  65. package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +6 -2
  66. package/corpus/templates/analytics/server/lib/dashboard-panel-source-resolver.ts +11 -4
  67. package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +49 -31
  68. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +16 -8
  69. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +9 -3
  70. package/corpus/templates/analytics/server/lib/production-serverless-runtime.ts +11 -0
  71. package/corpus/templates/analytics/server/lib/real-data-actions.ts +10 -0
  72. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -2
  73. package/corpus/templates/analytics/server/plugins/analytics-alert-jobs.ts +2 -1
  74. package/corpus/templates/analytics/server/plugins/dashboard-report-jobs.ts +2 -1
  75. package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +1 -12
  76. package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +54 -6
  77. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +20 -9
  78. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +33 -1
  79. package/corpus/templates/brain/AGENTS.md +3 -1
  80. package/corpus/templates/brain/README.md +4 -1
  81. package/corpus/templates/brain/actions/_schemas.ts +30 -8
  82. package/corpus/templates/brain/actions/ask-brain.ts +124 -14
  83. package/corpus/templates/brain/actions/create-source.ts +18 -2
  84. package/corpus/templates/brain/actions/enqueue-captures-distillation.ts +8 -123
  85. package/corpus/templates/brain/actions/enqueue-distillation.ts +6 -127
  86. package/corpus/templates/brain/actions/import-capture.ts +17 -5
  87. package/corpus/templates/brain/actions/import-transcript.ts +17 -5
  88. package/corpus/templates/brain/actions/update-source.ts +25 -5
  89. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +1 -1
  90. package/corpus/templates/brain/changelog/2026-07-30-blessed-resources-can-feed-cited-company-answers.md +6 -0
  91. package/corpus/templates/brain/changelog/2026-07-30-the-left-sidebar-no-longer-shows-a-blank-organization-placeh.md +6 -0
  92. package/corpus/templates/brain/server/lib/brain.ts +49 -19
  93. package/corpus/templates/brain/server/lib/distillation-queue.ts +147 -0
  94. package/corpus/templates/brain/server/lib/source-policy.ts +264 -0
  95. package/corpus/templates/brain/server/plugins/agent-chat.ts +3 -2
  96. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +116 -19
  97. package/corpus/templates/clips/app/components/meetings/google-oauth-identity-notice.tsx +51 -0
  98. package/corpus/templates/clips/app/i18n/en-US.ts +4 -0
  99. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +3 -1
  100. package/corpus/templates/clips/changelog/2026-07-30-google-calendar-warning.md +6 -0
  101. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +72 -8
  102. package/corpus/templates/content/changelog/2026-07-30-the-slash-command-hint-now-stays-on-only-the-active-empty-li.md +6 -0
  103. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +506 -11
  104. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +148 -17
  105. package/corpus/templates/design/app/components/design/canvas-interactions/design-canvas-interactions.ts +357 -0
  106. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +7 -466
  107. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +15 -311
  108. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +19 -997
  109. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +8 -1216
  110. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +31 -38
  111. package/corpus/templates/design/package.json +0 -1
  112. package/corpus/templates/dispatch/AGENTS.md +8 -0
  113. package/corpus/templates/dispatch/DEVELOPING.md +29 -0
  114. package/corpus/templates/dispatch/actions/view-screen.ts +34 -2
  115. package/corpus/templates/dispatch/app/i18n-data.ts +457 -0
  116. package/corpus/templates/dispatch/changelog/2026-07-30-delegated-dispatch-work-continues-reliably-in-the-background.md +6 -0
  117. package/corpus/templates/dispatch/changelog/2026-07-30-find-failed-runs-across-apps.md +6 -0
  118. package/corpus/templates/dispatch/netlify.toml +3 -0
  119. package/corpus/templates/plan/actions/get-visual-plan.ts +10 -6
  120. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +117 -1
  121. package/corpus/templates/plan/actions/update-visual-plan.ts +56 -14
  122. package/corpus/templates/plan/app/pages/PlansPage.tsx +1 -1
  123. package/corpus/templates/plan/changelog/2026-07-30-plan-agents-recover-with-targeted-writes.md +6 -0
  124. package/corpus/templates/plan/shared/plan-content.ts +35 -0
  125. package/corpus/templates/slides/.agents/skills/analytics-data-for-decks/SKILL.md +8 -12
  126. package/corpus/templates/slides/AGENTS.md +4 -4
  127. package/corpus/templates/slides/actions/create-deck.ts +1 -1
  128. package/corpus/templates/slides/actions/duplicate-deck.ts +19 -4
  129. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +2 -10
  130. package/corpus/templates/slides/app/components/deck/MermaidRenderer.tsx +12 -1
  131. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +30 -13
  132. package/corpus/templates/slides/app/components/editor/DeckEditorSkeleton.tsx +35 -0
  133. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +63 -56
  134. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +21 -76
  135. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1110 -292
  136. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +53 -0
  137. package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +235 -18
  138. package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +4 -1
  139. package/corpus/templates/slides/app/components/editor/canvas-interactions/index.ts +11 -0
  140. package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +129 -0
  141. package/corpus/templates/slides/app/components/editor/selection-overlay-measurement.ts +70 -0
  142. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +519 -65
  143. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +36 -426
  144. package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +19 -458
  145. package/corpus/templates/slides/app/context/DeckContext.tsx +179 -72
  146. package/corpus/templates/slides/app/global.css +105 -0
  147. package/corpus/templates/slides/app/i18n/en-US.ts +8 -0
  148. package/corpus/templates/slides/app/lib/deck-editor-loading.ts +26 -0
  149. package/corpus/templates/slides/app/lib/mermaid-blocks.ts +27 -0
  150. package/corpus/templates/slides/app/pages/DeckEditor.tsx +71 -38
  151. package/corpus/templates/slides/app/pages/Index.tsx +98 -41
  152. package/corpus/templates/slides/changelog/2026-07-30-deck-loading-no-longer-flashes-an-unavailable-message.md +6 -0
  153. package/corpus/templates/slides/changelog/2026-07-30-duplicating-a-deck-from-the-deck-list-now-opens-the-copy-imm.md +6 -0
  154. package/corpus/templates/slides/changelog/2026-07-30-layout-overflow-warning-is-readable-and-dismissible.md +6 -0
  155. package/corpus/templates/slides/changelog/2026-07-30-new-decks-now-start-with-an-empty-slide-list-when-no-slides-.md +6 -0
  156. package/corpus/templates/slides/changelog/2026-07-30-shared-canvas-annotations.md +6 -0
  157. package/corpus/templates/slides/changelog/2026-07-30-slide-objects-can-be-moved-as-a-group-copied-and-pasted-with.md +6 -0
  158. package/corpus/templates/slides/changelog/2026-07-30-slide-text-editing-and-object-controls-now-match-google-slides.md +6 -0
  159. package/corpus/templates/slides/changelog/2026-07-30-style-panel-now-scrolls-with-speaker-notes-open-shows-the-sl.md +6 -0
  160. package/corpus/templates/slides/changelog/2026-07-30-top-toolbar-controls-now-use-consistent-sizing-with-undo-and.md +6 -0
  161. package/corpus/templates/slides/netlify.toml +3 -1
  162. package/corpus/templates/slides/package.json +0 -1
  163. package/corpus/templates/slides/server/lib/chat-attachments.ts +18 -0
  164. package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -0
  165. package/corpus/templates/slides/vite.config.ts +0 -1
  166. package/corpus/toolkit/CHANGELOG.md +13 -0
  167. package/corpus/toolkit/README.md +19 -0
  168. package/corpus/toolkit/agent-native.eject.json +38 -0
  169. package/corpus/toolkit/package.json +29 -1
  170. package/corpus/toolkit/src/canvas-annotations/CanvasCommentPins.tsx +861 -0
  171. package/corpus/toolkit/src/canvas-annotations/DrawOverlay.tsx +1233 -0
  172. package/corpus/toolkit/src/canvas-annotations/index.ts +15 -0
  173. package/corpus/toolkit/src/canvas-annotations/types.ts +14 -0
  174. package/corpus/toolkit/src/canvas-interactions/canvas-interactions.ts +933 -0
  175. package/corpus/toolkit/src/canvas-interactions/index.ts +67 -0
  176. package/corpus/toolkit/src/design-tweaks/scrub-input-utils.ts +311 -0
  177. package/corpus/toolkit/src/design-tweaks/scrub-input.tsx +491 -0
  178. package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +26 -171
  179. package/corpus/toolkit/src/index.ts +1 -0
  180. package/dist/a2a/client.d.ts +23 -0
  181. package/dist/a2a/client.d.ts.map +1 -1
  182. package/dist/a2a/client.js +309 -44
  183. package/dist/a2a/client.js.map +1 -1
  184. package/dist/a2a/correlation.d.ts +1 -0
  185. package/dist/a2a/correlation.d.ts.map +1 -1
  186. package/dist/a2a/correlation.js +27 -0
  187. package/dist/a2a/correlation.js.map +1 -1
  188. package/dist/a2a/invoke.d.ts.map +1 -1
  189. package/dist/a2a/invoke.js +4 -2
  190. package/dist/a2a/invoke.js.map +1 -1
  191. package/dist/a2a/types.d.ts +4 -0
  192. package/dist/a2a/types.d.ts.map +1 -1
  193. package/dist/a2a/types.js.map +1 -1
  194. package/dist/action.d.ts +3 -0
  195. package/dist/action.d.ts.map +1 -1
  196. package/dist/action.js.map +1 -1
  197. package/dist/agent/action-continuation-guidance.d.ts.map +1 -1
  198. package/dist/agent/action-continuation-guidance.js +2 -1
  199. package/dist/agent/action-continuation-guidance.js.map +1 -1
  200. package/dist/agent/engine/registry.d.ts.map +1 -1
  201. package/dist/agent/engine/registry.js +82 -8
  202. package/dist/agent/engine/registry.js.map +1 -1
  203. package/dist/agent/production-agent.d.ts +40 -1
  204. package/dist/agent/production-agent.d.ts.map +1 -1
  205. package/dist/agent/production-agent.js +113 -15
  206. package/dist/agent/production-agent.js.map +1 -1
  207. package/dist/agent/run-loop-with-resume.d.ts +21 -0
  208. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  209. package/dist/agent/run-loop-with-resume.js +163 -4
  210. package/dist/agent/run-loop-with-resume.js.map +1 -1
  211. package/dist/agent/run-manager.d.ts +16 -9
  212. package/dist/agent/run-manager.d.ts.map +1 -1
  213. package/dist/agent/run-manager.js +93 -42
  214. package/dist/agent/run-manager.js.map +1 -1
  215. package/dist/agent/thread-debug-history.d.ts +10 -0
  216. package/dist/agent/thread-debug-history.d.ts.map +1 -0
  217. package/dist/agent/thread-debug-history.js +68 -0
  218. package/dist/agent/thread-debug-history.js.map +1 -0
  219. package/dist/agent/types.d.ts +3 -1
  220. package/dist/agent/types.d.ts.map +1 -1
  221. package/dist/agent/types.js.map +1 -1
  222. package/dist/cli/create.d.ts.map +1 -1
  223. package/dist/cli/create.js +6 -1
  224. package/dist/cli/create.js.map +1 -1
  225. package/dist/cli/templates-meta.js +2 -2
  226. package/dist/cli/templates-meta.js.map +1 -1
  227. package/dist/client/agent-chat-adapter.d.ts +1 -1
  228. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  229. package/dist/client/agent-chat-adapter.js +76 -13
  230. package/dist/client/agent-chat-adapter.js.map +1 -1
  231. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  232. package/dist/client/resources/McpIntegrationDialog.js +1 -1
  233. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  234. package/dist/client/sse-event-processor.d.ts.map +1 -1
  235. package/dist/client/sse-event-processor.js +12 -3
  236. package/dist/client/sse-event-processor.js.map +1 -1
  237. package/dist/collab/routes.d.ts +1 -1
  238. package/dist/db/client.d.ts.map +1 -1
  239. package/dist/db/client.js +48 -17
  240. package/dist/db/client.js.map +1 -1
  241. package/dist/guards/no-env-credentials.d.ts.map +1 -1
  242. package/dist/guards/no-env-credentials.js +2 -0
  243. package/dist/guards/no-env-credentials.js.map +1 -1
  244. package/dist/integrations/adapters/slack.js +7 -3
  245. package/dist/integrations/adapters/slack.js.map +1 -1
  246. package/dist/localization/default-messages.d.ts +43 -0
  247. package/dist/localization/default-messages.d.ts.map +1 -1
  248. package/dist/localization/default-messages.js +43 -0
  249. package/dist/localization/default-messages.js.map +1 -1
  250. package/dist/observability/traces.d.ts +3 -1
  251. package/dist/observability/traces.d.ts.map +1 -1
  252. package/dist/observability/traces.js +73 -4
  253. package/dist/observability/traces.js.map +1 -1
  254. package/dist/progress/routes.d.ts +1 -1
  255. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  256. package/dist/provider-api/actions/provider-api.d.ts +13 -13
  257. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  258. package/dist/scripts/call-agent.d.ts.map +1 -1
  259. package/dist/scripts/call-agent.js +237 -12
  260. package/dist/scripts/call-agent.js.map +1 -1
  261. package/dist/scripts/describe-workspace-apps.js +2 -2
  262. package/dist/scripts/describe-workspace-apps.js.map +1 -1
  263. package/dist/secrets/crypto.d.ts +36 -21
  264. package/dist/secrets/crypto.d.ts.map +1 -1
  265. package/dist/secrets/crypto.js +134 -33
  266. package/dist/secrets/crypto.js.map +1 -1
  267. package/dist/secrets/storage.d.ts +6 -6
  268. package/dist/secrets/storage.d.ts.map +1 -1
  269. package/dist/secrets/storage.js +43 -26
  270. package/dist/secrets/storage.js.map +1 -1
  271. package/dist/server/agent-capabilities.js +1 -1
  272. package/dist/server/agent-capabilities.js.map +1 -1
  273. package/dist/server/agent-chat/action-filters-a2a.d.ts +17 -3
  274. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
  275. package/dist/server/agent-chat/action-filters-a2a.js +94 -3
  276. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
  277. package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
  278. package/dist/server/agent-chat/context-tools.js +2 -0
  279. package/dist/server/agent-chat/context-tools.js.map +1 -1
  280. package/dist/server/agent-chat/plugin-options.d.ts +23 -0
  281. package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
  282. package/dist/server/agent-chat/plugin-options.js +4 -1
  283. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  284. package/dist/server/agent-chat/prompt-resources.js +1 -1
  285. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  286. package/dist/server/agent-chat-plugin.d.ts +2 -1
  287. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  288. package/dist/server/agent-chat-plugin.js +79 -56
  289. package/dist/server/agent-chat-plugin.js.map +1 -1
  290. package/dist/server/realtime-token.d.ts +1 -1
  291. package/dist/templates/default/.agents/skills/secrets/SKILL.md +19 -7
  292. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +19 -7
  293. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
  294. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
  295. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +19 -7
  296. package/dist/vite/client.d.ts.map +1 -1
  297. package/dist/vite/client.js +1 -0
  298. package/dist/vite/client.js.map +1 -1
  299. package/docs/content/agent-native-toolkit.mdx +13 -6
  300. package/docs/content/cloneable-saas.mdx +5 -5
  301. package/docs/content/creating-templates.mdx +9 -0
  302. package/docs/content/deployment.mdx +18 -12
  303. package/docs/content/doctor.mdx +8 -1
  304. package/docs/content/drop-in-agent.mdx +1 -1
  305. package/docs/content/extensions.mdx +18 -18
  306. package/docs/content/faq.mdx +4 -4
  307. package/docs/content/key-concepts.mdx +30 -21
  308. package/docs/content/security.mdx +2 -2
  309. package/docs/content/template-brain-developers.mdx +4 -1
  310. package/docs/content/template-mail-developers.mdx +4 -1
  311. package/docs/content/what-is-agent-native.mdx +6 -6
  312. package/package.json +3 -3
  313. package/src/a2a/client.ts +449 -66
  314. package/src/a2a/correlation.ts +31 -0
  315. package/src/a2a/invoke.ts +4 -2
  316. package/src/a2a/types.ts +4 -0
  317. package/src/action.ts +3 -0
  318. package/src/agent/action-continuation-guidance.ts +2 -1
  319. package/src/agent/engine/registry.ts +98 -6
  320. package/src/agent/production-agent.ts +151 -18
  321. package/src/agent/run-loop-with-resume.ts +190 -3
  322. package/src/agent/run-manager.ts +117 -41
  323. package/src/agent/thread-debug-history.ts +86 -0
  324. package/src/agent/types.ts +3 -1
  325. package/src/cli/create.ts +11 -1
  326. package/src/cli/templates-meta.ts +2 -2
  327. package/src/client/agent-chat-adapter.ts +91 -13
  328. package/src/client/resources/McpIntegrationDialog.tsx +11 -9
  329. package/src/client/sse-event-processor.ts +17 -3
  330. package/src/db/client.ts +57 -17
  331. package/src/guards/no-env-credentials.ts +2 -0
  332. package/src/integrations/adapters/slack.ts +8 -3
  333. package/src/localization/default-messages.ts +44 -0
  334. package/src/observability/traces.ts +78 -5
  335. package/src/scripts/call-agent.ts +294 -11
  336. package/src/scripts/describe-workspace-apps.ts +2 -2
  337. package/src/secrets/crypto.ts +156 -35
  338. package/src/secrets/storage.ts +64 -26
  339. package/src/server/agent-capabilities.ts +1 -1
  340. package/src/server/agent-chat/action-filters-a2a.ts +113 -7
  341. package/src/server/agent-chat/context-tools.ts +2 -0
  342. package/src/server/agent-chat/plugin-options.ts +34 -1
  343. package/src/server/agent-chat/prompt-resources.ts +1 -1
  344. package/src/server/agent-chat-plugin.ts +91 -59
  345. package/src/templates/default/.agents/skills/secrets/SKILL.md +19 -7
  346. package/src/templates/headless/.agents/skills/secrets/SKILL.md +19 -7
  347. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
  348. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
  349. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +19 -7
  350. package/src/vite/client.ts +1 -0
@@ -4,6 +4,390 @@
4
4
  /** Compiled IIFE string for editor-chrome.bridge.ts — inject into an iframe via srcdoc or a <script> tag. */
5
5
  export const editorChromeBridgeScript: string = `"use strict";
6
6
  (() => {
7
+ // ../../packages/toolkit/dist/canvas-interactions/canvas-interactions.js
8
+ var DEFAULT_CANVAS_DRAG_THRESHOLD = 3;
9
+ var DEFAULT_CANVAS_NUDGE = 1;
10
+ var DEFAULT_CANVAS_ACCELERATED_NUDGE = 10;
11
+ var DEFAULT_CANVAS_MIN_SIZE = 24;
12
+ var DEFAULT_CANVAS_INTERACTION_CAPABILITIES = {
13
+ selection: true,
14
+ multiSelection: false,
15
+ move: true,
16
+ resize: true,
17
+ textEditing: true,
18
+ nudge: true,
19
+ duplicate: true,
20
+ clipboard: true,
21
+ delete: true,
22
+ arrange: true,
23
+ snapping: false,
24
+ alignment: false,
25
+ distribution: false,
26
+ grouping: false,
27
+ rotation: false,
28
+ marquee: false
29
+ };
30
+ var DEFAULT_CANVAS_SHORTCUTS = [
31
+ { command: "select-all", key: "a", modifiers: ["primary"] },
32
+ { command: "undo", key: "z", modifiers: ["primary"] },
33
+ { command: "redo", key: "z", modifiers: ["primary", "shift"] },
34
+ { command: "copy", key: "c", modifiers: ["primary"] },
35
+ { command: "cut", key: "x", modifiers: ["primary"] },
36
+ { command: "paste", key: "v", modifiers: ["primary"] },
37
+ { command: "duplicate", key: "d", modifiers: ["primary"] },
38
+ { command: "delete", key: "Backspace" },
39
+ { command: "delete", key: "Delete" },
40
+ {
41
+ command: "arrange-front",
42
+ key: "]",
43
+ code: "BracketRight",
44
+ modifiers: ["primary", "shift"]
45
+ },
46
+ {
47
+ command: "arrange-back",
48
+ key: "[",
49
+ code: "BracketLeft",
50
+ modifiers: ["primary", "shift"]
51
+ }
52
+ ];
53
+ function primaryModifierIsPressed(modifiers) {
54
+ return Boolean(modifiers.metaKey || modifiers.ctrlKey);
55
+ }
56
+ function hasShortcutModifier(modifier, input) {
57
+ switch (modifier) {
58
+ case "primary":
59
+ return primaryModifierIsPressed(input);
60
+ case "shift":
61
+ return Boolean(input.shiftKey);
62
+ case "alt":
63
+ return Boolean(input.altKey);
64
+ case "ctrl":
65
+ return Boolean(input.ctrlKey);
66
+ case "meta":
67
+ return Boolean(input.metaKey);
68
+ }
69
+ }
70
+ function hasOnlyShortcutModifiers(shortcut, input) {
71
+ const modifiers = new Set(shortcut.modifiers ?? []);
72
+ const expectedPrimary = modifiers.has("primary");
73
+ const expectedCtrl = modifiers.has("ctrl") || expectedPrimary;
74
+ const expectedMeta = modifiers.has("meta") || expectedPrimary;
75
+ return Boolean(input.shiftKey) === modifiers.has("shift") && Boolean(input.altKey) === modifiers.has("alt") && (!input.ctrlKey || expectedCtrl) && (!input.metaKey || expectedMeta) && (!expectedPrimary || primaryModifierIsPressed(input));
76
+ }
77
+ function resolveCanvasTextActivation(input, policy = {}) {
78
+ if (!input.textEditable)
79
+ return "select";
80
+ const activation = policy.activation ?? "double-click";
81
+ return input.clickCount >= (activation === "single-click" ? 1 : 2) ? "edit" : "select";
82
+ }
83
+ function resolveCanvasEscape(input, policy = {}) {
84
+ const selectedObjectIds = input.selectedObjectIds ?? [];
85
+ if (input.editingObjectId === null) {
86
+ return { action: "none", editingObjectId: null, selectedObjectIds };
87
+ }
88
+ if ((policy.escapeBehavior ?? "select-object") === "cancel-edit") {
89
+ return { action: "cancel-edit", editingObjectId: null, selectedObjectIds };
90
+ }
91
+ if ((policy.escapeBehavior ?? "select-object") === "clear-selection") {
92
+ return {
93
+ action: "clear-selection",
94
+ editingObjectId: null,
95
+ selectedObjectIds: []
96
+ };
97
+ }
98
+ return {
99
+ action: "select-object",
100
+ editingObjectId: null,
101
+ selectedObjectIds: [input.editingObjectId]
102
+ };
103
+ }
104
+ function clientPointToCanvasPoint(point, viewport, canvas) {
105
+ if (viewport.width <= 0 || viewport.height <= 0)
106
+ return { x: 0, y: 0 };
107
+ return {
108
+ x: (point.x - viewport.left) / viewport.width * canvas.width,
109
+ y: (point.y - viewport.top) / viewport.height * canvas.height
110
+ };
111
+ }
112
+ function clientDeltaToCanvasDelta(delta, viewport, canvas) {
113
+ if (viewport.width <= 0 || viewport.height <= 0)
114
+ return { x: 0, y: 0 };
115
+ return {
116
+ x: delta.x / viewport.width * canvas.width,
117
+ y: delta.y / viewport.height * canvas.height
118
+ };
119
+ }
120
+ function hasCrossedCanvasDragThreshold(start, current, threshold = DEFAULT_CANVAS_DRAG_THRESHOLD) {
121
+ const dx = current.x - start.x;
122
+ const dy = current.y - start.y;
123
+ return dx * dx + dy * dy >= threshold * threshold;
124
+ }
125
+ function constrainCanvasDragDelta(delta, lockAxis = false) {
126
+ if (!lockAxis)
127
+ return delta;
128
+ return Math.abs(delta.x) >= Math.abs(delta.y) ? { x: delta.x, y: 0 } : { x: 0, y: delta.y };
129
+ }
130
+ function resizeCanvasRect(start, input) {
131
+ const fromWest = input.handle === "nw" || input.handle === "w" || input.handle === "sw";
132
+ const fromEast = input.handle === "ne" || input.handle === "e" || input.handle === "se";
133
+ const fromNorth = input.handle === "nw" || input.handle === "n" || input.handle === "ne";
134
+ const fromSouth = input.handle === "sw" || input.handle === "s" || input.handle === "se";
135
+ const resizesHorizontally = fromWest || fromEast;
136
+ const resizesVertically = fromNorth || fromSouth;
137
+ let width = start.width + (fromWest ? -input.delta.x : fromEast ? input.delta.x : 0);
138
+ let height = start.height + (fromNorth ? -input.delta.y : fromSouth ? input.delta.y : 0);
139
+ const minWidth = input.minWidth ?? DEFAULT_CANVAS_MIN_SIZE;
140
+ const minHeight = input.minHeight ?? DEFAULT_CANVAS_MIN_SIZE;
141
+ if (input.preserveAspectRatio && resizesHorizontally && resizesVertically && start.width > 0 && start.height > 0) {
142
+ const horizontalScale = width / start.width;
143
+ const verticalScale = height / start.height;
144
+ const scale = Math.abs(horizontalScale - 1) >= Math.abs(verticalScale - 1) ? horizontalScale : verticalScale;
145
+ const minScale = Math.max(minWidth / start.width, minHeight / start.height);
146
+ width = start.width * Math.max(minScale, scale);
147
+ height = start.height * Math.max(minScale, scale);
148
+ }
149
+ width = Math.max(minWidth, width);
150
+ height = Math.max(minHeight, height);
151
+ return {
152
+ x: fromWest ? start.x + start.width - width : start.x,
153
+ y: fromNorth ? start.y + start.height - height : start.y,
154
+ width,
155
+ height
156
+ };
157
+ }
158
+ function shouldDuplicateCanvasDrag(modifiers, duplicateModifier = "alt") {
159
+ switch (duplicateModifier) {
160
+ case "alt":
161
+ return Boolean(modifiers.altKey);
162
+ case "meta":
163
+ return Boolean(modifiers.metaKey);
164
+ case "ctrl":
165
+ return Boolean(modifiers.ctrlKey);
166
+ case "none":
167
+ return false;
168
+ }
169
+ }
170
+ function resolveCanvasNudge(input, policy = {}) {
171
+ const amount = input.shiftKey ? policy.acceleratedAmount ?? DEFAULT_CANVAS_ACCELERATED_NUDGE : policy.amount ?? DEFAULT_CANVAS_NUDGE;
172
+ switch (input.key) {
173
+ case "ArrowLeft":
174
+ return { command: "nudge-left", delta: { x: -amount, y: 0 } };
175
+ case "ArrowRight":
176
+ return { command: "nudge-right", delta: { x: amount, y: 0 } };
177
+ case "ArrowUp":
178
+ return { command: "nudge-up", delta: { x: 0, y: -amount } };
179
+ case "ArrowDown":
180
+ return { command: "nudge-down", delta: { x: 0, y: amount } };
181
+ default:
182
+ return null;
183
+ }
184
+ }
185
+ function resolveCanvasShortcut(input, shortcuts = DEFAULT_CANVAS_SHORTCUTS) {
186
+ const normalizedKey = input.key.toLowerCase();
187
+ const shortcut = shortcuts.find((candidate) => (candidate.key.toLowerCase() === normalizedKey || candidate.code !== void 0 && candidate.code === input.code) && (candidate.modifiers ?? []).every((modifier) => hasShortcutModifier(modifier, input)) && hasOnlyShortcutModifiers(candidate, input));
188
+ return shortcut?.command ?? null;
189
+ }
190
+ function createCanvasShortcutRegistry(shortcuts = DEFAULT_CANVAS_SHORTCUTS) {
191
+ return {
192
+ shortcuts,
193
+ resolve: (input) => resolveCanvasShortcut(input, shortcuts)
194
+ };
195
+ }
196
+ function createCanvasInteractionCore(config = {}, adapter) {
197
+ const textEditing = config.textEditing ?? {};
198
+ const capabilities = {
199
+ ...DEFAULT_CANVAS_INTERACTION_CAPABILITIES,
200
+ ...adapter?.capabilities,
201
+ ...config.capabilities
202
+ };
203
+ const drag = config.drag ?? {};
204
+ const nudge = config.nudge ?? {};
205
+ const shortcuts = createCanvasShortcutRegistry(config.shortcuts);
206
+ const supportsCommand = (command) => {
207
+ switch (command.id) {
208
+ case "copy":
209
+ case "cut":
210
+ case "paste":
211
+ return capabilities.clipboard;
212
+ case "duplicate":
213
+ return capabilities.duplicate;
214
+ case "delete":
215
+ return capabilities.delete;
216
+ case "nudge":
217
+ case "nudge-left":
218
+ case "nudge-right":
219
+ case "nudge-up":
220
+ case "nudge-down":
221
+ return capabilities.nudge;
222
+ case "arrange-front":
223
+ case "arrange-back":
224
+ case "bring-forward":
225
+ case "bring-to-front":
226
+ case "send-backward":
227
+ case "send-to-back":
228
+ return capabilities.arrange;
229
+ case "align-left":
230
+ case "align-center":
231
+ case "align-right":
232
+ case "align-top":
233
+ case "align-middle":
234
+ case "align-bottom":
235
+ return capabilities.alignment;
236
+ case "distribute-horizontal":
237
+ case "distribute-vertical":
238
+ return capabilities.distribution;
239
+ case "group":
240
+ case "ungroup":
241
+ return capabilities.grouping;
242
+ case "frame-selection":
243
+ return capabilities.selection;
244
+ default:
245
+ return true;
246
+ }
247
+ };
248
+ return {
249
+ capabilities,
250
+ textActivation: (input) => capabilities.textEditing ? resolveCanvasTextActivation(input, textEditing) : "select",
251
+ escape: (input) => resolveCanvasEscape(input, textEditing),
252
+ clientPointToCanvas: (point, viewport, canvas) => clientPointToCanvasPoint(point, viewport, canvas),
253
+ clientDeltaToCanvas: (delta, viewport, canvas) => clientDeltaToCanvasDelta(delta, viewport, canvas),
254
+ hasCrossedDragThreshold: (start, current) => hasCrossedCanvasDragThreshold(start, current, drag.threshold),
255
+ constrainDrag: (delta, modifiers = {}) => constrainCanvasDragDelta(delta, Boolean(modifiers.shiftKey)),
256
+ resize: (start, input) => resizeCanvasRect(start, {
257
+ ...input,
258
+ minWidth: input.minWidth ?? config.minSize,
259
+ minHeight: input.minHeight ?? config.minSize
260
+ }),
261
+ shouldDuplicateDrag: (modifiers) => capabilities.duplicate && shouldDuplicateCanvasDrag(modifiers, drag.duplicateModifier),
262
+ nudge: (input) => capabilities.nudge ? resolveCanvasNudge(input, nudge) : null,
263
+ shortcut: (input) => shortcuts.resolve(input),
264
+ dispatch: (command) => {
265
+ if (!adapter)
266
+ return { handled: false, reason: "no-adapter" };
267
+ if (!supportsCommand(command)) {
268
+ return { handled: false, reason: "unsupported" };
269
+ }
270
+ return adapter.dispatch(command);
271
+ }
272
+ };
273
+ }
274
+ function createCanvasGestureController(config) {
275
+ const core = createCanvasInteractionCore(config);
276
+ let start = null;
277
+ let activeGesture = null;
278
+ const state = () => ({
279
+ phase: activeGesture ? "active" : start ? "pending" : "idle",
280
+ gesture: activeGesture
281
+ });
282
+ const canStart = (kind) => kind === "move" ? core.capabilities.move : core.capabilities.resize;
283
+ const buildGesture = (gestureStart, pointer) => {
284
+ const clientDelta = {
285
+ x: pointer.x - gestureStart.pointer.x,
286
+ y: pointer.y - gestureStart.pointer.y
287
+ };
288
+ const convertedDelta = clientDeltaToCanvasDelta(clientDelta, gestureStart.viewport, gestureStart.canvas);
289
+ const duplicate = gestureStart.kind === "move" && core.capabilities.duplicate ? core.shouldDuplicateDrag(gestureStart.pointer) && core.shouldDuplicateDrag(pointer) : false;
290
+ if (gestureStart.kind === "move") {
291
+ return {
292
+ kind: "move",
293
+ objectIds: gestureStart.objectIds,
294
+ startPointer: gestureStart.pointer,
295
+ pointer,
296
+ clientDelta,
297
+ canvasDelta: core.constrainDrag(convertedDelta, pointer),
298
+ duplicate
299
+ };
300
+ }
301
+ return {
302
+ kind: "resize",
303
+ objectIds: gestureStart.objectIds,
304
+ startPointer: gestureStart.pointer,
305
+ pointer,
306
+ clientDelta,
307
+ canvasDelta: convertedDelta,
308
+ duplicate: false,
309
+ handle: gestureStart.handle,
310
+ startRect: gestureStart.rect,
311
+ rect: core.resize(gestureStart.rect, {
312
+ handle: gestureStart.handle,
313
+ delta: convertedDelta,
314
+ preserveAspectRatio: Boolean(pointer.shiftKey)
315
+ })
316
+ };
317
+ };
318
+ const preview = (gesture) => {
319
+ activeGesture = gesture;
320
+ return {
321
+ phase: "active",
322
+ gesture,
323
+ preview: config.adapter.preview?.(gesture) ?? null,
324
+ state: state()
325
+ };
326
+ };
327
+ const update = (pointer) => {
328
+ if (!start)
329
+ return { phase: "idle", state: state() };
330
+ if (!activeGesture) {
331
+ const crossedThreshold = core.hasCrossedDragThreshold(start.pointer, pointer);
332
+ if (!crossedThreshold)
333
+ return { phase: "pending", state: state() };
334
+ }
335
+ return preview(buildGesture(start, pointer));
336
+ };
337
+ const hasSamePointerState = (first, second) => first.x === second.x && first.y === second.y && Boolean(first.altKey) === Boolean(second.altKey) && Boolean(first.ctrlKey) === Boolean(second.ctrlKey) && Boolean(first.metaKey) === Boolean(second.metaKey) && Boolean(first.shiftKey) === Boolean(second.shiftKey);
338
+ return {
339
+ capabilities: core.capabilities,
340
+ getState: state,
341
+ pointerDown: (gestureStart) => {
342
+ if (start) {
343
+ return { accepted: false, reason: "already-active", state: state() };
344
+ }
345
+ if (!canStart(gestureStart.kind)) {
346
+ return { accepted: false, reason: "unsupported", state: state() };
347
+ }
348
+ if (gestureStart.kind === "resize" && (gestureStart.rect.width <= 0 || gestureStart.rect.height <= 0)) {
349
+ return { accepted: false, reason: "invalid-resize", state: state() };
350
+ }
351
+ start = gestureStart;
352
+ return { accepted: true, state: state() };
353
+ },
354
+ pointerMove: update,
355
+ pointerUp: (pointer) => {
356
+ const shouldUpdate = activeGesture === null || !hasSamePointerState(activeGesture.pointer, pointer);
357
+ const beforeEnd = shouldUpdate ? update(pointer) : { phase: "active", state: state() };
358
+ const gesture = activeGesture;
359
+ start = null;
360
+ activeGesture = null;
361
+ if (!gesture) {
362
+ return {
363
+ committed: false,
364
+ reason: beforeEnd.phase === "idle" ? "idle" : "below-threshold",
365
+ state: state()
366
+ };
367
+ }
368
+ return {
369
+ committed: true,
370
+ gesture,
371
+ result: config.adapter.commit(gesture),
372
+ state: state()
373
+ };
374
+ },
375
+ cancel: () => {
376
+ const gesture = activeGesture;
377
+ start = null;
378
+ activeGesture = null;
379
+ if (!gesture)
380
+ return { cancelled: false, reason: "idle", state: state() };
381
+ return {
382
+ cancelled: true,
383
+ gesture,
384
+ result: config.adapter.cancel?.(gesture) ?? null,
385
+ state: state()
386
+ };
387
+ }
388
+ };
389
+ }
390
+
7
391
  // app/components/design/bridge/editor-chrome.bridge.ts
8
392
  (function() {
9
393
  if (window.__anEditorChromeBridge) return;
@@ -3287,6 +3671,27 @@ export const editorChromeBridgeScript: string = `"use strict";
3287
3671
  var pointerGesture = e && e.type && e.type.indexOf("pointer") === 0;
3288
3672
  return pointerGesture ? { move: "pointermove", up: "pointerup" } : { move: "mousemove", up: "mouseup" };
3289
3673
  }
3674
+ function bridgeGestureViewport() {
3675
+ var width = Math.max(
3676
+ 1,
3677
+ window.innerWidth || document.documentElement.clientWidth || 1
3678
+ );
3679
+ var height = Math.max(
3680
+ 1,
3681
+ window.innerHeight || document.documentElement.clientHeight || 1
3682
+ );
3683
+ return { left: 0, top: 0, width, height };
3684
+ }
3685
+ function bridgeGesturePointer(e) {
3686
+ return {
3687
+ x: e.clientX,
3688
+ y: e.clientY,
3689
+ altKey: !!e.altKey,
3690
+ ctrlKey: !!e.ctrlKey,
3691
+ metaKey: !!e.metaKey,
3692
+ shiftKey: !!e.shiftKey
3693
+ };
3694
+ }
3290
3695
  function elementFromEditorPoint(clientX, clientY) {
3291
3696
  lastEditorPointWasBlocked = false;
3292
3697
  var shieldPointerEvents = shieldOverlay.style.pointerEvents;
@@ -6529,8 +6934,42 @@ export const editorChromeBridgeScript: string = `"use strict";
6529
6934
  var startX = e.clientX;
6530
6935
  var startY = e.clientY;
6531
6936
  var dragEl = gestureEl;
6532
- var moved = false;
6937
+ var gestureViewport = bridgeGestureViewport();
6533
6938
  var DRAG_THRESHOLD = 3;
6939
+ var bridgeMoveController = createCanvasGestureController({
6940
+ capabilities: { move: true, resize: true },
6941
+ drag: {
6942
+ // Shield drags already crossed the outer threshold before reaching
6943
+ // startMove. Keeping their controller threshold at zero preserves the
6944
+ // first post-shield delta, while direct selection-chrome drags still
6945
+ // need a real threshold before they preview or persist.
6946
+ threshold: pointerStartParam ? 0 : DRAG_THRESHOLD,
6947
+ duplicateModifier: "alt"
6948
+ },
6949
+ adapter: {
6950
+ preview: function() {
6951
+ return { handled: true };
6952
+ },
6953
+ commit: function() {
6954
+ return { handled: true };
6955
+ },
6956
+ cancel: function() {
6957
+ return { handled: true };
6958
+ }
6959
+ }
6960
+ });
6961
+ bridgeMoveController.pointerDown({
6962
+ kind: "move",
6963
+ objectIds: [getSelector(gestureEl)],
6964
+ // \`e\` is deliberately the event that actually began the legacy move
6965
+ // lifecycle. \`pointerStartParam\` is only Design's outer shield
6966
+ // disambiguation origin; using it here would apply that first
6967
+ // threshold-crossing delta twice.
6968
+ pointer: bridgeGesturePointer(e),
6969
+ viewport: gestureViewport,
6970
+ canvas: { width: gestureViewport.width, height: gestureViewport.height }
6971
+ });
6972
+ var moved = false;
6534
6973
  dndLog("start:free", { el: getSelector(gestureEl), isGroup: isGroupDrag });
6535
6974
  var currentAutoLayoutTarget = null;
6536
6975
  var snapCandidateRects = collectSnapCandidateRects(dragEl, groupOthers);
@@ -6558,18 +6997,15 @@ export const editorChromeBridgeScript: string = `"use strict";
6558
6997
  window.requestAnimationFrame(flushCrossScreenDragMove);
6559
6998
  }
6560
6999
  function onMove(ev) {
7000
+ var controllerMove = bridgeMoveController.pointerMove(
7001
+ bridgeGesturePointer(ev)
7002
+ );
7003
+ if (controllerMove.phase !== "active") return;
6561
7004
  if (!moved && Math.hypot(ev.clientX - startX, ev.clientY - startY) > DRAG_THRESHOLD) {
6562
7005
  moved = true;
6563
7006
  }
6564
- var rawDx = ev.clientX - startX;
6565
- var rawDy = ev.clientY - startY;
6566
- if (ev.shiftKey) {
6567
- if (Math.abs(rawDx) > Math.abs(rawDy)) {
6568
- rawDy = 0;
6569
- } else {
6570
- rawDx = 0;
6571
- }
6572
- }
7007
+ var rawDx = controllerMove.gesture.canvasDelta.x;
7008
+ var rawDy = controllerMove.gesture.canvasDelta.y;
6573
7009
  var nextLeft = originLeft + rawDx;
6574
7010
  var nextTop = originTop + rawDy;
6575
7011
  var snapBypass = Boolean(ev.metaKey || ev.ctrlKey);
@@ -6650,6 +7086,7 @@ export const editorChromeBridgeScript: string = `"use strict";
6650
7086
  crossScreenDragMovePendingEv = null;
6651
7087
  }
6652
7088
  function cancelMoveDrag() {
7089
+ bridgeMoveController.cancel();
6653
7090
  cleanupMoveDrag();
6654
7091
  hideTransformBadge();
6655
7092
  hideInsertionGuide();
@@ -6676,6 +7113,16 @@ export const editorChromeBridgeScript: string = `"use strict";
6676
7113
  cancelMoveDrag();
6677
7114
  }
6678
7115
  function onUp(ev) {
7116
+ var controllerEnd = bridgeMoveController.pointerUp(
7117
+ bridgeGesturePointer(ev)
7118
+ );
7119
+ if (!controllerEnd.committed) {
7120
+ cleanupMoveDrag();
7121
+ hideTransformBadge();
7122
+ hideInsertionGuide();
7123
+ hideSnapGuides();
7124
+ return;
7125
+ }
6679
7126
  cleanupMoveDrag();
6680
7127
  hideTransformBadge();
6681
7128
  hideInsertionGuide();
@@ -6810,6 +7257,41 @@ export const editorChromeBridgeScript: string = `"use strict";
6810
7257
  var startX = e.clientX;
6811
7258
  var startY = e.clientY;
6812
7259
  var resizeTheta = currentRotation(resizeEl) * Math.PI / 180;
7260
+ var resizeGestureViewport = bridgeGestureViewport();
7261
+ var RESIZE_DRAG_THRESHOLD = 3;
7262
+ var bridgeResizeController = createCanvasGestureController({
7263
+ capabilities: { move: true, resize: true },
7264
+ drag: { threshold: RESIZE_DRAG_THRESHOLD, duplicateModifier: "alt" },
7265
+ minSize: 8,
7266
+ adapter: {
7267
+ preview: function() {
7268
+ return { handled: true };
7269
+ },
7270
+ commit: function() {
7271
+ return { handled: true };
7272
+ },
7273
+ cancel: function() {
7274
+ return { handled: true };
7275
+ }
7276
+ }
7277
+ });
7278
+ bridgeResizeController.pointerDown({
7279
+ kind: "resize",
7280
+ objectIds: [getSelector(resizeEl)],
7281
+ pointer: bridgeGesturePointer(e),
7282
+ viewport: resizeGestureViewport,
7283
+ canvas: {
7284
+ width: resizeGestureViewport.width,
7285
+ height: resizeGestureViewport.height
7286
+ },
7287
+ handle,
7288
+ rect: {
7289
+ x: origin.left,
7290
+ y: origin.top,
7291
+ width: origin.width,
7292
+ height: origin.height
7293
+ }
7294
+ });
6813
7295
  var widthTouched = false;
6814
7296
  var heightTouched = false;
6815
7297
  function nextRect(ev) {
@@ -6889,6 +7371,10 @@ export const editorChromeBridgeScript: string = `"use strict";
6889
7371
  };
6890
7372
  }
6891
7373
  function onMove(ev) {
7374
+ var controllerMove = bridgeResizeController.pointerMove(
7375
+ bridgeGesturePointer(ev)
7376
+ );
7377
+ if (controllerMove.phase !== "active") return;
6892
7378
  if (!resizeEl) return;
6893
7379
  var rect = nextRect(ev);
6894
7380
  if (rect.touchesWidth) widthTouched = true;
@@ -6923,6 +7409,7 @@ export const editorChromeBridgeScript: string = `"use strict";
6923
7409
  clearActiveDragCancel(cancelResizeDrag);
6924
7410
  }
6925
7411
  function cancelResizeDrag() {
7412
+ bridgeResizeController.cancel();
6926
7413
  cleanupResizeDrag();
6927
7414
  hideTransformBadge();
6928
7415
  if (resizeEl && document.documentElement.contains(resizeEl)) {
@@ -6945,7 +7432,15 @@ export const editorChromeBridgeScript: string = `"use strict";
6945
7432
  stopNativeInteraction(ev);
6946
7433
  cancelResizeDrag();
6947
7434
  }
6948
- function onUp() {
7435
+ function onUp(ev) {
7436
+ var controllerEnd = bridgeResizeController.pointerUp(
7437
+ bridgeGesturePointer(ev)
7438
+ );
7439
+ if (!controllerEnd.committed) {
7440
+ cleanupResizeDrag();
7441
+ hideTransformBadge();
7442
+ return;
7443
+ }
6949
7444
  cleanupResizeDrag();
6950
7445
  hideTransformBadge();
6951
7446
  if (!resizeEl) return;