@agent-native/core 0.146.2 → 0.146.4

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 (213) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +13 -10
  3. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +7 -3
  4. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  5. package/corpus/templates/analytics/actions/compose-dashboard.ts +53 -6
  6. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +8 -2
  7. package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +3 -1
  8. package/corpus/templates/analytics/actions/mutate-dashboard.ts +48 -9
  9. package/corpus/templates/analytics/actions/update-dashboard.ts +80 -6
  10. package/corpus/templates/analytics/changelog/2026-08-07-dashboard-creation-and-edits-now-save-faster-with-reliable-s.md +6 -0
  11. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +19 -19
  12. package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +21 -2
  13. package/corpus/templates/analytics/server/lib/bigquery.ts +59 -24
  14. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +44 -8
  15. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +3 -5
  16. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +33 -69
  17. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +90 -24
  18. package/corpus/templates/analytics/server/lib/real-data-actions.ts +1 -1
  19. package/corpus/templates/analytics/server/plugins/agent-chat.ts +17 -2
  20. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +2 -0
  21. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +7 -3
  22. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  23. package/corpus/templates/assets/netlify.toml +1 -1
  24. package/corpus/templates/assets/package.json +1 -0
  25. package/corpus/templates/assets/scripts/migrate-production.ts +24 -0
  26. package/corpus/templates/assets/server/plugins/db.ts +1 -1
  27. package/corpus/templates/assets/tsconfig.json +1 -0
  28. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +7 -3
  29. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  30. package/corpus/templates/brain/netlify.toml +1 -1
  31. package/corpus/templates/brain/package.json +2 -0
  32. package/corpus/templates/brain/scripts/migrate-production.ts +24 -0
  33. package/corpus/templates/brain/server/plugins/db.ts +1 -1
  34. package/corpus/templates/brain/tsconfig.json +1 -0
  35. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +7 -3
  36. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  37. package/corpus/templates/calendar/netlify.toml +1 -1
  38. package/corpus/templates/calendar/package.json +1 -0
  39. package/corpus/templates/calendar/scripts/migrate-production.ts +24 -0
  40. package/corpus/templates/calendar/server/plugins/db.ts +1 -1
  41. package/corpus/templates/calendar/tsconfig.json +1 -0
  42. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
  43. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  44. package/corpus/templates/chat/netlify.toml +1 -1
  45. package/corpus/templates/chat/package.json +1 -0
  46. package/corpus/templates/chat/scripts/migrate-production.ts +31 -0
  47. package/corpus/templates/chat/tsconfig.json +1 -0
  48. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +7 -3
  49. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  50. package/corpus/templates/clips/netlify.toml +1 -1
  51. package/corpus/templates/clips/package.json +1 -0
  52. package/corpus/templates/clips/scripts/migrate-production.ts +24 -0
  53. package/corpus/templates/clips/server/plugins/db.ts +1 -1
  54. package/corpus/templates/clips/tsconfig.json +1 -0
  55. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +7 -3
  56. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  57. package/corpus/templates/content/netlify.toml +1 -1
  58. package/corpus/templates/content/package.json +2 -0
  59. package/corpus/templates/content/scripts/migrate-production.ts +28 -0
  60. package/corpus/templates/content/server/plugins/db.ts +2 -2
  61. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  62. package/corpus/templates/crm/netlify.toml +1 -1
  63. package/corpus/templates/crm/package.json +2 -0
  64. package/corpus/templates/crm/scripts/migrate-production.ts +24 -0
  65. package/corpus/templates/crm/server/plugins/db.ts +1 -1
  66. package/corpus/templates/crm/tsconfig.json +1 -0
  67. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +7 -3
  68. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  69. package/corpus/templates/design/netlify.toml +1 -1
  70. package/corpus/templates/design/package.json +1 -0
  71. package/corpus/templates/design/scripts/migrate-production.ts +24 -0
  72. package/corpus/templates/design/server/plugins/db.ts +1 -1
  73. package/corpus/templates/design/tsconfig.json +1 -0
  74. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +7 -3
  75. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  76. package/corpus/templates/dispatch/netlify.toml +1 -1
  77. package/corpus/templates/dispatch/package.json +1 -0
  78. package/corpus/templates/dispatch/scripts/migrate-production.ts +23 -0
  79. package/corpus/templates/dispatch/tsconfig.json +1 -0
  80. package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +7 -3
  81. package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  82. package/corpus/templates/factory/netlify.toml +1 -1
  83. package/corpus/templates/factory/package.json +1 -0
  84. package/corpus/templates/factory/scripts/migrate-production.ts +31 -0
  85. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +2 -0
  86. package/corpus/templates/factory/tsconfig.json +1 -0
  87. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +7 -3
  88. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  89. package/corpus/templates/forms/netlify.toml +1 -1
  90. package/corpus/templates/forms/package.json +2 -0
  91. package/corpus/templates/forms/scripts/migrate-production.ts +24 -0
  92. package/corpus/templates/forms/server/plugins/db.ts +1 -1
  93. package/corpus/templates/forms/tsconfig.json +1 -0
  94. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  95. package/corpus/templates/macros/netlify.toml +1 -1
  96. package/corpus/templates/macros/package.json +1 -0
  97. package/corpus/templates/macros/scripts/migrate-production.ts +24 -0
  98. package/corpus/templates/macros/server/plugins/db.ts +1 -1
  99. package/corpus/templates/macros/tsconfig.json +1 -0
  100. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +7 -3
  101. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  102. package/corpus/templates/mail/netlify.toml +1 -1
  103. package/corpus/templates/mail/package.json +1 -0
  104. package/corpus/templates/mail/scripts/migrate-production.ts +24 -0
  105. package/corpus/templates/mail/server/plugins/db.ts +1 -1
  106. package/corpus/templates/mail/tsconfig.json +1 -0
  107. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +7 -3
  108. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  109. package/corpus/templates/plan/netlify.toml +1 -1
  110. package/corpus/templates/plan/package.json +1 -0
  111. package/corpus/templates/plan/scripts/migrate-production.ts +24 -0
  112. package/corpus/templates/plan/server/plugins/00-mcp.ts +3 -2
  113. package/corpus/templates/plan/server/plugins/db.ts +1 -1
  114. package/corpus/templates/plan/tsconfig.json +1 -0
  115. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +7 -3
  116. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  117. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +56 -23
  118. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1 -0
  119. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +4 -1
  120. package/corpus/templates/slides/app/context/DeckContext.tsx +91 -25
  121. package/corpus/templates/slides/app/hooks/use-deck-role.ts +14 -4
  122. package/corpus/templates/slides/app/i18n/en-US.ts +2 -0
  123. package/corpus/templates/slides/app/pages/DeckEditor.tsx +19 -7
  124. package/corpus/templates/slides/app/pages/Index.tsx +11 -2
  125. package/corpus/templates/slides/app/root.tsx +5 -1
  126. package/corpus/templates/slides/netlify.toml +1 -1
  127. package/corpus/templates/slides/package.json +1 -0
  128. package/corpus/templates/slides/scripts/migrate-production.ts +24 -0
  129. package/corpus/templates/slides/server/plugins/db.ts +1 -1
  130. package/corpus/templates/slides/tsconfig.json +1 -0
  131. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +7 -3
  132. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  133. package/corpus/templates/tasks/netlify.toml +1 -1
  134. package/corpus/templates/tasks/package.json +1 -0
  135. package/corpus/templates/tasks/scripts/migrate-production.ts +24 -0
  136. package/corpus/templates/tasks/server/plugins/db.ts +1 -1
  137. package/corpus/templates/tasks/tsconfig.json +1 -0
  138. package/dist/action.d.ts +2 -0
  139. package/dist/agent/production-agent.d.ts +1 -0
  140. package/dist/agent/production-agent.js +2 -0
  141. package/dist/agent/thread-data-builder.d.ts +4 -0
  142. package/dist/agent/thread-data-builder.js +44 -0
  143. package/dist/automations/service.d.ts +1 -0
  144. package/dist/automations/service.js +21 -2
  145. package/dist/cli/create.js +20 -2
  146. package/dist/client/agent-page/AgentJobsTab.js +3 -1
  147. package/dist/client/agent-page/AutomationDetailsDialog.js +9 -2
  148. package/dist/collab/awareness.d.ts +2 -2
  149. package/dist/collab/struct-routes.d.ts +1 -1
  150. package/dist/db/migrations.js +7 -13
  151. package/dist/jobs/actions/list-automation-runs.d.ts +1 -0
  152. package/dist/jobs/actions/list-automation-runs.js +9 -2
  153. package/dist/jobs/actions/list-recurring-jobs.js +3 -1
  154. package/dist/jobs/actions/manage-recurring-job.js +1 -1
  155. package/dist/jobs/actions/run-automation-now.js +1 -0
  156. package/dist/jobs/background-automation-runner.js +2 -0
  157. package/dist/jobs/frontmatter.d.ts +2 -0
  158. package/dist/jobs/frontmatter.js +4 -0
  159. package/dist/jobs/run-history.d.ts +4 -0
  160. package/dist/jobs/run-history.js +28 -8
  161. package/dist/jobs/run-now.d.ts +4 -1
  162. package/dist/jobs/run-now.js +4 -3
  163. package/dist/jobs/scheduler.js +18 -0
  164. package/dist/jobs/tools.d.ts +3 -2
  165. package/dist/jobs/tools.js +26 -12
  166. package/dist/localization/default-messages.d.ts +1 -0
  167. package/dist/localization/default-messages.js +1 -0
  168. package/dist/observability/routes.d.ts +3 -3
  169. package/dist/secrets/routes.d.ts +6 -6
  170. package/dist/server/action-routes.d.ts +2 -0
  171. package/dist/server/action-routes.js +1 -0
  172. package/dist/server/agent-chat-plugin.js +3 -2
  173. package/dist/server/builder-browser.js +24 -8
  174. package/dist/server/transcribe-voice.d.ts +1 -1
  175. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
  176. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  177. package/dist/templates/chat/netlify.toml +1 -1
  178. package/dist/templates/chat/package.json +1 -0
  179. package/dist/templates/chat/scripts/migrate-production.ts +31 -0
  180. package/dist/templates/chat/tsconfig.json +1 -0
  181. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +7 -3
  182. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  183. package/dist/templates/default/package.json +1 -0
  184. package/dist/templates/default/scripts/migrate-production.ts +31 -0
  185. package/dist/templates/default/tsconfig.json +1 -0
  186. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  187. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +7 -3
  188. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  189. package/dist/templates/workspace-root/AGENTS.md +2 -1
  190. package/dist/triggers/actions/list-automations.js +1 -1
  191. package/dist/triggers/actions/manage-automation.js +5 -1
  192. package/dist/triggers/actions.d.ts +1 -1
  193. package/dist/triggers/actions.js +21 -15
  194. package/dist/triggers/dispatcher.js +17 -2
  195. package/dist/triggers/routes.d.ts +1 -0
  196. package/dist/triggers/routes.js +1 -0
  197. package/docs/content/docs-components.mdx +122 -11
  198. package/package.json +1 -1
  199. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
  200. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  201. package/src/templates/chat/netlify.toml +1 -1
  202. package/src/templates/chat/package.json +1 -0
  203. package/src/templates/chat/scripts/migrate-production.ts +31 -0
  204. package/src/templates/chat/tsconfig.json +1 -0
  205. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +7 -3
  206. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  207. package/src/templates/default/package.json +1 -0
  208. package/src/templates/default/scripts/migrate-production.ts +31 -0
  209. package/src/templates/default/tsconfig.json +1 -0
  210. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  211. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +7 -3
  212. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
  213. package/src/templates/workspace-root/AGENTS.md +2 -1
