@agent-native/core 0.169.0 → 0.170.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 (496) hide show
  1. package/agent-native.eject.json +4 -1
  2. package/bin/agent-native.js +23 -5
  3. package/corpus/README.md +1 -1
  4. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +11 -4
  5. package/corpus/templates/analytics/actions/bigquery-table-info.ts +3 -2
  6. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
  7. package/corpus/templates/analytics/actions/search-bigquery-schema.ts +130 -4
  8. package/corpus/templates/analytics/agent-native.config.ts +1 -0
  9. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +36 -23
  10. package/corpus/templates/analytics/app/i18n-data.ts +28 -0
  11. package/corpus/templates/analytics/app/lib/dashboard-visibility.ts +41 -0
  12. package/corpus/templates/analytics/app/pages/Agents.tsx +25 -1
  13. package/corpus/templates/analytics/app/pages/DashboardOverview.tsx +34 -9
  14. package/corpus/templates/analytics/app/routes/$.tsx +10 -0
  15. package/corpus/templates/analytics/app/routes.ts +3 -1
  16. package/corpus/templates/analytics/changelog/2026-08-21-dashboard-filters-keep-other-users-dashboards-out-of-mine.md +6 -0
  17. package/corpus/templates/analytics/changelog/2026-08-22-fixed-the-agent-native-templates-first-party-dashboard-panel.md +6 -0
  18. package/corpus/templates/analytics/changelog/2026-08-22-org-admin-panels-no-longer-report-a-database-error-as-a-per.md +9 -0
  19. package/corpus/templates/analytics/changelog/2026-08-22-slack-requests-report-invalid-inputs.md +6 -0
  20. package/corpus/templates/analytics/changelog/2026-08-22-unknown-analytics-links-now-return-a-real-not-found-status.md +6 -0
  21. package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +2 -1
  22. package/corpus/templates/analytics/docs/schemas/tracked-events.md +2 -0
  23. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +29 -7
  24. package/corpus/templates/analytics/server/handlers/slack.ts +59 -5
  25. package/corpus/templates/analytics/server/lib/db-admin-connections.ts +11 -6
  26. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +132 -2
  27. package/corpus/templates/analytics/server/lib/real-data-actions.ts +14 -3
  28. package/corpus/templates/analytics/server/lib/slack.ts +4 -2
  29. package/corpus/templates/analytics/server/plugins/agent-chat.ts +33 -3
  30. package/corpus/templates/analytics/vitest.config.ts +6 -1
  31. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +11 -4
  32. package/corpus/templates/assets/app/routes/library.tsx +5 -3
  33. package/corpus/templates/assets/app/routes.ts +3 -1
  34. package/corpus/templates/assets/changelog/2026-08-22-library-page-loads-again-instead-of-crashing-on-open.md +6 -0
  35. package/corpus/templates/assets/vitest.config.ts +6 -1
  36. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +11 -4
  37. package/corpus/templates/brain/app/components/ui/pointer-lock.ts +1 -0
  38. package/corpus/templates/brain/app/routes/sources.tsx +8 -3
  39. package/corpus/templates/brain/changelog/2026-08-22-tuning-or-adding-a-source-no-longer-leaves-the-sources-page.md +6 -0
  40. package/corpus/templates/brain/server/lib/brain.ts +27 -2
  41. package/corpus/templates/brain/vitest.config.ts +1 -0
  42. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +11 -4
  43. package/corpus/templates/calendar/actions/list-booking-links.ts +83 -4
  44. package/corpus/templates/calendar/actions/update-booking-link.ts +4 -3
  45. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +11 -3
  46. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +1 -1
  47. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +103 -44
  48. package/corpus/templates/calendar/app/components/calendar/OutOfOfficeEvent.tsx +28 -24
  49. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +9 -2
  50. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +47 -58
  51. package/corpus/templates/calendar/app/hooks/use-booking-links.ts +5 -1
  52. package/corpus/templates/calendar/app/lib/event-layout.ts +52 -26
  53. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +126 -98
  54. package/corpus/templates/calendar/app/pages/CalendarView.tsx +1 -0
  55. package/corpus/templates/calendar/app/pages/Settings.tsx +88 -81
  56. package/corpus/templates/calendar/app/routes.ts +3 -1
  57. package/corpus/templates/calendar/changelog/2026-08-22-booking-link-visibility-respects-shared-access.md +6 -0
  58. package/corpus/templates/calendar/changelog/2026-08-22-clicking-an-out-of-office-event-s-marker-no-longer-creates-a.md +6 -0
  59. package/corpus/templates/calendar/changelog/2026-08-22-event-detail-views-now-show-your-calendar-timezone.md +6 -0
  60. package/corpus/templates/calendar/changelog/2026-08-22-google-calendar-can-now-connect-with-the-shared-google-oauth.md +6 -0
  61. package/corpus/templates/calendar/changelog/2026-08-22-overlapping-events-now-show-each-others-boundaries.md +6 -0
  62. package/corpus/templates/calendar/changelog/2026-08-22-public-booking-pages-now-offer-time-slots-from-the-host-s-we.md +6 -0
  63. package/corpus/templates/calendar/server/handlers/bookings.ts +5 -7
  64. package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -2
  65. package/corpus/templates/calendar/server/lib/google-calendar.ts +139 -14
  66. package/corpus/templates/calendar/server/onboarding.ts +85 -0
  67. package/corpus/templates/calendar/server/plugins/agent-chat.ts +2 -0
  68. package/corpus/templates/calendar/shared/api.ts +9 -1
  69. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  70. package/corpus/templates/chat/app/routes.ts +3 -1
  71. package/corpus/templates/chat/vitest.config.ts +8 -0
  72. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +11 -4
  73. package/corpus/templates/clips/actions/get-meeting.ts +9 -4
  74. package/corpus/templates/clips/actions/list-recordings.ts +16 -3
  75. package/corpus/templates/clips/actions/search-meetings.ts +1 -0
  76. package/corpus/templates/clips/actions/stop-meeting-recording.ts +87 -6
  77. package/corpus/templates/clips/actions/view-screen.ts +8 -1
  78. package/corpus/templates/clips/app/components/library/search-bar.tsx +1 -1
  79. package/corpus/templates/clips/app/components/meetings/meeting-history-row.tsx +32 -1
  80. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +1 -1
  81. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +29 -1
  82. package/corpus/templates/clips/app/i18n/en-US.ts +5 -0
  83. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +33 -4
  84. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +1 -0
  85. package/corpus/templates/clips/app/routes/access-request.approve.tsx +16 -9
  86. package/corpus/templates/clips/app/routes/embed.$shareId.tsx +17 -7
  87. package/corpus/templates/clips/app/routes/share.$shareId.tsx +17 -7
  88. package/corpus/templates/clips/changelog/2026-08-21-camera-bubble-black-circle.md +6 -0
  89. package/corpus/templates/clips/changelog/2026-08-22-screen-recordings-respect-the-microphone-toggle.md +6 -0
  90. package/corpus/templates/clips/changelog/2026-08-22-the-recordings-library-no-longer-fails-right-after-server-start.md +6 -0
  91. package/corpus/templates/clips/changelog/2026-08-23-the-agent-can-see-your-library-right-after-server-start.md +6 -0
  92. package/corpus/templates/clips/chrome-extension/src/background.ts +1 -2
  93. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +39 -7
  94. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +21 -25
  95. package/corpus/templates/clips/desktop/src/app.tsx +53 -24
  96. package/corpus/templates/clips/desktop/src/lib/bubble-playback.ts +68 -0
  97. package/corpus/templates/clips/desktop/src/lib/recorder.ts +3 -0
  98. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +72 -14
  99. package/corpus/templates/clips/desktop/src/lib/updater.ts +8 -3
  100. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +162 -20
  101. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +43 -6
  102. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +150 -13
  103. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +12 -0
  104. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +28 -3
  105. package/corpus/templates/clips/server/lib/emails.ts +17 -33
  106. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +11 -4
  107. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +140 -15
  108. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +12 -14
  109. package/corpus/templates/content/app/components/ui/pointer-lock.ts +1 -0
  110. package/corpus/templates/content/app/hooks/use-content-database.ts +18 -2
  111. package/corpus/templates/content/app/hooks/use-local-storage.ts +38 -22
  112. package/corpus/templates/content/app/i18n-data.ts +25 -0
  113. package/corpus/templates/content/app/routes.ts +3 -1
  114. package/corpus/templates/content/changelog/2026-08-22-code-blocks-inserted-from-the-slash-menu-no-longer-get-stuck.md +6 -0
  115. package/corpus/templates/content/changelog/2026-08-22-the-sidebar-page-tree-no-longer-flashes-empty-after-creating-a-page.md +6 -0
  116. package/corpus/templates/content/docs/solutions/2026-08-21-content-mermaid-rendering-shape.md +233 -0
  117. package/corpus/templates/content/server/plugins/agent-chat.ts +9 -2
  118. package/corpus/templates/content/vitest.config.ts +7 -1
  119. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +11 -4
  120. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +11 -4
  121. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1386 -92
  122. package/corpus/templates/design/actions/generate-design.ts +98 -47
  123. package/corpus/templates/design/actions/get-design-system.ts +6 -1
  124. package/corpus/templates/design/actions/refresh-design-system-with-builder.ts +146 -0
  125. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +70 -26
  126. package/corpus/templates/design/app/components/design/EditPanel.tsx +15 -47
  127. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +284 -136
  128. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2060 -144
  129. package/corpus/templates/design/app/components/design/editor/DesignBottomToolbar.tsx +6 -2
  130. package/corpus/templates/design/app/components/design/editor/DesignWorkspaceRail.tsx +4 -4
  131. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +10 -8
  132. package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +19 -2
  133. package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -2
  134. package/corpus/templates/design/app/components/layout/Header.tsx +15 -0
  135. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -2
  136. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +13 -8
  137. package/corpus/templates/design/app/i18n-data.ts +11 -10
  138. package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +12 -0
  139. package/corpus/templates/design/app/lib/design-system-data.ts +68 -0
  140. package/corpus/templates/design/app/pages/DesignEditor.tsx +99 -57
  141. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +39 -8
  142. package/corpus/templates/design/app/pages/DesignSystems.tsx +137 -43
  143. package/corpus/templates/design/app/pages/Index.tsx +3 -1
  144. package/corpus/templates/design/app/pages/Templates.tsx +0 -10
  145. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +10 -0
  146. package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +50 -0
  147. package/corpus/templates/design/app/pages/design-editor/commands/apply-design-editor-command.ts +1 -1
  148. package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +10 -8
  149. package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +6 -6
  150. package/corpus/templates/design/app/pages/design-editor/commands/apply-pending-visual-styles-with-agent.ts +1 -1
  151. package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +18 -7
  152. package/corpus/templates/design/app/pages/design-editor/commands/escape-hotkey.ts +4 -90
  153. package/corpus/templates/design/app/pages/design-editor/commands/layer-marquee-selection-change.ts +2 -1
  154. package/corpus/templates/design/app/pages/design-editor/commands/layer-selection-change.ts +4 -3
  155. package/corpus/templates/design/app/pages/design-editor/commands/screen-element-select.ts +12 -2
  156. package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-style-change.ts +9 -2
  157. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-move-semantic-handoff.ts +1 -1
  158. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-semantic-handoff.ts +1 -1
  159. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-state-semantic-handoff.ts +1 -1
  160. package/corpus/templates/design/app/pages/design-editor/commands/start-sidebar-resize.ts +1 -1
  161. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +11 -1
  162. package/corpus/templates/design/app/pages/design-editor/effects/adopt-db-file-content.ts +11 -19
  163. package/corpus/templates/design/app/pages/design-editor/effects/observe-collab-text.ts +6 -6
  164. package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +1 -1
  165. package/corpus/templates/design/app/pages/design-editor/effects/seed-collab-content.ts +12 -15
  166. package/corpus/templates/design/app/pages/design-editor/preview-navigation.ts +25 -0
  167. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +5 -59
  168. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +8 -0
  169. package/corpus/templates/design/app/pages/design-editor/types.ts +3 -3
  170. package/corpus/templates/design/app/routes.ts +3 -1
  171. package/corpus/templates/design/changelog/2026-08-20-canvas-edits-patch-the-frame-instead-of-rebuilding-it.md +6 -0
  172. package/corpus/templates/design/changelog/2026-08-21-builder-design-system-imports-reconcile-after-indexing.md +6 -0
  173. package/corpus/templates/design/changelog/2026-08-21-draw-mode-needs-shift-y.md +6 -0
  174. package/corpus/templates/design/changelog/2026-08-21-eyedropper-shortcut.md +6 -0
  175. package/corpus/templates/design/changelog/2026-08-21-figma-style-alignment-guides-and-snapping.md +6 -0
  176. package/corpus/templates/design/changelog/2026-08-21-group-transforms-keep-the-selection.md +6 -0
  177. package/corpus/templates/design/changelog/2026-08-21-inspector-fields-keep-focus-on-enter.md +6 -0
  178. package/corpus/templates/design/changelog/2026-08-21-pen-alt-keeps-the-incoming-handle.md +6 -0
  179. package/corpus/templates/design/changelog/2026-08-21-pen-on-the-board-creates-one-vector.md +6 -0
  180. package/corpus/templates/design/changelog/2026-08-21-scale-a-multi-selection-from-the-group-handles.md +6 -0
  181. package/corpus/templates/design/changelog/2026-08-21-scale-resizes-text-with-the-object.md +6 -0
  182. package/corpus/templates/design/changelog/2026-08-21-selecting-another-object-keeps-the-scale-tool-armed.md +6 -0
  183. package/corpus/templates/design/changelog/2026-08-21-the-shape-tool-remembers-the-shape-you-picked.md +6 -0
  184. package/corpus/templates/design/changelog/2026-08-21-vectors-drawn-in-a-frame-land-where-you-drew-them.md +6 -0
  185. package/corpus/templates/design/changelog/2026-08-22-multi-screen-generation-no-longer-loses-a-saved-screens-layo.md +6 -0
  186. package/corpus/templates/design/changelog/2026-08-22-rename-and-search-fields-are-labeled-for-screen-readers.md +6 -0
  187. package/corpus/templates/design/package.json +2 -0
  188. package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +311 -0
  189. package/corpus/templates/design/shared/canvas-math.ts +612 -206
  190. package/corpus/templates/design/shared/pen-path.ts +37 -0
  191. package/corpus/templates/design/vitest.config.ts +7 -1
  192. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +11 -4
  193. package/corpus/templates/dispatch/actions/list-workspace-connections.ts +34 -3
  194. package/corpus/templates/dispatch/app/routes/integrations.tsx +55 -21
  195. package/corpus/templates/dispatch/app/routes.ts +3 -1
  196. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +11 -4
  197. package/corpus/templates/factory/.env.example +2 -7
  198. package/corpus/templates/factory/AGENTS.md +3 -0
  199. package/corpus/templates/factory/README.md +5 -3
  200. package/corpus/templates/factory/actions/create-factory.ts +16 -3
  201. package/corpus/templates/factory/actions/get-slack-feedback-context.ts +2 -0
  202. package/corpus/templates/factory/actions/get-triage-item.ts +2 -0
  203. package/corpus/templates/factory/actions/list-factory-audit.ts +116 -36
  204. package/corpus/templates/factory/actions/list-factory-automations.ts +2 -1
  205. package/corpus/templates/factory/actions/list-triage-items.ts +22 -19
  206. package/corpus/templates/factory/actions/run-factory-automation.ts +7 -3
  207. package/corpus/templates/factory/actions/save-factory-automation.ts +5 -2
  208. package/corpus/templates/factory/actions/save-triage-config.ts +2 -8
  209. package/corpus/templates/factory/actions/start-builder-for-item.ts +21 -0
  210. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +229 -297
  211. package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +397 -247
  212. package/corpus/templates/factory/app/components/factory/FactorySourceSettingsGroup.tsx +33 -0
  213. package/corpus/templates/factory/app/components/factory/NewFactoryForm.tsx +202 -162
  214. package/corpus/templates/factory/app/i18n/en-US.ts +32 -4
  215. package/corpus/templates/factory/app/routes/factory.tsx +84 -11
  216. package/corpus/templates/factory/app/routes.ts +3 -1
  217. package/corpus/templates/factory/changelog/2026-08-21-activity-runs-use-automation-display-names.md +6 -0
  218. package/corpus/templates/factory/changelog/2026-08-21-create-and-settings-source-cards.md +6 -0
  219. package/corpus/templates/factory/changelog/2026-08-21-keep-automations-visible-while-running.md +6 -0
  220. package/corpus/templates/factory/changelog/2026-08-21-nested-factory-automations-can-poll.md +6 -0
  221. package/corpus/templates/factory/changelog/2026-08-21-settings-sticky-unsaved-bar.md +6 -0
  222. package/corpus/templates/factory/server/connectors/credentials.ts +10 -5
  223. package/corpus/templates/factory/server/lib/factory-audit-report.ts +412 -0
  224. package/corpus/templates/factory/server/lib/factory-config-reconcile.ts +321 -0
  225. package/corpus/templates/factory/server/lib/factory-scope.ts +25 -2
  226. package/corpus/templates/factory/server/lib/require-factory-automation.ts +13 -4
  227. package/corpus/templates/factory/server/plugins/factory-migrations.ts +148 -4
  228. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +4 -6
  229. package/corpus/templates/factory/vitest.config.ts +17 -2
  230. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +11 -4
  231. package/corpus/templates/forms/app/routes/_app.settings.tsx +4 -1
  232. package/corpus/templates/forms/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  233. package/corpus/templates/forms/server/lib/public-form-ssr.ts +11 -1
  234. package/corpus/templates/forms/vitest.config.ts +1 -0
  235. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +11 -4
  236. package/corpus/templates/macros/app/routes.ts +3 -1
  237. package/corpus/templates/macros/vitest.config.ts +6 -1
  238. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +11 -4
  239. package/corpus/templates/mail/actions/manage-gmail-filters.ts +10 -2
  240. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +100 -37
  241. package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +14 -2
  242. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +66 -36
  243. package/corpus/templates/mail/app/hooks/use-emails.ts +13 -3
  244. package/corpus/templates/mail/app/hooks/use-google-auth.ts +2 -0
  245. package/corpus/templates/mail/app/lib/google-oauth-setup.ts +17 -0
  246. package/corpus/templates/mail/app/pages/InboxPage.tsx +69 -9
  247. package/corpus/templates/mail/app/routes/$.tsx +9 -0
  248. package/corpus/templates/mail/app/routes/$view.$threadId.tsx +23 -1
  249. package/corpus/templates/mail/app/routes/$view.tsx +47 -1
  250. package/corpus/templates/mail/app/routes.ts +3 -1
  251. package/corpus/templates/mail/changelog/2026-08-22-gmail-can-now-connect-with-the-shared-google-oauth.md +6 -0
  252. package/corpus/templates/mail/changelog/2026-08-22-gmail-filters-now-shows-the-real-error.md +6 -0
  253. package/corpus/templates/mail/changelog/2026-08-22-unknown-mail-urls-now-show-the-404-page.md +6 -0
  254. package/corpus/templates/mail/server/handlers/google-auth.ts +11 -2
  255. package/corpus/templates/mail/server/lib/google-auth.ts +92 -12
  256. package/corpus/templates/mail/server/onboarding.ts +66 -18
  257. package/corpus/templates/mail/vitest.config.ts +6 -1
  258. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +11 -4
  259. package/corpus/templates/plan/app/routes/settings.tsx +4 -1
  260. package/corpus/templates/plan/app/routes.ts +3 -1
  261. package/corpus/templates/plan/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  262. package/corpus/templates/plan/netlify.toml +1 -1
  263. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +11 -4
  264. package/corpus/templates/slides/actions/patch-deck.ts +79 -10
  265. package/corpus/templates/slides/actions/update-slide.ts +11 -1
  266. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +14 -4
  267. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +10 -52
  268. package/corpus/templates/slides/app/components/editor/GoogleDocImportHint.tsx +8 -53
  269. package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +9 -75
  270. package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +8 -60
  271. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +10 -2
  272. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +19 -7
  273. package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +49 -36
  274. package/corpus/templates/slides/app/routes/access-request.approve.tsx +16 -9
  275. package/corpus/templates/slides/app/routes.ts +3 -1
  276. package/corpus/templates/slides/changelog/2026-08-22-already-uploaded-chat-images-are-no-longer-dropped.md +6 -0
  277. package/corpus/templates/slides/changelog/2026-08-22-google-drive-and-slides-can-now-connect-with-the-shared-google-oauth.md +6 -0
  278. package/corpus/templates/slides/changelog/2026-08-22-multi-slide-repairs-now-report-slides-that-still-overflow.md +6 -0
  279. package/corpus/templates/slides/changelog/2026-08-22-update-slide-now-reports-which-batched-edit-was-skipped.md +6 -0
  280. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +52 -1
  281. package/corpus/templates/slides/server/lib/chat-attachments.ts +29 -3
  282. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +66 -16
  283. package/corpus/templates/slides/server/lib/slide-content-patch.ts +13 -2
  284. package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -2
  285. package/corpus/templates/slides/tsconfig.json +5 -0
  286. package/corpus/templates/slides/vitest.config.ts +6 -1
  287. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +11 -4
  288. package/corpus/templates/tasks/app/routes/settings.tsx +4 -1
  289. package/corpus/templates/tasks/app/routes.ts +3 -1
  290. package/corpus/templates/tasks/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  291. package/corpus/templates/tasks/vitest.config.ts +7 -1
  292. package/dist/action.d.ts +91 -0
  293. package/dist/action.js +50 -0
  294. package/dist/agent/abort-reasons.d.ts +38 -0
  295. package/dist/agent/abort-reasons.js +49 -0
  296. package/dist/agent/engine/ai-sdk-engine.js +8 -5
  297. package/dist/agent/engine/anthropic-engine.js +7 -5
  298. package/dist/agent/engine/credential-errors.d.ts +1 -1
  299. package/dist/agent/engine/credential-errors.js +2 -2
  300. package/dist/agent/engine/first-event-timeout.d.ts +42 -17
  301. package/dist/agent/engine/first-event-timeout.js +67 -25
  302. package/dist/agent/production-agent.d.ts +23 -0
  303. package/dist/agent/production-agent.js +107 -102
  304. package/dist/agent/run-loop-with-resume.d.ts +2 -28
  305. package/dist/agent/run-loop-with-resume.js +25 -40
  306. package/dist/agent/run-manager.js +5 -4
  307. package/dist/agent/run-store.d.ts +55 -0
  308. package/dist/agent/run-store.js +124 -1
  309. package/dist/agent/tool-search.js +2 -1
  310. package/dist/agent/types.d.ts +9 -4
  311. package/dist/app-config/configuration-error.d.ts +11 -0
  312. package/dist/app-config/configuration-error.js +14 -0
  313. package/dist/app-config/index.d.ts +1 -0
  314. package/dist/app-config/index.js +1 -0
  315. package/dist/app-config/integrations.d.ts +1 -0
  316. package/dist/app-config/integrations.js +10 -0
  317. package/dist/app-config/plugins.d.ts +34 -0
  318. package/dist/app-config/plugins.js +39 -0
  319. package/dist/app-config/run-lifecycle-invariants.d.ts +18 -9
  320. package/dist/app-config/run-lifecycle-invariants.js +18 -25
  321. package/dist/app-config/schema.d.ts +16 -0
  322. package/dist/app-config/schema.js +2 -0
  323. package/dist/chat-threads/schema-migrations.js +20 -0
  324. package/dist/chat-threads/store.js +21 -4
  325. package/dist/cli/native-dependencies.d.ts +4 -0
  326. package/dist/cli/native-dependencies.js +15 -0
  327. package/dist/client/AssistantChat.js +47 -15
  328. package/dist/client/ConnectBuilderCard.d.ts +3 -1
  329. package/dist/client/ConnectBuilderCard.js +6 -3
  330. package/dist/client/EnvironmentBadge.d.ts +1 -1
  331. package/dist/client/EnvironmentBadge.js +40 -5
  332. package/dist/client/MultiTabAssistantChat.d.ts +1 -1
  333. package/dist/client/MultiTabAssistantChat.js +35 -14
  334. package/dist/client/agent-chat/index.d.ts +1 -1
  335. package/dist/client/agent-chat/index.js +1 -1
  336. package/dist/client/agent-page/use-jobs.d.ts +2 -1
  337. package/dist/client/agent-page/use-jobs.js +3 -5
  338. package/dist/client/agent-sidebar-state.js +3 -1
  339. package/dist/client/blocks/library/code-tabs.js +5 -0
  340. package/dist/client/blocks/library/code.js +1 -0
  341. package/dist/client/chat/message-components.d.ts +7 -0
  342. package/dist/client/chat/message-components.js +1 -1
  343. package/dist/client/chat/run-recovery.js +5 -2
  344. package/dist/client/chat/tool-call-display.js +9 -3
  345. package/dist/client/chat-first/apps-rail.js +2 -2
  346. package/dist/client/chat-model-groups.d.ts +12 -0
  347. package/dist/client/chat-model-groups.js +3 -2
  348. package/dist/client/error-format.js +12 -0
  349. package/dist/client/integrations/GoogleProductLogo.d.ts +5 -0
  350. package/dist/client/integrations/GoogleProductLogo.js +45 -0
  351. package/dist/client/integrations/index.d.ts +2 -0
  352. package/dist/client/integrations/index.js +2 -0
  353. package/dist/client/integrations/workspace-provider-oauth.d.ts +8 -0
  354. package/dist/client/integrations/workspace-provider-oauth.js +13 -0
  355. package/dist/client/navigation/index.d.ts +1 -0
  356. package/dist/client/navigation/index.js +1 -0
  357. package/dist/client/resources/mcp-integration-catalog.js +0 -29
  358. package/dist/client/route-state.js +6 -0
  359. package/dist/client/settings/SettingsTabsPage.js +10 -6
  360. package/dist/client/sharing/ShareButton.js +11 -2
  361. package/dist/client/use-chat-models.d.ts +6 -0
  362. package/dist/client/use-chat-models.js +10 -0
  363. package/dist/client/use-db-sync.js +27 -9
  364. package/dist/client/workspace-app-navigation.d.ts +10 -0
  365. package/dist/client/workspace-app-navigation.js +38 -0
  366. package/dist/collab/struct-routes.d.ts +1 -1
  367. package/dist/connections/catalog.d.ts +111 -9
  368. package/dist/connections/catalog.js +86 -30
  369. package/dist/db/create-get-db.js +18 -0
  370. package/dist/db/ddl-guard.d.ts +0 -4
  371. package/dist/db/ddl-guard.js +46 -0
  372. package/dist/deploy/build.d.ts +32 -0
  373. package/dist/deploy/build.js +241 -16
  374. package/dist/deploy/function-bundle.d.ts +45 -0
  375. package/dist/deploy/function-bundle.js +337 -0
  376. package/dist/deploy/workspace-deploy.js +19 -1
  377. package/dist/eject/workspace-connections.js +4 -0
  378. package/dist/email-catalog/registry.d.ts +4 -0
  379. package/dist/email-catalog/registry.js +79 -14
  380. package/dist/extensions/content-patch.js +14 -2
  381. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  382. package/dist/integrations/plugin.d.ts +10 -0
  383. package/dist/integrations/plugin.js +40 -6
  384. package/dist/jobs/actions/run-automation-now.d.ts +2 -1
  385. package/dist/jobs/actions/run-automation-now.js +11 -5
  386. package/dist/jobs/frontmatter.js +53 -2
  387. package/dist/jobs/run-now.d.ts +11 -1
  388. package/dist/jobs/run-now.js +42 -7
  389. package/dist/jobs/scheduler.d.ts +1 -0
  390. package/dist/jobs/scheduler.js +2 -1
  391. package/dist/localization/core-messages/ar-SA.js +4 -1
  392. package/dist/localization/core-messages/de-DE.js +4 -1
  393. package/dist/localization/core-messages/en-US.d.ts +4 -1
  394. package/dist/localization/core-messages/en-US.js +4 -1
  395. package/dist/localization/core-messages/es-ES.js +4 -1
  396. package/dist/localization/core-messages/fr-FR.js +4 -1
  397. package/dist/localization/core-messages/hi-IN.js +4 -1
  398. package/dist/localization/core-messages/ja-JP.js +4 -1
  399. package/dist/localization/core-messages/ko-KR.js +4 -1
  400. package/dist/localization/core-messages/pt-BR.js +4 -1
  401. package/dist/localization/core-messages/zh-CN.js +4 -1
  402. package/dist/localization/core-messages/zh-TW.js +4 -1
  403. package/dist/localization/core-messages.d.ts +4 -1
  404. package/dist/localization/default-messages.d.ts +2 -5
  405. package/dist/localization/default-messages.js +2 -5
  406. package/dist/mcp/build-server.d.ts +9 -0
  407. package/dist/mcp/build-server.js +37 -8
  408. package/dist/mcp-client/oauth-client.d.ts +7 -0
  409. package/dist/mcp-client/oauth-client.js +12 -1
  410. package/dist/notifications/routes.d.ts +1 -1
  411. package/dist/oauth-tokens/index.d.ts +1 -1
  412. package/dist/oauth-tokens/index.js +1 -1
  413. package/dist/oauth-tokens/lifecycle.d.ts +11 -0
  414. package/dist/oauth-tokens/lifecycle.js +17 -0
  415. package/dist/oauth-tokens/store.js +7 -0
  416. package/dist/observability/posthog-ai.d.ts +15 -1
  417. package/dist/observability/posthog-ai.js +24 -12
  418. package/dist/observability/traces.js +158 -28
  419. package/dist/onboarding/app-profile.js +2 -2
  420. package/dist/onboarding/plugin.js +10 -2
  421. package/dist/onboarding/types.d.ts +2 -0
  422. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  423. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  424. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  425. package/dist/provider-api/index.js +2 -0
  426. package/dist/resources/handlers.d.ts +1 -1
  427. package/dist/resources/store.js +13 -4
  428. package/dist/scripts/agent-engines/list-agent-engines.js +29 -3
  429. package/dist/scripts/db/check-scoping.js +9 -6
  430. package/dist/secrets/register-framework-secrets.js +1 -1
  431. package/dist/secrets/routes.d.ts +6 -6
  432. package/dist/server/action-discovery.js +5 -0
  433. package/dist/server/agent-chat/action-filters-a2a.d.ts +27 -3
  434. package/dist/server/agent-chat/action-filters-a2a.js +48 -9
  435. package/dist/server/agent-chat-plugin.js +36 -9
  436. package/dist/server/agent-discovery.js +43 -20
  437. package/dist/server/auth.js +18 -16
  438. package/dist/server/beta-opt-out-html.js +45 -4
  439. package/dist/server/better-auth-instance.d.ts +2 -1
  440. package/dist/server/better-auth-instance.js +23 -7
  441. package/dist/server/builder-browser.d.ts +4 -0
  442. package/dist/server/builder-browser.js +23 -1
  443. package/dist/server/builder-design-systems.d.ts +4 -1
  444. package/dist/server/builder-design-systems.js +87 -6
  445. package/dist/server/builder-oauth.d.ts +1 -7
  446. package/dist/server/builder-oauth.js +80 -163
  447. package/dist/server/core-routes-plugin.d.ts +29 -0
  448. package/dist/server/core-routes-plugin.js +113 -21
  449. package/dist/server/default-plugins.d.ts +18 -0
  450. package/dist/server/default-plugins.js +22 -0
  451. package/dist/server/edge.d.ts +1 -0
  452. package/dist/server/edge.js +1 -0
  453. package/dist/server/framework-request-handler.js +31 -3
  454. package/dist/server/google-oauth.d.ts +3 -0
  455. package/dist/server/google-oauth.js +3 -0
  456. package/dist/server/index.d.ts +4 -4
  457. package/dist/server/index.js +3 -3
  458. package/dist/server/onboarding-html.js +37 -3
  459. package/dist/server/workspace-provider-oauth.d.ts +6 -1
  460. package/dist/server/workspace-provider-oauth.js +72 -20
  461. package/dist/shared/agent-sidebar-url.d.ts +1 -0
  462. package/dist/shared/agent-sidebar-url.js +1 -0
  463. package/dist/shared/environment-lanes.d.ts +2 -0
  464. package/dist/shared/environment-lanes.js +3 -1
  465. package/dist/shared/index.d.ts +3 -1
  466. package/dist/shared/index.js +3 -1
  467. package/dist/shared/surface-visibility.d.ts +31 -0
  468. package/dist/shared/surface-visibility.js +57 -0
  469. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  470. package/dist/templates/chat/app/routes.ts +3 -1
  471. package/dist/templates/chat/vitest.config.ts +8 -0
  472. package/dist/templates/default/.agents/skills/secrets/SKILL.md +11 -4
  473. package/dist/templates/default/app/routes.ts +3 -1
  474. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
  475. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
  476. package/dist/tracking/registry.d.ts +11 -0
  477. package/dist/tracking/registry.js +5 -2
  478. package/dist/triggers/actions.js +10 -3
  479. package/dist/usage/store.js +23 -3
  480. package/dist/user-profile/actions/get-auth-methods.js +18 -5
  481. package/dist/vite/client.js +24 -5
  482. package/docs/content/actions-access-control.mdx +43 -4
  483. package/docs/content/actions-defining.mdx +16 -0
  484. package/docs/content/template-clips-capture-everywhere.mdx +29 -30
  485. package/docs/content/template-clips-developers.mdx +4 -4
  486. package/docs/content/template-clips.mdx +3 -1
  487. package/package.json +3 -3
  488. package/src/eject/workspace-connections.ts +4 -0
  489. package/src/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  490. package/src/templates/chat/app/routes.ts +3 -1
  491. package/src/templates/chat/vitest.config.ts +8 -0
  492. package/src/templates/default/.agents/skills/secrets/SKILL.md +11 -4
  493. package/src/templates/default/app/routes.ts +3 -1
  494. package/src/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
  495. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
  496. /package/corpus/templates/dispatch/app/routes/{apps.$appId.tsx → apps.$appId.$.tsx} +0 -0
