@agent-native/core 0.145.5 → 0.145.6

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 (387) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +18 -0
  3. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  4. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +17 -1
  5. package/corpus/templates/analytics/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  6. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -0
  7. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +22 -3
  8. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +76 -23
  9. package/corpus/templates/analytics/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  10. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  11. package/corpus/templates/analytics/AGENTS.md +2 -1
  12. package/corpus/templates/analytics/actions/account-deep-dive.ts +83 -47
  13. package/corpus/templates/analytics/actions/create-dashboard-folder.ts +27 -0
  14. package/corpus/templates/analytics/actions/gong-calls.ts +3 -3
  15. package/corpus/templates/analytics/actions/list-dashboard-folders.ts +26 -0
  16. package/corpus/templates/analytics/actions/list-sql-dashboards.ts +1 -0
  17. package/corpus/templates/analytics/actions/set-dashboard-folder.ts +26 -0
  18. package/corpus/templates/analytics/app/components/ProviderCorpusJobNotifier.tsx +18 -3
  19. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +6 -4
  20. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
  21. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +12 -2
  22. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +35 -20
  23. package/corpus/templates/analytics/app/global.css +17 -0
  24. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +29 -15
  25. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -3
  26. package/corpus/templates/analytics/app/i18n-data.ts +296 -0
  27. package/corpus/templates/analytics/app/lib/prefetch-keys.ts +23 -2
  28. package/corpus/templates/analytics/app/pages/DashboardOverview.tsx +642 -0
  29. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +66 -31
  30. package/corpus/templates/analytics/app/root.tsx +4 -0
  31. package/corpus/templates/analytics/app/routes/dashboards._index.tsx +5 -1
  32. package/corpus/templates/analytics/changelog/2026-08-07-added-a-dashboards-overview-with-personal-and-shared-folders.md +6 -0
  33. package/corpus/templates/analytics/changelog/2026-08-07-analytics-tracking-and-chat-startup-no-longer-emit-avoidable.md +6 -0
  34. package/corpus/templates/analytics/changelog/2026-08-07-dashboard-panels-now-load-custom-api-data-programs-reliably.md +6 -0
  35. package/corpus/templates/analytics/changelog/2026-08-07-gong-searches-conserve-api-quota-and-report-incomplete-coverage.md +6 -0
  36. package/corpus/templates/analytics/changelog/2026-08-07-searchable-dashboards-make-personal-and-shared-folders-easie.md +6 -0
  37. package/corpus/templates/analytics/netlify.toml +3 -0
  38. package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +112 -0
  39. package/corpus/templates/analytics/server/db/index.ts +12 -0
  40. package/corpus/templates/analytics/server/db/schema.ts +14 -0
  41. package/corpus/templates/analytics/server/jobs/analytics-rollup-backfill.ts +4 -0
  42. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +1 -0
  43. package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +85 -15
  44. package/corpus/templates/analytics/server/lib/dashboard-folders-store.ts +168 -0
  45. package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +9 -4
  46. package/corpus/templates/analytics/server/lib/dashboards-store.ts +116 -1
  47. package/corpus/templates/analytics/server/lib/first-party-analytics-rollups.ts +4 -8
  48. package/corpus/templates/analytics/server/lib/gong.ts +139 -78
  49. package/corpus/templates/analytics/server/plugins/db.ts +55 -15
  50. package/corpus/templates/analytics/server/plugins/session-replay-retention-jobs.ts +6 -2
  51. package/corpus/templates/analytics/server/routes/api/session-replay/retention.post.ts +65 -0
  52. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +18 -0
  53. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  54. package/corpus/templates/assets/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  55. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -0
  56. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +76 -23
  57. package/corpus/templates/assets/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  58. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  59. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +18 -0
  60. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  61. package/corpus/templates/brain/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  62. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -0
  63. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +76 -23
  64. package/corpus/templates/brain/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  65. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  66. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +18 -0
  67. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  68. package/corpus/templates/calendar/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  69. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -0
  70. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +76 -23
  71. package/corpus/templates/calendar/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  72. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  73. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +18 -0
  74. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  75. package/corpus/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  76. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
  77. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
  78. package/corpus/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  79. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  80. package/corpus/templates/chat/.env.example +3 -0
  81. package/corpus/templates/chat/AGENTS.md +4 -0
  82. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +18 -0
  83. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  84. package/corpus/templates/clips/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  85. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -0
  86. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +76 -23
  87. package/corpus/templates/clips/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  88. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  89. package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +4 -0
  90. package/corpus/templates/clips/actions/request-transcript.ts +52 -3
  91. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +3 -10
  92. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -0
  93. package/corpus/templates/clips/changelog/2026-08-07-screen-recordings-now-capture-tab-and-system-audio-even-when.md +6 -0
  94. package/corpus/templates/clips/changelog/2026-08-07-transcription-now-retries-transient-cloud-failures-automatic.md +6 -0
  95. package/corpus/templates/clips/server/db/schema.ts +7 -0
  96. package/corpus/templates/clips/server/plugins/db.ts +8 -0
  97. package/corpus/templates/clips/shared/recording-capture.ts +38 -0
  98. package/corpus/templates/clips/shared/transcript-failure.ts +89 -0
  99. package/corpus/templates/content/.agents/skills/actions/SKILL.md +18 -0
  100. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  101. package/corpus/templates/content/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  102. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -0
  103. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +76 -23
  104. package/corpus/templates/content/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  105. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  106. package/corpus/templates/content/.env.example +9 -3
  107. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -0
  108. package/corpus/templates/content/changelog/2026-08-07-collapsed-sidebar-utility-buttons-stay-anchored-at-the-botto.md +6 -0
  109. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  110. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +76 -23
  111. package/corpus/templates/crm/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  112. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  113. package/corpus/templates/design/.agents/skills/actions/SKILL.md +18 -0
  114. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  115. package/corpus/templates/design/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  116. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -0
  117. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +76 -23
  118. package/corpus/templates/design/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  119. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  120. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +18 -0
  121. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  122. package/corpus/templates/dispatch/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  123. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -0
  124. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +76 -23
  125. package/corpus/templates/dispatch/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  126. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  127. package/corpus/templates/factory/.agents/skills/actions/SKILL.md +18 -0
  128. package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  129. package/corpus/templates/factory/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  130. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +1 -0
  131. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +76 -23
  132. package/corpus/templates/factory/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  133. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  134. package/corpus/templates/factory/actions/babysit-agent-native-pull-request.ts +279 -0
  135. package/corpus/templates/factory/actions/get-factory-automation-health.ts +23 -4
  136. package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +1 -1
  137. package/corpus/templates/factory/app/routes/factory.tsx +21 -3
  138. package/corpus/templates/factory/changelog/2026-08-07-factory-can-keep-builder-bot-pull-requests-moving-by-request.md +6 -0
  139. package/corpus/templates/factory/server/lib/require-factory-automation.ts +1 -0
  140. package/corpus/templates/factory/server/plugins/agent-chat.ts +4 -1
  141. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +81 -12
  142. package/corpus/templates/factory/server/triage/github-client.ts +31 -0
  143. package/corpus/templates/factory/server/triage/pr-babysit.ts +75 -1
  144. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +18 -0
  145. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  146. package/corpus/templates/forms/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  147. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -0
  148. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +76 -23
  149. package/corpus/templates/forms/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  150. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  151. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  152. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -0
  153. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +76 -23
  154. package/corpus/templates/macros/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  155. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  156. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +18 -0
  157. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  158. package/corpus/templates/mail/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  159. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -0
  160. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +76 -23
  161. package/corpus/templates/mail/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  162. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  163. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +18 -0
  164. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  165. package/corpus/templates/plan/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  166. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -0
  167. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +76 -23
  168. package/corpus/templates/plan/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  169. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  170. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -1
  171. package/corpus/templates/plan/changelog/2026-08-07-inline-help-icons-now-stay-visually-balanced-with-nearby-tex.md +6 -0
  172. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +18 -0
  173. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  174. package/corpus/templates/slides/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  175. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -0
  176. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +76 -23
  177. package/corpus/templates/slides/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  178. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  179. package/corpus/templates/slides/.env.example +5 -0
  180. package/corpus/templates/slides/changelog/2026-08-07-fixed-generated-slides-briefly-disappearing-while-they-are-b.md +6 -0
  181. package/corpus/templates/slides/server/plugins/collab.ts +20 -8
  182. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +18 -0
  183. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  184. package/corpus/templates/tasks/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  185. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +1 -0
  186. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +76 -23
  187. package/corpus/templates/tasks/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  188. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  189. package/corpus/templates/tasks/.env.example +3 -0
  190. package/dist/agent/production-agent.js +24 -3
  191. package/dist/client/AgentPanel.d.ts +6 -0
  192. package/dist/client/AgentPanel.js +176 -30
  193. package/dist/client/AssistantChat.d.ts +2 -0
  194. package/dist/client/AssistantChat.js +4 -1
  195. package/dist/client/ConnectBuilderCard.js +6 -11
  196. package/dist/client/MultiTabAssistantChat.js +1 -1
  197. package/dist/client/RuntimeConfigNotice.d.ts +1 -0
  198. package/dist/client/RuntimeConfigNotice.js +94 -0
  199. package/dist/client/agent-chat/index.d.ts +1 -1
  200. package/dist/client/agent-chat/index.js +1 -1
  201. package/dist/client/agent-chat-adapter.js +85 -4
  202. package/dist/client/agent-page/AgentTabsPage.js +1 -1
  203. package/dist/client/agent-sidebar-state.d.ts +6 -0
  204. package/dist/client/agent-sidebar-state.js +25 -0
  205. package/dist/client/app-providers.js +2 -1
  206. package/dist/client/assistant-ui-recovery.js +1 -1
  207. package/dist/client/chat/index.d.ts +1 -1
  208. package/dist/client/chat/index.js +1 -1
  209. package/dist/client/chat/markdown-renderer.d.ts +2 -1
  210. package/dist/client/chat/markdown-renderer.js +48 -2
  211. package/dist/client/chat/message-components.d.ts +6 -0
  212. package/dist/client/chat/message-components.js +182 -53
  213. package/dist/client/chat/tool-call-display.d.ts +16 -4
  214. package/dist/client/chat/tool-call-display.js +225 -18
  215. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  216. package/dist/client/frame-protocol.d.ts +4 -0
  217. package/dist/client/i18n.js +9 -0
  218. package/dist/client/integrations/IntegrationsPanel.js +2 -5
  219. package/dist/client/onboarding/FirstRunOnboarding.js +2 -3
  220. package/dist/client/org/TeamPage.js +49 -6
  221. package/dist/client/org/hooks.d.ts +7 -2
  222. package/dist/client/org/hooks.js +11 -4
  223. package/dist/client/resources/McpConnectionSuggestion.js +2 -3
  224. package/dist/client/resources/McpIntegrationDialog.js +2 -16
  225. package/dist/client/resources/McpIntegrationLogo.d.ts +11 -0
  226. package/dist/client/resources/McpIntegrationLogo.js +14 -0
  227. package/dist/client/resources/ResourceTree.js +1 -1
  228. package/dist/client/resources/mcp-integration-logos.d.ts +1 -0
  229. package/dist/client/resources/mcp-integration-logos.js +47 -18
  230. package/dist/client/settings/useBuilderStatus.js +6 -0
  231. package/dist/client/ui/index.d.ts +1 -0
  232. package/dist/client/ui/index.js +1 -0
  233. package/dist/collab/routes.d.ts +1 -1
  234. package/dist/config.d.ts +26 -3
  235. package/dist/config.js +106 -14
  236. package/dist/db/ddl-guard.d.ts +15 -2
  237. package/dist/db/ddl-guard.js +53 -5
  238. package/dist/jobs/scheduler.js +7 -0
  239. package/dist/localization/default-messages.d.ts +17 -0
  240. package/dist/localization/default-messages.js +17 -0
  241. package/dist/mcp/oauth-client-metadata.js +5 -1
  242. package/dist/mcp/oauth-route.d.ts +5 -4
  243. package/dist/mcp/oauth-route.js +25 -9
  244. package/dist/mcp/screen-memory-stdio.d.ts +7 -7
  245. package/dist/mcp/server.d.ts +1 -1
  246. package/dist/mcp/server.js +9 -10
  247. package/dist/notifications/routes.d.ts +3 -3
  248. package/dist/org/handlers.d.ts +1 -0
  249. package/dist/org/handlers.js +17 -2
  250. package/dist/provider-api/actions/custom-provider-registration.d.ts +5 -5
  251. package/dist/provider-api/actions/provider-api.d.ts +7 -7
  252. package/dist/provider-api/corpus-jobs.d.ts +12 -2
  253. package/dist/provider-api/corpus-jobs.js +31 -1
  254. package/dist/provider-api/index.d.ts +2 -0
  255. package/dist/provider-api/index.js +7 -1
  256. package/dist/resources/handlers.d.ts +1 -1
  257. package/dist/secrets/routes.d.ts +3 -3
  258. package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +1 -1
  259. package/dist/server/agent-chat/recurring-jobs-runtime.js +14 -2
  260. package/dist/server/agent-chat/script-entries.js +12 -1
  261. package/dist/server/agent-chat-plugin.js +2 -2
  262. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  263. package/dist/server/auth.d.ts +1 -0
  264. package/dist/server/auth.js +85 -1
  265. package/dist/server/better-auth-instance.d.ts +9 -0
  266. package/dist/server/better-auth-instance.js +25 -11
  267. package/dist/server/core-routes-plugin.d.ts +7 -0
  268. package/dist/server/core-routes-plugin.js +51 -5
  269. package/dist/server/create-server.js +23 -2
  270. package/dist/server/db-pressure.d.ts +38 -0
  271. package/dist/server/db-pressure.js +147 -0
  272. package/dist/server/index.d.ts +1 -0
  273. package/dist/server/index.js +1 -0
  274. package/dist/server/legacy-auth-migration.d.ts +10 -0
  275. package/dist/server/legacy-auth-migration.js +37 -0
  276. package/dist/server/onboarding-html.js +206 -2
  277. package/dist/server/poll.d.ts +26 -0
  278. package/dist/server/poll.js +108 -13
  279. package/dist/server/ssr-handler.js +4 -1
  280. package/dist/shared/index.d.ts +1 -0
  281. package/dist/shared/index.js +1 -0
  282. package/dist/shared/runtime-config.d.ts +44 -0
  283. package/dist/shared/runtime-config.js +284 -0
  284. package/dist/styles/agent-native.css +48 -1
  285. package/dist/templates/chat/.agents/skills/actions/SKILL.md +18 -0
  286. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  287. package/dist/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  288. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
  289. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
  290. package/dist/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  291. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  292. package/dist/templates/chat/.env.example +3 -0
  293. package/dist/templates/chat/AGENTS.md +4 -0
  294. package/dist/templates/default/.agents/skills/actions/SKILL.md +18 -0
  295. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  296. package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  297. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -0
  298. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +76 -23
  299. package/dist/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  300. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  301. package/dist/templates/default/AGENTS.md +6 -1
  302. package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
  303. package/dist/templates/default/app/i18n/de-DE.ts +6 -0
  304. package/dist/templates/default/app/i18n/en-US.ts +6 -0
  305. package/dist/templates/default/app/i18n/es-ES.ts +6 -0
  306. package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
  307. package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
  308. package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
  309. package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
  310. package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
  311. package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
  312. package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
  313. package/dist/templates/headless/.agents/skills/actions/SKILL.md +18 -0
  314. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  315. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +76 -23
  316. package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  317. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  318. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +18 -0
  319. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  320. package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  321. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -0
  322. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +76 -23
  323. package/dist/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  324. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  325. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -0
  326. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +8 -0
  327. package/dist/templates/workspace-core/AGENTS.md +7 -2
  328. package/dist/templates/workspace-root/AGENTS.md +5 -0
  329. package/dist/vite/client.d.ts +3 -3
  330. package/dist/vite/client.js +47 -1
  331. package/dist/vite/index.d.ts +1 -1
  332. package/docs/content/agent-native-config.mdx +240 -139
  333. package/docs/content/authentication.mdx +17 -0
  334. package/docs/content/deployment.mdx +19 -14
  335. package/docs/content/drop-in-agent.mdx +19 -2
  336. package/docs/content/environment-variables.mdx +63 -38
  337. package/docs/content/getting-started-actions.mdx +15 -6
  338. package/docs/content/getting-started-database.mdx +14 -10
  339. package/docs/content/getting-started-pages.mdx +32 -35
  340. package/docs/content/getting-started.mdx +7 -6
  341. package/package.json +1 -1
  342. package/src/templates/chat/.agents/skills/actions/SKILL.md +18 -0
  343. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  344. package/src/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  345. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
  346. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
  347. package/src/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  348. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  349. package/src/templates/chat/.env.example +3 -0
  350. package/src/templates/chat/AGENTS.md +4 -0
  351. package/src/templates/default/.agents/skills/actions/SKILL.md +18 -0
  352. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  353. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  354. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -0
  355. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +76 -23
  356. package/src/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  357. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  358. package/src/templates/default/AGENTS.md +6 -1
  359. package/src/templates/default/app/i18n/ar-SA.ts +6 -0
  360. package/src/templates/default/app/i18n/de-DE.ts +6 -0
  361. package/src/templates/default/app/i18n/en-US.ts +6 -0
  362. package/src/templates/default/app/i18n/es-ES.ts +6 -0
  363. package/src/templates/default/app/i18n/fr-FR.ts +6 -0
  364. package/src/templates/default/app/i18n/hi-IN.ts +6 -0
  365. package/src/templates/default/app/i18n/ja-JP.ts +6 -0
  366. package/src/templates/default/app/i18n/ko-KR.ts +6 -0
  367. package/src/templates/default/app/i18n/pt-BR.ts +6 -0
  368. package/src/templates/default/app/i18n/zh-CN.ts +6 -0
  369. package/src/templates/default/app/i18n/zh-TW.ts +6 -0
  370. package/src/templates/headless/.agents/skills/actions/SKILL.md +18 -0
  371. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  372. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +76 -23
  373. package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  374. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  375. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +18 -0
  376. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  377. package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +45 -47
  378. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -0
  379. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +76 -23
  380. package/src/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
  381. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
  382. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -0
  383. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +8 -0
  384. package/src/templates/workspace-core/AGENTS.md +7 -2
  385. package/src/templates/workspace-root/AGENTS.md +5 -0
  386. package/corpus/templates/dispatch/app/routes/admin.apps.$appId.tsx +0 -1
  387. package/corpus/templates/dispatch/app/routes/admin.apps.tsx +0 -1
