@agent-native/core 0.169.1 → 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 (459) 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/query-agent-native-analytics.ts +1 -1
  6. package/corpus/templates/analytics/app/i18n-data.ts +28 -0
  7. package/corpus/templates/analytics/app/pages/Agents.tsx +25 -1
  8. package/corpus/templates/analytics/app/routes/$.tsx +10 -0
  9. package/corpus/templates/analytics/app/routes.ts +3 -1
  10. package/corpus/templates/analytics/changelog/2026-08-22-fixed-the-agent-native-templates-first-party-dashboard-panel.md +6 -0
  11. package/corpus/templates/analytics/changelog/2026-08-22-org-admin-panels-no-longer-report-a-database-error-as-a-per.md +9 -0
  12. package/corpus/templates/analytics/changelog/2026-08-22-slack-requests-report-invalid-inputs.md +6 -0
  13. package/corpus/templates/analytics/changelog/2026-08-22-unknown-analytics-links-now-return-a-real-not-found-status.md +6 -0
  14. package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +2 -1
  15. package/corpus/templates/analytics/docs/schemas/tracked-events.md +2 -0
  16. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +29 -7
  17. package/corpus/templates/analytics/server/handlers/slack.ts +59 -5
  18. package/corpus/templates/analytics/server/lib/db-admin-connections.ts +11 -6
  19. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +132 -2
  20. package/corpus/templates/analytics/server/lib/slack.ts +4 -2
  21. package/corpus/templates/analytics/vitest.config.ts +6 -1
  22. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +11 -4
  23. package/corpus/templates/assets/app/routes/library.tsx +5 -3
  24. package/corpus/templates/assets/app/routes.ts +3 -1
  25. package/corpus/templates/assets/changelog/2026-08-22-library-page-loads-again-instead-of-crashing-on-open.md +6 -0
  26. package/corpus/templates/assets/vitest.config.ts +6 -1
  27. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +11 -4
  28. package/corpus/templates/brain/app/components/ui/pointer-lock.ts +1 -0
  29. package/corpus/templates/brain/app/routes/sources.tsx +8 -3
  30. package/corpus/templates/brain/changelog/2026-08-22-tuning-or-adding-a-source-no-longer-leaves-the-sources-page.md +6 -0
  31. package/corpus/templates/brain/vitest.config.ts +1 -0
  32. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +11 -4
  33. package/corpus/templates/calendar/actions/list-booking-links.ts +83 -4
  34. package/corpus/templates/calendar/actions/update-booking-link.ts +4 -3
  35. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +11 -3
  36. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +1 -1
  37. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +103 -44
  38. package/corpus/templates/calendar/app/components/calendar/OutOfOfficeEvent.tsx +28 -24
  39. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +9 -2
  40. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +47 -58
  41. package/corpus/templates/calendar/app/hooks/use-booking-links.ts +5 -1
  42. package/corpus/templates/calendar/app/lib/event-layout.ts +52 -26
  43. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +126 -98
  44. package/corpus/templates/calendar/app/pages/CalendarView.tsx +1 -0
  45. package/corpus/templates/calendar/app/pages/Settings.tsx +88 -81
  46. package/corpus/templates/calendar/app/routes.ts +3 -1
  47. package/corpus/templates/calendar/changelog/2026-08-22-booking-link-visibility-respects-shared-access.md +6 -0
  48. package/corpus/templates/calendar/changelog/2026-08-22-clicking-an-out-of-office-event-s-marker-no-longer-creates-a.md +6 -0
  49. package/corpus/templates/calendar/changelog/2026-08-22-event-detail-views-now-show-your-calendar-timezone.md +6 -0
  50. package/corpus/templates/calendar/changelog/2026-08-22-google-calendar-can-now-connect-with-the-shared-google-oauth.md +6 -0
  51. package/corpus/templates/calendar/changelog/2026-08-22-overlapping-events-now-show-each-others-boundaries.md +6 -0
  52. package/corpus/templates/calendar/changelog/2026-08-22-public-booking-pages-now-offer-time-slots-from-the-host-s-we.md +6 -0
  53. package/corpus/templates/calendar/server/handlers/bookings.ts +5 -7
  54. package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -2
  55. package/corpus/templates/calendar/server/lib/google-calendar.ts +139 -14
  56. package/corpus/templates/calendar/server/onboarding.ts +85 -0
  57. package/corpus/templates/calendar/server/plugins/agent-chat.ts +2 -0
  58. package/corpus/templates/calendar/shared/api.ts +9 -1
  59. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  60. package/corpus/templates/chat/app/routes.ts +3 -1
  61. package/corpus/templates/chat/vitest.config.ts +8 -0
  62. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +11 -4
  63. package/corpus/templates/clips/actions/get-meeting.ts +9 -4
  64. package/corpus/templates/clips/actions/list-recordings.ts +16 -3
  65. package/corpus/templates/clips/actions/search-meetings.ts +1 -0
  66. package/corpus/templates/clips/actions/view-screen.ts +8 -1
  67. package/corpus/templates/clips/app/components/meetings/meeting-history-row.tsx +32 -1
  68. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +1 -1
  69. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +29 -1
  70. package/corpus/templates/clips/app/i18n/en-US.ts +5 -0
  71. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +33 -4
  72. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +1 -0
  73. package/corpus/templates/clips/app/routes/access-request.approve.tsx +16 -9
  74. package/corpus/templates/clips/app/routes/embed.$shareId.tsx +17 -7
  75. package/corpus/templates/clips/app/routes/share.$shareId.tsx +17 -7
  76. package/corpus/templates/clips/changelog/2026-08-21-camera-bubble-black-circle.md +6 -0
  77. package/corpus/templates/clips/changelog/2026-08-22-screen-recordings-respect-the-microphone-toggle.md +6 -0
  78. package/corpus/templates/clips/changelog/2026-08-22-the-recordings-library-no-longer-fails-right-after-server-start.md +6 -0
  79. package/corpus/templates/clips/changelog/2026-08-23-the-agent-can-see-your-library-right-after-server-start.md +6 -0
  80. package/corpus/templates/clips/chrome-extension/src/background.ts +1 -2
  81. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +39 -7
  82. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +21 -25
  83. package/corpus/templates/clips/desktop/src/app.tsx +53 -24
  84. package/corpus/templates/clips/desktop/src/lib/bubble-playback.ts +68 -0
  85. package/corpus/templates/clips/desktop/src/lib/recorder.ts +3 -0
  86. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +72 -14
  87. package/corpus/templates/clips/desktop/src/lib/updater.ts +8 -3
  88. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +162 -20
  89. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +43 -6
  90. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +150 -13
  91. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +12 -0
  92. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +28 -3
  93. package/corpus/templates/clips/server/lib/emails.ts +17 -33
  94. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +11 -4
  95. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +140 -15
  96. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +12 -14
  97. package/corpus/templates/content/app/components/ui/pointer-lock.ts +1 -0
  98. package/corpus/templates/content/app/hooks/use-content-database.ts +18 -2
  99. package/corpus/templates/content/app/hooks/use-local-storage.ts +38 -22
  100. package/corpus/templates/content/app/i18n-data.ts +25 -0
  101. package/corpus/templates/content/app/routes.ts +3 -1
  102. package/corpus/templates/content/changelog/2026-08-22-code-blocks-inserted-from-the-slash-menu-no-longer-get-stuck.md +6 -0
  103. package/corpus/templates/content/changelog/2026-08-22-the-sidebar-page-tree-no-longer-flashes-empty-after-creating-a-page.md +6 -0
  104. package/corpus/templates/content/docs/solutions/2026-08-21-content-mermaid-rendering-shape.md +233 -0
  105. package/corpus/templates/content/server/plugins/agent-chat.ts +9 -2
  106. package/corpus/templates/content/vitest.config.ts +7 -1
  107. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +11 -4
  108. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +11 -4
  109. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1383 -88
  110. package/corpus/templates/design/actions/generate-design.ts +98 -47
  111. package/corpus/templates/design/actions/get-design-system.ts +6 -1
  112. package/corpus/templates/design/actions/refresh-design-system-with-builder.ts +146 -0
  113. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +70 -26
  114. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +284 -136
  115. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2057 -141
  116. package/corpus/templates/design/app/components/design/editor/DesignBottomToolbar.tsx +6 -2
  117. package/corpus/templates/design/app/components/design/editor/DesignWorkspaceRail.tsx +4 -4
  118. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +10 -1
  119. package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +19 -2
  120. package/corpus/templates/design/app/components/design/multi-screen/types.ts +9 -2
  121. package/corpus/templates/design/app/components/layout/Header.tsx +15 -0
  122. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -2
  123. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +11 -4
  124. package/corpus/templates/design/app/i18n-data.ts +1 -0
  125. package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +12 -0
  126. package/corpus/templates/design/app/lib/design-system-data.ts +68 -0
  127. package/corpus/templates/design/app/pages/DesignEditor.tsx +77 -35
  128. package/corpus/templates/design/app/pages/DesignSystems.tsx +136 -42
  129. package/corpus/templates/design/app/pages/Index.tsx +2 -0
  130. package/corpus/templates/design/app/pages/Templates.tsx +0 -10
  131. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +10 -0
  132. package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +50 -0
  133. package/corpus/templates/design/app/pages/design-editor/commands/apply-design-editor-command.ts +1 -1
  134. package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +10 -8
  135. package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +6 -6
  136. package/corpus/templates/design/app/pages/design-editor/commands/apply-pending-visual-styles-with-agent.ts +1 -1
  137. package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +18 -7
  138. package/corpus/templates/design/app/pages/design-editor/commands/escape-hotkey.ts +4 -90
  139. package/corpus/templates/design/app/pages/design-editor/commands/layer-marquee-selection-change.ts +2 -1
  140. package/corpus/templates/design/app/pages/design-editor/commands/layer-selection-change.ts +4 -3
  141. package/corpus/templates/design/app/pages/design-editor/commands/screen-element-select.ts +12 -2
  142. package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-style-change.ts +9 -2
  143. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-move-semantic-handoff.ts +1 -1
  144. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-semantic-handoff.ts +1 -1
  145. package/corpus/templates/design/app/pages/design-editor/commands/send-runtime-layer-state-semantic-handoff.ts +1 -1
  146. package/corpus/templates/design/app/pages/design-editor/commands/start-sidebar-resize.ts +1 -1
  147. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +11 -1
  148. package/corpus/templates/design/app/pages/design-editor/effects/adopt-db-file-content.ts +11 -19
  149. package/corpus/templates/design/app/pages/design-editor/effects/observe-collab-text.ts +6 -6
  150. package/corpus/templates/design/app/pages/design-editor/effects/publish-agent-selection-context.ts +1 -1
  151. package/corpus/templates/design/app/pages/design-editor/effects/seed-collab-content.ts +12 -15
  152. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +5 -59
  153. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +8 -0
  154. package/corpus/templates/design/app/pages/design-editor/types.ts +3 -3
  155. package/corpus/templates/design/app/routes.ts +3 -1
  156. package/corpus/templates/design/changelog/2026-08-20-canvas-edits-patch-the-frame-instead-of-rebuilding-it.md +6 -0
  157. package/corpus/templates/design/changelog/2026-08-21-builder-design-system-imports-reconcile-after-indexing.md +6 -0
  158. package/corpus/templates/design/changelog/2026-08-21-draw-mode-needs-shift-y.md +6 -0
  159. package/corpus/templates/design/changelog/2026-08-21-eyedropper-shortcut.md +6 -0
  160. package/corpus/templates/design/changelog/2026-08-21-figma-style-alignment-guides-and-snapping.md +6 -0
  161. package/corpus/templates/design/changelog/2026-08-21-group-transforms-keep-the-selection.md +6 -0
  162. package/corpus/templates/design/changelog/2026-08-21-inspector-fields-keep-focus-on-enter.md +6 -0
  163. package/corpus/templates/design/changelog/2026-08-21-pen-alt-keeps-the-incoming-handle.md +6 -0
  164. package/corpus/templates/design/changelog/2026-08-21-pen-on-the-board-creates-one-vector.md +6 -0
  165. package/corpus/templates/design/changelog/2026-08-21-scale-a-multi-selection-from-the-group-handles.md +6 -0
  166. package/corpus/templates/design/changelog/2026-08-21-scale-resizes-text-with-the-object.md +6 -0
  167. package/corpus/templates/design/changelog/2026-08-21-selecting-another-object-keeps-the-scale-tool-armed.md +6 -0
  168. package/corpus/templates/design/changelog/2026-08-21-the-shape-tool-remembers-the-shape-you-picked.md +6 -0
  169. package/corpus/templates/design/changelog/2026-08-21-vectors-drawn-in-a-frame-land-where-you-drew-them.md +6 -0
  170. package/corpus/templates/design/changelog/2026-08-22-multi-screen-generation-no-longer-loses-a-saved-screens-layo.md +6 -0
  171. package/corpus/templates/design/changelog/2026-08-22-rename-and-search-fields-are-labeled-for-screen-readers.md +6 -0
  172. package/corpus/templates/design/package.json +2 -0
  173. package/corpus/templates/design/server/lib/builder-design-system-proxy.ts +311 -0
  174. package/corpus/templates/design/shared/canvas-math.ts +612 -206
  175. package/corpus/templates/design/shared/pen-path.ts +37 -0
  176. package/corpus/templates/design/vitest.config.ts +7 -1
  177. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +11 -4
  178. package/corpus/templates/dispatch/actions/list-workspace-connections.ts +34 -3
  179. package/corpus/templates/dispatch/app/routes/integrations.tsx +55 -21
  180. package/corpus/templates/dispatch/app/routes.ts +3 -1
  181. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +11 -4
  182. package/corpus/templates/factory/.env.example +2 -7
  183. package/corpus/templates/factory/AGENTS.md +3 -0
  184. package/corpus/templates/factory/README.md +5 -3
  185. package/corpus/templates/factory/actions/create-factory.ts +16 -3
  186. package/corpus/templates/factory/actions/get-slack-feedback-context.ts +2 -0
  187. package/corpus/templates/factory/actions/get-triage-item.ts +2 -0
  188. package/corpus/templates/factory/actions/list-factory-audit.ts +116 -36
  189. package/corpus/templates/factory/actions/list-factory-automations.ts +2 -1
  190. package/corpus/templates/factory/actions/list-triage-items.ts +22 -19
  191. package/corpus/templates/factory/actions/run-factory-automation.ts +7 -3
  192. package/corpus/templates/factory/actions/save-factory-automation.ts +5 -2
  193. package/corpus/templates/factory/actions/save-triage-config.ts +2 -8
  194. package/corpus/templates/factory/actions/start-builder-for-item.ts +21 -0
  195. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +229 -297
  196. package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +397 -247
  197. package/corpus/templates/factory/app/components/factory/FactorySourceSettingsGroup.tsx +33 -0
  198. package/corpus/templates/factory/app/components/factory/NewFactoryForm.tsx +202 -162
  199. package/corpus/templates/factory/app/i18n/en-US.ts +32 -4
  200. package/corpus/templates/factory/app/routes/factory.tsx +84 -11
  201. package/corpus/templates/factory/app/routes.ts +3 -1
  202. package/corpus/templates/factory/changelog/2026-08-21-activity-runs-use-automation-display-names.md +6 -0
  203. package/corpus/templates/factory/changelog/2026-08-21-create-and-settings-source-cards.md +6 -0
  204. package/corpus/templates/factory/changelog/2026-08-21-keep-automations-visible-while-running.md +6 -0
  205. package/corpus/templates/factory/changelog/2026-08-21-nested-factory-automations-can-poll.md +6 -0
  206. package/corpus/templates/factory/changelog/2026-08-21-settings-sticky-unsaved-bar.md +6 -0
  207. package/corpus/templates/factory/server/connectors/credentials.ts +10 -5
  208. package/corpus/templates/factory/server/lib/factory-audit-report.ts +412 -0
  209. package/corpus/templates/factory/server/lib/factory-config-reconcile.ts +321 -0
  210. package/corpus/templates/factory/server/lib/factory-scope.ts +25 -2
  211. package/corpus/templates/factory/server/lib/require-factory-automation.ts +13 -4
  212. package/corpus/templates/factory/server/plugins/factory-migrations.ts +148 -4
  213. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +4 -6
  214. package/corpus/templates/factory/vitest.config.ts +17 -2
  215. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +11 -4
  216. package/corpus/templates/forms/app/routes/_app.settings.tsx +4 -1
  217. package/corpus/templates/forms/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  218. package/corpus/templates/forms/server/lib/public-form-ssr.ts +11 -1
  219. package/corpus/templates/forms/vitest.config.ts +1 -0
  220. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +11 -4
  221. package/corpus/templates/macros/app/routes.ts +3 -1
  222. package/corpus/templates/macros/vitest.config.ts +6 -1
  223. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +11 -4
  224. package/corpus/templates/mail/actions/manage-gmail-filters.ts +10 -2
  225. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +100 -37
  226. package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +14 -2
  227. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +66 -36
  228. package/corpus/templates/mail/app/hooks/use-google-auth.ts +2 -0
  229. package/corpus/templates/mail/app/lib/google-oauth-setup.ts +17 -0
  230. package/corpus/templates/mail/app/pages/InboxPage.tsx +69 -9
  231. package/corpus/templates/mail/app/routes/$.tsx +9 -0
  232. package/corpus/templates/mail/app/routes/$view.$threadId.tsx +23 -1
  233. package/corpus/templates/mail/app/routes/$view.tsx +47 -1
  234. package/corpus/templates/mail/app/routes.ts +3 -1
  235. package/corpus/templates/mail/changelog/2026-08-22-gmail-can-now-connect-with-the-shared-google-oauth.md +6 -0
  236. package/corpus/templates/mail/changelog/2026-08-22-gmail-filters-now-shows-the-real-error.md +6 -0
  237. package/corpus/templates/mail/changelog/2026-08-22-unknown-mail-urls-now-show-the-404-page.md +6 -0
  238. package/corpus/templates/mail/server/handlers/google-auth.ts +11 -2
  239. package/corpus/templates/mail/server/lib/google-auth.ts +92 -12
  240. package/corpus/templates/mail/server/onboarding.ts +66 -18
  241. package/corpus/templates/mail/vitest.config.ts +6 -1
  242. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +11 -4
  243. package/corpus/templates/plan/app/routes/settings.tsx +4 -1
  244. package/corpus/templates/plan/app/routes.ts +3 -1
  245. package/corpus/templates/plan/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  246. package/corpus/templates/plan/netlify.toml +1 -1
  247. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +11 -4
  248. package/corpus/templates/slides/actions/patch-deck.ts +79 -10
  249. package/corpus/templates/slides/actions/update-slide.ts +11 -1
  250. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +14 -4
  251. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +10 -52
  252. package/corpus/templates/slides/app/components/editor/GoogleDocImportHint.tsx +8 -53
  253. package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +9 -75
  254. package/corpus/templates/slides/app/components/editor/GoogleSlidesReferenceImport.tsx +8 -60
  255. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +10 -2
  256. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +19 -7
  257. package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +49 -36
  258. package/corpus/templates/slides/app/routes/access-request.approve.tsx +16 -9
  259. package/corpus/templates/slides/app/routes.ts +3 -1
  260. package/corpus/templates/slides/changelog/2026-08-22-already-uploaded-chat-images-are-no-longer-dropped.md +6 -0
  261. package/corpus/templates/slides/changelog/2026-08-22-google-drive-and-slides-can-now-connect-with-the-shared-google-oauth.md +6 -0
  262. package/corpus/templates/slides/changelog/2026-08-22-multi-slide-repairs-now-report-slides-that-still-overflow.md +6 -0
  263. package/corpus/templates/slides/changelog/2026-08-22-update-slide-now-reports-which-batched-edit-was-skipped.md +6 -0
  264. package/corpus/templates/slides/server/handlers/google-docs-auth.ts +52 -1
  265. package/corpus/templates/slides/server/lib/chat-attachments.ts +29 -3
  266. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +66 -16
  267. package/corpus/templates/slides/server/lib/slide-content-patch.ts +13 -2
  268. package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -2
  269. package/corpus/templates/slides/tsconfig.json +5 -0
  270. package/corpus/templates/slides/vitest.config.ts +6 -1
  271. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +11 -4
  272. package/corpus/templates/tasks/app/routes/settings.tsx +4 -1
  273. package/corpus/templates/tasks/app/routes.ts +3 -1
  274. package/corpus/templates/tasks/changelog/2026-08-22-the-extensions-link-now-opens-the-extensions-tab-instead-o.md +6 -0
  275. package/corpus/templates/tasks/vitest.config.ts +7 -1
  276. package/dist/action.d.ts +91 -0
  277. package/dist/action.js +50 -0
  278. package/dist/agent/abort-reasons.d.ts +38 -0
  279. package/dist/agent/abort-reasons.js +49 -0
  280. package/dist/agent/engine/ai-sdk-engine.js +8 -5
  281. package/dist/agent/engine/anthropic-engine.js +7 -5
  282. package/dist/agent/engine/first-event-timeout.d.ts +42 -17
  283. package/dist/agent/engine/first-event-timeout.js +67 -25
  284. package/dist/agent/production-agent.d.ts +23 -0
  285. package/dist/agent/production-agent.js +107 -102
  286. package/dist/agent/run-loop-with-resume.d.ts +2 -28
  287. package/dist/agent/run-loop-with-resume.js +25 -40
  288. package/dist/agent/run-manager.js +5 -4
  289. package/dist/agent/run-store.d.ts +55 -0
  290. package/dist/agent/run-store.js +124 -1
  291. package/dist/agent/tool-search.js +2 -1
  292. package/dist/agent/types.d.ts +9 -4
  293. package/dist/app-config/configuration-error.d.ts +11 -0
  294. package/dist/app-config/configuration-error.js +14 -0
  295. package/dist/app-config/index.d.ts +1 -0
  296. package/dist/app-config/index.js +1 -0
  297. package/dist/app-config/integrations.d.ts +1 -0
  298. package/dist/app-config/integrations.js +10 -0
  299. package/dist/app-config/plugins.d.ts +34 -0
  300. package/dist/app-config/plugins.js +39 -0
  301. package/dist/app-config/run-lifecycle-invariants.d.ts +18 -9
  302. package/dist/app-config/run-lifecycle-invariants.js +18 -25
  303. package/dist/app-config/schema.d.ts +16 -0
  304. package/dist/app-config/schema.js +2 -0
  305. package/dist/chat-threads/schema-migrations.js +20 -0
  306. package/dist/chat-threads/store.js +21 -4
  307. package/dist/cli/native-dependencies.d.ts +4 -0
  308. package/dist/cli/native-dependencies.js +15 -0
  309. package/dist/client/EnvironmentBadge.d.ts +1 -1
  310. package/dist/client/EnvironmentBadge.js +40 -5
  311. package/dist/client/MultiTabAssistantChat.d.ts +1 -1
  312. package/dist/client/MultiTabAssistantChat.js +35 -14
  313. package/dist/client/agent-chat/index.d.ts +1 -1
  314. package/dist/client/agent-chat/index.js +1 -1
  315. package/dist/client/agent-page/use-jobs.d.ts +2 -1
  316. package/dist/client/agent-page/use-jobs.js +3 -5
  317. package/dist/client/agent-sidebar-state.js +3 -1
  318. package/dist/client/blocks/library/code-tabs.js +5 -0
  319. package/dist/client/blocks/library/code.js +1 -0
  320. package/dist/client/chat-first/apps-rail.js +2 -2
  321. package/dist/client/chat-model-groups.d.ts +12 -0
  322. package/dist/client/chat-model-groups.js +3 -2
  323. package/dist/client/integrations/GoogleProductLogo.d.ts +5 -0
  324. package/dist/client/integrations/GoogleProductLogo.js +45 -0
  325. package/dist/client/integrations/index.d.ts +2 -0
  326. package/dist/client/integrations/index.js +2 -0
  327. package/dist/client/integrations/workspace-provider-oauth.d.ts +8 -0
  328. package/dist/client/integrations/workspace-provider-oauth.js +13 -0
  329. package/dist/client/resources/mcp-integration-catalog.js +0 -29
  330. package/dist/client/settings/SettingsTabsPage.js +10 -6
  331. package/dist/client/sharing/ShareButton.js +11 -2
  332. package/dist/client/use-chat-models.d.ts +6 -0
  333. package/dist/client/use-chat-models.js +10 -0
  334. package/dist/client/use-db-sync.js +27 -9
  335. package/dist/connections/catalog.d.ts +111 -9
  336. package/dist/connections/catalog.js +86 -30
  337. package/dist/db/create-get-db.js +18 -0
  338. package/dist/db/ddl-guard.d.ts +0 -4
  339. package/dist/db/ddl-guard.js +46 -0
  340. package/dist/deploy/build.d.ts +19 -0
  341. package/dist/deploy/build.js +190 -16
  342. package/dist/deploy/function-bundle.d.ts +45 -0
  343. package/dist/deploy/function-bundle.js +337 -0
  344. package/dist/deploy/workspace-deploy.js +19 -1
  345. package/dist/eject/workspace-connections.js +4 -0
  346. package/dist/email-catalog/registry.d.ts +4 -0
  347. package/dist/email-catalog/registry.js +79 -14
  348. package/dist/extensions/content-patch.js +14 -2
  349. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  350. package/dist/integrations/plugin.d.ts +10 -0
  351. package/dist/integrations/plugin.js +40 -6
  352. package/dist/jobs/actions/run-automation-now.d.ts +2 -1
  353. package/dist/jobs/actions/run-automation-now.js +11 -5
  354. package/dist/jobs/frontmatter.js +53 -2
  355. package/dist/jobs/run-now.d.ts +11 -1
  356. package/dist/jobs/run-now.js +42 -7
  357. package/dist/jobs/scheduler.d.ts +1 -0
  358. package/dist/jobs/scheduler.js +2 -1
  359. package/dist/localization/core-messages/ar-SA.js +3 -0
  360. package/dist/localization/core-messages/de-DE.js +3 -0
  361. package/dist/localization/core-messages/en-US.d.ts +3 -0
  362. package/dist/localization/core-messages/en-US.js +3 -0
  363. package/dist/localization/core-messages/es-ES.js +3 -0
  364. package/dist/localization/core-messages/fr-FR.js +3 -0
  365. package/dist/localization/core-messages/hi-IN.js +3 -0
  366. package/dist/localization/core-messages/ja-JP.js +3 -0
  367. package/dist/localization/core-messages/ko-KR.js +3 -0
  368. package/dist/localization/core-messages/pt-BR.js +3 -0
  369. package/dist/localization/core-messages/zh-CN.js +3 -0
  370. package/dist/localization/core-messages/zh-TW.js +3 -0
  371. package/dist/localization/core-messages.d.ts +3 -0
  372. package/dist/localization/default-messages.d.ts +2 -5
  373. package/dist/localization/default-messages.js +2 -5
  374. package/dist/mcp/build-server.d.ts +9 -0
  375. package/dist/mcp/build-server.js +37 -8
  376. package/dist/mcp-client/oauth-client.d.ts +7 -0
  377. package/dist/mcp-client/oauth-client.js +12 -1
  378. package/dist/oauth-tokens/index.d.ts +1 -1
  379. package/dist/oauth-tokens/index.js +1 -1
  380. package/dist/oauth-tokens/lifecycle.d.ts +11 -0
  381. package/dist/oauth-tokens/lifecycle.js +17 -0
  382. package/dist/oauth-tokens/store.js +7 -0
  383. package/dist/observability/posthog-ai.d.ts +15 -1
  384. package/dist/observability/posthog-ai.js +24 -12
  385. package/dist/observability/routes.d.ts +3 -3
  386. package/dist/observability/traces.js +158 -28
  387. package/dist/onboarding/app-profile.js +2 -2
  388. package/dist/onboarding/plugin.js +10 -2
  389. package/dist/onboarding/types.d.ts +2 -0
  390. package/dist/provider-api/actions/custom-provider-registration.d.ts +1 -1
  391. package/dist/provider-api/actions/provider-api.d.ts +2 -2
  392. package/dist/provider-api/index.js +2 -0
  393. package/dist/resources/store.js +13 -4
  394. package/dist/scripts/agent-engines/list-agent-engines.js +29 -3
  395. package/dist/secrets/register-framework-secrets.js +1 -1
  396. package/dist/server/action-discovery.js +5 -0
  397. package/dist/server/agent-chat/action-filters-a2a.d.ts +27 -3
  398. package/dist/server/agent-chat/action-filters-a2a.js +48 -9
  399. package/dist/server/agent-chat-plugin.js +36 -9
  400. package/dist/server/agent-discovery.js +43 -20
  401. package/dist/server/auth.js +18 -16
  402. package/dist/server/beta-opt-out-html.js +45 -4
  403. package/dist/server/better-auth-instance.d.ts +2 -1
  404. package/dist/server/better-auth-instance.js +23 -7
  405. package/dist/server/builder-design-systems.d.ts +4 -1
  406. package/dist/server/builder-design-systems.js +87 -6
  407. package/dist/server/builder-oauth.d.ts +1 -7
  408. package/dist/server/builder-oauth.js +80 -163
  409. package/dist/server/core-routes-plugin.d.ts +29 -0
  410. package/dist/server/core-routes-plugin.js +100 -20
  411. package/dist/server/default-plugins.d.ts +18 -0
  412. package/dist/server/default-plugins.js +22 -0
  413. package/dist/server/edge.d.ts +1 -0
  414. package/dist/server/edge.js +1 -0
  415. package/dist/server/framework-request-handler.js +31 -3
  416. package/dist/server/google-oauth.d.ts +3 -0
  417. package/dist/server/google-oauth.js +3 -0
  418. package/dist/server/index.d.ts +4 -4
  419. package/dist/server/index.js +3 -3
  420. package/dist/server/onboarding-html.js +37 -3
  421. package/dist/server/realtime-token.d.ts +1 -1
  422. package/dist/server/transcribe-voice.d.ts +1 -1
  423. package/dist/server/workspace-provider-oauth.d.ts +6 -1
  424. package/dist/server/workspace-provider-oauth.js +72 -20
  425. package/dist/shared/agent-sidebar-url.d.ts +1 -0
  426. package/dist/shared/agent-sidebar-url.js +1 -0
  427. package/dist/shared/environment-lanes.d.ts +2 -0
  428. package/dist/shared/environment-lanes.js +3 -1
  429. package/dist/shared/index.d.ts +3 -1
  430. package/dist/shared/index.js +3 -1
  431. package/dist/shared/surface-visibility.d.ts +31 -0
  432. package/dist/shared/surface-visibility.js +57 -0
  433. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  434. package/dist/templates/chat/app/routes.ts +3 -1
  435. package/dist/templates/chat/vitest.config.ts +8 -0
  436. package/dist/templates/default/.agents/skills/secrets/SKILL.md +11 -4
  437. package/dist/templates/default/app/routes.ts +3 -1
  438. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
  439. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
  440. package/dist/tracking/registry.d.ts +11 -0
  441. package/dist/tracking/registry.js +5 -2
  442. package/dist/triggers/actions.js +10 -3
  443. package/dist/usage/store.js +23 -3
  444. package/dist/user-profile/actions/get-auth-methods.js +18 -5
  445. package/dist/vite/client.js +24 -5
  446. package/docs/content/actions-access-control.mdx +43 -4
  447. package/docs/content/actions-defining.mdx +16 -0
  448. package/docs/content/template-clips-capture-everywhere.mdx +29 -30
  449. package/docs/content/template-clips-developers.mdx +4 -4
  450. package/docs/content/template-clips.mdx +3 -1
  451. package/package.json +2 -2
  452. package/src/eject/workspace-connections.ts +4 -0
  453. package/src/templates/chat/.agents/skills/secrets/SKILL.md +11 -4
  454. package/src/templates/chat/app/routes.ts +3 -1
  455. package/src/templates/chat/vitest.config.ts +8 -0
  456. package/src/templates/default/.agents/skills/secrets/SKILL.md +11 -4
  457. package/src/templates/default/app/routes.ts +3 -1
  458. package/src/templates/headless/.agents/skills/secrets/SKILL.md +11 -4
  459. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +11 -4