@@ -3,6 +3,7 @@ import { getRequestHeader } from "h3";
3
3
  import { createRemoteJWKSet, jwtVerify } from "jose";
4
4
  import { AGENT_BACKGROUND_PROCESSOR_FIELD, AGENT_BACKGROUND_PROCESSOR_INTEGRATION, isInBackgroundFunctionRuntime, } from "../agent/durable-background.js";
5
5
  import { abortRun } from "../agent/run-manager.js";
6
+ import { AppConfigurationError, getAppConfig } from "../app-config/index.js";
6
7
  import { isServerlessRuntime } from "../db/client.js";
7
8
  import { getOrgContext, resolveOrgIdForEmail } from "../org/context.js";
8
9
  import { loadResourcesForPrompt } from "../server/agent-chat-plugin.js";
@@ -229,6 +230,28 @@ export const BUILT_IN_INTEGRATION_ADAPTER_IDS = Object.freeze(BUILT_IN_INTEGRATI
229
230
  export function createBuiltInIntegrationAdapters() {
230
231
  return BUILT_IN_INTEGRATION_ADAPTER_FACTORIES.map(({ create }) => create());
231
232
  }
233
+ /**
234
+ * Narrow the adapter set to `integrations.platforms`, when a deployment
235
+ * declares one.
236
+ *
237
+ * A configured name that matches no adapter throws instead of being ignored:
238
+ * the whole point of the allow-list is that the operator knows which platforms
239
+ * are live, and silently mounting a set nobody named — or mounting nothing
240
+ * because of a typo — is the failure this switch is supposed to prevent.
241
+ */
242
+ export function applyConfiguredPlatformAllowList(adapters) {
243
+ const allowed = getAppConfig().integrations.platforms;
244
+ if (!allowed)
245
+ return adapters;
246
+ const available = new Set(adapters.map((adapter) => adapter.platform));
247
+ const unknown = allowed.filter((platform) => !available.has(platform));
248
+ if (unknown.length > 0) {
249
+ throw new AppConfigurationError(`[agent-native] integrations.platforms names ${unknown.join(", ")}, which no mounted adapter provides. ` +
250
+ `Available: ${[...available].join(", ") || "(none)"}.`);
251
+ }
252
+ const allowedSet = new Set(allowed);
253
+ return adapters.filter((adapter) => allowedSet.has(adapter.platform));
254
+ }
232
255
  const INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Microsoft Teams, Discord interactions, Telegram, WhatsApp, etc.).
