@agent-native/core 0.152.1 → 0.153.1

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 (927) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/adding-a-feature/SKILL.md +208 -0
  3. package/corpus/templates/analytics/.agents/skills/context-awareness/SKILL.md +206 -0
  4. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +6 -4
  5. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +73 -80
  6. package/corpus/templates/analytics/.agents/skills/portability/SKILL.md +107 -0
  7. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +339 -0
  8. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +3 -3
  9. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +1 -1
  10. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +1 -0
  11. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +116 -44
  12. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  13. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  14. package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +93 -0
  15. package/corpus/templates/analytics/actions/data-source-status.ts +4 -1
  16. package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +2 -2
  17. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +7 -2
  18. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +7 -1
  19. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +30 -32
  20. package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +10 -0
  21. package/corpus/templates/analytics/app/global.css +5 -1
  22. package/corpus/templates/analytics/app/lib/data-source-status.ts +3 -3
  23. package/corpus/templates/analytics/app/lib/resource-access.ts +6 -1
  24. package/corpus/templates/analytics/app/pages/DataSources.tsx +79 -51
  25. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  26. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -0
  27. package/corpus/templates/analytics/changelog/2026-08-12-analytics-sidebar-ask-toggle-and-compact-rail.md +6 -0
  28. package/corpus/templates/analytics/changelog/2026-08-12-data-source-statuses-now-distinguish-workspace-access-from-c.md +6 -0
  29. package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +559 -147
  30. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +79 -5
  31. package/corpus/templates/analytics/server/plugins/db.ts +84 -0
  32. package/corpus/templates/assets/.agents/skills/adding-a-feature/SKILL.md +208 -0
  33. package/corpus/templates/assets/.agents/skills/context-awareness/SKILL.md +206 -0
  34. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +73 -80
  35. package/corpus/templates/assets/.agents/skills/portability/SKILL.md +107 -0
  36. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +339 -0
  37. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +3 -3
  38. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +1 -1
  39. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +1 -0
  40. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +116 -44
  41. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  42. package/corpus/templates/assets/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  43. package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +93 -0
  44. package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +13 -5
  45. package/corpus/templates/assets/app/lib/asset-urls.ts +13 -0
  46. package/corpus/templates/assets/app/routes/asset.$id.tsx +16 -6
  47. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +1 -0
  48. package/corpus/templates/assets/app/routes/library.tsx +336 -78
  49. package/corpus/templates/assets/shared/api.ts +1 -1
  50. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +3 -2
  51. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +8 -6
  52. package/corpus/templates/brain/.agents/skills/context-awareness/SKILL.md +206 -0
  53. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +73 -80
  54. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +7 -0
  55. package/corpus/templates/brain/.agents/skills/portability/SKILL.md +107 -0
  56. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +339 -0
  57. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +3 -3
  58. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +1 -1
  59. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +1 -0
  60. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +116 -44
  61. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  62. package/corpus/templates/brain/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  63. package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +93 -0
  64. package/corpus/templates/brain/AGENTS.md +2 -1
  65. package/corpus/templates/brain/actions/ask-brain.ts +19 -16
  66. package/corpus/templates/brain/actions/create-source.ts +11 -2
  67. package/corpus/templates/brain/actions/import-markdown-files.ts +237 -0
  68. package/corpus/templates/brain/actions/resanitize-captures.ts +3 -1
  69. package/corpus/templates/brain/actions/test-slack-connection.ts +12 -3
  70. package/corpus/templates/brain/actions/update-source.ts +10 -1
  71. package/corpus/templates/brain/app/components/brain/Surface.tsx +1 -11
  72. package/corpus/templates/brain/app/i18n-data.ts +111 -0
  73. package/corpus/templates/brain/app/lib/brain.ts +23 -1
  74. package/corpus/templates/brain/app/routes/knowledge.tsx +0 -2
  75. package/corpus/templates/brain/app/routes/ops.tsx +0 -2
  76. package/corpus/templates/brain/app/routes/review.tsx +0 -2
  77. package/corpus/templates/brain/app/routes/search.tsx +0 -2
  78. package/corpus/templates/brain/app/routes/sources.tsx +354 -6
  79. package/corpus/templates/brain/server/lib/brain-response-guard.ts +63 -1
  80. package/corpus/templates/brain/server/lib/brain.ts +9 -6
  81. package/corpus/templates/brain/server/lib/connectors.ts +20 -6
  82. package/corpus/templates/brain/server/lib/search.ts +9 -1
  83. package/corpus/templates/brain/server/lib/source-credentials.ts +95 -57
  84. package/corpus/templates/brain/server/plugins/agent-chat.ts +5 -2
  85. package/corpus/templates/brain/server/plugins/auth.ts +2 -0
  86. package/corpus/templates/calendar/.agents/skills/adding-a-feature/SKILL.md +208 -0
  87. package/corpus/templates/calendar/.agents/skills/context-awareness/SKILL.md +206 -0
  88. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +73 -80
  89. package/corpus/templates/calendar/.agents/skills/portability/SKILL.md +107 -0
  90. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +339 -0
  91. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +3 -3
  92. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +1 -1
  93. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +1 -0
  94. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +116 -44
  95. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  96. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  97. package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +93 -0
  98. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +3 -2
  99. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +3 -2
  100. package/corpus/templates/calendar/app/lib/event-layout.ts +16 -35
  101. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +1 -0
  102. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  103. package/corpus/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  104. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  105. package/corpus/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  106. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  107. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  108. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  109. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  110. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  111. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  112. package/corpus/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  113. package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  114. package/corpus/templates/chat/AGENTS.md +4 -5
  115. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +73 -80
  116. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  117. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +339 -0
  118. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +3 -3
  119. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +1 -1
  120. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +116 -44
  121. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  122. package/corpus/templates/clips/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  123. package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +93 -0
  124. package/corpus/templates/clips/actions/add-comment.ts +1 -2
  125. package/corpus/templates/clips/actions/delete-comment.ts +2 -0
  126. package/corpus/templates/clips/actions/get-recording-insights.ts +9 -8
  127. package/corpus/templates/clips/actions/get-recording-player-data.ts +4 -1
  128. package/corpus/templates/clips/actions/react-to-comment.ts +1 -1
  129. package/corpus/templates/clips/actions/react-to-recording.ts +1 -1
  130. package/corpus/templates/clips/actions/reply-to-comment.ts +1 -1
  131. package/corpus/templates/clips/actions/resolve-comment.ts +1 -2
  132. package/corpus/templates/clips/actions/update-comment.ts +1 -1
  133. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +1 -0
  134. package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +59 -16
  135. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +27 -44
  136. package/corpus/templates/clips/app/components/player/comments-panel.tsx +88 -39
  137. package/corpus/templates/clips/app/components/player/share-dialog.tsx +84 -41
  138. package/corpus/templates/clips/app/components/player/timestamped-comment-button.tsx +3 -1
  139. package/corpus/templates/clips/app/components/player/video-player.tsx +1 -1
  140. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +20 -7
  141. package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
  142. package/corpus/templates/clips/app/lib/public-meeting.ts +1 -1
  143. package/corpus/templates/clips/app/lib/thumbnail-capture.ts +71 -0
  144. package/corpus/templates/clips/app/lib/thumbnail-picker-state.ts +93 -0
  145. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -1
  146. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +25 -19
  147. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -0
  148. package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +1 -1
  149. package/corpus/templates/clips/changelog/2026-08-11-clips-asks-to-take-notes-again-when-you-join-an-adhoc-zoom-o.md +6 -0
  150. package/corpus/templates/clips/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  151. package/corpus/templates/clips/desktop/src/app.tsx +1 -1
  152. package/corpus/templates/clips/desktop/src/styles.css +10 -2
  153. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +166 -14
  154. package/corpus/templates/clips/desktop/src-tauri/src/call_activity.rs +146 -0
  155. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
  156. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  157. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +2 -122
  158. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +1 -1
  159. package/corpus/templates/clips/server/lib/recording-page-access.ts +6 -1
  160. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +5 -0
  161. package/corpus/templates/clips/shared/share-meta.ts +19 -3
  162. package/corpus/templates/content/.agents/skills/adding-a-feature/SKILL.md +208 -0
  163. package/corpus/templates/content/.agents/skills/context-awareness/SKILL.md +206 -0
  164. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +73 -80
  165. package/corpus/templates/content/.agents/skills/portability/SKILL.md +107 -0
  166. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +339 -0
  167. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +3 -3
  168. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +1 -1
  169. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +1 -0
  170. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +116 -44
  171. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  172. package/corpus/templates/content/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  173. package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +93 -0
  174. package/corpus/templates/content/actions/_database-utils.ts +10 -0
  175. package/corpus/templates/content/actions/add-comment.ts +1 -1
  176. package/corpus/templates/content/actions/attach-content-database-source.ts +158 -61
  177. package/corpus/templates/content/actions/create-document.ts +1 -0
  178. package/corpus/templates/content/actions/delete-comment.ts +1 -1
  179. package/corpus/templates/content/actions/get-document.ts +9 -1
  180. package/corpus/templates/content/actions/import-content-source.ts +8 -0
  181. package/corpus/templates/content/actions/list-documents.ts +10 -1
  182. package/corpus/templates/content/actions/update-comment.ts +1 -1
  183. package/corpus/templates/content/actions/update-document.ts +11 -0
  184. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +52 -29
  185. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +13 -8
  186. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +62 -2
  187. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +163 -53
  188. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +16 -0
  189. package/corpus/templates/content/app/components/editor/database/settings.tsx +22 -13
  190. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +7 -7
  191. package/corpus/templates/content/app/hooks/use-documents.ts +2 -0
  192. package/corpus/templates/content/app/i18n-data.ts +10 -0
  193. package/corpus/templates/content/app/root.tsx +1 -21
  194. package/corpus/templates/content/changelog/2026-08-05-connect-sources-from-add-column.md +6 -0
  195. package/corpus/templates/content/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  196. package/corpus/templates/content/shared/api.ts +7 -1
  197. package/corpus/templates/crm/.agents/skills/actions/SKILL.md +146 -0
  198. package/corpus/templates/crm/.agents/skills/actions/references/action-fields.md +136 -0
  199. package/corpus/templates/crm/.agents/skills/actions/references/examples.md +94 -0
  200. package/corpus/templates/crm/.agents/skills/actions/references/provider-apis.md +95 -0
  201. package/corpus/templates/crm/.agents/skills/adding-a-feature/SKILL.md +208 -0
  202. package/corpus/templates/crm/.agents/skills/context-awareness/SKILL.md +206 -0
  203. package/corpus/templates/crm/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  204. package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +296 -0
  205. package/corpus/templates/crm/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  206. package/corpus/templates/crm/.agents/skills/portability/SKILL.md +107 -0
  207. package/corpus/templates/crm/.agents/skills/real-time-sync/SKILL.md +232 -0
  208. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +339 -0
  209. package/corpus/templates/crm/.agents/skills/security/SKILL.md +324 -0
  210. package/corpus/templates/crm/.agents/skills/self-modifying-code/SKILL.md +123 -0
  211. package/corpus/templates/crm/.agents/skills/shadcn-ui/SKILL.md +123 -0
  212. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +1 -0
  213. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +116 -44
  214. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  215. package/corpus/templates/crm/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  216. package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +93 -0
  217. package/corpus/templates/design/.agents/skills/adding-a-feature/SKILL.md +208 -0
  218. package/corpus/templates/design/.agents/skills/context-awareness/SKILL.md +206 -0
  219. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +73 -80
  220. package/corpus/templates/design/.agents/skills/portability/SKILL.md +107 -0
  221. package/corpus/templates/design/.agents/skills/real-time-sync/SKILL.md +232 -0
  222. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +339 -0
  223. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +3 -3
  224. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +1 -1
  225. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +1 -0
  226. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +116 -44
  227. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  228. package/corpus/templates/design/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  229. package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +93 -0
  230. package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -2
  231. package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +6 -18
  232. package/corpus/templates/design/app/i18n/en-US.ts +1 -1
  233. package/corpus/templates/design/app/i18n-data.ts +40 -0
  234. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +153 -131
  235. package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -61
  236. package/corpus/templates/design/app/pages/Present.tsx +8 -2
  237. package/corpus/templates/design/app/pages/Templates.tsx +1 -0
  238. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +4 -1
  239. package/corpus/templates/design/app/pages/design-editor/types.ts +6 -1
  240. package/corpus/templates/design/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  241. package/corpus/templates/dispatch/.agents/skills/adding-a-feature/SKILL.md +208 -0
  242. package/corpus/templates/dispatch/.agents/skills/context-awareness/SKILL.md +206 -0
  243. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +73 -80
  244. package/corpus/templates/dispatch/.agents/skills/portability/SKILL.md +107 -0
  245. package/corpus/templates/dispatch/.agents/skills/real-time-sync/SKILL.md +232 -0
  246. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +339 -0
  247. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +3 -3
  248. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +1 -1
  249. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +1 -0
  250. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +116 -44
  251. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  252. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  253. package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +93 -0
  254. package/corpus/templates/dispatch/actions/apply-workspace-connection-setup.ts +97 -15
  255. package/corpus/templates/dispatch/actions/connection-permissions.ts +77 -0
  256. package/corpus/templates/dispatch/actions/delete-workspace-connection.ts +12 -2
  257. package/corpus/templates/dispatch/actions/list-workspace-user-groups.ts +19 -0
  258. package/corpus/templates/dispatch/actions/plan-workspace-connection-setup.ts +9 -2
  259. package/corpus/templates/dispatch/actions/set-workspace-connection-grant.ts +21 -2
  260. package/corpus/templates/dispatch/actions/upsert-workspace-connection.ts +66 -1
  261. package/corpus/templates/dispatch/actions/upsert-workspace-user-group.ts +27 -0
  262. package/corpus/templates/dispatch/app/chat-first-pages.ts +84 -0
  263. package/corpus/templates/dispatch/app/i18n-data.ts +3989 -3527
  264. package/corpus/templates/dispatch/app/routes/integrations.tsx +1568 -685
  265. package/corpus/templates/dispatch/app/routes/settings.tsx +14 -9
  266. package/corpus/templates/dispatch/changelog/2026-08-12-search-and-pin-workspace-apps-from-the-app-catalog.md +6 -0
  267. package/corpus/templates/dispatch/changelog/2026-08-12-workspace-integration-access-now-shows-exactly-which-apps-ca.md +6 -0
  268. package/corpus/templates/dispatch/server/lib/app-roles.ts +5 -0
  269. package/corpus/templates/dispatch/shared/app-roles.ts +1 -0
  270. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +3 -2
  271. package/corpus/templates/factory/.agents/skills/context-awareness/SKILL.md +206 -0
  272. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +73 -80
  273. package/corpus/templates/factory/.agents/skills/portability/SKILL.md +107 -0
  274. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +339 -0
  275. package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +3 -3
  276. package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +1 -1
  277. package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +1 -0
  278. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +116 -44
  279. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  280. package/corpus/templates/factory/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  281. package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +93 -0
  282. package/corpus/templates/factory/AGENTS.md +10 -1
  283. package/corpus/templates/factory/README.md +18 -7
  284. package/corpus/templates/factory/actions/list-triage-items.ts +10 -4
  285. package/corpus/templates/factory/actions/poll-github-sources.ts +53 -14
  286. package/corpus/templates/factory/actions/poll-sentry-errors.ts +31 -13
  287. package/corpus/templates/factory/actions/poll-slack-channel.ts +41 -5
  288. package/corpus/templates/factory/actions/provider-api-catalog.ts +13 -0
  289. package/corpus/templates/factory/actions/provider-api-docs.ts +11 -0
  290. package/corpus/templates/factory/actions/provider-api-request.ts +17 -0
  291. package/corpus/templates/factory/actions/save-triage-config.ts +87 -38
  292. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +14 -12
  293. package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +60 -77
  294. package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +66 -125
  295. package/corpus/templates/factory/app/components/layout/Header.tsx +1 -0
  296. package/corpus/templates/factory/app/components/layout/Layout.tsx +8 -3
  297. package/corpus/templates/factory/app/components/layout/Sidebar.tsx +9 -5
  298. package/corpus/templates/factory/app/components/ui/input.tsx +15 -1
  299. package/corpus/templates/factory/app/components/ui/popover.tsx +1 -0
  300. package/corpus/templates/factory/app/components/ui/switch.tsx +1 -0
  301. package/corpus/templates/factory/app/components/ui/textarea.tsx +20 -1
  302. package/corpus/templates/factory/app/hooks/use-navigation-state.ts +5 -3
  303. package/corpus/templates/factory/app/i18n/en-US.ts +17 -0
  304. package/corpus/templates/factory/app/routes/_index.tsx +5 -87
  305. package/corpus/templates/factory/app/routes/chat.$threadId.tsx +1 -1
  306. package/corpus/templates/factory/app/routes/chat.tsx +91 -0
  307. package/corpus/templates/factory/app/routes/factory.tsx +554 -430
  308. package/corpus/templates/factory/app/routes/settings.tsx +1 -1
  309. package/corpus/templates/factory/server/connectors/credentials.ts +25 -0
  310. package/corpus/templates/factory/server/lib/provider-api.ts +34 -0
  311. package/corpus/templates/factory/server/plugins/agent-chat.ts +15 -3
  312. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +96 -24
  313. package/corpus/templates/factory/server/triage/review-state.ts +33 -0
  314. package/corpus/templates/factory/server/triage/slack-poller.ts +1 -0
  315. package/corpus/templates/forms/.agents/skills/adding-a-feature/SKILL.md +208 -0
  316. package/corpus/templates/forms/.agents/skills/context-awareness/SKILL.md +206 -0
  317. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +73 -80
  318. package/corpus/templates/forms/.agents/skills/portability/SKILL.md +107 -0
  319. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +339 -0
  320. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +3 -3
  321. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +1 -1
  322. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +1 -0
  323. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +116 -44
  324. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  325. package/corpus/templates/forms/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  326. package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +93 -0
  327. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +1 -0
  328. package/corpus/templates/forms/shared/types.ts +1 -1
  329. package/corpus/templates/macros/.agents/skills/adding-a-feature/SKILL.md +208 -0
  330. package/corpus/templates/macros/.agents/skills/context-awareness/SKILL.md +206 -0
  331. package/corpus/templates/macros/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  332. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +73 -80
  333. package/corpus/templates/macros/.agents/skills/portability/SKILL.md +107 -0
  334. package/corpus/templates/macros/.agents/skills/real-time-sync/SKILL.md +232 -0
  335. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +339 -0
  336. package/corpus/templates/macros/.agents/skills/self-modifying-code/SKILL.md +123 -0
  337. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +1 -1
  338. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +1 -0
  339. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +116 -44
  340. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  341. package/corpus/templates/macros/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  342. package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +93 -0
  343. package/corpus/templates/mail/.agents/skills/adding-a-feature/SKILL.md +208 -0
  344. package/corpus/templates/mail/.agents/skills/context-awareness/SKILL.md +206 -0
  345. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +73 -80
  346. package/corpus/templates/mail/.agents/skills/portability/SKILL.md +107 -0
  347. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +339 -0
  348. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +3 -3
  349. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +1 -1
  350. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +1 -0
  351. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +116 -44
  352. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  353. package/corpus/templates/mail/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  354. package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +93 -0
  355. package/corpus/templates/mail/actions/send-email.ts +9 -0
  356. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +4 -4
  357. package/corpus/templates/mail/changelog/2026-08-12-agent-sent-messages-appear-immediately.md +6 -0
  358. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +3 -2
  359. package/corpus/templates/plan/.agents/skills/context-awareness/SKILL.md +206 -0
  360. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +73 -80
  361. package/corpus/templates/plan/.agents/skills/portability/SKILL.md +107 -0
  362. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +339 -0
  363. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +3 -3
  364. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +1 -1
  365. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +1 -0
  366. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +116 -44
  367. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  368. package/corpus/templates/plan/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  369. package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +93 -0
  370. package/corpus/templates/plan/actions/delete-plan-comment.ts +6 -0
  371. package/corpus/templates/plan/actions/reply-to-plan-comment.ts +7 -1
  372. package/corpus/templates/plan/actions/resolve-plan-comment.ts +7 -1
  373. package/corpus/templates/plan/actions/update-visual-plan.ts +6 -0
  374. package/corpus/templates/plan/app/hooks/use-plans.ts +1 -1
  375. package/corpus/templates/plan/app/pages/PlansPage.tsx +51 -23
  376. package/corpus/templates/plan/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  377. package/corpus/templates/plan/server/plans.ts +2 -2
  378. package/corpus/templates/plan/shared/types.ts +1 -1
  379. package/corpus/templates/slides/.agents/skills/adding-a-feature/SKILL.md +208 -0
  380. package/corpus/templates/slides/.agents/skills/context-awareness/SKILL.md +206 -0
  381. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +6 -0
  382. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +73 -80
  383. package/corpus/templates/slides/.agents/skills/portability/SKILL.md +107 -0
  384. package/corpus/templates/slides/.agents/skills/real-time-sync/SKILL.md +232 -0
  385. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +339 -0
  386. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +3 -3
  387. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +1 -1
  388. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +1 -0
  389. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +116 -44
  390. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  391. package/corpus/templates/slides/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  392. package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +93 -0
  393. package/corpus/templates/slides/AGENTS.md +4 -0
  394. package/corpus/templates/slides/actions/add-slide-comment.ts +1 -1
  395. package/corpus/templates/slides/actions/delete-slide-comment.ts +1 -1
  396. package/corpus/templates/slides/actions/get-layout-overflows.ts +67 -2
  397. package/corpus/templates/slides/actions/update-slide-comment.ts +1 -1
  398. package/corpus/templates/slides/actions/view-screen.ts +76 -26
  399. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +30 -8
  400. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -1
  401. package/corpus/templates/slides/app/components/editor/AlignmentGuides.tsx +75 -0
  402. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +81 -81
  403. package/corpus/templates/slides/app/components/editor/ShareDialog.tsx +28 -25
  404. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +175 -10
  405. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +256 -69
  406. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +1 -1
  407. package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +3 -3
  408. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +218 -0
  409. package/corpus/templates/slides/app/context/DeckContext.tsx +56 -30
  410. package/corpus/templates/slides/app/hooks/use-deck-role.ts +13 -5
  411. package/corpus/templates/slides/app/hooks/use-design-systems.ts +1 -1
  412. package/corpus/templates/slides/app/i18n/en-US.ts +6 -2
  413. package/corpus/templates/slides/app/lib/create-deck-generation.ts +1 -0
  414. package/corpus/templates/slides/app/lib/pending-deck-changes.ts +32 -0
  415. package/corpus/templates/slides/app/pages/DeckEditor.tsx +85 -4
  416. package/corpus/templates/slides/app/pages/Index.tsx +65 -66
  417. package/corpus/templates/slides/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  418. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +3 -2
  419. package/corpus/templates/tasks/.agents/skills/context-awareness/SKILL.md +206 -0
  420. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +73 -80
  421. package/corpus/templates/tasks/.agents/skills/portability/SKILL.md +107 -0
  422. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +339 -0
  423. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +3 -3
  424. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +1 -1
  425. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +1 -0
  426. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +116 -44
  427. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  428. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  429. package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +93 -0
  430. package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +1 -4
  431. package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +0 -1
  432. package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +0 -1
  433. package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +0 -3
  434. package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +1 -4
  435. package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +0 -1
  436. package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +0 -1
  437. package/dist/agent/engine/ai-sdk-engine.js +5 -0
  438. package/dist/agent/engine/anthropic-engine.js +8 -0
  439. package/dist/agent/engine/registry.js +24 -19
  440. package/dist/agent/engine/translate-anthropic.js +16 -1
  441. package/dist/agent/production-agent.d.ts +8 -0
  442. package/dist/agent/production-agent.js +25 -2
  443. package/dist/agent/run-manager.js +13 -3
  444. package/dist/automations/service.d.ts +2 -0
  445. package/dist/automations/service.js +5 -1
  446. package/dist/chat-threads/schema.d.ts +2 -2
  447. package/dist/cli/changelog.js +21 -4
  448. package/dist/cli/create.d.ts +12 -1
  449. package/dist/cli/create.js +99 -11
  450. package/dist/cli/index.js +6 -6
  451. package/dist/cli/process.d.ts +7 -0
  452. package/dist/cli/process.js +12 -0
  453. package/dist/cli/workspace-skill-policy.d.ts +15 -0
  454. package/dist/cli/workspace-skill-policy.js +62 -0
  455. package/dist/cli/workspacify.js +36 -0
  456. package/dist/client/AgentPanel.d.ts +14 -2
  457. package/dist/client/AgentPanel.js +44 -26
  458. package/dist/client/AssistantChat.js +90 -182
  459. package/dist/client/FeedbackButton.js +15 -2
  460. package/dist/client/RouteTransitionIndicator.d.ts +14 -2
  461. package/dist/client/RouteTransitionIndicator.js +16 -5
  462. package/dist/client/agent-page/AgentTabsPage.js +19 -6
  463. package/dist/client/app-config.d.ts +3 -0
  464. package/dist/client/app-config.js +6 -0
  465. package/dist/client/app-providers.js +2 -1
  466. package/dist/client/changelog/Changelog.d.ts +2 -1
  467. package/dist/client/changelog/Changelog.js +7 -5
  468. package/dist/client/chat/markdown-renderer.d.ts +3 -1
  469. package/dist/client/chat/markdown-renderer.js +24 -24
  470. package/dist/client/chat/message-components.d.ts +23 -0
  471. package/dist/client/chat/message-components.js +27 -44
  472. package/dist/client/chat/tool-call-display.d.ts +2 -2
  473. package/dist/client/chat/tool-call-display.js +6 -3
  474. package/dist/client/chat-first/app-open-actions.d.ts +28 -0
  475. package/dist/client/chat-first/app-open-actions.js +25 -0
  476. package/dist/client/chat-first/index.d.ts +1 -0
  477. package/dist/client/chat-first/index.js +1 -0
  478. package/dist/client/chat-first/primary-nav.d.ts +2 -1
  479. package/dist/client/chat-first/primary-nav.js +12 -5
  480. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +14 -0
  481. package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -0
  482. package/dist/client/error-format.js +32 -3
  483. package/dist/client/extensions/EmbeddedExtension.js +1 -0
  484. package/dist/client/extensions/ExtensionViewer.js +3 -1
  485. package/dist/client/extensions/InlineExtensionFrame.js +1 -0
  486. package/dist/client/extensions/iframe-bridge.d.ts +3 -2
  487. package/dist/client/extensions/iframe-bridge.js +4 -2
  488. package/dist/client/i18n.js +28 -5
  489. package/dist/client/integrations/IntegrationConnectionChoice.d.ts +11 -0
  490. package/dist/client/integrations/IntegrationConnectionChoice.js +6 -0
  491. package/dist/client/integrations/IntegrationGrid.d.ts +23 -0
  492. package/dist/client/integrations/IntegrationGrid.js +12 -0
  493. package/dist/client/integrations/IntegrationsPanel.js +92 -26
  494. package/dist/client/integrations/index.d.ts +2 -0
  495. package/dist/client/integrations/index.js +2 -0
  496. package/dist/client/onboarding/FirstRunOnboarding.d.ts +3 -1
  497. package/dist/client/onboarding/FirstRunOnboarding.js +26 -16
  498. package/dist/client/onboarding/first-run-enabled.js +1 -5
  499. package/dist/client/onboarding/first-run-startup-gate.d.ts +5 -0
  500. package/dist/client/onboarding/first-run-startup-gate.js +51 -0
  501. package/dist/client/onboarding/first-run-status.d.ts +7 -0
  502. package/dist/client/onboarding/first-run-status.js +26 -0
  503. package/dist/client/onboarding/index.d.ts +3 -0
  504. package/dist/client/onboarding/index.js +3 -0
  505. package/dist/client/onboarding/use-onboarding.d.ts +1 -0
  506. package/dist/client/onboarding/use-onboarding.js +13 -11
  507. package/dist/client/org/TeamPage.js +174 -28
  508. package/dist/client/org/WorkspaceNotice.js +7 -4
  509. package/dist/client/resources/McpConnectionSuggestion.js +29 -72
  510. package/dist/client/resources/McpIntegrationDialog.d.ts +3 -1
  511. package/dist/client/resources/McpIntegrationDialog.js +176 -51
  512. package/dist/client/resources/index.d.ts +1 -0
  513. package/dist/client/resources/index.js +1 -0
  514. package/dist/client/resources/mcp-integration-catalog.d.ts +8 -0
  515. package/dist/client/resources/mcp-integration-catalog.js +28 -0
  516. package/dist/client/settings/ExtensionsSettingsContent.js +2 -2
  517. package/dist/client/settings/SettingsPanel.d.ts +6 -0
  518. package/dist/client/settings/SettingsPanel.js +21 -8
  519. package/dist/client/settings/SettingsRow.d.ts +3 -1
  520. package/dist/client/settings/SettingsRow.js +4 -2
  521. package/dist/client/settings/SettingsSkeleton.js +5 -3
  522. package/dist/client/settings/SettingsTabsPage.js +2 -2
  523. package/dist/client/settings/UsageSection.d.ts +4 -1
  524. package/dist/client/settings/UsageSection.js +187 -93
  525. package/dist/client/settings/agent-settings-search.js +6 -2
  526. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +1 -1
  527. package/dist/client/setup-connections/useBuilderConnectCardController.js +2 -2
  528. package/dist/client/sharing/ShareButton.d.ts +4 -2
  529. package/dist/client/sharing/ShareButton.js +26 -14
  530. package/dist/client/sharing/ShareDialog.d.ts +1 -1
  531. package/dist/client/sharing/ShareDialog.js +17 -11
  532. package/dist/client/sharing/useShareButtonController.d.ts +2 -1
  533. package/dist/client/sharing/useShareButtonController.js +8 -0
  534. package/dist/client/sharing/useShareDialogController.d.ts +1 -1
  535. package/dist/client/sharing/useShareDialogController.js +2 -1
  536. package/dist/collab/routes.d.ts +1 -1
  537. package/dist/config.d.ts +13 -0
  538. package/dist/config.js +53 -0
  539. package/dist/dashboard-storage/schema.d.ts +2 -2
  540. package/dist/data-programs/schema.d.ts +2 -2
  541. package/dist/extensions/actions.js +2 -1
  542. package/dist/extensions/html-shell.d.ts +2 -2
  543. package/dist/extensions/routes.js +4 -1
  544. package/dist/extensions/schema.d.ts +2 -2
  545. package/dist/file-upload/pre-upload-attachments.js +1 -1
  546. package/dist/framework-tools.js +3 -0
  547. package/dist/history/types.d.ts +1 -1
  548. package/dist/index.d.ts +2 -1
  549. package/dist/index.js +2 -1
  550. package/dist/jobs/background-automation-runner.d.ts +1 -0
  551. package/dist/jobs/background-automation-runner.js +4 -2
  552. package/dist/jobs/frontmatter.d.ts +4 -0
  553. package/dist/jobs/frontmatter.js +16 -0
  554. package/dist/jobs/run-history.js +1 -1
  555. package/dist/jobs/tools.js +9 -5
  556. package/dist/localization/default-messages.d.ts +27 -0
  557. package/dist/localization/default-messages.js +28 -1
  558. package/dist/notifications/routes.d.ts +6 -6
  559. package/dist/onboarding/plugin.js +17 -2
  560. package/dist/org/context.js +16 -0
  561. package/dist/progress/routes.d.ts +1 -1
  562. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  563. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  564. package/dist/review/actions/create-review-comment.js +1 -1
  565. package/dist/review/actions/delete-review-comment.js +4 -1
  566. package/dist/review/actions/list-review-comments.js +4 -2
  567. package/dist/review/actions/reply-review-comment.js +1 -1
  568. package/dist/review/types.d.ts +1 -1
  569. package/dist/secrets/routes.d.ts +9 -9
  570. package/dist/server/action-discovery.js +29 -0
  571. package/dist/server/agent-chat/plugin-options.d.ts +7 -0
  572. package/dist/server/agent-chat-plugin.d.ts +2 -0
  573. package/dist/server/agent-chat-plugin.js +12 -4
  574. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  575. package/dist/server/auth.js +18 -4
  576. package/dist/server/better-auth-instance.js +8 -1
  577. package/dist/server/builder-browser.js +31 -0
  578. package/dist/server/magic-link-attribution.d.ts +21 -0
  579. package/dist/server/magic-link-attribution.js +115 -0
  580. package/dist/server/onboarding-html.js +1 -1
  581. package/dist/server/realtime-token.d.ts +1 -1
  582. package/dist/server/transcribe-voice.d.ts +1 -1
  583. package/dist/server/workspace-provider-oauth.js +38 -26
  584. package/dist/setup-connections/index.d.ts +1 -1
  585. package/dist/setup-connections/index.js +1 -1
  586. package/dist/shared/first-run-onboarding.d.ts +6 -0
  587. package/dist/shared/first-run-onboarding.js +6 -0
  588. package/dist/sharing/access.d.ts +1 -1
  589. package/dist/sharing/access.js +4 -1
  590. package/dist/sharing/actions/share-resource.d.ts +1 -1
  591. package/dist/sharing/actions/share-resource.js +2 -2
  592. package/dist/sharing/registry.d.ts +2 -2
  593. package/dist/sharing/schema.d.ts +5 -5
  594. package/dist/sharing/schema.js +9 -6
  595. package/dist/styles/agent-native.css +21 -0
  596. package/dist/styles/chat-history-list.css +1 -1
  597. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  598. package/dist/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  599. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  600. package/dist/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  601. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  602. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  603. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  604. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  605. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  606. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  607. package/dist/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  608. package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  609. package/dist/templates/chat/AGENTS.md +4 -5
  610. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  611. package/dist/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  612. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  613. package/dist/templates/default/.agents/skills/portability/SKILL.md +107 -0
  614. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  615. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  616. package/dist/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  617. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  618. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  619. package/dist/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  620. package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  621. package/dist/templates/default/AGENTS.md +17 -2
  622. package/dist/templates/default/agent-native.config.ts +6 -0
  623. package/dist/templates/default/app/i18n/ar-SA.ts +2 -0
  624. package/dist/templates/default/app/i18n/de-DE.ts +2 -0
  625. package/dist/templates/default/app/i18n/en-US.ts +3 -1
  626. package/dist/templates/default/app/i18n/es-ES.ts +2 -0
  627. package/dist/templates/default/app/i18n/fr-FR.ts +2 -0
  628. package/dist/templates/default/app/i18n/hi-IN.ts +2 -0
  629. package/dist/templates/default/app/i18n/ja-JP.ts +2 -0
  630. package/dist/templates/default/app/i18n/ko-KR.ts +2 -0
  631. package/dist/templates/default/app/i18n/pt-BR.ts +2 -0
  632. package/dist/templates/default/app/i18n/zh-CN.ts +2 -0
  633. package/dist/templates/default/app/i18n/zh-TW.ts +2 -0
  634. package/dist/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  635. package/dist/templates/headless/.agents/skills/security/SKILL.md +324 -0
  636. package/dist/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  637. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  638. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  639. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  640. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  641. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  642. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  643. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  644. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  645. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  646. package/dist/templates/workspace-core/AGENTS.md +9 -3
  647. package/dist/templates/workspace-root/AGENTS.md +26 -1
  648. package/dist/templates/workspace-root/agent-native.config.ts +8 -0
  649. package/dist/triggers/actions.js +2 -2
  650. package/dist/usage/actions/get-usage-alerts.d.ts +5 -0
  651. package/dist/usage/actions/get-usage-alerts.js +16 -0
  652. package/dist/usage/actions/get-usage-metrics.d.ts +7 -0
  653. package/dist/usage/actions/get-usage-metrics.js +26 -0
  654. package/dist/usage/actions/manage-usage-alert.d.ts +14 -0
  655. package/dist/usage/actions/manage-usage-alert.js +48 -0
  656. package/dist/usage/alerts-store.d.ts +78 -0
  657. package/dist/usage/alerts-store.js +592 -0
  658. package/dist/usage/metrics-store.d.ts +95 -0
  659. package/dist/usage/metrics-store.js +386 -0
  660. package/dist/usage/store.js +10 -0
  661. package/dist/vite/action-types-plugin.js +28 -0
  662. package/dist/vite/agent-native-config-loader.d.ts +6 -0
  663. package/dist/vite/agent-native-config-loader.js +54 -2
  664. package/dist/vite/client.js +11 -5
  665. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.d.ts +6 -0
  666. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.js +24 -0
  667. package/dist/workspace-connections/actions/delete-workspace-user-group.d.ts +7 -0
  668. package/dist/workspace-connections/actions/delete-workspace-user-group.js +29 -0
  669. package/dist/workspace-connections/actions/list-workspace-user-groups.d.ts +2 -0
  670. package/dist/workspace-connections/actions/list-workspace-user-groups.js +13 -0
  671. package/dist/workspace-connections/actions/upsert-workspace-user-group.d.ts +6 -0
  672. package/dist/workspace-connections/actions/upsert-workspace-user-group.js +22 -0
  673. package/dist/workspace-connections/credential-key-aliases.d.ts +3 -0
  674. package/dist/workspace-connections/credential-key-aliases.js +31 -0
  675. package/dist/workspace-connections/credentials.js +1 -25
  676. package/dist/workspace-connections/groups.d.ts +32 -0
  677. package/dist/workspace-connections/groups.js +288 -0
  678. package/dist/workspace-connections/index.d.ts +3 -1
  679. package/dist/workspace-connections/index.js +3 -1
  680. package/dist/workspace-connections/store.d.ts +9 -0
  681. package/dist/workspace-connections/store.js +68 -8
  682. package/docs/content/components.mdx +2 -2
  683. package/docs/content/sharing.mdx +2 -1
  684. package/package.json +10 -2
  685. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  686. package/src/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  687. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  688. package/src/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  689. package/src/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  690. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  691. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  692. package/src/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  693. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  694. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  695. package/src/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  696. package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  697. package/src/templates/chat/AGENTS.md +4 -5
  698. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  699. package/src/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  700. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  701. package/src/templates/default/.agents/skills/portability/SKILL.md +107 -0
  702. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  703. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  704. package/src/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  705. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  706. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  707. package/src/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  708. package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  709. package/src/templates/default/AGENTS.md +17 -2
  710. package/src/templates/default/agent-native.config.ts +6 -0
  711. package/src/templates/default/app/i18n/ar-SA.ts +2 -0
  712. package/src/templates/default/app/i18n/de-DE.ts +2 -0
  713. package/src/templates/default/app/i18n/en-US.ts +3 -1
  714. package/src/templates/default/app/i18n/es-ES.ts +2 -0
  715. package/src/templates/default/app/i18n/fr-FR.ts +2 -0
  716. package/src/templates/default/app/i18n/hi-IN.ts +2 -0
  717. package/src/templates/default/app/i18n/ja-JP.ts +2 -0
  718. package/src/templates/default/app/i18n/ko-KR.ts +2 -0
  719. package/src/templates/default/app/i18n/pt-BR.ts +2 -0
  720. package/src/templates/default/app/i18n/zh-CN.ts +2 -0
  721. package/src/templates/default/app/i18n/zh-TW.ts +2 -0
  722. package/src/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  723. package/src/templates/headless/.agents/skills/security/SKILL.md +324 -0
  724. package/src/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  725. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  726. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  727. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  728. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  729. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  730. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  731. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  732. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  733. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  734. package/src/templates/workspace-core/AGENTS.md +9 -3
  735. package/src/templates/workspace-root/AGENTS.md +26 -1
  736. package/src/templates/workspace-root/agent-native.config.ts +8 -0
  737. package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +0 -89
  738. package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +0 -195
  739. package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +0 -169
  740. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  741. package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +0 -89
  742. package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +0 -195
  743. package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +0 -169
  744. package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +0 -392
  745. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  746. package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +0 -89
  747. package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +0 -195
  748. package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +0 -169
  749. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  750. package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +0 -89
  751. package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +0 -195
  752. package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +0 -169
  753. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  754. package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  755. package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  756. package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  757. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  758. package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +0 -89
  759. package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +0 -195
  760. package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +0 -169
  761. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  762. package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +0 -89
  763. package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +0 -195
  764. package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +0 -169
  765. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  766. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  767. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  768. package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +0 -89
  769. package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +0 -195
  770. package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +0 -169
  771. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  772. package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +0 -89
  773. package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +0 -195
  774. package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +0 -169
  775. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  776. package/corpus/templates/factory/.agents/skills/capture-learnings/SKILL.md +0 -89
  777. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +0 -195
  778. package/corpus/templates/factory/.agents/skills/feature-flags/SKILL.md +0 -169
  779. package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  780. package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +0 -89
  781. package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +0 -195
  782. package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +0 -169
  783. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  784. package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +0 -169
  785. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  786. package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +0 -89
  787. package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +0 -195
  788. package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +0 -169
  789. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  790. package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +0 -89
  791. package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +0 -195
  792. package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +0 -169
  793. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  794. package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +0 -89
  795. package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +0 -195
  796. package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +0 -169
  797. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  798. package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +0 -89
  799. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +0 -195
  800. package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +0 -169
  801. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  802. package/dist/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  803. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  804. package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  805. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  806. package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  807. package/dist/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  808. package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  809. package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  810. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  811. package/dist/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  812. package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  813. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  814. package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  815. package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  816. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  817. package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  818. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  819. package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  820. package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  821. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  822. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  823. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  824. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  825. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  826. package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  827. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  828. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  829. package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  830. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  831. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  832. package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  833. package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  834. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  835. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  836. package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  837. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  838. package/dist/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  839. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  840. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  841. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  842. package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  843. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  844. package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  845. package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  846. package/dist/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  847. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  848. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  849. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  850. package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  851. package/dist/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  852. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  853. package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  854. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  855. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  856. package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  857. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  858. package/dist/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  859. package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  860. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  861. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  862. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  863. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  864. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
  865. package/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  866. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  867. package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  868. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  869. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  870. package/src/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  871. package/src/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  872. package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  873. package/src/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  874. package/src/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  875. package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  876. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  877. package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  878. package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  879. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  880. package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  881. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  882. package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  883. package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  884. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  885. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  886. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  887. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  888. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  889. package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  890. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  891. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  892. package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  893. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  894. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  895. package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  896. package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  897. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  898. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  899. package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  900. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  901. package/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  902. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  903. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  904. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  905. package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  906. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  907. package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  908. package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  909. package/src/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  910. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  911. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  912. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  913. package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  914. package/src/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  915. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  916. package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  917. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  918. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  919. package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  920. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  921. package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  922. package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  923. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  924. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  925. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  926. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  927. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