@@ -5,6 +5,7 @@ import {
5
5
  organizationResourceOwner,
6
6
  resourceGetByPath,
7
7
  resourcePut,
8
+ resourcePutIfCurrent,
8
9
  WORKSPACE_OWNER,
9
10
  } from "@agent-native/core/resources";
10
11
  import {
@@ -264,6 +265,30 @@ fully owned by their product owners. Auto-merge is limited to PRs with a
264
265
  verified Factory Builder run; all other PRs can at most pass the approval
265
266
  policy. Do not call GitHub write actions directly or claim a merge unless the
266
267
  governance action confirms it.
268
+ `,
269
+ },
270
+ {
271
+ name: "factory-pr-babysit",
272
+ schedule: "*/2 * * * *",
273
+ body: `
274
+ # Factory builder-io-bot PR babysitting
275
+
276
+ Read the Factory configuration. When GitHub polling is enabled and a repository
277
+ is configured, call poll-github-sources with includeIssues false and
278
+ includePullRequests true. List a bounded page of open github pull-request items.
279
+
280
+ For each item, call babysit-agent-native-pull-request. That action fetches fresh
281
+ GitHub and ai-services evidence and is the only place allowed to decide whether
282
+ to post the bounded @builderio-bot feedback-fix request. It only acts on open
283
+ non-draft PRs authored by builder-io-bot (including GitHub's bot login variants),
284
+ and skips owner-managed Clips, Design, and Content work. It persists the latest
285
+ feedback fingerprint and quiet window, so repeated scheduler ticks do not spam
286
+ comments. A changed commit, new unresolved feedback, failing or pending CI, or
287
+ merge conflict starts a new bounded request; twenty minutes without new work to
288
+ address ends that babysitting window. The action never approves or merges.
289
+
290
+ Preserve action errors and never claim that Builder fixed a PR unless fresh
291
+ evidence confirms the resulting state.
267
292
  `,
268
293
  },
269
294
  ];
@@ -274,6 +299,19 @@ function workspaceOwnerEmail(): string | undefined {
274
299
  return email;
275
300
  }
276
301
 
302
+ function defaultRepository(): string | null {
303
+ const repository = process.env.FACTORY_DEFAULT_REPOSITORY?.trim(); // guard:allow-env-credential - repository configuration, not a credential
304
+ if (!repository || /[\r\n]/.test(repository)) return null;
305
+ return repository;
306
+ }
307
+
308
+ function defaultGithubPollingEnabled(): 0 | 1 {
309
+ return process.env.FACTORY_ENABLE_GITHUB_POLLING?.trim().toLowerCase() === // guard:allow-env-credential - deployment feature flag, not a credential
310
+ "true"
311
+ ? 1
312
+ : 0;
313
+ }
314
+
277
315
  function setFrontmatterField(
278
316
  content: string,
279
317
  key: string,
@@ -327,16 +365,47 @@ async function ensureOrganizationAutomations(
327
365
  orgId: string,
328
366
  ): Promise<void> {
329
367
  const owner = organizationResourceOwner(orgId);
330
- for (const seed of AUTOMATION_SEEDS) {
331
- const path = `jobs/${seed.name}.md`;
332
- if (await resourceGetByPath(owner, path)) continue;
333
- await resourcePut(
334
- owner,
335
- path,
336
- automationContent(ownerEmail, orgId, seed),
337
- "text/markdown",
338
- );
339
- }
368
+ await Promise.all(
369
+ AUTOMATION_SEEDS.map(async (seed) => {
370
+ const path = `jobs/${seed.name}.md`;
371
+ const existing = await resourceGetByPath(owner, path);
372
+ if (!existing) {
373
+ await resourcePut(
374
+ owner,
375
+ path,
376
+ automationContent(ownerEmail, orgId, seed),
377
+ "text/markdown",
378
+ );
379
+ return;
380
+ }
381
+
382
+ // Earlier Factory versions created these rows without the metadata the
383
+ // list and action guards use. Patch only identity metadata and keep the
384
+ // user's prompt, model, schedule, and enabled state intact.
385
+ let repaired = existing.content;
386
+ repaired = setFrontmatterField(repaired, "triggerType", "schedule");
387
+ repaired = setFrontmatterField(repaired, "domain", "factory");
388
+ repaired = setFrontmatterField(repaired, "orgId", orgId);
389
+ repaired = setFrontmatterField(repaired, "createdBy", ownerEmail);
390
+ repaired = setFrontmatterField(repaired, "runAs", "creator");
391
+ if (repaired === existing.content) return;
392
+
393
+ const updated = await resourcePutIfCurrent({
394
+ owner,
395
+ path,
396
+ content: repaired,
397
+ mimeType: "text/markdown",
398
+ expectedId: existing.id,
399
+ expectedUpdatedAt: existing.updatedAt,
400
+ expectedContent: existing.content,
401
+ });
402
+ if (!updated) {
403
+ console.warn(
404
+ `[factory-scheduler-job] skipped metadata repair for ${path}: the resource changed concurrently`,
405
+ );
406
+ }
407
+ }),
408
+ );
340
409
  }
341
410
 
342
411
  async function ensureDefaultTriageConfig(
@@ -359,11 +428,11 @@ async function ensureDefaultTriageConfig(
359
428
  slackChannelId: DEFAULT_SLACK_CHANNEL_ID,
360
429
  slackChannelName: DEFAULT_SLACK_CHANNEL_NAME,
361
430
  pollingEnabled: 1,
362
- githubPollingEnabled: 0,
431
+ githubPollingEnabled: defaultGithubPollingEnabled(),
363
432
  sentryPollingEnabled: 0,
364
433
  lastSlackTs: null,
365
434
  slackHistoryCursor: null,
366
- repository: null,
435
+ repository: defaultRepository(),
367
436
  sentryOrgSlug: null,
368
437
  sentryProjectSlug: null,
369
438
  sentryEnvironment: null,
@@ -73,6 +73,11 @@ export interface GitHubMergeResult {
73
73
  message: string;
74
74
  }
75
75
 
76
+ export interface GitHubComment {
77
+ id: number;
78
+ htmlUrl: string;
79
+ }
80
+
76
81
  interface JsonResponse {
77
82
  ok: boolean;
78
83
  status: number;
@@ -361,6 +366,32 @@ export function createGitHubClient(options: GitHubClientOptions) {
361
366
  };
362
367
  },
363
368
 
369
+ async createIssueComment(
370
+ repository: GitHubRepositoryRef,
371
+ issueNumber: number,
372
+ body: string,
373
+ ): Promise<GitHubComment> {
374
+ if (!Number.isInteger(issueNumber) || issueNumber < 1) {
375
+ throw new Error("GitHub issue number must be a positive integer");
376
+ }
377
+ const trimmedBody = body.trim();
378
+ if (!trimmedBody) throw new Error("GitHub comment body is required");
379
+ const item = record(
380
+ await request<unknown>(
381
+ `${repositoryPath(repository)}/issues/${issueNumber}/comments`,
382
+ {
383
+ method: "POST",
384
+ headers: { "Content-Type": "application/json" },
385
+ body: JSON.stringify({ body: trimmedBody.slice(0, 65_536) }),
386
+ },
387
+ ),
388
+ );
389
+ return {
390
+ id: requiredNumber(item.id, "comment id"),
391
+ htmlUrl: requiredString(item.html_url, "comment URL"),
392
+ };
393
+ },
394
+
364
395
  async mergePullRequest(
365
396
  repository: GitHubRepositoryRef,
366
397
  pullRequestNumber: number,
@@ -1,5 +1,24 @@
1
1
  import type { PullRequestCheckObservation } from "./pr-monitor.js";
2
2
 
3
+ export const BUILDER_BOT_LOGINS = new Set([
4
+ "builder-io-bot",
5
+ "builder-io-bot[bot]",
6
+ "builderio-bot",
7
+ "builderio-bot[bot]",
8
+ "builderio[bot]",
9
+ ]);
10
+
11
+ export const DEFAULT_BABYSIT_BOT_AUTHORS = [
12
+ "builder-io-bot",
13
+ "builder-io-bot[bot]",
14
+ "builderio-bot",
15
+ "builderio-bot[bot]",
16
+ "builderio[bot]",
17
+ "github-actions",
18
+ "github-actions[bot]",
19
+ "dependabot[bot]",
20
+ ] as const;
21
+
3
22
  export interface ReviewCommentObservation {
4
23
  id: string;
5
24
  author: string;
@@ -30,6 +49,61 @@ export interface BabysitProposal {
30
49
  isClean: boolean;
31
50
  }
32
51
 
52
+ export interface BuilderBotBabysitSignal {
53
+ author: string;
54
+ mergeable: boolean | null;
55
+ mergeableState: string | null;
56
+ snapshot: BabysitProposal;
57
+ }
58
+
59
+ export function isBuilderBotLogin(login: string): boolean {
60
+ return BUILDER_BOT_LOGINS.has(login.trim().toLowerCase());
61
+ }
62
+
63
+ export function hasMergeConflict(input: {
64
+ mergeable: boolean | null;
65
+ mergeableState: string | null;
66
+ }): boolean {
67
+ return (
68
+ input.mergeable === false ||
69
+ input.mergeableState === "dirty" ||
70
+ input.mergeableState === "conflicting"
71
+ );
72
+ }
73
+
74
+ export function shouldBabysitBuilderBotPullRequest(
75
+ input: BuilderBotBabysitSignal,
76
+ ): boolean {
77
+ return (
78
+ isBuilderBotLogin(input.author) &&
79
+ (hasMergeConflict(input) || !input.snapshot.isClean)
80
+ );
81
+ }
82
+
83
+ export function babysitFingerprint(input: {
84
+ headSha: string;
85
+ mergeable: boolean | null;
86
+ mergeableState: string | null;
87
+ snapshot: BabysitProposal;
88
+ reviewStates?: readonly string[];
89
+ }): string {
90
+ return JSON.stringify({
91
+ headSha: input.headSha,
92
+ mergeable: input.mergeable,
93
+ mergeableState: input.mergeableState,
94
+ unansweredComments: input.snapshot.unansweredComments.map((comment) => ({
95
+ id: comment.id,
96
+ body: comment.body,
97
+ isResolved: comment.isResolved ?? null,
98
+ })),
99
+ failingChecks: input.snapshot.failingChecks.map((check) => check.name),
100
+ pendingChecks: input.snapshot.pendingChecks.map((check) => check.name),
101
+ missingChangesetPackages: input.snapshot.missingChangesetPackages,
102
+ commentsTruncated: input.snapshot.commentsTruncated,
103
+ reviewStates: input.reviewStates ?? [],
104
+ });
105
+ }
106
+
33
107
  const MISSING_CHANGESET_LINE = /^MISSING_CHANGESET_PACKAGES:\s*(.*)$/m;
34
108
 
35
109
  function parseMissingChangesetPackages(log: string | undefined): string[] {
@@ -71,7 +145,7 @@ export function reconcileBabysitState(input: BabysitInput): BabysitProposal {
71
145
  !botAuthors.has(comment.author),
72
146
  );
73
147
  const failingChecks = input.checks.filter(
74
- (check) => check.state === "failed",
148
+ (check) => check.state === "failed" || check.state === "cancelled",
75
149
  );
76
150
  const pendingChecks = input.checks.filter(
77
151
  (check) => check.state === "queued" || check.state === "in_progress",
@@ -20,6 +20,24 @@ Before creating any custom REST/API route for app data, inspect `actions/` and t
20
20
 
21
21
  **Stop trigger:** the moment you are about to create a file under `server/routes/api/` — or add server middleware to guard one — stop and check it against the exception list in *When You Still Need Custom `/api/` Routes* below. If it is not on that list, write a `defineAction` instead. This applies even when you already started the route; abandoning a half-written action to hand-roll routes is the exact failure this rule exists to prevent.
22
22
 
23
+ ## Keep actions deterministic and composable
24
+
25
+ An action may call a provider API, validate or normalize data, and persist
26
+ records without being an AI feature. Keep those operations deterministic,
27
+ focused, and independently useful to the agent. Do not put LLM calls or a
28
+ second model runtime in ordinary actions. The only narrow exception is the
29
+ `completeText()` text-in/text-out escape hatch described in
30
+ `delegate-to-agent`; it must not own tools, chat history, run state, side
31
+ effects, or user steering.
32
+
33
+ When a workflow is framed as research, analysis, generation, recommendation,
34
+ or synthesis, or spans several provider calls and writes, route the user into
35
+ the AgentSidebar and let the agent orchestrate focused actions. Do not hide an
36
+ AI-shaped workflow behind one opaque `generate-*` or `create-*` action just
37
+ because its implementation is deterministic. A visible user-initiated run
38
+ should use `sendToAgentChat({ openSidebar: true })`, and its follow-ups should
39
+ continue in the same thread rather than a separate freeform input.
40
+
23
41
  ## Why
24
42
 
25
43
  Actions give the agent callable tools with structured input/output, AND they give the frontend a typed client contract through hooks. One implementation serves both the agent and the UI. They keep the agent's chat context clean, they're reusable, and they can be tested independently.
@@ -56,6 +56,11 @@ The repeated app shell has two distinct navigation surfaces:
56
56
  labeled as local, preview, or analyze. For original/generated review, stack
57
57
  the source above the result by default and use side-by-side only for short,
58
58
  highly scannable content.
59
+ - Deterministic implementation does not make an AI-shaped experience
60
+ deterministic. If the user expects research, analysis, generation,
61
+ recommendation, synthesis, visible progress, or steering, route the button
62
+ to the AgentSidebar and let the agent call focused actions. Keep revisions in
63
+ the same thread instead of adding a second freeform prompt box.
59
64
  - Standalone apps with `AgentSidebar` must resolve one assistant-ui runtime
60
65
  context. Match direct assistant-ui pins to the installed core/toolkit peer
61
66
  graph, use Vite dedupe/aliases when linked dependencies can split contexts,
@@ -14,11 +14,21 @@ metadata:
14
14
 
15
15
  ## Rule
16
16
 
17
- The UI never calls an LLM directly. Product workflows are delegated to the
18
- agent through the chat bridge so users can see, steer, and audit the work.
19
- Server-side one-shot model calls are an explicit escape hatch for narrow text
20
- transforms only; use `completeText()` from `@agent-native/core/server` when the
21
- work intentionally does not need tools, chat history, or run state.
17
+ The app's default AI surface is the agent chat. Any user-facing work that asks
18
+ the model to research, analyze, generate, recommend, synthesize, or reason over
19
+ multiple steps must start or continue in the AgentSidebar so users can see,
20
+ steer, and audit the work. UI buttons use `sendToAgentChat()` with
21
+ `openSidebar: true`, and follow-up or revision text belongs in that same thread
22
+ instead of a second app-local textbox.
23
+
24
+ Actions are tools, not alternate AI runtimes. Keep them deterministic and
25
+ focused: provider reads, validation, deterministic transforms, CRUD, and
26
+ persistence are good action work. Let the agent orchestrate several such tools
27
+ when the workflow is AI-shaped or user-steerable. Server-side one-shot model
28
+ calls are a rare escape hatch for narrow text transforms only; use
29
+ `completeText()` from `@agent-native/core/server` only when the work
30
+ intentionally does not need tools, chat history, run state, side effects, or
31
+ user steering.
22
32
 
23
33
  ## Why
24
34
 
@@ -35,6 +45,7 @@ sendToAgentChat({
35
45
  message: "Generate a summary of this document",
36
46
  context: documentContent, // optional hidden context (not shown in chat UI)
37
47
  submit: true, // auto-submit to the agent
48
+ openSidebar: true,
38
49
  });
39
50
  ```
40
51
 
@@ -56,6 +67,10 @@ sendToAgentChat({
56
67
  This is still a full agent run: tools, actions, thread state, and run tracking
57
68
  all remain active. It simply does not focus or open the sidebar.
58
69
 
70
+ Use this silent form only for explicitly background or system-initiated work.
71
+ It is not the default for a user clicking an AI-labeled button; visible work
72
+ should open the sidebar so the user can follow and redirect the run.
73
+
59
74
  **From scripts (Node):**
60
75
 
61
76
  ```ts
@@ -77,8 +92,9 @@ const result = await completeText({
77
92
  });
78
93
  ```
79
94
 
80
- Wrap user-facing uses in actions so the UI and agent share the same operation.
81
- Do not call provider SDKs directly.
95
+ If the narrow exception is exposed to the UI, wrap it in an action so the UI
96
+ and agent share the same operation. Keep it clearly non-conversational and do
97
+ not call provider SDKs directly.
82
98
 
83
99
  **From the UI, detecting when agent is done:**
84
100
 
@@ -97,9 +113,9 @@ The `submit` option controls whether the message is sent automatically or placed
97
113
 
98
114
  | `submit` value | Behavior | Use when |
99
115
  | -------------- | --------------------------------------- | ----------------------------------------------------------------------------------- |
100
- | `true` | Auto-submits to the agent immediately | Routine operations the user has already approved |
101
- | `false` | Prefills the chat input for user review | High-stakes operations (deleting data, modifying code, API calls with side effects) |
102
- | omitted | Uses the project's default setting | General-purpose delegation |
116
+ | `true` | Auto-submits to the agent immediately | Routine operations with clear intent; keep `openSidebar: true` for visible work |
117
+ | `false` | Prefills the AgentSidebar composer | Review, edit, or add detail before the run; use the existing sidebar thread |
118
+ | omitted | Uses the project's default setting | General-purpose delegation |
103
119
 
104
120
  ```ts
105
121
  // Auto-submit: routine operation
@@ -109,61 +125,43 @@ sendToAgentChat({ message: "Update the project summary", submit: true });
109
125
  sendToAgentChat({
110
126
  message: "Delete all projects older than 30 days",
111
127
  submit: false,
128
+ openSidebar: true,
112
129
  });
113
130
  ```
114
131
 
115
- ## Capture user input first when generating from a prompt
116
-
117
- Buttons that produce new content ("New Design", "Create Dashboard", "Make Deck", "Generate Form") need the user's prompt as input. **Never hardcode a generic message** — the result will be a generic generation the user didn't actually ask for.
132
+ ## Capture user input in the sidebar
118
133
 
119
- **Bad** — auto-submits a placeholder message; the user never said what they wanted:
134
+ The AgentSidebar composer is the default prompt surface. When a button needs
135
+ the user to describe what to create, prefill that same composer and let the
136
+ user edit or complete it:
120
137
 
121
138
  ```tsx
122
139
  <Button
123
140
  onClick={() =>
124
- sendToAgentChat({ message: "make a design", submit: true })
141
+ sendToAgentChat({
142
+ message: "Help me create a research report from this brief:",
143
+ context: researchBrief,
144
+ submit: false,
145
+ openSidebar: true,
146
+ })
125
147
  }
126
148
  >
127
- New Design
149
+ Start in agent
128
150
  </Button>
129
151
  ```
130
152
 
131
- **Good** — Popover anchored to the button captures the prompt, then submits it:
132
-
133
- ```tsx
134
- <Popover open={open} onOpenChange={setOpen}>
135
- <PopoverTrigger asChild>
136
- <Button>New Design</Button>
137
- </PopoverTrigger>
138
- <PopoverContent className="w-96">
139
- <Textarea
140
- autoFocus
141
- value={prompt}
142
- onChange={(e) => setPrompt(e.target.value)}
143
- placeholder="What do you want to design?"
144
- />
145
- <Button
146
- onClick={() => {
147
- sendToAgentChat({ message: prompt, submit: true });
148
- setOpen(false);
149
- setPrompt("");
150
- }}
151
- >
152
- Create
153
- </Button>
154
- </PopoverContent>
155
- </Popover>
156
- ```
157
-
158
- **Always ask for input first when** the output depends on a prompt the user must provide — "design what?", "deck about what?", "dashboard for which metric?", "form for which use case?".
159
-
160
- **Auto-submit without input is fine when intent is unambiguous:**
153
+ Never auto-submit a generic creative prompt when the user has not said what
154
+ they want. Auto-submit without additional input is fine when intent is
155
+ unambiguous:
161
156
 
162
157
  - "Try to fix" on a tool error — submits the error details with a clear fix instruction
163
158
  - "Retry the last operation" after a transient failure
164
159
  - Single-purpose buttons where there is nothing meaningful for the user to add
165
160
 
166
- If you find yourself writing `submit: true` with a hardcoded creative verb (`"design a..."`, `"write a..."`, `"build a..."`), stop and add a Popover.
161
+ Use a Popover only for compact, structured parameters the UI must validate,
162
+ such as a date range, target, or approval choice. Do not add a second freeform
163
+ prompt or follow-up textbox for an AI workflow; keep the conversation and
164
+ revisions in the AgentSidebar thread.
167
165
 
168
166
  ## Delegating to a Sub-Agent (Agent Teams)
169
167
 
@@ -130,6 +130,7 @@ passed this requirement yet.
130
130
  - Do not build custom dropdowns, menus, popovers, modals, or confirmations with manual absolute positioning and click-outside effects.
131
131
  - Never use browser dialogs (`window.alert`, `window.confirm`, `window.prompt`). Use `AlertDialog`, `Dialog`, or app-specific confirmation UI.
132
132
  - Use Tabler icons for all first-party UI icons. Do not add Lucide, Heroicons, inline SVG icon sets, or emoji icons.
133
+ - Keep inline help/info glyphs next to labels at `size-3` (12px) or smaller than the adjacent text. Preserve a larger hit area on the trigger, not the glyph. Use `guard:allow-large-help-icon` only for deliberate heading documentation or menu action exceptions.
133
134
  - Use `useActionQuery` and `useActionMutation` from `@agent-native/core/client` for action-backed UI. Standard CRUD should go through actions, not custom `/api/` routes.
134
135
  - Keep UI optimistic where possible: update cache and navigation immediately, then reconcile or roll back on mutation result.
135
136
  - Custom styles belong in Tailwind classes, component CSS, or the existing global CSS theme file; avoid inline styles.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: turn-into-app
3
3
  description: >-
4
- Turn a proven thread, skill, or workflow into a runnable Agent-Native app
5
- with simple buttons, visible agent steps, preview, and deployment handoff.
6
- Use when a user invokes `/turn-into-app` or asks to make a workflow into an
7
- app.
4
+ Turn visible project context, a proven thread, skill, or workflow into a
5
+ runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
+ and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
+ make a workflow into an app.
8
8
  user-invocable: true
9
9
  scope: both
10
10
  metadata:
@@ -17,34 +17,72 @@ metadata:
17
17
 
18
18
  This is an end-to-end build skill, not a request for an app proposal.
19
19
 
20
- - With no argument, use the current thread as the source. This is the normal
21
- invocation at the end of a successful workflow.
20
+ - With no argument, choose the source in this order: visible project context,
21
+ then the current thread. A fresh Claude or ChatGPT Project is a valid source
22
+ on its first turn. Treat its visible project instructions, knowledge files,
23
+ and supplied past runs as the source; a completed thread is not required.
24
+ Treat the current turn as a request or configuration unless it contains a
25
+ concrete repeatable workflow.
22
26
  - With a named skill or local workflow, read that source and package it
23
27
  immediately, even at the beginning of a thread. For example,
24
28
  `/turn-into-app /some-skill` means “turn `/some-skill` into an app.”
25
29
  - With an attachment or path, read the supplied artifact as the source.
26
30
  - Do not ask the user to restate context that is already in the thread.
27
- - When invoked from an Agent-Native app, keep the current thread as the source
28
- and use the available workspace/coding-agent handoff when the current runtime
29
- cannot edit files. Do not claim the app exists without an actual path and
30
- verification result.
31
+ - When invoked from an Agent-Native app, use its visible project context first,
32
+ then the current thread, and use the available workspace/coding-agent
33
+ handoff when the current runtime cannot edit files. Do not claim the app
34
+ exists without an actual path and verification result.
31
35
 
32
36
  ## Source support
33
37
 
34
- Supported source paths today are the current Codex thread, a named skill, or a
35
- local workflow/transcript supplied as a path or attachment. An exported
36
- ChatGPT or Claude transcript can use the same local-file path today.
38
+ Supported source paths today are visible Claude or ChatGPT Project context, the
39
+ current Codex or host thread, a named skill, or a local workflow/transcript
40
+ supplied as a path or attachment. An exported ChatGPT or Claude transcript can
41
+ use the same local-file path today.
37
42
 
38
- ChatGPT shared-conversation import and Claude web conversation/project import
39
- are **coming soon**. Do not claim private web access, invent an importer, add
40
- fake OAuth, or scrape a logged-in page without an explicit supported adapter.
41
- If a user gives one of those URLs before an adapter exists, ask for an export or
42
- transcript instead and treat it as imported source material.
43
+ Claude and ChatGPT Project context is supported only when the host supplies it
44
+ to the model in the current context. The MCP connector does not read hidden
45
+ project chats, private URLs, account settings, or credentials. Do not claim
46
+ private web access, invent an importer, add fake OAuth, or scrape a logged-in
47
+ page. If the needed context is not visible, ask for an export, transcript, or
48
+ attachment and treat that artifact as imported source material.
43
49
 
44
50
  Deliver a fresh app in a new directory, implement the repeatable workflow with
45
51
  buttons and agent handoffs, start its dev server, verify the main path, and
46
52
  continue through build/deployment handoff. Do not stop at a plan.
47
53
 
54
+ ## Fresh project context mode
55
+
56
+ When the source is a fresh Claude or ChatGPT Project, build a short source brief
57
+ before creating the app. Read the host-provided context in this order:
58
+
59
+ 1. Project instructions and configuration: goal, audience, constraints, output
60
+ standards, approved tools, and integration expectations. Treat these as
61
+ product configuration, not as a transcript.
62
+ 2. Knowledge files and attachments: read the relevant files fully, preserve
63
+ their provenance, and reduce them to bounded references, IDs, URLs, or
64
+ summaries for the new app. Do not copy secrets or large raw payloads into
65
+ prompts or SQL.
66
+ 3. Past runs or examples that are actually visible in the context: select at
67
+ most 1-3 successful, representative runs. Extract repeatable decisions and
68
+ review criteria. Treat one-off answers and private data as examples, not as
69
+ product behavior. If no runs are supplied, proceed from the instructions
70
+ and knowledge files and say that examples were not available.
71
+ 4. The current turn: use it for the requested app boundary, target workspace,
72
+ naming, and any explicit corrections.
73
+
74
+ Record the brief with these headings before handoff: source and provenance,
75
+ project goal, configuration and constraints, knowledge sources, repeatable
76
+ workflow, inputs and outputs, judgment and review points, representative runs,
77
+ integrations and permissions, and unknowns. This is the compact contract for
78
+ the app. It keeps the new app useful without pretending that hidden Project
79
+ history was imported. See [the fresh Project reference](references/fresh-project.md)
80
+ for the host setup and brief template.
81
+
82
+ If the visible Project context has no concrete repeatable job, ask for one
83
+ focused clarification or a representative artifact. Do not fall back to a
84
+ generic “what app do you want to make?” builder.
85
+
48
86
  ## Source selection guard
49
87
 
50
88
  The generated app must implement the concrete workflow found in the source. It
@@ -151,6 +189,14 @@ pnpm exec agent-native add-app <slug> --template=chat
151
189
  Do not use `create` for an existing workspace; it scaffolds a new standalone
152
190
  workspace rather than adding an app to the current one.
153
191
 
192
+ When the source came from a fresh external Project and the target is a Builder
193
+ workspace, prefer the available Dispatch MCP workspace handoff after writing
194
+ the source brief. Call `start-workspace-app-creation` with a concise prompt,
195
+ the inferred app id, and the brief's repeatable workflow. Pass selected
196
+ workspace resource IDs when they are available, rather than pasting entire
197
+ knowledge files. Continue from the returned workspace path or Builder handoff
198
+ and report the actual verification result.
199
+
154
200
  Use a first-party template only when it materially fits the workflow. Keep the
155
201
  new app independent from the source thread's working tree unless the user
156
202
  explicitly asks to extend an existing app.
@@ -167,13 +213,20 @@ should make the repeated path obvious without hiding the agent's judgment:
167
213
  - Give each important repeated moment a clear button, such as “Analyze,”
168
214
  “Suggest options,” “Draft,” “Review,” or “Publish.” Use the source's actual
169
215
  vocabulary when it is clear.
170
- - Put deterministic reads, writes, approvals, and publishing in `actions/`
171
- with `defineAction`. The UI and agent must call the same action surface.
216
+ - Put deterministic reads, writes, approvals, provider fetches, and publishing
217
+ in focused `actions/` with `defineAction`. The UI and agent must call the
218
+ same action surface.
219
+ - If a workflow is framed as research, analysis, generation, recommendation,
220
+ or synthesis, start it in the AgentSidebar and let the agent orchestrate
221
+ those actions. Do not hide an AI-shaped multi-step workflow behind one
222
+ opaque action just because the implementation is deterministic.
172
223
  - Use application state for the current screen, selected item, and focused
173
224
  object so the agent can see where the user is.
174
- - Use `sendToAgentChat({ message, context, submit: true })` for intentional
175
- button-triggered agent work. Use `submit: false` when the user should review
176
- or edit the proposed prompt first.
225
+ - Use `sendToAgentChat({ message, context, submit: true, openSidebar: true })`
226
+ for intentional button-triggered agent work. Use `submit: false` when the
227
+ user should review or edit the proposed prompt in the AgentSidebar first.
228
+ Keep follow-up and revision prompts in that same thread; do not add a second
229
+ freeform textbox beside the result.
177
230
  - Pass IDs, URLs, and bounded summaries in context. Do not paste large provider
178
231
  dumps into prompts, call an LLM directly from the browser, or invent fake
179
232
  progress.
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Turn Into App"
3
- short_description: "Turn a thread or skill into a runnable app"
4
- default_prompt: "Scan the current thread, turn the workflow into a new Agent-Native app with clear buttons, run it locally, verify it, and complete the deployment handoff."
3
+ short_description: "Turn project context or a workflow into a runnable app"
4
+ default_prompt: "Use the visible project context first, then any supplied workflow. Turn the instructions, knowledge files, and selected successful runs into a new Agent-Native app with clear buttons, run it locally, verify it, and complete the deployment handoff."