@@ -0,0 +1,33 @@
1
+ import { SettingsGroup } from "@agent-native/core/client/settings";
2
+ import type { ReactNode } from "react";
3
+
4
+ export function FactorySourceSettingsGroup({
5
+ title,
6
+ description,
7
+ optionalLabel,
8
+ children,
9
+ }: {
10
+ title: string;
11
+ description?: string;
12
+ optionalLabel: string;
13
+ children: ReactNode;
14
+ }) {
15
+ return (
16
+ <section>
17
+ <header className="mb-2.5">
18
+ <div className="flex items-baseline gap-2">
19
+ <h2 className="text-sm font-semibold text-foreground">{title}</h2>
20
+ <span className="text-xs font-normal text-muted-foreground">
21
+ {optionalLabel}
22
+ </span>
23
+ </div>
24
+ {description ? (
25
+ <p className="mt-1 text-xs leading-5 text-muted-foreground">
26
+ {description}
27
+ </p>
28
+ ) : null}
29
+ </header>
30
+ <SettingsGroup variant="soft">{children}</SettingsGroup>
31
+ </section>
32
+ );
33
+ }
@@ -1,28 +1,28 @@
1
1
  import { useActionMutation } from "@agent-native/core/client/hooks";
2
2
  import { useT } from "@agent-native/core/client/i18n";