233
256
 
234
257
  You have the same capabilities as the web chat agent. Use your tools to help the user.
@@ -573,8 +596,8 @@ export function createIntegrationsPlugin(options) {
573
596
  }
574
597
  return async (nitroApp) => {
575
598
  markDefaultPluginProvided(nitroApp, "integrations");
576
- const adapters = options?.adapters ??
577
- mergeIntegrationAdapters(createBuiltInIntegrationAdapters(), options?.adapterOverrides);
599
+ const adapters = applyConfiguredPlatformAllowList(options?.adapters ??
600
+ mergeIntegrationAdapters(createBuiltInIntegrationAdapters(), options?.adapterOverrides));
578
601
  const adapterMap = new Map();
579
602
  for (const adapter of adapters) {
580
603
  adapterMap.set(adapter.platform, adapter);
@@ -619,6 +642,17 @@ export function createIntegrationsPlugin(options) {
619
642
  const initialToolNames = Object.keys(localActions);
620
643
  const h3 = getH3App(nitroApp);
621
644
  const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;
645
+ // Routes mounted under a platform's own name rather than reached through
646
+ // the `/:platform/...` catch-all. The catch-all 404s a platform the
647
+ // allow-list dropped because it resolves an adapter first; these are
648
+ // registered by literal path, so they would outlive the platform they
649
+ // belong to unless the same allow-list gates the registration.
650
+ const allowedPlatforms = getAppConfig().integrations.platforms;
651
+ const mountForPlatform = (platform, path, handler) => {
652
+ if (allowedPlatforms && !allowedPlatforms.includes(platform))
653
+ return;
654
+ h3.use(path, handler);
655
+ };
622
656
  async function enqueueSystemNotice(event, incoming, text, opts) {
623
657
  if (!text.trim())
624
658
  return;
@@ -1921,7 +1955,7 @@ export function createIntegrationsPlugin(options) {
1921
1955
  return { ok: true, continuationId };
1922
1956
  }));
1923
1957
  // ─── Slack native action controls ─────────────────────────────
1924
- h3.use(`${P}/slack/interactions`, defineEventHandler(async (event) => {
1958
+ mountForPlatform("slack", `${P}/slack/interactions`, defineEventHandler(async (event) => {
1925
1959
  if (getMethod(event) !== "POST") {
1926
1960
  setResponseStatus(event, 405);
1927
1961
  return { error: "Method not allowed" };
@@ -2195,7 +2229,7 @@ export function createIntegrationsPlugin(options) {
2195
2229
  return { error: "unsupported memory action" };
2196
2230
  }));
2197
2231
  // ─── Managed Slack OAuth ──────────────────────────────────────
2198
- h3.use(`${P}/slack/manifest`, defineEventHandler(async (event) => {
2232
+ mountForPlatform("slack", `${P}/slack/manifest`, defineEventHandler(async (event) => {
2199
2233
  if (getMethod(event) !== "GET") {
2200
2234
  setResponseStatus(event, 405);
2201
2235
  return { error: "Method not allowed" };
@@ -2216,7 +2250,7 @@ export function createIntegrationsPlugin(options) {
2216
2250
  interactivityRequestUrl,
2217
2251
  });
2218
2252
  }));
2219
- h3.use(`${P}/slack/oauth/install`, defineEventHandler(async (event) => {
2253
+ mountForPlatform("slack", `${P}/slack/oauth/install`, defineEventHandler(async (event) => {
2220
2254
  if (getMethod(event) !== "GET") {
2221
2255
  setResponseStatus(event, 405);
2222
2256
  return { error: "Method not allowed" };
@@ -2270,7 +2304,7 @@ export function createIntegrationsPlugin(options) {
2270
2304
  return sendRedirect(event, buildSlackAuthorizeUrl({ clientId, redirectUri, state }), 302);
2271
2305
  });
2272
2306
  }));
2273
- h3.use(`${P}/slack/oauth/callback`, defineEventHandler(async (event) => {
2307
+ mountForPlatform("slack", `${P}/slack/oauth/callback`, defineEventHandler(async (event) => {
2274
2308
  if (getMethod(event) !== "GET") {
2275
2309
  setResponseStatus(event, 405);
2276
2310
  return { error: "Method not allowed" };
@@ -1,5 +1,6 @@
1
1
  declare const _default: import("../../action.js").ActionDefinition<{
2
- name: string;
2
+ name?: string;
3
+ path?: string;
3
4
  scope?: "organization" | "personal";
4
5
  }, import("../run-now.js").QueuedAutomationRun>;
5
6
  export default _default;
@@ -2,13 +2,18 @@ import { z } from "zod";
2
2
  import { defineAction } from "../../action.js";
3
3
  import { queueAutomationRunNow } from "../run-now.js";
4
4
  export default defineAction({
5
- description: "Run one personal or organization automation immediately. This is an explicit send/run action and may perform the automation's real side effects.",
5
+ description: "Run one personal or organization automation immediately. This is an explicit send/run action and may perform the automation's real side effects. Pass a flat `name` or a nested `path` such as jobs/factories/<id>/factory-slack-feedback.md — not both.",
6
6
  agentTool: false,
7
- schema: z.object({
8
- name: z.string().min(1),
7
+ schema: z
8
+ .object({
9
+ name: z.string().min(1).optional(),
10
+ path: z.string().min(1).optional(),
9
11
  scope: z.enum(["personal", "organization"]).default("personal"),
12
+ })
13
+ .refine((value) => Boolean(value.name) !== Boolean(value.path), {
14
+ message: "Specify either an automation name or a path, not both.",
10
15
  }),
11
- run: async ({ name, scope }, ctx) => {
16
+ run: async ({ name, path, scope }, ctx) => {
12
17
  if (!ctx?.userEmail)
13
18
  throw new Error("Not authenticated.");
14
19
  return queueAutomationRunNow({
@@ -16,7 +21,8 @@ export default defineAction({
16
21
  orgId: ctx.orgId,
17
22
  appId: ctx.appId,
18
23
  scope,
19
- name,
24
+ ...(path ? { path } : { name }),
25
+ requestHeaders: ctx.requestHeaders,
20
26
  });
21
27
  },
22
28
  });
@@ -20,6 +20,44 @@ const FRONTMATTER_RE = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n)?([\s\S]*)$/;
20
20
  const DELEGATED_POLICY_ID_RE = /^[a-z0-9][a-z0-9._:-]{0,127}$/i;
21
21
  const EXECUTION_ID_RE = /^[a-z0-9][a-z0-9._:-]{0,127}$/i;
22
22
  const REMOTE_ID_RE = /^[a-z0-9][a-z0-9@+._:/-]{0,511}$/i;
23
+ const EXTRA_FRONTMATTER_LINES = Symbol("extraFrontmatterLines");
24
+ const KNOWN_FRONTMATTER_FIELDS = new Set([
25
+ "schedule",
26
+ "enabled",
27
+ "timezone",
28
+ "createdBy",
29
+ "orgId",
30
+ "runAs",
31
+ "lastRun",
32
+ "lastCheck",
33
+ "lastStatus",
34
+ "lastError",
35
+ "nextRun",
36
+ "originScopeId",
37
+ "deliveryPlatform",
38
+ "deliveryDestination",
39
+ "deliveryThreadRef",
40
+ "deliveryTenantId",
41
+ "model",
42
+ "maxIterations",
43
+ "maxRunInputTokens",
44
+ "mcpTools",
45
+ "triggerType",
46
+ "event",
47
+ "condition",
48
+ "mode",
49
+ "domain",
50
+ "appId",
51
+ "executionHostId",
52
+ "executionEngine",
53
+ "executionCwd",
54
+ "remoteRequestId",
55
+ "remoteCommandId",
56
+ "remoteRunId",
57
+ "remoteAutomationRunId",
58
+ "remoteAdvanceSchedule",
59
+ "delegatedPolicyId",
60
+ ]);
23
61
  function assertBoundedFrontmatterValue(value, label, pattern) {
24
62
  if (value === undefined)
25
63
  return;
@@ -216,11 +254,23 @@ export function parseJobResource(content) {
216
254
  };
217
255
  }
218
256
  const meta = { schedule: "", enabled: true };
257
+ const extraLines = [];
219
258
  for (const line of match[1].split(/\r?\n/)) {
220
259
  const colonIdx = line.indexOf(":");
221
- if (colonIdx === -1)
260
+ if (colonIdx === -1) {
261
+ if (line.trim())
262
+ extraLines.push(line);
222
263
  continue;
223
- parseKnownField(meta, line.slice(0, colonIdx).trim(), line.slice(colonIdx + 1));
264
+ }
265
+ const key = line.slice(0, colonIdx).trim();
266
+ if (!KNOWN_FRONTMATTER_FIELDS.has(key)) {
267
+ extraLines.push(line);
268
+ continue;
269
+ }
270
+ parseKnownField(meta, key, line.slice(colonIdx + 1));
271
+ }
272
+ if (extraLines.length) {
273
+ meta[EXTRA_FRONTMATTER_LINES] = extraLines;
224
274
  }
225
275
  return {
226
276
  meta,
@@ -307,6 +357,7 @@ export function buildJobResourceContent(meta, body) {
307
357
  if (meta.mcpTools?.length) {
308
358
  lines.push(`mcpTools: ${JSON.stringify(meta.mcpTools)}`);
309
359
  }
360
+ lines.push(...(meta[EXTRA_FRONTMATTER_LINES] ?? []));
310
361
  lines.push("---", "", body);
311
362
  return lines.join("\n");
312
363
  }
@@ -4,7 +4,16 @@ export interface RunAutomationNowInput {
4
4
  orgId?: string | null;
5
5
  appId?: string | null;
6
6
  scope: AutomationScope;
7
- name: string;
7
+ /** Inbound request headers used to dispatch back to this exact local host. */
8
+ requestHeaders?: Headers;
9
+ /** Flat automation name, resolved as `jobs/<name>.md`. */
10
+ name?: string;
11
+ /**
12
+ * Full resource path for an automation the caller already resolved. Required
13
+ * for automations nested under `jobs/` (e.g. per-factory jobs), whose names
14
+ * contain a slash and cannot round-trip through `name`.
15
+ */
16
+ path?: string;
8
17
  }
9
18
  export interface QueuedAutomationRun {
10
19
  queued: true;
@@ -19,4 +28,5 @@ export declare function queueAutomationRunNow(input: RunAutomationNowInput): Pro
19
28
  */
20
29
  export declare function redispatchUnclaimedAutomationRuns(options?: {
21
30
  appId?: string | null;
31
+ requestHeaders?: Headers;
22
32
  }): Promise<number>;
@@ -5,11 +5,12 @@ import { organizationResourceOwner, resourceGetByPath, } from "../resources/stor
5
5
  import { fireInternalDispatch } from "../server/self-dispatch.js";
6
6
  import { parseJobResource } from "./frontmatter.js";
7
7
  import { listUnclaimedAutomationRuns, startAutomationRun, } from "./run-history.js";
8
- async function dispatchAutomationRun(historyId) {
8
+ async function dispatchAutomationRun(historyId, requestHeaders) {
9
9
  const dispatchPath = resolveAgentChatProcessRunDispatchPath();
10
10
  await fireInternalDispatch({
11
11
  path: dispatchPath,
12
12
  taskId: historyId,
13
+ ...(requestHeaders ? { event: { headers: requestHeaders } } : {}),
13
14
  body: {
14
15
  [AGENT_CHAT_BACKGROUND_RUN_FIELD]: {
15
16
  runId: historyId,
@@ -23,6 +24,9 @@ async function dispatchAutomationRun(historyId) {
23
24
  : {}),
24
25
  });
25
26
  }
27
+ function automationName(path) {
28
+ return path.replace(/^jobs\//, "").replace(/\.md$/, "");
29
+ }
26
30
  function ownerForScope(input) {
27
31
  if (input.scope === "personal")
28
32
  return input.userEmail.trim().toLowerCase();
@@ -31,15 +35,43 @@ function ownerForScope(input) {
31
35
  }
32
36
  return organizationResourceOwner(input.orgId);
33
37
  }
34
- export async function queueAutomationRunNow(input) {
35
- const name = input.name.trim();
38
+ /**
39
+ * One place decides which resource a run-now request means. Callers that
40
+ * already hold the resource pass `path`; callers that only know a flat slug
41
+ * pass `name`. Accepting both at once would let two disagreeing identifiers
42
+ * silently pick a winner.
43
+ */
44
+ function resolveAutomationTarget(input) {
45
+ const path = input.path?.trim();
46
+ const name = input.name?.trim();
47
+ if (path && name) {
48
+ throw Object.assign(new Error("Specify either an automation name or a path, not both."), { statusCode: 400 });
49
+ }
50
+ if (path) {
51
+ const segments = path.split("/");
52
+ const valid = segments[0] === "jobs" &&
53
+ segments.length > 1 &&
54
+ path.endsWith(".md") &&
55
+ !path.includes("\\") &&
56
+ segments.every((segment) => segment && segment !== "." && segment !== "..");
57
+ if (!valid) {
58
+ throw Object.assign(new Error("A valid automation path is required."), {
59
+ statusCode: 400,
60
+ });
61
+ }
62
+ return { path, name: automationName(path) };
63
+ }
36
64
  if (!name || name.includes("/") || name.endsWith(".md")) {
37
65
  throw Object.assign(new Error("A valid automation name is required."), {
38
66
  statusCode: 400,
39
67
  });
40
68
  }
69
+ return { path: `jobs/${name}.md`, name };
70
+ }
71
+ export async function queueAutomationRunNow(input) {
72
+ const { path, name } = resolveAutomationTarget(input);
41
73
  const owner = ownerForScope(input);
42
- const resource = await resourceGetByPath(owner, `jobs/${name}.md`);
74
+ const resource = await resourceGetByPath(owner, path);
43
75
  if (!resource) {
44
76
  throw Object.assign(new Error(`Automation "${name}" not found.`), {
45
77
  statusCode: 404,
@@ -56,7 +88,10 @@ export async function queueAutomationRunNow(input) {
56
88
  }
57
89
  // A manual-run request is a guaranteed app request even on hosts without a
58
90
  // durable timer. Use it to recover older rows before adding the new one.
59
- await redispatchUnclaimedAutomationRuns({ appId: input.appId }).catch((error) => {
91
+ await redispatchUnclaimedAutomationRuns({
92
+ appId: input.appId,
93
+ requestHeaders: input.requestHeaders,
94
+ }).catch((error) => {
60
95
  console.warn("[automations] Could not sweep queued runs before run-now:", error);
61
96
  });
62
97
  const historyId = await startAutomationRun({
@@ -69,7 +104,7 @@ export async function queueAutomationRunNow(input) {
69
104
  dispatchPending: true,
70
105
  });
71
106
  try {
72
- await dispatchAutomationRun(historyId);
107
+ await dispatchAutomationRun(historyId, input.requestHeaders);
73
108
  }
74
109
  catch (error) {
75
110
  const message = error instanceof Error ? error.message : "Background dispatch failed";
@@ -88,7 +123,7 @@ export async function redispatchUnclaimedAutomationRuns(options) {
88
123
  let attempted = 0;
89
124
  for (const run of runs) {
90
125
  try {
91
- await dispatchAutomationRun(run.id);
126
+ await dispatchAutomationRun(run.id, options?.requestHeaders);
92
127
  attempted += 1;
93
128
  }
94
129
  catch (error) {
@@ -38,6 +38,7 @@ interface JobExecutionResult {
38
38
  /** Execute one stored automation without changing its scheduled next run. */
39
39
  export declare function runJobNow(owner: string, name: string, deps: SchedulerDeps, options?: {
40
40
  historyId?: string;
41
+ path?: string;
41
42
  }): Promise<JobExecutionResult>;
42
43
  /** Process a durable run-now history row exactly once in the background worker. */
43
44
  export declare function runQueuedAutomation(historyId: string, deps: SchedulerDeps): Promise<{
@@ -553,7 +553,7 @@ async function executeJob(resource, meta, body, deps, now, options = {}) {
553
553
  }
554
554
  /** Execute one stored automation without changing its scheduled next run. */
555
555
  export async function runJobNow(owner, name, deps, options = {}) {
556
- const path = `jobs/${name}.md`;
556
+ const path = options.path ?? `jobs/${name}.md`;
557
557
  const resource = await resourceGetByPath(owner, path);
558
558
  if (!resource)
559
559
  throw new Error(`Automation "${name}" not found.`);
@@ -581,6 +581,7 @@ export async function runQueuedAutomation(historyId, deps) {
581
581
  }
582
582
  const result = await runJobNow(queued.owner, queued.automation, deps, {
583
583
  historyId,
584
+ path: queued.path,
584
585
  });
585
586
  return {
586
587
  skipped: false,
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "نسخ بيانات التشخيص",
32
32
  "aboutAgentNative.unknown": "غير معروف",
33
33
  "common.agent": "الوكيل",
34
+ "agentPanel.mode": "الوضع",
35
+ "agentPanel.uiMode": "واجهة المستخدم",
34
36
  "common.cancel": "إلغاء",
35
37
  "common.collapse": "طي",
36
38
  "common.connect": "اتصال",
@@ -270,7 +272,7 @@ const messages = {
270
272
  "errorMessages.gatewayNoDetails": "لم تُرجع بوابة النموذج أي تفاصيل عن الخطأ وتعذّر على المحادثة الاسترداد. انتظر قليلًا ثم أعد المحاولة، أو ابدأ محادثة جديدة إذا استمرت المشكلة.",
271
273
  "errorMessages.inactivityTimeout": "انتهت مهلة اتصال الوكيل قبل أن يتمكن من الإكمال. يمكنك المتابعة من العمل الجزئي أو إعادة المحاولة.",
272
274
  "errorMessages.invalidToolSchema": "كان مخطط إحدى الأدوات غير صالح، لذلك رفض النموذج الطلب قبل بدئه. يمكن تخطي الأداة غير الصالحة وإعادة محاولة الطلب.",
273
- "errorMessages.noProviderConnected": "لا يوجد مزوّد LLM متصل. افتح «إدارة الوكيل» ← «LLM» لهذا التطبيق، ثم اربط Builder.io أو أضف مفتاح مزوّد.",
275
+ "errorMessages.noProviderConnected": "لا يوجد مزوّد LLM متصل. افتح الإعدادات > الوكيل > مزوّدو الذكاء الاصطناعي، ثم اربط Builder.io (تتوفر خطة مجانية) أو أضف مفتاح مزوّد.",
274
276
  "errorMessages.openBuilderSpaceSettings": "فتح إعدادات مساحة Builder",
275
277
  "errorMessages.providerAuthentication": "رفض مزوّد النموذج مفتاح API المحفوظ. حدّث المفتاح من الإعدادات ← عمليات التكامل ← مفاتيح API، ثم أعد المحاولة.",
276
278
  "errorMessages.providerConfiguration": "لا يمكن لهذا النموذج استخدام الأدوات بالإعدادات الحالية. بدّل النموذج من الإعدادات، ثم أعد المحاولة.",
@@ -463,6 +465,7 @@ const messages = {
463
465
  "share.linkCanStillOpen": "لا يزال بإمكان من لديه الرابط فتحه.",
464
466
  "share.loading": "جارٍ التحميل...",
465
467
  "share.loadMore": "تحميل المزيد",
468
+ "share.loadFailed": "تعذّر تحميل إعدادات المشاركة.",
466
469
  "share.loadPeopleFailed": "تعذّر تحميل الأشخاص.",
467
470
  "share.noAccess": "لا أحد لديه صلاحية الوصول حتى الآن.",
468
471
  "share.noMatches": "لا توجد نتائج مطابقة.",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "Diagnosedaten kopieren",
32
32
  "aboutAgentNative.unknown": "Unbekannt",
33
33
  "common.agent": "Agent",
34
+ "agentPanel.mode": "Modus",
35
+ "agentPanel.uiMode": "Benutzeroberfläche",
34
36
  "common.cancel": "Abbrechen",
35
37
  "common.collapse": "Einklappen",
36
38
  "common.connect": "Verbinden",
@@ -399,7 +401,7 @@ const messages = {
399
401
  "errorMessages.gatewayNoDetails": "Das Modell-Gateway hat keine Fehlerdetails zurückgegeben und der Chat konnte nicht fortgesetzt werden. Warte einen Moment und versuche es erneut. Falls das Problem bestehen bleibt, starte einen neuen Chat.",
400
402
  "errorMessages.inactivityTimeout": "Die Verbindung zum Agenten wurde wegen Zeitüberschreitung beendet, bevor er fertig war. Du kannst mit dem Teilergebnis fortfahren oder es erneut versuchen.",
401
403
  "errorMessages.invalidToolSchema": "Ein Tool-Schema war ungültig. Deshalb hat das Modell die Anfrage abgelehnt, bevor sie gestartet wurde. Das ungültige Tool kann übersprungen und die Anfrage erneut gesendet werden.",
402
- "errorMessages.noProviderConnected": "Es ist kein LLM-Anbieter verbunden. Öffne für diese App „Agent verwalten“ → „LLM“ und verbinde anschließend Builder.io oder füge einen Anbieterschlüssel hinzu.",
404
+ "errorMessages.noProviderConnected": "Es ist kein LLM-Anbieter verbunden. Öffne Einstellungen > Agent > KI-Anbieter und verbinde anschließend Builder.io (kostenloser Tarif verfügbar) oder füge einen Anbieterschlüssel hinzu.",
403
405
  "errorMessages.openBuilderSpaceSettings": "Builder-Space-Einstellungen öffnen",
404
406
  "errorMessages.providerAuthentication": "Der Modellanbieter hat den gespeicherten API-Schlüssel abgelehnt. Aktualisiere ihn unter Einstellungen → Integrationen → API-Schlüssel und versuche es erneut.",
405
407
  "errorMessages.providerConfiguration": "Dieses Modell kann mit den aktuellen Einstellungen keine Tools verwenden. Wechsle in den Einstellungen das Modell und versuche es erneut.",
@@ -498,6 +500,7 @@ const messages = {
498
500
  "share.linkCanStillOpen": "Personen mit dem Link können dies weiterhin öffnen.",
499
501
  "share.loading": "Laden...",
500
502
  "share.loadMore": "Mehr laden",
503
+ "share.loadFailed": "Freigabeeinstellungen konnten nicht geladen werden.",
501
504
  "share.loadPeopleFailed": "Es konnten keine Personen geladen werden.",
502
505
  "share.noAccess": "Noch hat niemand Zugriff.",
503
506
  "share.noMatches": "Keine Übereinstimmungen.",
@@ -31,6 +31,8 @@ declare const messages: {
31
31
  readonly "aboutAgentNative.copyDiagnostics": "Copy diagnostics";
32
32
  readonly "aboutAgentNative.unknown": "Unknown";
33
33
  readonly "common.agent": "Agent";
34
+ readonly "agentPanel.mode": "Mode";
35
+ readonly "agentPanel.uiMode": "UI";
34
36
  readonly "common.cancel": "Cancel";
35
37
  readonly "common.collapse": "Collapse";
36
38
  readonly "common.connect": "Connect";
@@ -262,7 +264,7 @@ declare const messages: {
262
264
  readonly "errorMessages.gatewayNoDetails": "The model gateway returned no error details and the chat couldn't recover. Wait a moment and retry, or start a new chat if it keeps happening.";
263
265
  readonly "errorMessages.inactivityTimeout": "The agent connection timed out before it could finish. You can continue from the partial work or retry.";
264
266
  readonly "errorMessages.invalidToolSchema": "A tool schema was invalid, so the model rejected the request before it started. The invalid tool can be skipped and the request retried.";
265
- readonly "errorMessages.noProviderConnected": "No LLM provider is connected. Open this app's Manage agent > LLM, then connect Builder.io or add a provider key.";
267
+ readonly "errorMessages.noProviderConnected": "No LLM provider is connected. Open Settings > Agent > AI providers, then connect Builder.io (free tier available) or add a provider key.";
266
268
  readonly "errorMessages.openBuilderSpaceSettings": "Open Builder space settings";
267
269
  readonly "errorMessages.providerAuthentication": "The model provider rejected the saved API key. Update the key in Settings → Integrations → API keys, then retry.";
268
270
  readonly "errorMessages.providerConfiguration": "This model can't use tools with the current settings. Switch models in Settings, then retry.";
@@ -447,6 +449,7 @@ declare const messages: {
447
449
  readonly "share.linkCanStillOpen": "People with the link can still open this.";
448
450
  readonly "share.loading": "Loading...";
449
451
  readonly "share.loadMore": "Load more";
452
+ readonly "share.loadFailed": "Couldn't load sharing settings.";
450
453
  readonly "share.loadPeopleFailed": "Could not load people.";
451
454
  readonly "share.noAccess": "No one has access yet.";
452
455
  readonly "share.noMatches": "No matches.";
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "Copy diagnostics",
32
32
  "aboutAgentNative.unknown": "Unknown",
33
33
  "common.agent": "Agent",
34
+ "agentPanel.mode": "Mode",
35
+ "agentPanel.uiMode": "UI",
34
36
  "common.cancel": "Cancel",
35
37
  "common.collapse": "Collapse",
36
38
  "common.connect": "Connect",
@@ -262,7 +264,7 @@ const messages = {
262
264
  "errorMessages.gatewayNoDetails": "The model gateway returned no error details and the chat couldn't recover. Wait a moment and retry, or start a new chat if it keeps happening.",
263
265
  "errorMessages.inactivityTimeout": "The agent connection timed out before it could finish. You can continue from the partial work or retry.",
264
266
  "errorMessages.invalidToolSchema": "A tool schema was invalid, so the model rejected the request before it started. The invalid tool can be skipped and the request retried.",
265
- "errorMessages.noProviderConnected": "No LLM provider is connected. Open this app's Manage agent > LLM, then connect Builder.io or add a provider key.",
267
+ "errorMessages.noProviderConnected": "No LLM provider is connected. Open Settings > Agent > AI providers, then connect Builder.io (free tier available) or add a provider key.",
266
268
  "errorMessages.openBuilderSpaceSettings": "Open Builder space settings",
267
269
  "errorMessages.providerAuthentication": "The model provider rejected the saved API key. Update the key in Settings → Integrations → API keys, then retry.",
268
270
  "errorMessages.providerConfiguration": "This model can't use tools with the current settings. Switch models in Settings, then retry.",
@@ -447,6 +449,7 @@ const messages = {
447
449
  "share.linkCanStillOpen": "People with the link can still open this.",
448
450
  "share.loading": "Loading...",
449
451
  "share.loadMore": "Load more",
452
+ "share.loadFailed": "Couldn't load sharing settings.",
450
453
  "share.loadPeopleFailed": "Could not load people.",
451
454
  "share.noAccess": "No one has access yet.",
452
455
  "share.noMatches": "No matches.",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "Copiar diagnóstico",
32
32
  "aboutAgentNative.unknown": "Desconocida",
33
33
  "common.agent": "Agente",
34
+ "agentPanel.mode": "Modo",
35
+ "agentPanel.uiMode": "Interfaz de usuario",
34
36
  "common.cancel": "Cancelar",
35
37
  "common.collapse": "Contraer",
36
38
  "common.connect": "Conectar",
@@ -406,7 +408,7 @@ const messages = {
406
408
  "errorMessages.gatewayNoDetails": "La pasarela del modelo no devolvió detalles del error y el chat no pudo recuperarse. Espera un momento y vuelve a intentarlo. Si el problema continúa, inicia un chat nuevo.",
407
409
  "errorMessages.inactivityTimeout": "La conexión del agente expiró antes de que pudiera finalizar. Puedes continuar desde el trabajo parcial o volver a intentarlo.",
408
410
  "errorMessages.invalidToolSchema": "El esquema de una herramienta no era válido, así que el modelo rechazó la solicitud antes de iniciarla. Puedes omitir la herramienta no válida y volver a intentarlo.",
409
- "errorMessages.noProviderConnected": "No hay ningún proveedor de LLM conectado. Abre «Administrar agente» → «LLM» para esta aplicación y, a continuación, conecta Builder.io o añade una clave de proveedor.",
411
+ "errorMessages.noProviderConnected": "No hay ningún proveedor de LLM conectado. Abre Configuración > Agente > Proveedores de IA y, a continuación, conecta Builder.io (nivel gratuito disponible) o añade una clave de proveedor.",
410
412
  "errorMessages.openBuilderSpaceSettings": "Abrir los ajustes del espacio de Builder",
411
413
  "errorMessages.providerAuthentication": "El proveedor del modelo rechazó la clave de API guardada. Actualízala en Ajustes → Integraciones → Claves de API y vuelve a intentarlo.",
412
414
  "errorMessages.providerConfiguration": "Este modelo no puede usar herramientas con los ajustes actuales. Cambia de modelo en Ajustes y vuelve a intentarlo.",
@@ -505,6 +507,7 @@ const messages = {
505
507
  "share.linkCanStillOpen": "Las personas con el enlace aún pueden abrirlo.",
506
508
  "share.loading": "Cargando...",
507
509
  "share.loadMore": "Cargar más",
510
+ "share.loadFailed": "No se pudo cargar la configuración de uso compartido.",
508
511
  "share.loadPeopleFailed": "No se pudieron cargar las personas.",
509
512
  "share.noAccess": "Nadie tiene acceso todavía.",
510
513
  "share.noMatches": "Sin coincidencias.",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "Copier les diagnostics",
32
32
  "aboutAgentNative.unknown": "Inconnue",
33
33
  "common.agent": "Agent",
34
+ "agentPanel.mode": "Mode",
35
+ "agentPanel.uiMode": "Interface utilisateur",
34
36
  "common.cancel": "Annuler",
35
37
  "common.collapse": "Réduire",
36
38
  "common.connect": "Connecter",
@@ -406,7 +408,7 @@ const messages = {
406
408
  "errorMessages.gatewayNoDetails": "La passerelle du modèle n’a fourni aucun détail sur l’erreur et la discussion n’a pas pu reprendre. Patientez un instant et réessayez. Si le problème persiste, démarrez une nouvelle discussion.",
407
409
  "errorMessages.inactivityTimeout": "La connexion à l’agent a expiré avant la fin. Vous pouvez poursuivre à partir du travail partiel ou réessayer.",
408
410
  "errorMessages.invalidToolSchema": "Le schéma d’un outil n’était pas valide. Le modèle a donc rejeté la demande avant son démarrage. Vous pouvez ignorer cet outil et réessayer.",
409
- "errorMessages.noProviderConnected": "Aucun fournisseur de LLM n’est connecté. Ouvrez « Gérer l’agent » → « LLM » pour cette application, puis connectez Builder.io ou ajoutez une clé de fournisseur.",
411
+ "errorMessages.noProviderConnected": "Aucun fournisseur de LLM n’est connecté. Ouvrez Paramètres > Agent > Fournisseurs d’IA, puis connectez Builder.io (offre gratuite disponible) ou ajoutez une clé de fournisseur.",
410
412
  "errorMessages.openBuilderSpaceSettings": "Ouvrir les paramètres de l’espace Builder",
411
413
  "errorMessages.providerAuthentication": "Le fournisseur du modèle a rejeté la clé API enregistrée. Mettez-la à jour dans Paramètres → Intégrations → Clés API, puis réessayez.",
412
414
  "errorMessages.providerConfiguration": "Ce modèle ne peut pas utiliser d’outils avec les paramètres actuels. Changez de modèle dans les paramètres, puis réessayez.",
@@ -505,6 +507,7 @@ const messages = {
505
507
  "share.linkCanStillOpen": "Les personnes disposant du lien peuvent toujours l'ouvrir.",
506
508
  "share.loading": "Chargement...",
507
509
  "share.loadMore": "Afficher plus",
510
+ "share.loadFailed": "Impossible de charger les paramètres de partage.",
508
511
  "share.loadPeopleFailed": "Impossible de charger des personnes.",
509
512
  "share.noAccess": "Personne n'y a encore accès.",
510
513
  "share.noMatches": "Aucun résultat.",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "डायग्नोस्टिक कॉपी करें",
32
32
  "aboutAgentNative.unknown": "अज्ञात",
33
33
  "common.agent": "एजेंट",
34
+ "agentPanel.mode": "मोड",
35
+ "agentPanel.uiMode": "यूआई",
34
36
  "common.cancel": "रद्द करें",
35
37
  "common.collapse": "समेटें",
36
38
  "common.connect": "कनेक्ट करें",
@@ -262,7 +264,7 @@ const messages = {
262
264
  "errorMessages.gatewayNoDetails": "मॉडल गेटवे ने त्रुटि का कोई विवरण नहीं दिया और चैट रिकवर नहीं हो सकी। कुछ देर रुककर फिर से प्रयास करें या समस्या बनी रहने पर नई चैट शुरू करें।",
263
265
  "errorMessages.inactivityTimeout": "एजेंट का कनेक्शन काम पूरा होने से पहले समय सीमा पर पहुँच गया। आप आंशिक काम से जारी रख सकते हैं या फिर से प्रयास कर सकते हैं।",
264
266
  "errorMessages.invalidToolSchema": "एक टूल स्कीमा अमान्य था, इसलिए मॉडल ने अनुरोध शुरू होने से पहले ही अस्वीकार कर दिया। अमान्य टूल को छोड़कर अनुरोध दोबारा किया जा सकता है।",
265
- "errorMessages.noProviderConnected": "कोई LLM प्रदाता कनेक्ट नहीं है। इस ऐप में “एजेंट प्रबंधित करें” → “LLM” खोलें, फिर Builder.io कनेक्ट करें या प्रदाता कुंजी जोड़ें।",
267
+ "errorMessages.noProviderConnected": "कोई LLM प्रदाता कनेक्ट नहीं है। सेटिंग्स > एजेंट > AI प्रदाता खोलें, फिर Builder.io कनेक्ट करें (मुफ़्त स्तर उपलब्ध है) या प्रदाता कुंजी जोड़ें।",
266
268
  "errorMessages.openBuilderSpaceSettings": "Builder स्पेस सेटिंग्स खोलें",
267
269
  "errorMessages.providerAuthentication": "मॉडल प्रदाता ने सहेजी गई API कुंजी अस्वीकार कर दी। सेटिंग्स → इंटीग्रेशन → API कुंजियाँ में कुंजी अपडेट करें, फिर से प्रयास करें।",
268
270
  "errorMessages.providerConfiguration": "यह मॉडल मौजूदा सेटिंग्स के साथ टूल का उपयोग नहीं कर सकता। सेटिंग्स में मॉडल बदलें, फिर से प्रयास करें।",
@@ -447,6 +449,7 @@ const messages = {
447
449
  "share.linkCanStillOpen": "लिंक वाले लोग इसे फिर भी खोल सकते हैं।",
448
450
  "share.loading": "लोड हो रहा है...",
449
451
  "share.loadMore": "और लोड करें",
452
+ "share.loadFailed": "साझाकरण सेटिंग्स लोड नहीं की जा सकीं।",
450
453
  "share.loadPeopleFailed": "लोगों को लोड नहीं किया जा सका।",
451
454
  "share.noAccess": "अभी किसी के पास एक्सेस नहीं है।",
452
455
  "share.noMatches": "कोई मिलान नहीं मिला।",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "診断情報をコピー",
32
32
  "aboutAgentNative.unknown": "不明",
33
33
  "common.agent": "エージェント",
34
+ "agentPanel.mode": "モード",
35
+ "agentPanel.uiMode": "UI",
34
36
  "common.cancel": "キャンセル",
35
37
  "common.collapse": "折りたたむ",
36
38
  "common.connect": "接続",
@@ -260,7 +262,7 @@ const messages = {
260
262
  "errorMessages.gatewayNoDetails": "モデルゲートウェイからエラーの詳細が返されず、チャットを復旧できませんでした。少し待ってから再試行し、繰り返し発生する場合は新しいチャットを開始してください。",
261
263
  "errorMessages.inactivityTimeout": "エージェントとの接続が完了前にタイムアウトしました。途中までの作業から続行するか、再試行できます。",
262
264
  "errorMessages.invalidToolSchema": "ツールのスキーマが無効だったため、モデルは開始前にリクエストを拒否しました。無効なツールをスキップして再試行できます。",
263
- "errorMessages.noProviderConnected": "LLM プロバイダーが接続されていません。このアプリの「エージェントを管理」→「LLM」を開き、Builder.io を接続するか、プロバイダーキーを追加してください。",
265
+ "errorMessages.noProviderConnected": "LLM プロバイダーが接続されていません。設定 > エージェント > AI プロバイダーを開き、Builder.io(無料プランあり)に接続するか、プロバイダーキーを追加してください。",
264
266
  "errorMessages.openBuilderSpaceSettings": "Builder スペース設定を開く",
265
267
  "errorMessages.providerAuthentication": "モデルプロバイダーが保存済みの API キーを拒否しました。設定 → 連携 → API キーでキーを更新してから再試行してください。",
266
268
  "errorMessages.providerConfiguration": "現在の設定では、このモデルはツールを使用できません。設定でモデルを切り替えてから再試行してください。",
@@ -442,6 +444,7 @@ const messages = {
442
444
  "share.hideInSearch": "検索結果に表示しない",
443
445
  "share.linkCanStillOpen": "リンクを知っているユーザーは引き続き開くことができます。",
444
446
  "share.loadMore": "さらに読み込む",
447
+ "share.loadFailed": "共有設定を読み込めませんでした。",
445
448
  "share.loadPeopleFailed": "ユーザーを読み込めませんでした。",
446
449
  "share.loading": "読み込み中...",
447
450
  "share.noAccess": "アクセスできるユーザーはまだいません。",
@@ -31,6 +31,8 @@ const messages = {
31
31
  "aboutAgentNative.copyDiagnostics": "진단 정보 복사",
32
32
  "aboutAgentNative.unknown": "알 수 없음",
33
33
  "common.agent": "에이전트",
34
+ "agentPanel.mode": "모드",
35
+ "agentPanel.uiMode": "UI",
34
36
  "common.cancel": "취소",
35
37
  "common.collapse": "접기",
36
38
  "common.connect": "연결",
@@ -260,7 +262,7 @@ const messages = {
260
262
  "errorMessages.gatewayNoDetails": "모델 게이트웨이가 오류 세부 정보를 반환하지 않아 채팅을 복구할 수 없습니다. 잠시 후 다시 시도하고, 문제가 계속되면 새 채팅을 시작하세요.",
261
263
  "errorMessages.inactivityTimeout": "에이전트 연결이 완료 전에 시간 초과되었습니다. 부분적으로 완료된 작업에서 계속하거나 다시 시도할 수 있습니다.",
262
264
  "errorMessages.invalidToolSchema": "도구 스키마가 올바르지 않아 모델이 요청 시작 전에 거부했습니다. 올바르지 않은 도구를 건너뛰고 요청을 다시 시도할 수 있습니다.",
263
- "errorMessages.noProviderConnected": "연결된 LLM 제공업체가 없습니다. 이 앱의 ‘에이전트 관리’ → ‘LLM’을 연 다음 Builder.io를 연결하거나 제공업체 키를 추가하세요.",
265
+ "errorMessages.noProviderConnected": "연결된 LLM 제공업체가 없습니다. 설정 > 에이전트 > AI 제공업체를 연 다음 Builder.io(무료 요금제 제공)를 연결하거나 제공업체 키를 추가하세요.",
264
266
  "errorMessages.openBuilderSpaceSettings": "Builder 스페이스 설정 열기",
265
267
  "errorMessages.providerAuthentication": "모델 제공업체가 저장된 API 키를 거부했습니다. 설정 → 연동 → API 키에서 키를 업데이트한 후 다시 시도하세요.",
266
268
  "errorMessages.providerConfiguration": "현재 설정에서는 이 모델이 도구를 사용할 수 없습니다. 설정에서 모델을 변경한 후 다시 시도하세요.",
@@ -442,6 +444,7 @@ const messages = {
442
444
  "share.hideInSearch": "검색에서 숨기기",
443
445
  "share.linkCanStillOpen": "링크가 있는 사용자는 계속 열 수 있습니다.",
444
446
  "share.loadMore": "더 불러오기",
447
+ "share.loadFailed": "공유 설정을 불러올 수 없습니다.",
445
448
  "share.loadPeopleFailed": "사용자를 불러올 수 없습니다.",
446
449
  "share.loading": "불러오는 중...",
447
450
  "share.noAccess": "아직 접근 권한이 있는 사용자가 없습니다.",