@@ -14,6 +14,7 @@
14
14
  "eval:parity": "agent-native eval parity",
15
15
  "format.fix": "oxfmt --write .",
16
16
  "typecheck": "agent-native typecheck",
17
+ "migrate:production": "tsx scripts/migrate-production.ts",
17
18
  "action": "agent-native action",
18
19
  "script": "agent-native script",
19
20
  "seed:demo": "node scripts/seed-demo-user.mjs"
@@ -99,6 +100,7 @@
99
100
  "sonner": "^2.0.7",
100
101
  "tailwind-merge": "^3.5.0",
101
102
  "tailwindcss": "catalog:",
103
+ "tsx": "^4.20.3",
102
104
  "typescript-7": "catalog:",
103
105
  "vite": "catalog:",
104
106
  "vitest": "catalog:"
@@ -0,0 +1,28 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+
4
+ import {
5
+ runContentMigrations,
6
+ runContentSourceMigrations,
7
+ } from "../server/plugins/db.js";
8
+
9
+ /**
10
+ * Release-time schema entrypoint for Content.
11
+ *
12
+ * This script is the production owner of schema changes. It runs against the
13
+ * direct migration endpoint selected by core, while request functions skip
14
+ * all migration and ensure-table work automatically.
15
+ */
16
+ async function main(): Promise<void> {
17
+ await withMigrationRuntime(async () => {
18
+ await runFrameworkReleaseMigrations(null);
19
+ await runContentMigrations(null);
20
+ await runContentSourceMigrations(null);
21
+ });
22
+ }
23
+
24
+ try {
25
+ await main();
26
+ } finally {
27
+ await closeDbExec();
28
+ }
@@ -43,7 +43,7 @@ function scheduleBlocksRepairRetry(attempt = 1): void {
43
43
  // alone are not a safe identity across parallel branches that each extend
44
44
  // this list independently — see the analytics db.ts v75-v83 incident this
45
45
  // convention was introduced to prevent.
46
- const runContentMigrations = runMigrations(
46
+ export const runContentMigrations = runMigrations(
47
47
  [
48
48
  {
49
49
  version: 1,
@@ -960,7 +960,7 @@ const runContentMigrations = runMigrations(
960
960
  { table: "content_migrations" },
961
961
  );
962
962
 
963
- const runContentSourceMigrations = runMigrations(
963
+ export const runContentSourceMigrations = runMigrations(
964
964
  [
965
965
  {
966
966
  version: 1,
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew
@@ -1,6 +1,6 @@
1
1
  [build]
2
2
  ignore = "node ./scripts/netlify-ignore-build.mjs crm"
3
- command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter crm build"
3
+ command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter crm build && if [ \"${CONTEXT:-}\" = \"production\" ]; then pnpm --filter crm migrate:production; fi"
4
4
  publish = "templates/crm/dist"
5
5
  functions = "templates/crm/.netlify/functions-internal"
6
6
 
@@ -10,6 +10,7 @@
10
10
  "start": "agent-native start",
11
11
  "format.fix": "oxfmt --write .",
12
12
  "typecheck": "agent-native typecheck",
13
+ "migrate:production": "tsx scripts/migrate-production.ts",
13
14
  "action": "agent-native action",
14
15
  "script": "agent-native script",
15
16
  "test": "vitest --run --passWithNoTests --config vitest.config.ts"
@@ -52,6 +53,7 @@
52
53
  "sonner": "^2.0.7",
53
54
  "tailwind-merge": "^3.6.0",
54
55
  "tailwindcss": "catalog:",
56
+ "tsx": "^4.20.3",
55
57
  "typescript": "catalog:",
56
58
  "typescript-7": "catalog:",
57
59
  "vite": "catalog:",
@@ -0,0 +1,24 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+
4
+ import { runCrmMigrations } from "../server/plugins/db.js";
5
+
6
+ /**
7
+ * Release-time schema entrypoint for CRM.
8
+ *
9
+ * This script is the production owner of schema changes. It runs against the
10
+ * direct migration endpoint selected by core, while request functions skip
11
+ * all migration and ensure-table work automatically.
12
+ */
13
+ async function main(): Promise<void> {
14
+ await withMigrationRuntime(async () => {
15
+ await runFrameworkReleaseMigrations(null);
16
+ await runCrmMigrations(null);
17
+ });
18
+ }
19
+
20
+ try {
21
+ await main();
22
+ } finally {
23
+ await closeDbExec();
24
+ }
@@ -616,7 +616,7 @@ const nativeAttributeTypeBackfill = [
616
616
  `UPDATE crm_field_policies SET attribute_type = 'text' WHERE field_name IN ('name', 'industry', 'ownerName', 'firstName', 'lastName', 'title') AND connection_id IN (SELECT id FROM crm_connections WHERE provider = 'native')`,
617
617
  ].join(";\n");
618
618
 
619
- const runCrmMigrations = runMigrations(
619
+ export const runCrmMigrations = runMigrations(
620
620
  [
621
621
  { version: 1, name: "crm-initial-thin-mirror-schema", sql: initialSchema },
622
622
  { version: 2, name: "crm-signals-engine-schema", sql: signalsSchema },
@@ -14,6 +14,7 @@
14
14
  "server/**/*",
15
15
  "shared/**/*",
16
16
  "actions/**/*",
17
+ "scripts/**/*",
17
18
  "vite.config.ts",
18
19
  "vitest.config.ts",
19
20
  "react-router.config.ts",
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
36
36
  - Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
37
37
  - `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
38
38
  target any `@agent-native/*` package
39
- - Local package patches or invented "dispatch/core behavior" shims meant to
40
- paper over a version skew or failed upgrade
39
+ - `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
40
+ dependency
41
+ - Invented "dispatch/core behavior" shims meant to paper over a version skew
42
+ or failed upgrade
41
43
 
42
44
  This does not prohibit intentional app-owned UI customization. When public
43
45
  props and composition are insufficient, the `customizing-agent-native` skill
@@ -100,8 +102,10 @@ inline strings in components.
100
102
  - Don't confuse readable package source with app-owned code: use
101
103
  `customizing-agent-native` and `agent-native eject` for supported ownership
102
104
  transfer
105
+ - Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
106
+ add `pnpm.patchedDependencies` to "make the app run" after a version bump
103
107
  - Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
104
- `@agent-native/*` to "make the app run" after a version bump
108
+ `@agent-native/*` to paper over a broken upgrade
105
109
  - Don't invent local dispatch/core behavior overrides when upgrade fails —
106
110
  run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
107
111
  - Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew
@@ -1,6 +1,6 @@
1
1
  [build]
2
2
  ignore = "node ./scripts/netlify-ignore-build.mjs design"
3
- command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter design build"
3
+ command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter design build && if [ \"${CONTEXT:-}\" = \"production\" ]; then pnpm --filter design migrate:production; fi"
4
4
  publish = "templates/design/dist"
5
5
  functions = "templates/design/.netlify/functions-internal"
6
6
 
@@ -11,6 +11,7 @@
11
11
  "typecheck": "agent-native typecheck && pnpm exec tsc --noEmit -p app/components/design/bridge/tsconfig.json",
12
12
  "codegen:bridge": "tsx app/components/design/bridge/codegen.ts",
13
13
  "qa:figma-stress-import": "tsx scripts/qa-figma-stress-import.ts",
14
+ "migrate:production": "tsx scripts/migrate-production.ts",
14
15
  "action": "agent-native action",
15
16
  "script": "agent-native script",
16
17
  "e2e": "playwright test",
@@ -0,0 +1,24 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+
4
+ import { runDesignMigrations } from "../server/plugins/db.js";
5
+
6
+ /**
7
+ * Release-time schema entrypoint for Design.
8
+ *
9
+ * This script is the production owner of schema changes. It runs against the
10
+ * direct migration endpoint selected by core, while request functions skip
11
+ * all migration and ensure-table work automatically.
12
+ */
13
+ async function main(): Promise<void> {
14
+ await withMigrationRuntime(async () => {
15
+ await runFrameworkReleaseMigrations(null);
16
+ await runDesignMigrations(null);
17
+ });
18
+ }
19
+
20
+ try {
21
+ await main();
22
+ } finally {
23
+ await closeDbExec();
24
+ }
@@ -30,7 +30,7 @@ const schemaTables = Object.values(schema).filter(isDrizzleTable);
30
30
  // this list independently — see the analytics template's v75-v83 incident
31
31
  // documented in templates/analytics/server/plugins/db.ts for the failure
32
32
  // class this guards against.
33
- const runDesignMigrations = runMigrations(
33
+ export const runDesignMigrations = runMigrations(
34
34
  [
35
35
  {
36
36
  version: 1,
@@ -13,6 +13,7 @@
13
13
  "app/**/*",
14
14
  "server/**/*",
15
15
  "shared/**/*",
16
+ "scripts/**/*",
16
17
  "vite.config.ts",
17
18
  "react-router.config.ts",
18
19
  ".react-router/types/**/*",
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
36
36
  - Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
37
37
  - `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
38
38
  target any `@agent-native/*` package
39
- - Local package patches or invented "dispatch/core behavior" shims meant to
40
- paper over a version skew or failed upgrade
39
+ - `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
40
+ dependency
41
+ - Invented "dispatch/core behavior" shims meant to paper over a version skew
42
+ or failed upgrade
41
43
 
42
44
  This does not prohibit intentional app-owned UI customization. When public
43
45
  props and composition are insufficient, the `customizing-agent-native` skill
@@ -100,8 +102,10 @@ inline strings in components.
100
102
  - Don't confuse readable package source with app-owned code: use
101
103
  `customizing-agent-native` and `agent-native eject` for supported ownership
102
104
  transfer
105
+ - Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
106
+ add `pnpm.patchedDependencies` to "make the app run" after a version bump
103
107
  - Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
104
- `@agent-native/*` to "make the app run" after a version bump
108
+ `@agent-native/*` to paper over a broken upgrade
105
109
  - Don't invent local dispatch/core behavior overrides when upgrade fails —
106
110
  run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
107
111
  - Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew
@@ -1,6 +1,6 @@
1
1
  [build]
2
2
  ignore = "node ./scripts/netlify-ignore-build.mjs dispatch"
3
- command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter dispatch build"
3
+ command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter dispatch build && if [ \"${CONTEXT:-}\" = \"production\" ]; then pnpm --filter dispatch migrate:production; fi"
4
4
  publish = "templates/dispatch/dist"
5
5
  functions = "templates/dispatch/.netlify/functions-internal"
6
6
 
@@ -8,6 +8,7 @@
8
8
  "build": "agent-native build",
9
9
  "start": "agent-native start",
10
10
  "typecheck": "agent-native typecheck",
11
+ "migrate:production": "tsx scripts/migrate-production.ts",
11
12
  "test": "vitest --run --passWithNoTests",
12
13
  "action": "agent-native action",
13
14
  "script": "agent-native script"
@@ -0,0 +1,23 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+ import { runDispatchMigrations } from "@agent-native/dispatch/server";
4
+
5
+ /**
6
+ * Release-time schema entrypoint for Dispatch.
7
+ *
8
+ * This script is the production owner of schema changes. It runs against the
9
+ * direct migration endpoint selected by core, while request functions skip
10
+ * all migration and ensure-table work automatically.
11
+ */
12
+ async function main(): Promise<void> {
13
+ await withMigrationRuntime(async () => {
14
+ await runFrameworkReleaseMigrations(null);
15
+ await runDispatchMigrations(null);
16
+ });
17
+ }
18
+
19
+ try {
20
+ await main();
21
+ } finally {
22
+ await closeDbExec();
23
+ }
@@ -13,6 +13,7 @@
13
13
  "app/**/*",
14
14
  "server/**/*",
15
15
  "shared/**/*",
16
+ "scripts/**/*",
16
17
  "vite.config.ts",
17
18
  "react-router.config.ts",
18
19
  ".react-router/types/**/*",
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
36
36
  - Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
37
37
  - `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
38
38
  target any `@agent-native/*` package
39
- - Local package patches or invented "dispatch/core behavior" shims meant to
40
- paper over a version skew or failed upgrade
39
+ - `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
40
+ dependency
41
+ - Invented "dispatch/core behavior" shims meant to paper over a version skew
42
+ or failed upgrade
41
43
 
42
44
  This does not prohibit intentional app-owned UI customization. When public
43
45
  props and composition are insufficient, the `customizing-agent-native` skill
@@ -100,8 +102,10 @@ inline strings in components.
100
102
  - Don't confuse readable package source with app-owned code: use
101
103
  `customizing-agent-native` and `agent-native eject` for supported ownership
102
104
  transfer
105
+ - Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
106
+ add `pnpm.patchedDependencies` to "make the app run" after a version bump
103
107
  - Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
104
- `@agent-native/*` to "make the app run" after a version bump
108
+ `@agent-native/*` to paper over a broken upgrade
105
109
  - Don't invent local dispatch/core behavior overrides when upgrade fails —
106
110
  run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
107
111
  - Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew
@@ -1,5 +1,5 @@
1
1
  [build]
2
- command = "NITRO_PRESET=netlify pnpm --filter factory build"
2
+ command = "NITRO_PRESET=netlify pnpm --filter factory build && if [ \"${CONTEXT:-}\" = \"production\" ]; then pnpm --filter factory migrate:production; fi"
3
3
  publish = "dist"
4
4
  functions = ".netlify/functions-internal"
5
5
 
@@ -5,6 +5,7 @@
5
5
  "description": "Build agent factories: work in one end, shipped changes out the other, with gates you control.",
6
6
  "type": "module",
7
7
  "scripts": {
8
+ "migrate:production": "tsx scripts/migrate-production.ts",
8
9
  "dev": "agent-native dev --open",
9
10
  "build": "agent-native build",
10
11
  "start": "agent-native start",
@@ -0,0 +1,31 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+
4
+ import { runFactoryMigrations } from "../server/plugins/factory-migrations.js";
5
+
6
+ /**
7
+ * Release-time schema entrypoint.
8
+ *
9
+ * Every deploy runs this once, and request functions never touch schema. That
10
+ * ordering is not an optimization: on serverless, "migrate on first use" means
11
+ * migrate on EVERY cold start, and a production incident traced a multi-hour
12
+ * outage to schema introspection running 4-6 times concurrently on the request
13
+ * path.
14
+ *
15
+ * `withMigrationRuntime()` is load-bearing. The Netlify BUILD environment sets
16
+ * NETLIFY=true, so this script looks like a serverless request to the guard in
17
+ * `runMigrations` — it is allowed to migrate only because it claims duty here.
18
+ * A release entrypoint that forgets the wrapper silently does nothing.
19
+ */
20
+ async function main(): Promise<void> {
21
+ await withMigrationRuntime(async () => {
22
+ await runFrameworkReleaseMigrations(null);
23
+ await runFactoryMigrations(null);
24
+ });
25
+ }
26
+
27
+ try {
28
+ await main();
29
+ } finally {
30
+ await closeDbExec();
31
+ }
@@ -358,6 +358,7 @@ schedule: "${seed.schedule}"
358
358
  ${seed.timezone ? `timezone: ${seed.timezone}\n` : ""}enabled: true
359
359
  triggerType: schedule
360
360
  domain: factory
361
+ appId: factory
361
362
  orgId: ${orgId}
362
363
  createdBy: ${ownerEmail}
363
364
  runAs: creator
@@ -405,6 +406,7 @@ async function ensureOrganizationAutomations(
405
406
  let repaired = existing.content;
406
407
  repaired = setFrontmatterField(repaired, "triggerType", "schedule");
407
408
  repaired = setFrontmatterField(repaired, "domain", "factory");
409
+ repaired = setFrontmatterField(repaired, "appId", "factory");
408
410
  repaired = setFrontmatterField(repaired, "orgId", orgId);
409
411
  repaired = setFrontmatterField(repaired, "createdBy", ownerEmail);
410
412
  repaired = setFrontmatterField(repaired, "runAs", "creator");
@@ -13,6 +13,7 @@
13
13
  "app/**/*",
14
14
  "server/**/*",
15
15
  "shared/**/*",
16
+ "scripts/**/*",
16
17
  "vite.config.ts",
17
18
  "react-router.config.ts",
18
19
  ".react-router/types/**/*",
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
36
36
  - Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
37
37
  - `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
38
38
  target any `@agent-native/*` package
39
- - Local package patches or invented "dispatch/core behavior" shims meant to
40
- paper over a version skew or failed upgrade
39
+ - `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
40
+ dependency
41
+ - Invented "dispatch/core behavior" shims meant to paper over a version skew
42
+ or failed upgrade
41
43
 
42
44
  This does not prohibit intentional app-owned UI customization. When public
43
45
  props and composition are insufficient, the `customizing-agent-native` skill
@@ -100,8 +102,10 @@ inline strings in components.
100
102
  - Don't confuse readable package source with app-owned code: use
101
103
  `customizing-agent-native` and `agent-native eject` for supported ownership
102
104
  transfer
105
+ - Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
106
+ add `pnpm.patchedDependencies` to "make the app run" after a version bump
103
107
  - Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
104
- `@agent-native/*` to "make the app run" after a version bump
108
+ `@agent-native/*` to paper over a broken upgrade
105
109
  - Don't invent local dispatch/core behavior overrides when upgrade fails —
106
110
  run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
107
111
  - Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew
@@ -1,6 +1,6 @@
1
1
  [build]
2
2
  ignore = "node ./scripts/netlify-ignore-build.mjs forms"
3
- command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && DATABASE_URL=${NETLIFY_DATABASE_URL_UNPOOLED:-$DATABASE_URL} NITRO_PRESET=netlify pnpm --filter forms build"
3
+ command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && DATABASE_URL=${NETLIFY_DATABASE_URL_UNPOOLED:-$DATABASE_URL} NITRO_PRESET=netlify pnpm --filter forms build && if [ \"${CONTEXT:-}\" = \"production\" ]; then DATABASE_URL=${NETLIFY_DATABASE_URL_UNPOOLED:-$DATABASE_URL} pnpm --filter forms migrate:production; fi"
4
4
  publish = "templates/forms/dist"
5
5
  functions = "templates/forms/.netlify/functions-internal"
6
6
 
@@ -9,6 +9,7 @@
9
9
  "start": "agent-native start",
10
10
  "format.fix": "oxfmt --write .",
11
11
  "typecheck": "agent-native typecheck",
12
+ "migrate:production": "tsx scripts/migrate-production.ts",
12
13
  "action": "agent-native action",
13
14
  "script": "agent-native script",
14
15
  "db:push": "drizzle-kit push",
@@ -87,6 +88,7 @@
87
88
  "sonner": "^2.0.7",
88
89
  "tailwind-merge": "^3.5.0",
89
90
  "tailwindcss": "catalog:",
91
+ "tsx": "^4.20.3",
90
92
  "typescript-7": "catalog:",
91
93
  "vite": "catalog:",
92
94
  "vitest": "catalog:"
@@ -0,0 +1,24 @@
1
+ import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
2
+ import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
3
+
4
+ import { runFormsMigrations } from "../server/plugins/db.js";
5
+
6
+ /**
7
+ * Release-time schema entrypoint for Forms.
8
+ *
9
+ * This script is the production owner of schema changes. It runs against the
10
+ * direct migration endpoint selected by core, while request functions skip
11
+ * all migration and ensure-table work automatically.
12
+ */
13
+ async function main(): Promise<void> {
14
+ await withMigrationRuntime(async () => {
15
+ await runFrameworkReleaseMigrations(null);
16
+ await runFormsMigrations(null);
17
+ });
18
+ }
19
+
20
+ try {
21
+ await main();
22
+ } finally {
23
+ await closeDbExec();
24
+ }
@@ -28,7 +28,7 @@ const schemaTables = Object.values(schema).filter(isDrizzleTable);
28
28
  // packages/core/src/db/migrations.ts for the full rationale). Version numbers
29
29
  // alone are not a safe identity across parallel branches that each extend
30
30
  // this list independently against the shared `forms_migrations` table.
31
- const runFormsMigrations = runMigrations(
31
+ export const runFormsMigrations = runMigrations(
32
32
  [
33
33
  {
34
34
  version: 1,
@@ -13,6 +13,7 @@
13
13
  "app/**/*",
14
14
  "server/**/*",
15
15
  "shared/**/*",
16
+ "scripts/**/*",
16
17
  "react-router.config.ts",
17
18
  ".react-router/types/**/*",
18
19
  ".generated/**/*"
@@ -15,8 +15,9 @@ metadata:
15
15
 
16
16
  When an older Agent Native app/branch needs to run on current packages, use
17
17
  `agent-native upgrade`. Never "fix" upgrade breakage with
18
- `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or
19
- edits under `node_modules/@agent-native/*` — especially not against
18
+ `pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
19
+ `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
20
+ or edits under `node_modules/@agent-native/*` — especially not against
20
21
  `@agent-native/core` or `@agent-native/dispatch`.
21
22
 
22
23
  ## Why
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
109
110
 
110
111
  - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
111
112
  `patchedDependencies` for any `@agent-native/*` package
113
+ - Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
114
+ `patches/`, for any dependency
112
115
  - Don't edit `node_modules/@agent-native/core` or
113
116
  `node_modules/@agent-native/dispatch`
114
117
  - Don't invent local "dispatch behavior" shims to paper over version skew