3
- import {
4
- IconAlertCircle,
5
- IconBrandGithub,
6
- IconBrandSlack,
7
- IconLoader2,
8
- } from "@tabler/icons-react";
3
+ import { SettingsGroup, SettingsRow } from "@agent-native/core/client/settings";
4
+ import { IconLoader2 } from "@tabler/icons-react";
9
5
  import { useState } from "react";
10
6
  import { Link } from "react-router";
11
7
  import { toast } from "sonner";
12
8
 
13
9
  import { Button } from "@/components/ui/button";
14
- import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
15
10
  import { Input } from "@/components/ui/input";
16
- import { Label } from "@/components/ui/label";
17
11
  import { Switch } from "@/components/ui/switch";
18
12
  import { Textarea } from "@/components/ui/textarea";
19
13
 
14
+ import { FactorySourceSettingsGroup } from "./FactorySourceSettingsGroup";
15
+
20
16
  type CreateFactoryResult = {
21
17
  ok: boolean;
22
18
  factoryId: string;
23
19
  name: string;
24
20
  };
25
21
 
22
+ const fieldControlClass = "h-9 w-full sm:w-64";
23
+ const selectControlClass =
24
+ "h-9 w-full rounded-md border border-input bg-background px-3 text-sm sm:w-64";
25
+
26
26
  export function NewFactoryForm({
27
27
  onCreated,
28
28
  }: {
@@ -32,8 +32,12 @@ export function NewFactoryForm({
32
32
  const createMutation = useActionMutation("create-factory");
33
33
  const [name, setName] = useState("");
34
34
  const [description, setDescription] = useState("");
35
+ const [slackWorkspace, setSlackWorkspace] = useState<"primary" | "secondary">(
36
+ "primary",
37
+ );
35
38
  const [slackChannelId, setSlackChannelId] = useState("");
36
39
  const [slackChannelName, setSlackChannelName] = useState("");
40
+ const [builderSlackUserId, setBuilderSlackUserId] = useState("");
37
41
  const [observeSlack, setObserveSlack] = useState(false);
38
42
  const [repository, setRepository] = useState("");
39
43
  const [observeGithub, setObserveGithub] = useState(false);
@@ -49,16 +53,26 @@ export function NewFactoryForm({
49
53
  toast.error(t("factoryRoute.createFactoryNameRequired"));
50
54
  return;
51
55
  }
56
+ const hasSlackFields =
57
+ slackChannelId.trim() ||
58
+ slackChannelName.trim() ||
59
+ builderSlackUserId.trim() ||
60
+ observeSlack ||
61
+ slackWorkspace !== "primary";
52
62
  try {
53
63
  const result = (await createMutation.mutateAsync({
54
64
  name: trimmedName,
55
65
  ...(description.trim() ? { description: description.trim() } : {}),
66
+ ...(hasSlackFields ? { slackWorkspace } : {}),
56
67
  ...(slackChannelId.trim()
57
68
  ? { slackChannelId: slackChannelId.trim() }
58
69
  : {}),
59
70
  ...(slackChannelName.trim()
60
71
  ? { slackChannelName: slackChannelName.trim() }
61
72
  : {}),
73
+ ...(builderSlackUserId.trim()
74
+ ? { builderSlackUserId: builderSlackUserId.trim() }
75
+ : {}),
62
76
  ...(observeSlack ? { observeSlack: true } : {}),
63
77
  ...(repository.trim() ? { repository: repository.trim() } : {}),
64
78
  ...(observeGithub ? { observeGithub: true } : {}),
@@ -86,164 +100,190 @@ export function NewFactoryForm({
86
100
 
87
101
  return (
88
102
  <form
89
- className="mx-auto flex w-full max-w-2xl flex-col gap-6"
103
+ className="mx-auto flex w-full max-w-3xl flex-col gap-6"
90
104
  onSubmit={(event) => void handleSubmit(event)}
91
105
  >
92
- <div className="space-y-2">
93
- <Label htmlFor="new-factory-name">
94
- {t("factoryRoute.createFactoryNameLabel")}
95
- </Label>
96
- <Input
97
- id="new-factory-name"
98
- value={name}
99
- onChange={(event) => setName(event.target.value)}
100
- placeholder={t("factoryRoute.newFactory")}
101
- autoFocus
106
+ <SettingsGroup variant="soft">
107
+ <SettingsRow
108
+ label={t("factoryRoute.createFactoryNameLabel")}
109
+ control={
110
+ <Input
111
+ id="new-factory-name"
112
+ value={name}
113
+ onChange={(event) => setName(event.target.value)}
114
+ placeholder={t("factoryRoute.newFactory")}
115
+ autoFocus
116
+ className={fieldControlClass}
117
+ />
118
+ }
102
119
  />
103
- </div>
104
- <div className="space-y-2">
105
- <Label htmlFor="new-factory-description">
106
- {t("factoryRoute.createFactoryDescriptionLabel")}
107
- </Label>
108
- <Textarea
109
- id="new-factory-description"
110
- value={description}
111
- onChange={(event) => setDescription(event.target.value)}
112
- rows={2}
120
+ <SettingsRow
121
+ label={
122
+ <span className="flex items-baseline gap-2">
123
+ <span>{t("factoryRoute.createFactoryDescriptionLabel")}</span>
124
+ <span className="text-xs font-normal text-muted-foreground">
125
+ {t("factoryInspector.optional")}
126
+ </span>
127
+ </span>
128
+ }
129
+ >
130
+ <Textarea
131
+ id="new-factory-description"
132
+ aria-label={t("factoryRoute.createFactoryDescriptionLabel")}
133
+ value={description}
134
+ onChange={(event) => setDescription(event.target.value)}
135
+ rows={2}
136
+ />
137
+ </SettingsRow>
138
+ </SettingsGroup>
139
+ <FactorySourceSettingsGroup
140
+ title={t("factoryRoute.slackSource")}
141
+ description={t("factoryRoute.slackSourceDescription")}
142
+ optionalLabel={t("factoryInspector.optional")}
143
+ >
144
+ <SettingsRow
145
+ label={t("triage.slackWorkspace")}
146
+ control={
147
+ <select
148
+ aria-label={t("triage.slackWorkspace")}
149
+ value={slackWorkspace}
150
+ onChange={(event) =>
151
+ setSlackWorkspace(event.target.value as "primary" | "secondary")
152
+ }
153
+ className={selectControlClass}
154
+ >
155
+ <option value="primary">primary</option>
156
+ <option value="secondary">secondary</option>
157
+ </select>
158
+ }
113
159
  />
114
- </div>
115
- <div className="space-y-4">
116
- <Card>
117
- <CardHeader className="px-4 pb-0 pt-4">
118
- <CardTitle className="flex items-center gap-2 text-base">
119
- <IconBrandSlack className="size-4" />
120
- {t("factoryRoute.createFactorySlackSourceOptional")}
121
- </CardTitle>
122
- </CardHeader>
123
- <CardContent className="space-y-3 px-4 pb-4">
124
- <div className="space-y-2">
125
- <Label htmlFor="new-factory-slack-channel">
126
- {t("triage.slackChannelId")}
127
- </Label>
128
- <Input
129
- id="new-factory-slack-channel"
130
- value={slackChannelId}
131
- onChange={(event) => setSlackChannelId(event.target.value)}
132
- placeholder={t("triage.slackChannelPlaceholder")}
133
- />
134
- </div>
135
- <div className="space-y-2">
136
- <Label htmlFor="new-factory-slack-channel-name">
137
- {t("triage.slackChannelName")}
138
- </Label>
139
- <Input
140
- id="new-factory-slack-channel-name"
141
- value={slackChannelName}
142
- onChange={(event) => setSlackChannelName(event.target.value)}
143
- placeholder={t("triage.slackChannelNamePlaceholder")}
144
- />
145
- </div>
146
- <div className="flex items-center justify-between gap-3">
147
- <Label htmlFor="new-factory-observe-slack">
148
- {t("factoryRoute.createFactoryObserveSlack")}
149
- </Label>
150
- <Switch
151
- id="new-factory-observe-slack"
152
- checked={observeSlack}
153
- onCheckedChange={(checked) => setObserveSlack(checked === true)}
154
- />
155
- </div>
156
- </CardContent>
157
- </Card>
158
- <Card>
159
- <CardHeader className="px-4 pb-0 pt-4">
160
- <CardTitle className="flex items-center gap-2 text-base">
161
- <IconBrandGithub className="size-4" />
162
- {t("factoryRoute.createFactoryGithubSourceOptional")}
163
- </CardTitle>
164
- </CardHeader>
165
- <CardContent className="space-y-3 px-4 pb-4">
166
- <div className="space-y-2">
167
- <Label htmlFor="new-factory-repository">
168
- {t("triage.repository")}
169
- </Label>
170
- <Input
171
- id="new-factory-repository"
172
- value={repository}
173
- onChange={(event) => setRepository(event.target.value)}
174
- placeholder={t("triage.repositoryPlaceholder")}
175
- />
176
- </div>
177
- <div className="flex items-center justify-between gap-3">
178
- <Label htmlFor="new-factory-observe-github">
179
- {t("factoryRoute.createFactoryObserveGithub")}
180
- </Label>
181
- <Switch
182
- id="new-factory-observe-github"
183
- checked={observeGithub}
184
- onCheckedChange={(checked) =>
185
- setObserveGithub(checked === true)
186
- }
187
- />
188
- </div>
189
- </CardContent>
190
- </Card>
191
- <Card>
192
- <CardHeader className="px-4 pb-0 pt-4">
193
- <CardTitle className="flex items-center gap-2 text-base">
194
- <IconAlertCircle className="size-4" />
195
- {t("factoryRoute.createFactorySentrySourceOptional")}
196
- </CardTitle>
197
- </CardHeader>
198
- <CardContent className="space-y-3 px-4 pb-4">
199
- <div className="space-y-2">
200
- <Label htmlFor="new-factory-sentry-org">
201
- {t("triage.sentryOrgSlug")}
202
- </Label>
203
- <Input
204
- id="new-factory-sentry-org"
205
- value={sentryOrgSlug}
206
- onChange={(event) => setSentryOrgSlug(event.target.value)}
207
- placeholder={t("triage.sentryOrgPlaceholder")}
208
- />
209
- </div>
210
- <div className="space-y-2">
211
- <Label htmlFor="new-factory-sentry-project">
212
- {t("triage.sentryProjectSlug")}
213
- </Label>
214
- <Input
215
- id="new-factory-sentry-project"
216
- value={sentryProjectSlug}
217
- onChange={(event) => setSentryProjectSlug(event.target.value)}
218
- placeholder={t("triage.sentryProjectPlaceholder")}
219
- />
220
- </div>
221
- <div className="space-y-2">
222
- <Label htmlFor="new-factory-sentry-environment">
223
- {t("triage.sentryEnvironment")}
224
- </Label>
225
- <Input
226
- id="new-factory-sentry-environment"
227
- value={sentryEnvironment}
228
- onChange={(event) => setSentryEnvironment(event.target.value)}
229
- placeholder={t("triage.sentryEnvironmentPlaceholder")}
230
- />
231
- </div>
232
- <div className="flex items-center justify-between gap-3">
233
- <Label htmlFor="new-factory-observe-sentry">
234
- {t("factoryRoute.createFactoryObserveSentry")}
235
- </Label>
236
- <Switch
237
- id="new-factory-observe-sentry"
238
- checked={observeSentry}
239
- onCheckedChange={(checked) =>
240
- setObserveSentry(checked === true)
241
- }
242
- />
243
- </div>
244
- </CardContent>
245
- </Card>
246
- </div>
160
+ <SettingsRow
161
+ label={t("triage.slackChannelId")}
162
+ control={
163
+ <Input
164
+ aria-label={t("triage.slackChannelId")}
165
+ value={slackChannelId}
166
+ onChange={(event) => setSlackChannelId(event.target.value)}
167
+ placeholder={t("triage.slackChannelPlaceholder")}
168
+ className={fieldControlClass}
169
+ />
170
+ }
171
+ />
172
+ <SettingsRow
173
+ label={t("triage.slackChannelName")}
174
+ control={
175
+ <Input
176
+ aria-label={t("triage.slackChannelName")}
177
+ value={slackChannelName}
178
+ onChange={(event) => setSlackChannelName(event.target.value)}
179
+ placeholder={t("triage.slackChannelNamePlaceholder")}
180
+ className={fieldControlClass}
181
+ />
182
+ }
183
+ />
184
+ <SettingsRow
185
+ label={t("triage.builderSlackUserId")}
186
+ control={
187
+ <Input
188
+ aria-label={t("triage.builderSlackUserId")}
189
+ value={builderSlackUserId}
190
+ onChange={(event) => setBuilderSlackUserId(event.target.value)}
191
+ placeholder={t("triage.builderSlackUserIdPlaceholder")}
192
+ className={fieldControlClass}
193
+ />
194
+ }
195
+ />
196
+ <SettingsRow
197
+ label={t("triage.enablePolling")}
198
+ control={
199
+ <Switch
200
+ aria-label={t("triage.enablePolling")}
201
+ checked={observeSlack}
202
+ onCheckedChange={(checked) => setObserveSlack(checked === true)}
203
+ />
204
+ }
205
+ />
206
+ </FactorySourceSettingsGroup>
207
+ <FactorySourceSettingsGroup
208
+ title={t("factoryRoute.githubSource")}
209
+ description={t("factoryRoute.githubSourceDescription")}
210
+ optionalLabel={t("factoryInspector.optional")}
211
+ >
212
+ <SettingsRow
213
+ label={t("triage.repository")}
214
+ control={
215
+ <Input
216
+ aria-label={t("triage.repository")}
217
+ value={repository}
218
+ onChange={(event) => setRepository(event.target.value)}
219
+ placeholder={t("triage.repositoryPlaceholder")}
220
+ className={fieldControlClass}
221
+ />
222
+ }
223
+ />
224
+ <SettingsRow
225
+ label={t("triage.enableGithubPolling")}
226
+ control={
227
+ <Switch
228
+ aria-label={t("triage.enableGithubPolling")}
229
+ checked={observeGithub}
230
+ onCheckedChange={(checked) => setObserveGithub(checked === true)}
231
+ />
232
+ }
233
+ />
234
+ </FactorySourceSettingsGroup>
235
+ <FactorySourceSettingsGroup
236
+ title={t("factoryRoute.sentrySource")}
237
+ description={t("factoryRoute.sentrySourceDescription")}
238
+ optionalLabel={t("factoryInspector.optional")}
239
+ >
240
+ <SettingsRow
241
+ label={t("triage.sentryOrgSlug")}
242
+ control={
243
+ <Input
244
+ aria-label={t("triage.sentryOrgSlug")}
245
+ value={sentryOrgSlug}
246
+ onChange={(event) => setSentryOrgSlug(event.target.value)}
247
+ placeholder={t("triage.sentryOrgPlaceholder")}
248
+ className={fieldControlClass}
249
+ />
250
+ }
251
+ />
252
+ <SettingsRow
253
+ label={t("triage.sentryProjectSlug")}
254
+ control={
255
+ <Input
256
+ aria-label={t("triage.sentryProjectSlug")}
257
+ value={sentryProjectSlug}
258
+ onChange={(event) => setSentryProjectSlug(event.target.value)}
259
+ placeholder={t("triage.sentryProjectPlaceholder")}
260
+ className={fieldControlClass}
261
+ />
262
+ }
263
+ />
264
+ <SettingsRow
265
+ label={t("triage.sentryEnvironment")}
266
+ control={
267
+ <Input
268
+ aria-label={t("triage.sentryEnvironment")}
269
+ value={sentryEnvironment}
270
+ onChange={(event) => setSentryEnvironment(event.target.value)}
271
+ placeholder={t("triage.sentryEnvironmentPlaceholder")}
272
+ className={fieldControlClass}
273
+ />
274
+ }
275
+ />
276
+ <SettingsRow
277
+ label={t("triage.enableSentryPolling")}
278
+ control={
279
+ <Switch
280
+ aria-label={t("triage.enableSentryPolling")}
281
+ checked={observeSentry}
282
+ onCheckedChange={(checked) => setObserveSentry(checked === true)}
283
+ />
284
+ }
285
+ />
286
+ </FactorySourceSettingsGroup>
247
287
  <div className="flex justify-end gap-2">
248
288
  <Button asChild type="button" variant="outline">
249
289
  <Link to="/factory">{t("factoryRoute.createFactoryCancel")}</Link>
@@ -112,9 +112,9 @@ const messages = {
112
112
  builderSlackUserIdPlaceholder: "For example, U096KN3EL2Y",
113
113
  repository: "Repository",
114
114
  repositoryPlaceholder: "For example, BuilderIO/agent-native",
115
- enablePolling: "Enable one-minute observation polling",
116
- enableGithubPolling: "Enable GitHub issue and pull-request polling",
117
- enableSentryPolling: "Enable daily Sentry error polling",
115
+ enablePolling: "Enable polling",
116
+ enableGithubPolling: "Enable polling",
117
+ enableSentryPolling: "Enable polling",
118
118
  sentryOrgSlug: "Sentry organization slug",
119
119
  sentryProjectSlug: "Sentry project slug",
120
120
  sentryEnvironment: "Sentry environment",
@@ -122,6 +122,8 @@ const messages = {
122
122
  sentryProjectPlaceholder: "Optional project slug",
123
123
  sentryEnvironmentPlaceholder: "For example, production",
124
124
  saveSettings: "Save settings",
125
+ unsavedSettings: "Unsaved changes",
126
+ discardSettingsChanges: "Discard",
125
127
  settingsError: "Could not save observation settings.",
126
128
  settingsSaved: "Observation settings saved.",
127
129
  approvalError: "Approval could not be started.",
@@ -137,11 +139,20 @@ const messages = {
137
139
  createFactorySubmit: "Create factory",
138
140
  createFactoryCancel: "Cancel",
139
141
  createFactoryNameLabel: "Name",
140
- createFactoryDescriptionLabel: "Description (optional)",
142
+ createFactoryDescriptionLabel: "What this factory does",
141
143
  createFactorySourcesOptional: "Sources (optional)",
142
144
  createFactorySlackSourceOptional: "Slack source (optional)",
143
145
  createFactoryGithubSourceOptional: "GitHub source (optional)",
144
146
  createFactorySentrySourceOptional: "Sentry source (optional)",
147
+ slackSource: "Slack",
148
+ githubSource: "GitHub",
149
+ sentrySource: "Sentry",
150
+ slackSourceDescription:
151
+ "Poll this channel to add Slack messages to the inbox.",
152
+ githubSourceDescription:
153
+ "Poll this repository to add issues and pull requests to the inbox.",
154
+ sentrySourceDescription:
155
+ "Poll this project to add unresolved errors to the inbox.",
145
156
  createFactoryObserveSlack: "Observe Slack channel",
146
157
  createFactoryObserveGithub: "Observe GitHub issues",
147
158
  createFactoryObserveSentry: "Observe Sentry errors",
@@ -222,6 +233,20 @@ const messages = {
222
233
  auditUxImpact: "UX impact",
223
234
  auditOwnerArea: "Owner area",
224
235
  auditGuardsLabel: "Guards",
236
+ auditTrace: "Trace",
237
+ auditWhy: "Why",
238
+ auditWhatHappened: "What happened",
239
+ auditInspectedOnly: "Inspected only",
240
+ auditNoNew: "No new items",
241
+ auditFailed: "{{count}} failed",
242
+ auditHeld: "{{count}} held",
243
+ auditDispatched: "{{count}} dispatched",
244
+ auditObserved: "{{count}} new",
245
+ auditScanned: "{{count}} scanned",
246
+ auditOutcomeHeld: "Held",
247
+ auditOutcomeDispatched: "Dispatched",
248
+ auditOutcomeFailed: "Dispatch failed",
249
+ auditOutcomeInspected: "Inspected",
225
250
  historyTab: "History",
226
251
  historyTitle: "Saved versions",
227
252
  historyLoading: "Loading saved versions",
@@ -290,8 +315,11 @@ const messages = {
290
315
  saveAutomation: "Save",
291
316
  automationSaved: "Saved",
292
317
  automationSaveFailed: "Could not save the automation.",
318
+ automationRunFailed: "Could not run the automation.",
319
+ automationRunning: "Running",
293
320
  runNow: "Run now",
294
321
  automationHealthTitle: "Scheduler health",
322
+ automationHealthStatus: "Status",
295
323
  automationHealthDescription:
296
324
  "The heartbeat shows whether the deployed recurring-job worker is still checking schedules.",
297
325
  automationHealthHealthy: "Healthy",