@@ -0,0 +1,339 @@
1
+ ---
2
+ name: secrets
3
+ description: >-
4
+ Declaratively register API keys and service credentials a template needs so
5
+ they appear in the agent sidebar settings UI and the onboarding checklist.
6
+ Use for any third-party API key (OpenAI, Stripe, Twilio, etc.) and for
7
+ surfacing OAuth connections in the unified settings UI.
8
+ scope: dev
9
+ metadata:
10
+ internal: true
11
+ ---
12
+
13
+ # Secrets Registry
14
+
15
+ ## Non-negotiable rule
16
+
17
+ Never hardcode credential values. Source, docs, tests, fixtures, prompts, seed
18
+ data, and generated extension/app content may mention credential **names** such
19
+ as `OPENAI_API_KEY`, but must not contain real API keys, tokens, webhook URLs,
20
+ signing secrets, OAuth refresh tokens, or private Builder/customer data.
21
+
22
+ Secret values are supplied at runtime through deployment configuration, the
23
+ encrypted `app_secrets` vault, `saveCredential` / `resolveCredential`, OAuth, or
24
+ `${keys.NAME}` substitution. Examples must use obvious placeholders such as
25
+ `<OPENAI_API_KEY>` or `${keys.SLACK_WEBHOOK}`, not real-looking copied values.
26
+
27
+ ## When to use
28
+
29
+ Use this for any external credential your template needs: API keys, service
30
+ tokens, webhook secrets. It gives you:
31
+
32
+ - A sidebar UI entry for each credential (masked input, rotate, test, delete).
33
+ - Automatic onboarding-checklist items for `required: true` secrets.
34
+ - A stable server-side read API (`readAppSecret`) that decrypts values on
35
+ demand.
36
+ - Validator hooks for health-checking keys before save and from a Test button.
37
+
38
+ ## When NOT to use
39
+
40
+ - OAuth flows that need to run the full authorization code exchange — use
41
+ `@agent-native/core/oauth-tokens` directly to save/refresh tokens. The
42
+ registry can still surface the OAuth connection in the sidebar by
43
+ registering a secret with `kind: "oauth"` — that just delegates status
44
+ lookup to oauth-tokens and renders a Connect button, no `app_secrets` row
45
+ is written.
46
+ - Purely process-level env vars that are never user-facing (e.g. `NODE_ENV`,
47
+ deployment flags). Those belong in the onboarding `form` method or the
48
+ `envKeys` list in `core-routes-plugin`.
49
+
50
+ ## Registering a secret
51
+
52
+ ```ts
53
+ // server/plugins/register-secrets.ts
54
+ import { defineNitroPlugin } from "@agent-native/core/server";
55
+ import { registerRequiredSecret } from "@agent-native/core/secrets";
56
+
57
+ export default defineNitroPlugin(() => {
58
+ registerRequiredSecret({
59
+ key: "OPENAI_API_KEY",
60
+ label: "OpenAI API Key",
61
+ description: "Used for Whisper transcription of your recordings.",
62
+ docsUrl: "https://platform.openai.com/api-keys",
63
+ scope: "user",
64
+ kind: "api-key",
65
+ required: true,
66
+ validator: async (value) => {
67
+ const res = await fetch("https://api.openai.com/v1/models", {
68
+ headers: { Authorization: `Bearer ${value}` },
69
+ });
70
+ return res.ok
71
+ ? { ok: true }
72
+ : { ok: false, error: `OpenAI rejected the key (HTTP ${res.status})` };
73
+ },
74
+ });
75
+ });
76
+ ```
77
+
78
+ ### OAuth in the unified UI
79
+
80
+ ```ts
81
+ registerRequiredSecret({
82
+ key: "GOOGLE_CONNECTED",
83
+ label: "Google account",
84
+ description: "Grants access to Gmail / Calendar APIs.",
85
+ scope: "user",
86
+ kind: "oauth",
87
+ required: true,
88
+ oauthProvider: "google", // must match the provider id in oauth-tokens
89
+ oauthConnectUrl: "/_agent-native/google/auth-url",
90
+ });
91
+ ```
92
+
93
+ The sidebar shows a Connect button instead of a text input; no `app_secrets`
94
+ row is written — status is derived from `hasOAuthTokens("google")`.
95
+
96
+ ## Registered options
97
+
98
+ | Field | Type | Purpose |
99
+ | ------------------ | --------------------------------------- | ------------------------------------------------------------------------ |
100
+ | `key` | `string` | Env-var style name (`OPENAI_API_KEY`). Also the storage key. |
101
+ | `label` | `string` | Human-readable title in the sidebar. |
102
+ | `description` | `string?` | Subtitle under the label. |
103
+ | `docsUrl` | `string?` | "Get key" link rendered on the card. |
104
+ | `scope` | `"user" \| "workspace"` | Per-user or shared across the active org. |
105
+ | `kind` | `"api-key" \| "oauth"` | Drives UI and storage behavior. |
106
+ | `required` | `boolean?` | When true, an onboarding step is auto-injected. |
107
+ | `validator` | `(v) => Promise<boolean \| {ok,error}>` | Runs on save and from the Test button. Never log `v`. |
108
+ | `oauthProvider` | `string?` (oauth-kind only) | Provider id in `oauth-tokens` that backs this entry. |
109
+ | `oauthConnectUrl` | `string?` (oauth-kind only) | URL the Connect button points at. |
110
+
111
+ ## Reading a secret from an action
112
+
113
+ ```ts
114
+ import { z } from "zod";
115
+ import { defineAction } from "@agent-native/core/action";
116
+ import { readAppSecret } from "@agent-native/core/secrets";
117
+ import { getRequestUserEmail } from "@agent-native/core/server";
118
+
119
+ export default defineAction({
120
+ description: "Transcribe an audio file with Whisper",
121
+ schema: z.object({ fileUrl: z.string() }),
122
+ run: async ({ fileUrl }) => {
123
+ const email = await getRequestUserEmail();
124
+ if (!email) throw new Error("Not signed in");
125
+
126
+ const stored = await readAppSecret({
127
+ key: "OPENAI_API_KEY",
128
+ scope: "user",
129
+ scopeId: email,
130
+ });
131
+ const apiKey = stored?.value;
132
+ if (!apiKey) {
133
+ throw new Error(
134
+ "OPENAI_API_KEY is not set. Configure it in the sidebar settings.",
135
+ );
136
+ }
137
+
138
+ // …call OpenAI. NEVER log the key or include it in error messages.
139
+ },
140
+ });
141
+ ```
142
+
143
+ Rules:
144
+
145
+ - **Never log the value.** The read layer enforces this server-side; your
146
+ code must do the same.
147
+ - **Use env vars only for deploy-level secrets.** If a credential is
148
+ user-scoped, org-scoped, or workspace-scoped, read the scoped vault/credential
149
+ store. Do not add a `process.env` fallback that makes every user inherit one
150
+ deployment's key.
151
+ - **Scope matches the registration.** `scope: "user"` → pass the user email.
152
+ `scope: "workspace"` → pass the active `orgId` from
153
+ `getOrgContext(event).orgId`.
154
+ - **One resolver per key, and every runtime path goes through it.** Before
155
+ reading a credential, grep the app for the key name. If a resolver already
156
+ exists (`resolveXConfig`, a connector, a client factory), call it — do not
157
+ read `process.env` for that key a second time somewhere else.
158
+ - **Identity comes from the caller, not the module.** A shared helper under
159
+ `server/lib/` takes the email as a parameter; only an entrypoint (action,
160
+ route, cron) decides whose identity it is. A library that resolves its own
161
+ identity from `process.env.AGENT_USER_EMAIL` authorizes the deployment rather
162
+ than the caller.
163
+
164
+ The failure this prevents is not a leak — it is a split brain. When the config
165
+ check reads the vault and the feature reads `process.env`, the settings UI and
166
+ onboarding checklist report the integration as **configured** while every actual
167
+ call fails with "env var is required". The credential is right there in the
168
+ vault, so the error names the wrong cause and sends everyone hunting for a sync
169
+ or redeploy problem that does not exist. This has now shipped four times in one
170
+ app (BigQuery, Jira, Pylon, Academy).
171
+
172
+ Before finishing any change that touches a credential, run the guard from the
173
+ app directory — it finds this whether the app lives in `templates/` or in a
174
+ workspace repo:
175
+
176
+ ```bash
177
+ npx agent-native doctor --only no-env-credentials
178
+ ```
179
+
180
+ ## `resolveCredential` sees exactly one organization
181
+
182
+ `resolveCredential(key, { userEmail, orgId })` checks the user scope, then the
183
+ one `orgId` you pass, then the solo workspace. That is the whole search. It is
184
+ correct for a signed-in request, and wrong for two common cases:
185
+
186
+ - **The caller has no organization.** A cron, a scheduled job, or any CLI run
187
+ without a real member identity resolves no `orgId`, so only the user and solo
188
+ scopes are ever consulted — and a shared key is in neither.
189
+ - **The key was synced under a different organization.** `app_secrets` has no
190
+ scope visible to every org (`readAppSecret` is strict equality on
191
+ `(scope, scope_id, key)`), so a key the vault UI advertises as available to
192
+ every app is unreadable from any org except the one that ran the sync.
193
+
194
+ Both produce the same misleading "not set" that the split brain above produces,
195
+ which is why swapping `process.env` for `resolveCredential` can look like a fix
196
+ and change nothing. A workspace app should read shared keys through a resolver
197
+ that also sweeps the caller's other memberships and a designated vault org —
198
+ see `resolveConnectorSecret` and `AGENT_VAULT_ORG_ID` in the builder-workspace
199
+ repo for the shape, including the boot-time assertion that the deployment really
200
+ is single-tenant before a non-membership-gated fallback is safe.
201
+
202
+ **The doctor guard does not catch this second form** — it looks for
203
+ `process.env` reads, and `resolveCredential` is not one. Grep for
204
+ `resolveCredential` yourself and confirm each call sits somewhere a single-org
205
+ lookup is genuinely the right question. Findings that pair it with a
206
+ `?? process.env.KEY` fallback are the sanctioned deploy-level escape hatch; the
207
+ bugs are calls whose value can only live in another org's vault.
208
+
209
+ ## HTTP routes
210
+
211
+ Core routes plugin mounts these under `/_agent-native/secrets/` automatically:
212
+
213
+ - `GET /_agent-native/secrets` — list registered secrets with status (`set`
214
+ / `unset` / `invalid`), metadata, and — for set api-keys — the last 4
215
+ characters. Values are never returned.
216
+ - `POST /_agent-native/secrets/:key` — body `{ value, scope?, scopeId? }`.
217
+ Runs the registered validator; returns 400 with the error on failure.
218
+ - `DELETE /_agent-native/secrets/:key` — remove the stored value.
219
+ - `POST /_agent-native/secrets/:key/test` — re-run the validator against the
220
+ currently stored value.
221
+
222
+ ## Storage & encryption
223
+
224
+ - Values are stored in `app_secrets` (created on-demand; no migration
225
+ needed).
226
+ - Values are encrypted at rest with AES-256-GCM. Generic app-local secrets
227
+ prefer `<APP_NAME>_SECRETS_ENCRYPTION_KEY` (for example,
228
+ `ANALYTICS_SECRETS_ENCRYPTION_KEY`), then `SECRETS_ENCRYPTION_KEY`, then
229
+ `BETTER_AUTH_SECRET`.
230
+ - Workspace-shared `app_secrets` prefer
231
+ `WORKSPACE_SECRETS_ENCRYPTION_KEY`, then the legacy shared
232
+ `SECRETS_ENCRYPTION_KEY`, then a purpose-derived key from `A2A_SECRET`.
233
+ Better Auth and app-scoped keys remain legacy read candidates; a successful
234
+ legacy decrypt is compare-and-swap migrated to the preferred shared key
235
+ without changing the row timestamp.
236
+ - Set the same stable `WORKSPACE_SECRETS_ENCRYPTION_KEY` in every app that
237
+ reads a shared vault. It is intentionally separate from app-local OAuth
238
+ encryption. If the vault still relies on `A2A_SECRET`, rotating A2A material
239
+ also rotates its encryption key. Add the stable vault key everywhere and
240
+ read/migrate existing rows before rotating A2A.
241
+ - To rotate the dedicated workspace key itself, deploy the new value together
242
+ with `WORKSPACE_SECRETS_ENCRYPTION_KEY_PREVIOUS=<old value>`, let reads
243
+ migrate ciphertext, then remove the previous key after the migration window.
244
+ - If no configured key material exists, development uses a machine-local
245
+ fallback and logs a one-time warning. Production fails closed.
246
+
247
+ ## Ad-hoc Keys
248
+
249
+ Ad-hoc keys are user-created secrets that are not declared by the template.
250
+ Users create them through the settings UI or the agent chat to use with
251
+ automations and the `web-request` tool. They support `${keys.NAME}`
252
+ substitution in outbound HTTP requests.
253
+
254
+ ### Ad-hoc API
255
+
256
+ Core routes plugin mounts these under `/_agent-native/secrets/adhoc`:
257
+
258
+ - `GET /_agent-native/secrets/adhoc` — list all ad-hoc keys (name, last 4
259
+ chars, URL allowlist). Values are never returned.
260
+ - `POST /_agent-native/secrets/adhoc` — body `{ name, value, urlAllowlist? }`.
261
+ Creates or updates an ad-hoc key.
262
+ - `DELETE /_agent-native/secrets/adhoc/:name` — remove an ad-hoc key.
263
+
264
+ ### URL Allowlists
265
+
266
+ Each ad-hoc key can have a URL allowlist — an array of origin URLs that
267
+ restrict where the key's value can be sent. The check is origin-level
268
+ (scheme + host + port). If no allowlist is configured, the key can be used
269
+ with any URL.
270
+
271
+ ```ts
272
+ // Creating a key with an allowlist
273
+ POST /_agent-native/secrets/adhoc
274
+ {
275
+ "name": "SLACK_WEBHOOK",
276
+ "value": "<SLACK_WEBHOOK_URL_FROM_SETTINGS>",
277
+ "urlAllowlist": ["https://hooks.slack.com"]
278
+ }
279
+ ```
280
+
281
+ ### `${keys.NAME}` Substitution
282
+
283
+ The `web-request` tool supports `${keys.NAME}` placeholders in the URL,
284
+ headers, and body. Substitution happens server-side after the agent emits
285
+ the tool call — the raw secret value never enters the agent's context.
286
+
287
+ ```ts
288
+ import {
289
+ resolveKeyReferences,
290
+ validateUrlAllowlist,
291
+ } from "@agent-native/core/secrets/substitution";
292
+
293
+ // Resolve all ${keys.NAME} references in a string
294
+ const { resolved, usedKeys } = await resolveKeyReferences(
295
+ "Bearer ${keys.API_TOKEN}",
296
+ "user",
297
+ "user@example.com",
298
+ );
299
+
300
+ // Validate a URL against a key's allowlist
301
+ const allowed = validateUrlAllowlist(
302
+ "https://hooks.slack.com/services/<WORKSPACE>/<CHANNEL>/<SECRET>",
303
+ ["https://hooks.slack.com"],
304
+ );
305
+ ```
306
+
307
+ Key resolution falls back from user scope to workspace scope, so users can
308
+ override shared keys without breaking automations that reference workspace
309
+ defaults.
310
+
311
+ ## Dispatch Vault Access
312
+
313
+ Dispatch workspaces have a vault access policy for workspace app credentials:
314
+
315
+ - `all-apps` is the default. Every saved Dispatch vault key is available to
316
+ every workspace app; `sync-vault-to-app` pushes all vault keys to the target
317
+ app.
318
+ - `manual` requires explicit per-app grants. Use
319
+ `create-vault-grant` / `grant-vault-secrets-to-app`, then
320
+ `sync-vault-to-app`.
321
+
322
+ Use `get-vault-access-settings` before deciding whether to create grants, and
323
+ use `set-vault-access-settings` only when the user asks to change the policy.
324
+
325
+ ### Key Files (ad-hoc)
326
+
327
+ | File | Purpose |
328
+ | ---------------------------------------------- | ------------------------------------------- |
329
+ | `packages/core/src/secrets/substitution.ts` | `resolveKeyReferences()`, `validateUrlAllowlist()` |
330
+ | `packages/core/src/tools/fetch-tool.ts` | `web-request` tool consuming key references |
331
+
332
+ ## Related skills
333
+
334
+ - `onboarding` — the setup checklist that required secrets show up in.
335
+ - `actions` — where you'll read secrets when calling third-party APIs.
336
+ - `authentication` — session scoping; `scope: "user"` uses the session
337
+ email.
338
+ - `security` — input validation and never logging secrets.
339
+ - `automations` — ad-hoc keys power `${keys.NAME}` in automation web requests.
@@ -0,0 +1,324 @@
1
+ ---
2
+ name: security
3
+ description: >-
4
+ Secure coding practices for agent-native apps: input validation, SQL
5
+ injection, XSS, secrets, data scoping, and auth. Use when writing any action,
6
+ route, or component that touches user data or external input.
7
+ scope: dev
8
+ metadata:
9
+ internal: true
10
+ ---
11
+
12
+ # Security
13
+
14
+ ## Rule
15
+
16
+ Use the framework's security primitives everywhere. Never bypass them.
17
+
18
+ ## Absolute Secrets Rule
19
+
20
+ Never hardcode secret values or real private data. This applies to source code,
21
+ docs, tests, fixtures, generated prompts, screenshots, seed data, and extension
22
+ HTML just as much as production code.
23
+
24
+ Do not paste or invent real-looking API keys, bearer tokens, OAuth refresh
25
+ tokens, webhook URLs, signing secrets, private Builder/internal data, or customer
26
+ data into the repo. Examples must use obvious placeholders such as
27
+ `<OPENAI_API_KEY>`, `${keys.SLACK_WEBHOOK}`, `sk-test-example`, or
28
+ `example.customer@example.com`. Test literals should be clearly fake and must
29
+ not match real provider token formats when an `example` token will do.
30
+
31
+ Credential values enter the system only through approved runtime channels:
32
+ deployment env vars for deploy-level secrets, the encrypted `app_secrets` vault
33
+ or `saveCredential` / `resolveCredential` for user/org/workspace API keys, and
34
+ `oauth_tokens` for OAuth. Code and instructions may name the credential key
35
+ (`OPENAI_API_KEY`), but must never contain the credential value.
36
+
37
+ ## Input Validation
38
+
39
+ Use `defineAction` with a Zod `schema:` for every action. The framework validates input automatically and returns clear 400 errors for HTTP callers and structured error results for agent tool calls.
40
+
41
+ ```ts
42
+ export default defineAction({
43
+ schema: z.object({
44
+ email: z.string().email(),
45
+ role: z.enum(["admin", "member"]),
46
+ limit: z.coerce.number().int().min(1).max(100).default(25),
47
+ }),
48
+ run: async (args) => { /* args is fully typed and validated */ },
49
+ });
50
+ ```
51
+
52
+ The legacy `parameters:` field (plain JSON Schema) has no runtime validation — do not use it for new code.
53
+
54
+ ## Large Payloads
55
+
56
+ Do not accept or persist unbounded base64/file blobs through actions, SQL writes,
57
+ or `application_state`. Route uploads through the file-upload provider and store
58
+ references. This prevents database bloat, slow hot paths, and accidental secret
59
+ or customer-data embedding inside binary payloads.
60
+
61
+ ## SQL Injection
62
+
63
+ Never concatenate user input into SQL strings. Use Drizzle ORM's query builder (always safe) or parameterized queries:
64
+
65
+ ```ts
66
+ // Safe — Drizzle ORM
67
+ await db.select().from(users).where(eq(users.email, args.email));
68
+
69
+ // Safe — parameterized raw SQL
70
+ await client.execute({ sql: "SELECT * FROM users WHERE id = ?", args: [id] });
71
+
72
+ // NEVER do this
73
+ await client.execute(`SELECT * FROM users WHERE id = '${id}'`);
74
+ ```
75
+
76
+ ## XSS
77
+
78
+ - React auto-escapes JSX content — trust it.
79
+ - Never use `dangerouslySetInnerHTML`, `innerHTML`, `eval()`, or `document.write()` with user-controlled content.
80
+ - For rich text editing, use TipTap (framework dependency).
81
+ - For rendering markdown, use `react-markdown`.
82
+
83
+ ## SSRF
84
+
85
+ Any server-side `fetch` of a user- or agent-controlled URL must go through the framework SSRF guard — a bare `fetch()` can be steered at cloud metadata (`169.254.169.254`), `localhost`, or internal services.
86
+
87
+ ```ts
88
+ import { ssrfSafeFetch } from "@agent-native/core/extensions/url-safety";
89
+ // Blocks private/internal targets, re-checks the resolved IP at connect time
90
+ // (DNS rebinding), and re-validates every redirect hop.
91
+ const res = await ssrfSafeFetch(userProvidedUrl, {}, { maxRedirects: 3 });
92
+ ```
93
+
94
+ For a pre-flight-only check (e.g. before a streaming or one-shot fetch), use `isBlockedExtensionUrlWithDns(url)` plus `createSsrfSafeDispatcher()` from the same module, and set `redirect: "manual"`. Never let the default `fetch` follow redirects for an untrusted URL — a public URL can 30x into the private network.
95
+
96
+ ## Secrets
97
+
98
+ - OAuth tokens go in the `oauth_tokens` store via `saveOAuthTokens()`.
99
+ - Per-user / per-org API keys go through `saveCredential` / `resolveCredential` (`@agent-native/core/credentials`) or the `app_secrets` vault. Both encrypt values at rest with AES-256-GCM (keyed by `SECRETS_ENCRYPTION_KEY`, falling back to `BETTER_AUTH_SECRET`; production refuses to start without one).
100
+ - Never hand-roll secrets into `settings`, `application_state`, source code, or action responses sent to the client. The credential / vault APIs above are the only sanctioned stores.
101
+ - Never commit real keys, tokens, webhook URLs, signing secrets, or private
102
+ Builder/customer data in examples or fixtures. Use placeholders that cannot be
103
+ mistaken for working credentials.
104
+
105
+ ## User Credentials Are Per-User Data — Never `process.env`
106
+
107
+ User credentials (API keys, third-party tokens) are per-user (or per-org) data. They MUST live in SQL, scoped per-user (`u:<email>:credential:KEY`) or per-org (`o:<orgId>:credential:KEY`). Always read with the request context:
108
+
109
+ ```ts
110
+ import { resolveCredential } from "@agent-native/core/credentials";
111
+ const apiKey = await resolveCredential("OPENAI_API_KEY", { userEmail, orgId });
112
+ ```
113
+
114
+ Values are encrypted at rest (AES-256-GCM, shared `secrets/crypto.ts`): `saveCredential` encrypts on write and `resolveCredential` decrypts on read, with a transparent fallback for legacy plaintext rows. The agent's raw `db-query` / `db-exec` tools also cannot read credential rows — they are excluded from the scoped `settings` view. To encrypt pre-existing rows in place, run `pnpm action db-migrate-encrypt-credentials` (idempotent, non-destructive; needs the same `SECRETS_ENCRYPTION_KEY` / `BETTER_AUTH_SECRET` as the app).
115
+
116
+ On 2026-04-29 the previous one-arg `resolveCredential(key)` form fell back to `process.env[key]` and an unscoped global `settings` row, so every signed-in user inherited the deployment's credentials. Two guards now block this in CI (`pnpm prep`):
117
+
118
+ - `scripts/guard-no-env-credentials.mjs` — bans `process.env.<KEY>` reads in `packages/core/src/credentials/`, `secrets/`, `vault/`, and `templates/*/server/{lib,routes/api}/credential*` paths, except for an explicit allowlist of deploy-level vars (`DATABASE_URL`, `BETTER_AUTH_SECRET`, `NETLIFY_*`, etc.). Per-line opt-out: `// guard:allow-env-credential — <reason>`.
119
+ - `scripts/guard-no-unscoped-credentials.mjs` — bans one-arg calls to `resolveCredential` / `hasCredential` / `saveCredential` / `deleteCredential`. Per-line opt-out: `// guard:allow-unscoped-credential — <reason>`.
120
+
121
+ If a deploy-level value genuinely needs an env var (CI-set token, host secret), it's not a user credential — keep it out of the credentials/ secrets/ vault/ paths and the env-credentials guard won't see it.
122
+
123
+ ## Guards
124
+
125
+ Two more CI guards (also wired into `pnpm prep`) target the 2026-04 cross-tenant leak class — request-state escaping into shared process state, and dev-mode sentinel identities used as production fallbacks.
126
+
127
+ - `scripts/guard-no-env-mutation.mjs` — bans `process.env.<KEY> = …` (and bracket / compound forms) anywhere in production code. On serverless, every warm container handles many concurrent requests in one Node process, so `process.env` mutation leaks across in-flight requests (the "restore" line at the end of a handler races and never helps — most recently the Zoom webhook). Use `runWithRequestContext({ userEmail, orgId, timezone }, fn)` from `@agent-native/core/server` instead — it's AsyncLocalStorage-backed and per-request safe. Allowlisted paths: `scripts/`, `*.spec.ts` / `*.test.ts`, `packages/core/src/dev**`, `templates/*/test/`, anything under `/cli/` or `/scaffold/`. Per-line opt-out: `process.env.X = y // guard:allow-env-mutation — <reason>`.
128
+ - `scripts/guard-no-localhost-fallback.mjs` — bans the literal `"local@localhost"` / `'local@localhost'` / `` `local@localhost` `` in production code. The bug class: `getRequestUserEmail() ?? "local@localhost"` silently pools every unauthenticated request into a single shared tenant, leaking credentials, tools, and `application_state` rows between accounts. The right behavior is to throw / 401 when there's no session. Allowlisted paths: the dev-mode auth shim (`packages/core/src/server/auth.ts`), `packages/core/src/dev**`, tests, `scripts/`, `seed/` / `seeds/`, plus a few framework helpers that intentionally inspect or migrate the dev identity. SQL DDL `DEFAULT 'local@localhost'` and the Drizzle helper `.default('local@localhost')` are skipped per-line — schema column defaults are intentional dev fixtures, not the dangerous fallback pattern. Per-line opt-out: `email ?? "local@localhost" // guard:allow-localhost-fallback — <reason>`.
129
+
130
+ The same guard also bans the **ambient process identity** as a request-scoped fallback: `?? process.env.AGENT_USER_EMAIL`, `|| process.env.WORKSPACE_OWNER_EMAIL`, and `?? getAmbientUserEmail()`. Those name the identity of the *deployment*, not the caller, so a handler reading one authorizes whoever the deploy env names rather than whoever signed in — it fails open toward more privilege. Exempt paths are the ones with no request by construction: `scripts/` (including `templates/*/scripts/`), `src/cli/`, `src/scripts/`, `script-helpers.ts` / `script-entries.ts`, tests, and seeds. It deliberately matches only the `??` / `||` fallback position, so reading the same env var to build an admin allowlist (`envEmails("WORKSPACE_OWNER_EMAIL").includes(email)`) is untouched. Known gaps, both requiring dataflow analysis the guard does not do: an env read aliased through a local (`const fallback = process.env.AGENT_USER_EMAIL; … ?? fallback`) and a destructured `const { AGENT_USER_EMAIL } = process.env`.
131
+
132
+ ## Auth
133
+
134
+ - All actions are protected by the auth guard automatically.
135
+ - Prefer actions for normal app data. Do not hand-write `/api/*` routes for
136
+ CRUD, data queries, or action re-exports just to add auth; action endpoints
137
+ already get auth and request context.
138
+ - If you must create custom `/api/` routes, always call `getSession(event)` and reject requests without a session:
139
+
140
+ ```ts
141
+ import { getSession } from "@agent-native/core/server";
142
+
143
+ export default defineEventHandler(async (event) => {
144
+ const session = await getSession(event);
145
+ if (!session) throw createError({ statusCode: 401 });
146
+ // ...
147
+ });
148
+ ```
149
+
150
+ - Never create unprotected routes that modify data.
151
+
152
+ **Exception — the SSR HTML/`.data` catch-all is deliberately session-blind.**
153
+ The rule above is for routes that read or mutate user data. The SSR page
154
+ render and React Router `.data` route are different: they serve one
155
+ impersonal, public-cacheable shell to every visitor by design, and loaders on
156
+ that path render no user data. Do not "fix" this by adding `getSession`,
157
+ `private`, or `no-store` to it — that regresses the CDN cache contract for the
158
+ whole site. Data scoping lives in actions and API routes; the client gates
159
+ private UI after the shell loads. See the `authentication` skill and
160
+ `guard:ssr-cache-shell` / `ssr-handler.spec.ts`.
161
+
162
+ **Authorization beyond "is there a session" — `authorize`.** The auth guard only
163
+ proves *someone* is signed in. To restrict an operation to some teammates, set
164
+ `authorize` on the `defineAction`. It wraps `run`, so it applies at every
165
+ dispatch site (agent tool, HTTP, frontend, MCP, A2A, CLI) — unlike
166
+ `needsApproval`, which is honored by the agent loop and MCP 2026 hosts that
167
+ support elicitation, but is not an authorization boundary for every dispatch
168
+ site.
169
+
170
+ ```ts
171
+ import { coachAccess } from "../lib/access.js"; // defineAppRoles(...)
172
+
173
+ export default defineAction({
174
+ description: "Archive a client roster.",
175
+ schema: z.object({ id: z.string() }),
176
+ authorize: coachAccess.requireAny("coach-admin"),
177
+ run: async (args) => {
178
+ /* ... */
179
+ },
180
+ });
181
+ ```
182
+
183
+ A guard that throws denies with its own message; returning `false` denies
184
+ generically; anything else (including `undefined`) allows. Guarded actions need
185
+ a user identity — an unattended CLI/cron caller with no user email is denied.
186
+
187
+ `authorize` is **not** a substitute for `accessFilter` / `assertAccess`. It
188
+ decides whether this caller may perform the operation at all; `accessFilter` /
189
+ `assertAccess` scope which rows a permitted caller may see or touch. A
190
+ restricted write action needs both. See the `authentication` skill for
191
+ `defineAppRoles` and the `actions` skill for the full surface.
192
+
193
+ ## Human-in-the-Loop Approval for High-Consequence Actions
194
+
195
+ For a small set of outward-facing, hard-to-undo operations — sending an email, charging a card, deleting an account, posting publicly — auth and access control are necessary but not sufficient: you also do not want the **agent** to perform them autonomously. Set `needsApproval` on the `defineAction` so the agent cannot run the action without a human approving the specific call.
196
+
197
+ ```ts
198
+ export default defineAction({
199
+ description: "Send an email via Gmail.",
200
+ schema: z.object({ to: z.string(), subject: z.string(), body: z.string() }),
201
+ needsApproval: true, // or (args, ctx) => boolean | Promise<boolean>
202
+ run: async (args) => {
203
+ /* ...actually send... */
204
+ },
205
+ });
206
+ ```
207
+
208
+ When the gate is truthy and the call is not yet approved, the agent loop emits
209
+ an `approval_required` event and **stops the turn — `run()` never executes**.
210
+ The human approves via the chat UI's Approve affordance, which re-issues the
211
+ turn with the call's stable `approvalKey`; only then does the action run. MCP
212
+ 2026 hosts receive an `input_required` approval request bound to the exact
213
+ caller, action, and arguments. The signed response state is backed by a durable,
214
+ single-use grant, so denial, expiry, replay, missing host support, or invalid
215
+ state fails closed before `run()`. A predicate gates conditionally (e.g. only
216
+ external recipients) and **fails closed** — a throw is treated as "approval
217
+ required".
218
+
219
+ Rules:
220
+
221
+ - Reach for `needsApproval` only for genuinely high-consequence operations. The default is off, and the framework intentionally keeps approvals rare — over-gating turns the agent into a click-through wizard. The canonical (and intentionally lone) framework example is Mail's `send-email`.
222
+ - `needsApproval` is **not** a substitute for `accessFilter` / `assertAccess` or for hiding sensitive operations from the model with `agentTool: false` / `toolCallable: false`. It is the layer for "a human must explicitly bless this specific outward-facing call," not for scoping data. See the `actions` skill for the full surface.
223
+
224
+ ## Custom HTTP Routes Must Apply Access Control Themselves
225
+
226
+ This is the single most-failed rule in the codebase. Auto-mounted action routes (`/_agent-native/actions/...`) get a request context wired up automatically. **Hand-written `/api/*` Nitro routes do not.** If your handler queries an ownable resource (any table with `...ownableColumns()`), you MUST:
227
+
228
+ 1. Read the session: `const session = await getSession(event).catch(() => null)`.
229
+ 2. Run the work inside `runWithRequestContext({ userEmail: session?.email, orgId: session?.orgId }, fn)` from `@agent-native/core/server`.
230
+ 3. Inside `fn`, query through one of:
231
+ - `accessFilter(table, sharesTable)` in the WHERE clause for list/read-many.
232
+ - `resolveAccess("<type>", id)` for read-by-id (returns null if no access — return 404, not 403, so existence isn't leaked).
233
+ - `assertAccess("<type>", id, "viewer"|"editor"|"admin")` for write/delete-by-id.
234
+
235
+ ```ts
236
+ // Bad — Brent's signup leaked every other user's decks because of this exact shape.
237
+ export default defineEventHandler(async () => {
238
+ const db = getDb();
239
+ return db.select().from(schema.decks); // no access filter!
240
+ });
241
+
242
+ // Good
243
+ import { getSession, runWithRequestContext } from "@agent-native/core/server";
244
+ import { accessFilter } from "@agent-native/core/sharing";
245
+ export default defineEventHandler(async (event) => {
246
+ const session = await getSession(event).catch(() => null);
247
+ return runWithRequestContext(
248
+ { userEmail: session?.email, orgId: session?.orgId },
249
+ async () => {
250
+ const db = getDb();
251
+ return db
252
+ .select()
253
+ .from(schema.decks)
254
+ .where(accessFilter(schema.decks, schema.deckShares));
255
+ },
256
+ );
257
+ });
258
+ ```
259
+
260
+ `scripts/guard-no-unscoped-queries.mjs` runs in `pnpm prep` and fails the build if any file in `templates/*/server/`, `templates/*/actions/`, or `packages/*/src/` queries an ownable table without one of the access helpers. Last-resort opt-out is the marker comment `// guard:allow-unscoped — <reason>` — only use it for cases like the sharing primitives themselves or share-token-public viewer endpoints, and always include a reviewer-readable reason.
261
+
262
+ ## Data Scoping
263
+
264
+ In production, the framework automatically restricts all agent SQL queries to the current user's data using temporary views. This is enforced at the SQL level — the agent cannot bypass it.
265
+
266
+ The `db-query` / `db-exec` tools (and the extension SQL bridge, which shares the same path) reject schema-qualified table references like `public.<table>` or `main.<table>` — a qualified name resolves to the base table and would skip the temp view. Use bare table names; scoping is applied automatically.
267
+
268
+ ### Per-User Scoping (`owner_email`)
269
+
270
+ Every template table with user data **must** have an `owner_email` text column:
271
+
272
+ 1. Framework detects `owner_email` via schema introspection
273
+ 2. Creates temp views `WHERE owner_email = <current user>` before each query
274
+ 3. Auto-injects `owner_email` into INSERT statements
275
+
276
+ The current user is resolved from `AGENT_USER_EMAIL` (set automatically from the session).
277
+
278
+ ### Per-Org Scoping (`org_id`)
279
+
280
+ For multi-org apps, tables also need `org_id`:
281
+
282
+ 1. `WHERE org_id = <current org>` is added (in addition to `owner_email` if present)
283
+ 2. `org_id` is auto-injected into INSERT statements
284
+
285
+ Enable org scoping in the agent-chat plugin:
286
+
287
+ ```ts
288
+ createAgentChatPlugin({
289
+ resolveOrgId: async (event) => {
290
+ const ctx = await getOrgContext(event);
291
+ return ctx.orgId;
292
+ },
293
+ });
294
+ ```
295
+
296
+ ### Column Conventions
297
+
298
+ | Column | Purpose | Required |
299
+ | ------------- | ----------------------- | ------------------------------- |
300
+ | `owner_email` | Per-user data isolation | Yes, for all user-facing tables |
301
+ | `org_id` | Per-org data isolation | Yes, for multi-org apps |
302
+
303
+ Run `pnpm action db-check-scoping` to verify. Use `--require-org` for multi-org apps.
304
+
305
+ ## Checklist
306
+
307
+ - [ ] New action uses `defineAction` with a Zod `schema:`
308
+ - [ ] No SQL string concatenation with user input
309
+ - [ ] No `dangerouslySetInnerHTML` with user content
310
+ - [ ] Server-side fetches of user/agent URLs use `ssrfSafeFetch`, not bare `fetch`
311
+ - [ ] Secrets stored via `saveCredential` / the vault (encrypted), never raw in `settings` or responses
312
+ - [ ] No hardcoded API keys, tokens, webhook URLs, signing secrets, real
313
+ credential-looking strings, private Builder/internal data, or customer data
314
+ - [ ] New env vars in `.env` only, not committed
315
+ - [ ] New user-data tables have `owner_email` column
316
+ - [ ] Custom routes call `getSession` and reject unauthenticated requests
317
+ - [ ] Actions only some teammates may run set `authorize` (in addition to any
318
+ `accessFilter` / `assertAccess` row scoping)
319
+
320
+ ## Related Skills
321
+
322
+ - `storing-data` — SQL patterns and the agent's db tools
323
+ - `actions` — `defineAction` with Zod schema validation
324
+ - `authentication` — Auth modes, sessions, and org context