@runa-ai/runa-cli 0.5.71 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/dist/build-BXUJKYHC.js +1730 -0
  2. package/dist/cache-H63JKFYH.js +112 -0
  3. package/dist/check-6AB5NGWK.js +207 -0
  4. package/dist/chunk-22CS6EMA.js +31 -0
  5. package/dist/chunk-3FDQW524.js +544 -0
  6. package/dist/chunk-5NKWR4FF.js +254 -0
  7. package/dist/chunk-6AALH2ED.js +121 -0
  8. package/dist/chunk-6Y3LAUGL.js +35 -0
  9. package/dist/chunk-7QV7U6NI.js +62 -0
  10. package/dist/chunk-AAIE4F2U.js +140 -0
  11. package/dist/chunk-CCKG5R4Y.js +59 -0
  12. package/dist/chunk-CE3DEYFT.js +480 -0
  13. package/dist/chunk-DRSUEMAK.js +123 -0
  14. package/dist/chunk-GOGRLQNP.js +12 -0
  15. package/dist/chunk-HD74F6W2.js +460 -0
  16. package/dist/chunk-HKUWEGUX.js +36 -0
  17. package/dist/chunk-HPYJPB5Y.js +408 -0
  18. package/dist/chunk-IBVVGH6X.js +33 -0
  19. package/dist/chunk-II7VYQEM.js +179 -0
  20. package/dist/chunk-JMJP4A47.js +204 -0
  21. package/dist/chunk-JQXOVCOP.js +574 -0
  22. package/dist/chunk-JT5SUTWE.js +9 -0
  23. package/dist/chunk-KWX3JHCY.js +85 -0
  24. package/dist/chunk-M47WJJVS.js +71 -0
  25. package/dist/chunk-MNPMZERI.js +194 -0
  26. package/dist/chunk-MXRWBNIY.js +74 -0
  27. package/dist/chunk-NPSRD26F.js +149 -0
  28. package/dist/chunk-P7U52PBY.js +1149 -0
  29. package/dist/chunk-QDF7QXBL.js +67 -0
  30. package/dist/chunk-RRGQCUKT.js +48 -0
  31. package/dist/chunk-RZLYEO4U.js +219 -0
  32. package/dist/chunk-TYIAD6SB.js +74 -0
  33. package/dist/chunk-UU55OH7P.js +42 -0
  34. package/dist/chunk-UWWSAPDR.js +31 -0
  35. package/dist/chunk-VM3IWOT5.js +458 -0
  36. package/dist/chunk-VRXHCR5K.js +42 -0
  37. package/dist/chunk-XJBQINSA.js +351 -0
  38. package/dist/chunk-ZZOXM6Q4.js +8 -0
  39. package/dist/ci-V3PIG2GI.js +8322 -0
  40. package/dist/cli/index.d.ts +7 -1
  41. package/dist/cli/requested-command.d.ts +8 -0
  42. package/dist/cli-GFRZCJQR.js +661 -0
  43. package/dist/commands/build/actors/db-sync.d.ts +2 -0
  44. package/dist/commands/build/actors/static-checks.d.ts +7 -6
  45. package/dist/commands/build/contract.d.ts +30 -30
  46. package/dist/commands/build/machine-dry-run.d.ts +3 -0
  47. package/dist/commands/build/machine-e2e-meta.d.ts +120 -0
  48. package/dist/commands/build/machine.d.ts +22 -22
  49. package/dist/commands/build/types.d.ts +2 -4
  50. package/dist/commands/ci/machine/contract.d.ts +26 -26
  51. package/dist/commands/ci/machine/formatters/sections/final-comment.d.ts +1 -5
  52. package/dist/commands/ci/machine/formatters/sections/format-helpers.d.ts +5 -0
  53. package/dist/commands/ci/machine/formatters/sections/index.d.ts +2 -2
  54. package/dist/commands/ci/machine/machine-execution-helpers.d.ts +40 -0
  55. package/dist/commands/ci/machine/machine-state-helpers.d.ts +14 -0
  56. package/dist/commands/ci/machine/machine.d.ts +12 -12
  57. package/dist/commands/ci/machine/types.d.ts +0 -5
  58. package/dist/commands/ci/utils/ci-summary.d.ts +15 -15
  59. package/dist/commands/ci/utils/execa-helpers.d.ts +1 -0
  60. package/dist/commands/db/apply/actors/idempotent-actors.d.ts +34 -0
  61. package/dist/commands/db/apply/actors/lock-actors.d.ts +16 -0
  62. package/dist/commands/db/apply/actors/pg-schema-diff-actors.d.ts +31 -0
  63. package/dist/commands/db/apply/actors/seed-actors.d.ts +11 -0
  64. package/dist/commands/db/apply/actors/shared.d.ts +9 -0
  65. package/dist/commands/db/apply/actors.d.ts +16 -65
  66. package/dist/commands/db/apply/contract.d.ts +8 -1
  67. package/dist/commands/db/apply/helpers/data-compatibility-checker.d.ts +3 -4
  68. package/dist/commands/db/apply/helpers/data-integrity-verifier.d.ts +37 -0
  69. package/dist/commands/db/apply/helpers/fresh-db-handler.d.ts +34 -0
  70. package/dist/commands/db/apply/helpers/hazard-handler.d.ts +60 -0
  71. package/dist/commands/db/apply/helpers/idempotent-object-registry.d.ts +96 -0
  72. package/dist/commands/db/apply/helpers/idempotent-transaction.d.ts +20 -0
  73. package/dist/commands/db/apply/helpers/index.d.ts +7 -1
  74. package/dist/commands/db/apply/helpers/partition-validator.d.ts +2 -15
  75. package/dist/commands/db/apply/helpers/pg-schema-diff-helpers.d.ts +18 -162
  76. package/dist/commands/db/apply/helpers/pg-schema-diff-patterns.d.ts +55 -0
  77. package/dist/commands/db/apply/helpers/pg-schema-diff-version.d.ts +50 -0
  78. package/dist/commands/db/apply/helpers/plan-validator.d.ts +30 -10
  79. package/dist/commands/db/apply/helpers/rbac-password-manager.d.ts +34 -0
  80. package/dist/commands/db/apply/helpers/retry-logic.d.ts +16 -2
  81. package/dist/commands/db/apply/helpers/shadow-db-manager.d.ts +1 -1
  82. package/dist/commands/db/apply/helpers/sql-utils.d.ts +26 -0
  83. package/dist/commands/db/apply/machine.d.ts +52 -1
  84. package/dist/commands/db/commands/db-apply.d.ts +18 -0
  85. package/dist/commands/db/commands/db-sync/boundary-classifier.d.ts +21 -0
  86. package/dist/commands/db/commands/db-sync/plan-hazard-analyzer.d.ts +13 -0
  87. package/dist/commands/db/commands/db-sync/risk-reporter.d.ts +19 -0
  88. package/dist/commands/db/commands/db-sync/sql-parser.d.ts +25 -0
  89. package/dist/commands/db/commands/db-sync/types.d.ts +47 -0
  90. package/dist/commands/db/commands/db-sync.d.ts +14 -0
  91. package/dist/commands/db/sync/contract.d.ts +6 -2
  92. package/dist/commands/db/sync/machine.d.ts +2 -1
  93. package/dist/commands/db/types.d.ts +2 -0
  94. package/dist/commands/db/utils/boundary-policy/rule-compiler.d.ts +11 -0
  95. package/dist/commands/db/utils/boundary-policy/types.d.ts +105 -0
  96. package/dist/commands/db/utils/boundary-policy/validation.d.ts +20 -0
  97. package/dist/commands/db/utils/boundary-policy-runtime.d.ts +28 -0
  98. package/dist/commands/db/utils/boundary-policy.d.ts +5 -0
  99. package/dist/commands/db/utils/idempotent-risk-context.d.ts +29 -0
  100. package/dist/commands/db/utils/preflight-check.d.ts +14 -0
  101. package/dist/commands/db/utils/preflight-checks/domain-naming-checks.d.ts +106 -0
  102. package/dist/commands/db/utils/preflight-checks/orphan-checks.d.ts +36 -0
  103. package/dist/commands/db/utils/preflight-checks/schema-risk-checks.d.ts +22 -0
  104. package/dist/commands/db/utils/preflight-checks/supabase-checks.d.ts +55 -0
  105. package/dist/commands/db/utils/risk-detector-loader.d.ts +8 -0
  106. package/dist/commands/db/utils/schema-precheck-budget.d.ts +17 -0
  107. package/dist/commands/db/utils/sql-boundary-parser.d.ts +12 -0
  108. package/dist/commands/db/utils/sql-file-collector.d.ts +8 -0
  109. package/dist/commands/db/utils/sql-filename-parser.d.ts +20 -0
  110. package/dist/commands/db/utils/sql-table-extractor-ast.d.ts +19 -0
  111. package/dist/commands/db/utils/sql-table-extractor-regex.d.ts +50 -0
  112. package/dist/commands/db/utils/sql-table-extractor-rls.d.ts +13 -0
  113. package/dist/commands/db/utils/sql-table-extractor.d.ts +79 -1
  114. package/dist/commands/db/utils/table-registry-introspection.d.ts +68 -0
  115. package/dist/commands/db/utils/table-registry.d.ts +3 -38
  116. package/dist/commands/dev/actors/app-lifecycle.d.ts +18 -0
  117. package/dist/commands/dev/actors/index.d.ts +7 -2
  118. package/dist/commands/dev/actors/process-check.d.ts +12 -0
  119. package/dist/commands/dev/actors/shared.d.ts +15 -0
  120. package/dist/commands/dev/contract.d.ts +2 -2
  121. package/dist/commands/dev/machine.d.ts +7 -31
  122. package/dist/commands/env/commands/env-pull/auth.d.ts +13 -0
  123. package/dist/commands/env/commands/env-pull/dotenv-files.d.ts +14 -0
  124. package/dist/commands/env/commands/env-pull/security.d.ts +12 -0
  125. package/dist/commands/env/commands/env-pull/service.d.ts +8 -0
  126. package/dist/commands/env/commands/env-pull/shared.d.ts +79 -0
  127. package/dist/commands/env/commands/setup/types.d.ts +1 -1
  128. package/dist/commands/env/constants/local-supabase.d.ts +2 -0
  129. package/dist/commands/template-check/contract.d.ts +6 -6
  130. package/dist/commands/template-check/machine.d.ts +2 -2
  131. package/dist/commands/template-check/types.d.ts +0 -4
  132. package/dist/commands/template-check/utils/diff-analyzer.d.ts +0 -4
  133. package/dist/config/env.d.ts +4 -4
  134. package/dist/config-loader-GT3HAQ7U.js +7 -0
  135. package/dist/db-HR7CREX2.js +15913 -0
  136. package/dist/dev-A7RW6XQV.js +873 -0
  137. package/dist/env-B47Z4747.js +2624 -0
  138. package/dist/env-HMMRSYCI.js +7 -0
  139. package/dist/env-files-K2C7O7L5.js +8 -0
  140. package/dist/error-handler-4EYSDOSE.js +460 -0
  141. package/dist/hotfix-CULKKMGS.js +1477 -0
  142. package/dist/index.d.ts +5 -1
  143. package/dist/index.js +48 -42912
  144. package/dist/init-ELK5QCWR.js +632 -0
  145. package/dist/inject-test-attrs-Y5UD5P7Q.js +36 -0
  146. package/dist/internal/machines/snapshot-helpers.d.ts +6 -0
  147. package/dist/lib/sql-comment-utils.d.ts +25 -0
  148. package/dist/license-OB7GVJQ2.js +468 -0
  149. package/dist/link-C43JRZWY.js +60 -0
  150. package/dist/manifest-2NOQ2IMK.js +32 -0
  151. package/dist/prepare-32DOVHTE.js +250 -0
  152. package/dist/risk-detector-BXUY2WKS.js +6 -0
  153. package/dist/risk-detector-core-O7I7SPR7.js +166 -0
  154. package/dist/risk-detector-plpgsql-SGMVKYJP.js +1856 -0
  155. package/dist/sdk-XK6HQU7S.js +348 -0
  156. package/dist/services-7VK5KZTO.js +177 -0
  157. package/dist/session-SFW5QSXZ.js +142 -0
  158. package/dist/signal-handler-DO3OANW5.js +6 -0
  159. package/dist/status-IJ4ZWHMX.js +95 -0
  160. package/dist/telemetry-FN7V727Y.js +94 -0
  161. package/dist/template-check-PNG5NQ5H.js +1933 -0
  162. package/dist/test-QYXE5UVW.js +626 -0
  163. package/dist/test-gen-QPWOIEHU.js +89 -0
  164. package/dist/ui-RJAMCWUI.js +331 -0
  165. package/dist/upgrade-3SLWVNAC.js +625 -0
  166. package/dist/utils/config-loader.d.ts +0 -3
  167. package/dist/validate-SM4PXPS7.js +55 -0
  168. package/dist/validators/risk-detector-content-risks.d.ts +13 -0
  169. package/dist/validators/risk-detector-core.d.ts +25 -0
  170. package/dist/validators/risk-detector-patterns.d.ts +15 -0
  171. package/dist/validators/risk-detector-plpgsql-expression-resolver.d.ts +22 -0
  172. package/dist/validators/risk-detector-plpgsql-parser.d.ts +5 -0
  173. package/dist/validators/risk-detector-plpgsql-tokenizer.d.ts +18 -0
  174. package/dist/validators/risk-detector-plpgsql.d.ts +9 -0
  175. package/dist/validators/risk-detector-text-utils.d.ts +6 -0
  176. package/dist/validators/risk-detector-types.d.ts +16 -0
  177. package/dist/validators/risk-detector.d.ts +7 -26
  178. package/dist/vuln-check-TYQNEFS7.js +122 -0
  179. package/dist/vuln-checker-2QXGN5YT.js +2950 -0
  180. package/dist/watch-UCDVOQAH.js +911 -0
  181. package/dist/workflow-ZB5Q2PFY.js +898 -0
  182. package/package.json +4 -1
  183. package/dist/cli/contract-mode.d.ts.map +0 -1
  184. package/dist/cli/contract-output.d.ts.map +0 -1
  185. package/dist/cli/early-flags.d.ts.map +0 -1
  186. package/dist/cli/error-handler.d.ts.map +0 -1
  187. package/dist/cli/exec.d.ts.map +0 -1
  188. package/dist/cli/index.d.ts.map +0 -1
  189. package/dist/cli/json-output.d.ts.map +0 -1
  190. package/dist/cli/non-interactive.d.ts.map +0 -1
  191. package/dist/cli/output-format.d.ts.map +0 -1
  192. package/dist/cli/signal-handler.d.ts.map +0 -1
  193. package/dist/commands/build/actors/build.d.ts.map +0 -1
  194. package/dist/commands/build/actors/clean.d.ts.map +0 -1
  195. package/dist/commands/build/actors/db-sync.d.ts.map +0 -1
  196. package/dist/commands/build/actors/index.d.ts.map +0 -1
  197. package/dist/commands/build/actors/manifest.d.ts.map +0 -1
  198. package/dist/commands/build/actors/setup.d.ts.map +0 -1
  199. package/dist/commands/build/actors/static-checks.d.ts.map +0 -1
  200. package/dist/commands/build/actors/validate.d.ts.map +0 -1
  201. package/dist/commands/build/commands/build.d.ts.map +0 -1
  202. package/dist/commands/build/contract.d.ts.map +0 -1
  203. package/dist/commands/build/guards.d.ts.map +0 -1
  204. package/dist/commands/build/index.d.ts.map +0 -1
  205. package/dist/commands/build/machine.d.ts.map +0 -1
  206. package/dist/commands/build/types.d.ts.map +0 -1
  207. package/dist/commands/cache.d.ts.map +0 -1
  208. package/dist/commands/check/commands/check.d.ts.map +0 -1
  209. package/dist/commands/check/index.d.ts.map +0 -1
  210. package/dist/commands/ci/commands/ci-checks.d.ts.map +0 -1
  211. package/dist/commands/ci/commands/ci-layer-content.d.ts.map +0 -1
  212. package/dist/commands/ci/commands/ci-pr-capabilities.d.ts.map +0 -1
  213. package/dist/commands/ci/commands/ci-prod-apply.d.ts.map +0 -1
  214. package/dist/commands/ci/commands/ci-prod-db-operations.d.ts.map +0 -1
  215. package/dist/commands/ci/commands/ci-prod-github.d.ts.map +0 -1
  216. package/dist/commands/ci/commands/ci-prod-types.d.ts.map +0 -1
  217. package/dist/commands/ci/commands/ci-prod-utils.d.ts.map +0 -1
  218. package/dist/commands/ci/commands/ci-prod-workflow.d.ts.map +0 -1
  219. package/dist/commands/ci/commands/ci-resolvers.d.ts.map +0 -1
  220. package/dist/commands/ci/commands/ci-static.d.ts.map +0 -1
  221. package/dist/commands/ci/commands/ci-supabase-local.d.ts.map +0 -1
  222. package/dist/commands/ci/index.d.ts.map +0 -1
  223. package/dist/commands/ci/machine/actors/build/app-build.d.ts.map +0 -1
  224. package/dist/commands/ci/machine/actors/build/app-start.d.ts.map +0 -1
  225. package/dist/commands/ci/machine/actors/build/build-and-playwright.d.ts.map +0 -1
  226. package/dist/commands/ci/machine/actors/build/index.d.ts.map +0 -1
  227. package/dist/commands/ci/machine/actors/build/playwright-install.d.ts.map +0 -1
  228. package/dist/commands/ci/machine/actors/build/static-checks.d.ts.map +0 -1
  229. package/dist/commands/ci/machine/actors/db/apply-seeds.d.ts.map +0 -1
  230. package/dist/commands/ci/machine/actors/db/collect-schema-stats.d.ts.map +0 -1
  231. package/dist/commands/ci/machine/actors/db/index.d.ts.map +0 -1
  232. package/dist/commands/ci/machine/actors/db/pgtap-install.d.ts.map +0 -1
  233. package/dist/commands/ci/machine/actors/db/production-preview.d.ts.map +0 -1
  234. package/dist/commands/ci/machine/actors/db/pull-production.d.ts.map +0 -1
  235. package/dist/commands/ci/machine/actors/db/reset.d.ts.map +0 -1
  236. package/dist/commands/ci/machine/actors/db/schema-stats.d.ts.map +0 -1
  237. package/dist/commands/ci/machine/actors/db/setup-roles.d.ts.map +0 -1
  238. package/dist/commands/ci/machine/actors/db/sync-schema.d.ts.map +0 -1
  239. package/dist/commands/ci/machine/actors/finalize/github.d.ts.map +0 -1
  240. package/dist/commands/ci/machine/actors/finalize/index.d.ts.map +0 -1
  241. package/dist/commands/ci/machine/actors/finalize/summary.d.ts.map +0 -1
  242. package/dist/commands/ci/machine/actors/index.d.ts.map +0 -1
  243. package/dist/commands/ci/machine/actors/setup/index.d.ts.map +0 -1
  244. package/dist/commands/ci/machine/actors/setup/local.d.ts.map +0 -1
  245. package/dist/commands/ci/machine/actors/setup/pr-common.d.ts.map +0 -1
  246. package/dist/commands/ci/machine/actors/setup/pr-local.d.ts.map +0 -1
  247. package/dist/commands/ci/machine/actors/test/capabilities.d.ts.map +0 -1
  248. package/dist/commands/ci/machine/actors/test/index.d.ts.map +0 -1
  249. package/dist/commands/ci/machine/actors/test/run-layers.d.ts.map +0 -1
  250. package/dist/commands/ci/machine/commands/ci-local.d.ts.map +0 -1
  251. package/dist/commands/ci/machine/commands/ci-pr.d.ts.map +0 -1
  252. package/dist/commands/ci/machine/commands/index.d.ts.map +0 -1
  253. package/dist/commands/ci/machine/commands/machine-runner.d.ts.map +0 -1
  254. package/dist/commands/ci/machine/commands/runtime-env.d.ts.map +0 -1
  255. package/dist/commands/ci/machine/contract.d.ts.map +0 -1
  256. package/dist/commands/ci/machine/formatters/github-comment-types.d.ts.map +0 -1
  257. package/dist/commands/ci/machine/formatters/github-comment.d.ts.map +0 -1
  258. package/dist/commands/ci/machine/formatters/index.d.ts.map +0 -1
  259. package/dist/commands/ci/machine/formatters/sections/final-comment.d.ts.map +0 -1
  260. package/dist/commands/ci/machine/formatters/sections/format-helpers.d.ts.map +0 -1
  261. package/dist/commands/ci/machine/formatters/sections/index.d.ts.map +0 -1
  262. package/dist/commands/ci/machine/formatters/sections/progress-comment.d.ts.map +0 -1
  263. package/dist/commands/ci/machine/formatters/sections/schema-matrix.d.ts.map +0 -1
  264. package/dist/commands/ci/machine/formatters/summary.d.ts.map +0 -1
  265. package/dist/commands/ci/machine/guards.d.ts.map +0 -1
  266. package/dist/commands/ci/machine/helpers.d.ts.map +0 -1
  267. package/dist/commands/ci/machine/index.d.ts.map +0 -1
  268. package/dist/commands/ci/machine/machine.d.ts.map +0 -1
  269. package/dist/commands/ci/machine/types.d.ts.map +0 -1
  270. package/dist/commands/ci/utils/ai-report.d.ts.map +0 -1
  271. package/dist/commands/ci/utils/app-process.d.ts.map +0 -1
  272. package/dist/commands/ci/utils/app-runtime.d.ts.map +0 -1
  273. package/dist/commands/ci/utils/ci-config.d.ts.map +0 -1
  274. package/dist/commands/ci/utils/ci-env-schema.d.ts.map +0 -1
  275. package/dist/commands/ci/utils/ci-logging.d.ts.map +0 -1
  276. package/dist/commands/ci/utils/ci-summary.d.ts.map +0 -1
  277. package/dist/commands/ci/utils/config-readers.d.ts.map +0 -1
  278. package/dist/commands/ci/utils/db-url-utils.d.ts.map +0 -1
  279. package/dist/commands/ci/utils/e2e-auth-setup.d.ts.map +0 -1
  280. package/dist/commands/ci/utils/env-security.d.ts.map +0 -1
  281. package/dist/commands/ci/utils/execa-helpers.d.ts.map +0 -1
  282. package/dist/commands/ci/utils/exit-code-computation.d.ts.map +0 -1
  283. package/dist/commands/ci/utils/github-api.d.ts.map +0 -1
  284. package/dist/commands/ci/utils/github.d.ts.map +0 -1
  285. package/dist/commands/ci/utils/index.d.ts.map +0 -1
  286. package/dist/commands/ci/utils/pgtap-installer.d.ts.map +0 -1
  287. package/dist/commands/ci/utils/rls-verification.d.ts.map +0 -1
  288. package/dist/commands/ci/utils/schema-operations.d.ts.map +0 -1
  289. package/dist/commands/ci/utils/seed-operations.d.ts.map +0 -1
  290. package/dist/commands/ci/utils/test-parallel.d.ts.map +0 -1
  291. package/dist/commands/ci/utils/timestamp-invariants.d.ts.map +0 -1
  292. package/dist/commands/ci/utils/workflow-idempotency.d.ts.map +0 -1
  293. package/dist/commands/db/apply/actors.d.ts.map +0 -1
  294. package/dist/commands/db/apply/contract.d.ts.map +0 -1
  295. package/dist/commands/db/apply/helpers/advisory-lock.d.ts.map +0 -1
  296. package/dist/commands/db/apply/helpers/data-compatibility-checker.d.ts.map +0 -1
  297. package/dist/commands/db/apply/helpers/index.d.ts.map +0 -1
  298. package/dist/commands/db/apply/helpers/partition-acl-cleaner.d.ts.map +0 -1
  299. package/dist/commands/db/apply/helpers/partition-prefilter.d.ts.map +0 -1
  300. package/dist/commands/db/apply/helpers/partition-validator.d.ts.map +0 -1
  301. package/dist/commands/db/apply/helpers/pg-schema-diff-helpers.d.ts.map +0 -1
  302. package/dist/commands/db/apply/helpers/plan-validator.d.ts.map +0 -1
  303. package/dist/commands/db/apply/helpers/retry-logic.d.ts.map +0 -1
  304. package/dist/commands/db/apply/helpers/shadow-db-manager.d.ts.map +0 -1
  305. package/dist/commands/db/apply/index.d.ts.map +0 -1
  306. package/dist/commands/db/apply/machine.d.ts.map +0 -1
  307. package/dist/commands/db/commands/db-apply.d.ts.map +0 -1
  308. package/dist/commands/db/commands/db-audit.d.ts.map +0 -1
  309. package/dist/commands/db/commands/db-backup.d.ts.map +0 -1
  310. package/dist/commands/db/commands/db-cleanup.d.ts.map +0 -1
  311. package/dist/commands/db/commands/db-derive-role-passwords.d.ts.map +0 -1
  312. package/dist/commands/db/commands/db-derive-urls.d.ts.map +0 -1
  313. package/dist/commands/db/commands/db-diagram.d.ts.map +0 -1
  314. package/dist/commands/db/commands/db-drizzle.d.ts.map +0 -1
  315. package/dist/commands/db/commands/db-extension.d.ts.map +0 -1
  316. package/dist/commands/db/commands/db-generate-password.d.ts.map +0 -1
  317. package/dist/commands/db/commands/db-lifecycle.d.ts.map +0 -1
  318. package/dist/commands/db/commands/db-rollback.d.ts.map +0 -1
  319. package/dist/commands/db/commands/db-schema.d.ts.map +0 -1
  320. package/dist/commands/db/commands/db-seed-metadata.d.ts.map +0 -1
  321. package/dist/commands/db/commands/db-seed-verify.d.ts.map +0 -1
  322. package/dist/commands/db/commands/db-seed.d.ts.map +0 -1
  323. package/dist/commands/db/commands/db-snapshot.d.ts.map +0 -1
  324. package/dist/commands/db/commands/db-stack.d.ts.map +0 -1
  325. package/dist/commands/db/commands/db-stats.d.ts.map +0 -1
  326. package/dist/commands/db/commands/db-sync.d.ts.map +0 -1
  327. package/dist/commands/db/commands/db-test.d.ts.map +0 -1
  328. package/dist/commands/db/constants.d.ts.map +0 -1
  329. package/dist/commands/db/extension-registry.d.ts.map +0 -1
  330. package/dist/commands/db/index.d.ts.map +0 -1
  331. package/dist/commands/db/preflight/actors.d.ts.map +0 -1
  332. package/dist/commands/db/preflight/contract.d.ts.map +0 -1
  333. package/dist/commands/db/preflight/index.d.ts.map +0 -1
  334. package/dist/commands/db/sync/actors.d.ts.map +0 -1
  335. package/dist/commands/db/sync/contract.d.ts.map +0 -1
  336. package/dist/commands/db/sync/index.d.ts.map +0 -1
  337. package/dist/commands/db/sync/machine.d.ts.map +0 -1
  338. package/dist/commands/db/types.d.ts.map +0 -1
  339. package/dist/commands/db/utils/db-target.d.ts.map +0 -1
  340. package/dist/commands/db/utils/db-url-builder.d.ts.map +0 -1
  341. package/dist/commands/db/utils/error-handlers.d.ts.map +0 -1
  342. package/dist/commands/db/utils/import-impact-analyzer.d.ts.map +0 -1
  343. package/dist/commands/db/utils/preflight-check.d.ts.map +0 -1
  344. package/dist/commands/db/utils/psql.d.ts.map +0 -1
  345. package/dist/commands/db/utils/schema-detector.d.ts.map +0 -1
  346. package/dist/commands/db/utils/schema-sync.d.ts.map +0 -1
  347. package/dist/commands/db/utils/script-runner.d.ts.map +0 -1
  348. package/dist/commands/db/utils/seed-manager.d.ts.map +0 -1
  349. package/dist/commands/db/utils/semantic-mapper.d.ts.map +0 -1
  350. package/dist/commands/db/utils/sql-table-extractor.d.ts.map +0 -1
  351. package/dist/commands/db/utils/stack-detector.d.ts.map +0 -1
  352. package/dist/commands/db/utils/table-registry.d.ts.map +0 -1
  353. package/dist/commands/db/utils/table-source-classifier.d.ts.map +0 -1
  354. package/dist/commands/dev/actors/index.d.ts.map +0 -1
  355. package/dist/commands/dev/commands/dev.d.ts.map +0 -1
  356. package/dist/commands/dev/contract.d.ts.map +0 -1
  357. package/dist/commands/dev/guards.d.ts.map +0 -1
  358. package/dist/commands/dev/helpers/stale-process-detector.d.ts.map +0 -1
  359. package/dist/commands/dev/machine.d.ts.map +0 -1
  360. package/dist/commands/dev/types.d.ts.map +0 -1
  361. package/dist/commands/env/commands/env-check.d.ts.map +0 -1
  362. package/dist/commands/env/commands/env-encrypt.d.ts.map +0 -1
  363. package/dist/commands/env/commands/env-pull.d.ts.map +0 -1
  364. package/dist/commands/env/commands/env-setup.d.ts.map +0 -1
  365. package/dist/commands/env/commands/env-sync.d.ts.map +0 -1
  366. package/dist/commands/env/commands/setup/action.d.ts.map +0 -1
  367. package/dist/commands/env/commands/setup/auth.d.ts.map +0 -1
  368. package/dist/commands/env/commands/setup/file-export.d.ts.map +0 -1
  369. package/dist/commands/env/commands/setup/github-api.d.ts.map +0 -1
  370. package/dist/commands/env/commands/setup/helpers.d.ts.map +0 -1
  371. package/dist/commands/env/commands/setup/index.d.ts.map +0 -1
  372. package/dist/commands/env/commands/setup/parsers.d.ts.map +0 -1
  373. package/dist/commands/env/commands/setup/prompts.d.ts.map +0 -1
  374. package/dist/commands/env/commands/setup/supabase-api.d.ts.map +0 -1
  375. package/dist/commands/env/commands/setup/types.d.ts.map +0 -1
  376. package/dist/commands/env/commands/setup/vercel-api.d.ts.map +0 -1
  377. package/dist/commands/env/constants/local-supabase.d.ts.map +0 -1
  378. package/dist/commands/env/index.d.ts.map +0 -1
  379. package/dist/commands/hotfix/actors.d.ts.map +0 -1
  380. package/dist/commands/hotfix/commands/hotfix-complete.d.ts.map +0 -1
  381. package/dist/commands/hotfix/commands/hotfix-create.d.ts.map +0 -1
  382. package/dist/commands/hotfix/commands/hotfix-deploy.d.ts.map +0 -1
  383. package/dist/commands/hotfix/commands/hotfix-status.d.ts.map +0 -1
  384. package/dist/commands/hotfix/contract.d.ts.map +0 -1
  385. package/dist/commands/hotfix/index.d.ts.map +0 -1
  386. package/dist/commands/hotfix/machine.d.ts.map +0 -1
  387. package/dist/commands/hotfix/metadata.d.ts.map +0 -1
  388. package/dist/commands/hotfix/utils/hotfix-machine-helper.d.ts.map +0 -1
  389. package/dist/commands/init.d.ts.map +0 -1
  390. package/dist/commands/inject-test-attrs/action.d.ts.map +0 -1
  391. package/dist/commands/inject-test-attrs/commands/inject-test-attrs.d.ts.map +0 -1
  392. package/dist/commands/inject-test-attrs/contract.d.ts.map +0 -1
  393. package/dist/commands/inject-test-attrs/detection-diagnostics.d.ts.map +0 -1
  394. package/dist/commands/inject-test-attrs/formatter.d.ts.map +0 -1
  395. package/dist/commands/inject-test-attrs/index.d.ts.map +0 -1
  396. package/dist/commands/inject-test-attrs/manifest-generator.d.ts.map +0 -1
  397. package/dist/commands/inject-test-attrs/processor-utils.d.ts.map +0 -1
  398. package/dist/commands/inject-test-attrs/processor.d.ts.map +0 -1
  399. package/dist/commands/inject-test-attrs/types.d.ts.map +0 -1
  400. package/dist/commands/link.d.ts.map +0 -1
  401. package/dist/commands/manifest/index.d.ts.map +0 -1
  402. package/dist/commands/prepare/commands/prepare.d.ts.map +0 -1
  403. package/dist/commands/prepare/index.d.ts.map +0 -1
  404. package/dist/commands/sdk/commands/publish.d.ts.map +0 -1
  405. package/dist/commands/sdk/index.d.ts.map +0 -1
  406. package/dist/commands/services/index.d.ts.map +0 -1
  407. package/dist/commands/session/index.d.ts.map +0 -1
  408. package/dist/commands/status.d.ts.map +0 -1
  409. package/dist/commands/telemetry.d.ts.map +0 -1
  410. package/dist/commands/template-check/actors/compare.d.ts.map +0 -1
  411. package/dist/commands/template-check/actors/discover.d.ts.map +0 -1
  412. package/dist/commands/template-check/actors/index.d.ts.map +0 -1
  413. package/dist/commands/template-check/actors/report.d.ts.map +0 -1
  414. package/dist/commands/template-check/commands/template-check.d.ts.map +0 -1
  415. package/dist/commands/template-check/config.d.ts.map +0 -1
  416. package/dist/commands/template-check/contract.d.ts.map +0 -1
  417. package/dist/commands/template-check/index.d.ts.map +0 -1
  418. package/dist/commands/template-check/machine.d.ts.map +0 -1
  419. package/dist/commands/template-check/types.d.ts.map +0 -1
  420. package/dist/commands/template-check/utils/diff-analyzer.d.ts.map +0 -1
  421. package/dist/commands/template-check/utils/normalizer.d.ts.map +0 -1
  422. package/dist/commands/template-check/utils/path-mapping.d.ts.map +0 -1
  423. package/dist/commands/test/commands/test-db.d.ts.map +0 -1
  424. package/dist/commands/test/commands/test-e2e.d.ts.map +0 -1
  425. package/dist/commands/test/commands/test-fast.d.ts.map +0 -1
  426. package/dist/commands/test/commands/test-integration.d.ts.map +0 -1
  427. package/dist/commands/test/commands/test-layer.d.ts.map +0 -1
  428. package/dist/commands/test/commands/test-owasp-generate.d.ts.map +0 -1
  429. package/dist/commands/test/commands/test-service.d.ts.map +0 -1
  430. package/dist/commands/test/commands/test-static.d.ts.map +0 -1
  431. package/dist/commands/test/commands/test.d.ts.map +0 -1
  432. package/dist/commands/test/index.d.ts.map +0 -1
  433. package/dist/commands/test-gen.d.ts.map +0 -1
  434. package/dist/commands/ui.d.ts.map +0 -1
  435. package/dist/commands/upgrade.d.ts.map +0 -1
  436. package/dist/commands/validate.d.ts.map +0 -1
  437. package/dist/commands/vuln-check.d.ts.map +0 -1
  438. package/dist/commands/watch.d.ts.map +0 -1
  439. package/dist/commands/workflow/commands/deploy-production.d.ts.map +0 -1
  440. package/dist/commands/workflow/commands/final-status.d.ts.map +0 -1
  441. package/dist/commands/workflow/commands/log.d.ts.map +0 -1
  442. package/dist/commands/workflow/commands/notify.d.ts.map +0 -1
  443. package/dist/commands/workflow/commands/paths.d.ts.map +0 -1
  444. package/dist/commands/workflow/commands/sync.d.ts.map +0 -1
  445. package/dist/commands/workflow/commands/validate.d.ts.map +0 -1
  446. package/dist/commands/workflow/commands/verify-credentials.d.ts.map +0 -1
  447. package/dist/commands/workflow/index.d.ts.map +0 -1
  448. package/dist/commands/workflow/types.d.ts.map +0 -1
  449. package/dist/config/env-files.d.ts.map +0 -1
  450. package/dist/config/env.d.ts.map +0 -1
  451. package/dist/constants/versions.d.ts.map +0 -1
  452. package/dist/contracts/envelope.d.ts.map +0 -1
  453. package/dist/errors/catalog.d.ts.map +0 -1
  454. package/dist/errors/exit-codes.d.ts.map +0 -1
  455. package/dist/errors/index.d.ts.map +0 -1
  456. package/dist/incremental/affected-tests.d.ts.map +0 -1
  457. package/dist/index.d.ts.map +0 -1
  458. package/dist/internal/machines/index.d.ts.map +0 -1
  459. package/dist/internal/machines/machine-runner.d.ts.map +0 -1
  460. package/dist/internal/machines/snapshot-helpers.d.ts.map +0 -1
  461. package/dist/internal/machines/types.d.ts.map +0 -1
  462. package/dist/internal/vuln-checker/analyzers/dependency-analyzer.d.ts.map +0 -1
  463. package/dist/internal/vuln-checker/analyzers/rls-analyzer.d.ts.map +0 -1
  464. package/dist/internal/vuln-checker/analyzers/secret-analyzer.d.ts.map +0 -1
  465. package/dist/internal/vuln-checker/analyzers/typescript-analyzer.d.ts.map +0 -1
  466. package/dist/internal/vuln-checker/config/loader.d.ts.map +0 -1
  467. package/dist/internal/vuln-checker/constants.d.ts.map +0 -1
  468. package/dist/internal/vuln-checker/ignore/matcher.d.ts.map +0 -1
  469. package/dist/internal/vuln-checker/index.d.ts.map +0 -1
  470. package/dist/internal/vuln-checker/reporters/console-reporter.d.ts.map +0 -1
  471. package/dist/internal/vuln-checker/reporters/json-reporter.d.ts.map +0 -1
  472. package/dist/internal/vuln-checker/reporters/markdown-reporter.d.ts.map +0 -1
  473. package/dist/internal/vuln-checker/reporters/sarif-reporter.d.ts.map +0 -1
  474. package/dist/internal/vuln-checker/security/path-validation.d.ts.map +0 -1
  475. package/dist/internal/vuln-checker/types.d.ts.map +0 -1
  476. package/dist/notifiers/desktop-notifier.d.ts.map +0 -1
  477. package/dist/ui/components/db-panel.d.ts.map +0 -1
  478. package/dist/ui/components/status-bar.d.ts.map +0 -1
  479. package/dist/ui/components/test-panel.d.ts.map +0 -1
  480. package/dist/ui/dashboard.d.ts.map +0 -1
  481. package/dist/ui/index.d.ts.map +0 -1
  482. package/dist/utils/config-loader.d.ts.map +0 -1
  483. package/dist/utils/config-updater.d.ts.map +0 -1
  484. package/dist/utils/diagnostics.d.ts.map +0 -1
  485. package/dist/utils/dotenvx.d.ts.map +0 -1
  486. package/dist/utils/env-local-bridge.d.ts.map +0 -1
  487. package/dist/utils/execution-plan.d.ts.map +0 -1
  488. package/dist/utils/github-output-security.d.ts.map +0 -1
  489. package/dist/utils/help-system.d.ts.map +0 -1
  490. package/dist/utils/license/admin-auth.d.ts.map +0 -1
  491. package/dist/utils/license/allowlist-checker.d.ts.map +0 -1
  492. package/dist/utils/license/ci-detector.d.ts.map +0 -1
  493. package/dist/utils/license/index.d.ts.map +0 -1
  494. package/dist/utils/license/owner-resolver.d.ts.map +0 -1
  495. package/dist/utils/license/types.d.ts.map +0 -1
  496. package/dist/utils/license/validate-owner.d.ts.map +0 -1
  497. package/dist/utils/path-security.d.ts.map +0 -1
  498. package/dist/utils/port-allocator.d.ts.map +0 -1
  499. package/dist/utils/secure-exec.d.ts.map +0 -1
  500. package/dist/utils/template-fetcher.d.ts.map +0 -1
  501. package/dist/utils/type-guards.d.ts.map +0 -1
  502. package/dist/utils/vercel-project.d.ts.map +0 -1
  503. package/dist/utils/workspace-detector.d.ts.map +0 -1
  504. package/dist/validators/risk-detector.d.ts.map +0 -1
  505. package/dist/validators/schema-validator.d.ts.map +0 -1
  506. package/dist/version.d.ts.map +0 -1
  507. package/dist/watchers/schema-watcher.d.ts.map +0 -1
  508. package/dist/watchers/test-watcher.d.ts.map +0 -1
@@ -0,0 +1,1730 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'module';
3
+ import { runLogged } from './chunk-7QV7U6NI.js';
4
+ import './chunk-QDF7QXBL.js';
5
+ import { getSnapshotStateName, isSnapshotComplete } from './chunk-IBVVGH6X.js';
6
+ import './chunk-II7VYQEM.js';
7
+ import { guards, supabaseStartActor, envCheckActor, depsInstallActor, detectTurbo, detectManifestTask, detectDatabase, checkSupabaseStatus } from './chunk-HPYJPB5Y.js';
8
+ import './chunk-VM3IWOT5.js';
9
+ import { securePnpm } from './chunk-RZLYEO4U.js';
10
+ import { emitJsonSuccess } from './chunk-UU55OH7P.js';
11
+ import './chunk-RRGQCUKT.js';
12
+ import './chunk-JT5SUTWE.js';
13
+ import './chunk-HKUWEGUX.js';
14
+ import { init_esm_shims, __require } from './chunk-VRXHCR5K.js';
15
+ import { CLIError, createCLILogger } from '@runa-ai/runa';
16
+ import { Command } from 'commander';
17
+ import { fromPromise, setup, assign, createActor } from 'xstate';
18
+ import { z } from 'zod';
19
+ import { existsSync, rmSync } from 'fs';
20
+ import { mkdir } from 'fs/promises';
21
+ import path6 from 'path';
22
+
23
+ createRequire(import.meta.url);
24
+
25
+ // src/commands/build/index.ts
26
+ init_esm_shims();
27
+
28
+ // src/commands/build/commands/build.ts
29
+ init_esm_shims();
30
+
31
+ // src/commands/build/contract.ts
32
+ init_esm_shims();
33
+ var BuildPhaseSchema = z.enum(["types", "lint", "build", "db", "manifest"]);
34
+ var VALID_BUILD_PHASES = ["types", "lint", "build", "db", "manifest"];
35
+ var BuildInputSchema = z.object({
36
+ /** Enable E2E mode (NEXT_PUBLIC_E2E_TEST=true) */
37
+ e2e: z.boolean().default(false),
38
+ /** Clear build caches (.next, .turbo, .runa/manifests) */
39
+ clean: z.boolean().default(false),
40
+ /** Full clean + reinstall node_modules */
41
+ fresh: z.boolean().default(false),
42
+ /** Skip database sync step */
43
+ skipDb: z.boolean().default(false),
44
+ /** Skip manifest generation step */
45
+ skipManifest: z.boolean().default(false),
46
+ /** Show detailed output */
47
+ verbose: z.boolean().default(false),
48
+ /** Dry-run mode (show what would be done) */
49
+ check: z.boolean().default(false),
50
+ /** Skip auto-setup phase (deps install, env check, supabase start) */
51
+ noSetup: z.boolean().default(false),
52
+ /** Target directory (defaults to cwd) */
53
+ targetDir: z.string().optional(),
54
+ /** Only run specific phases (partial build) */
55
+ only: z.array(BuildPhaseSchema).optional()
56
+ }).strict();
57
+ var BuildPhaseStatusSchema = z.enum(["pending", "running", "passed", "failed", "skipped"]);
58
+ var BuildPhaseResultSchema = z.object({
59
+ status: BuildPhaseStatusSchema,
60
+ durationMs: z.number().int().nonnegative(),
61
+ error: z.string().optional()
62
+ });
63
+ var BuildOutputSchema = z.object({
64
+ /** Overall success status */
65
+ success: z.boolean(),
66
+ /** Exit code: 0 = success, 1 = failure */
67
+ exitCode: z.union([z.literal(0), z.literal(1)]),
68
+ /** Results for each phase */
69
+ phases: z.object({
70
+ // Setup phase (auto-detect and fix)
71
+ depsInstall: BuildPhaseResultSchema.optional(),
72
+ envCheck: BuildPhaseResultSchema.optional(),
73
+ supabaseStart: BuildPhaseResultSchema.optional(),
74
+ // Clean phase
75
+ clean: BuildPhaseResultSchema.optional(),
76
+ fresh: BuildPhaseResultSchema.optional(),
77
+ // Core phases
78
+ typeCheck: BuildPhaseResultSchema,
79
+ lint: BuildPhaseResultSchema,
80
+ build: BuildPhaseResultSchema,
81
+ dbSync: BuildPhaseResultSchema.optional(),
82
+ manifest: BuildPhaseResultSchema.optional(),
83
+ validate: BuildPhaseResultSchema
84
+ }),
85
+ /** Total duration in milliseconds */
86
+ durationMs: z.number().int().nonnegative(),
87
+ /** Error message if failed */
88
+ error: z.string().optional(),
89
+ /** Warning messages (non-blocking issues) */
90
+ warnings: z.array(z.string()).optional()
91
+ }).strict();
92
+
93
+ // src/commands/build/machine.ts
94
+ init_esm_shims();
95
+
96
+ // src/commands/build/actors/index.ts
97
+ init_esm_shims();
98
+
99
+ // src/commands/build/actors/build.ts
100
+ init_esm_shims();
101
+ var buildActor = fromPromise(
102
+ async ({ input }) => {
103
+ const { repoRoot, tmpDir, hasTurbo, e2e, env = process.env } = input;
104
+ const startTime = Date.now();
105
+ try {
106
+ const fullTmpDir = path6.join(repoRoot, tmpDir);
107
+ await mkdir(fullTmpDir, { recursive: true });
108
+ const buildEnv = { ...env };
109
+ if (e2e) {
110
+ buildEnv.NEXT_PUBLIC_E2E_TEST = "true";
111
+ buildEnv.E2E_TEST = "true";
112
+ console.log(" E2E mode enabled: NEXT_PUBLIC_E2E_TEST=true");
113
+ }
114
+ const hasApps = existsSync(path6.join(repoRoot, "apps"));
115
+ let args;
116
+ if (hasTurbo) {
117
+ args = hasApps ? ["turbo", "run", "build", "--filter=./apps/*", "--filter=./packages/*"] : ["turbo", "run", "build"];
118
+ } else {
119
+ args = ["build"];
120
+ }
121
+ await runLogged({
122
+ cwd: repoRoot,
123
+ env: buildEnv,
124
+ label: "build",
125
+ command: "pnpm",
126
+ args,
127
+ logFile: path6.join(fullTmpDir, "build.log")
128
+ });
129
+ return {
130
+ passed: true,
131
+ durationMs: Date.now() - startTime
132
+ };
133
+ } catch (error) {
134
+ return {
135
+ passed: false,
136
+ durationMs: Date.now() - startTime,
137
+ error: error instanceof Error ? error.message : String(error)
138
+ };
139
+ }
140
+ }
141
+ );
142
+
143
+ // src/commands/build/actors/clean.ts
144
+ init_esm_shims();
145
+ var CLEAN_DIRS = [".next", ".turbo", ".runa/manifests", "dist"];
146
+ var FRESH_DIRS = ["node_modules"];
147
+ function deleteIfExists(fullPath, displayPath, verbose) {
148
+ if (existsSync(fullPath)) {
149
+ if (verbose) {
150
+ console.log(` Deleting: ${displayPath}`);
151
+ }
152
+ rmSync(fullPath, { recursive: true, force: true });
153
+ return true;
154
+ }
155
+ return false;
156
+ }
157
+ function deleteRootDirectories(repoRoot, dirs, verbose) {
158
+ const deleted = [];
159
+ for (const dir of dirs) {
160
+ const fullPath = path6.join(repoRoot, dir);
161
+ if (deleteIfExists(fullPath, dir, verbose)) {
162
+ deleted.push(dir);
163
+ }
164
+ }
165
+ return deleted;
166
+ }
167
+ function cleanMonorepoPackages(repoRoot, dirs, verbose) {
168
+ const deleted = [];
169
+ const subdirs = ["apps", "packages"];
170
+ for (const subdir of subdirs) {
171
+ const subdirPath = path6.join(repoRoot, subdir);
172
+ if (!existsSync(subdirPath)) continue;
173
+ const entries = __require("fs").readdirSync(subdirPath, { withFileTypes: true });
174
+ for (const entry of entries) {
175
+ if (!entry.isDirectory()) continue;
176
+ for (const dir of dirs) {
177
+ const targetPath = path6.join(subdirPath, entry.name, dir);
178
+ const displayPath = `${subdir}/${entry.name}/${dir}`;
179
+ if (deleteIfExists(targetPath, displayPath, verbose)) {
180
+ deleted.push(displayPath);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return deleted;
186
+ }
187
+ function deleteDirectories(repoRoot, dirs, verbose) {
188
+ const rootDeleted = deleteRootDirectories(repoRoot, dirs, verbose);
189
+ const packageDeleted = cleanMonorepoPackages(repoRoot, dirs, verbose);
190
+ return [...rootDeleted, ...packageDeleted];
191
+ }
192
+ var cleanActor = fromPromise(
193
+ async ({ input }) => {
194
+ const { repoRoot, tmpDir, verbose = false } = input;
195
+ try {
196
+ await mkdir(path6.join(repoRoot, tmpDir), { recursive: true });
197
+ if (verbose) {
198
+ console.log("Cleaning build caches...");
199
+ }
200
+ const deletedPaths = deleteDirectories(repoRoot, CLEAN_DIRS, verbose);
201
+ return {
202
+ passed: true,
203
+ deletedPaths
204
+ };
205
+ } catch (error) {
206
+ return {
207
+ passed: false,
208
+ deletedPaths: [],
209
+ error: error instanceof Error ? error.message : String(error)
210
+ };
211
+ }
212
+ }
213
+ );
214
+ var freshActor = fromPromise(
215
+ async ({ input }) => {
216
+ const { repoRoot, tmpDir, verbose = false } = input;
217
+ try {
218
+ await mkdir(path6.join(repoRoot, tmpDir), { recursive: true });
219
+ if (verbose) {
220
+ console.log("Fresh install: cleaning all caches and node_modules...");
221
+ }
222
+ const deletedBuildPaths = deleteDirectories(repoRoot, CLEAN_DIRS, verbose);
223
+ const deletedNodeModules = deleteDirectories(repoRoot, FRESH_DIRS, verbose);
224
+ const deletedPaths = [...deletedBuildPaths, ...deletedNodeModules];
225
+ if (verbose) {
226
+ console.log("Pruning pnpm store...");
227
+ }
228
+ await securePnpm(["store", "prune"], {
229
+ cwd: repoRoot,
230
+ stdio: verbose ? "inherit" : "pipe",
231
+ reject: false
232
+ // Don't fail if store prune fails
233
+ });
234
+ if (verbose) {
235
+ console.log("Reinstalling dependencies...");
236
+ }
237
+ const installResult = await securePnpm(["install"], {
238
+ cwd: repoRoot,
239
+ stdio: verbose ? "inherit" : "pipe",
240
+ reject: false
241
+ });
242
+ if (installResult.exitCode !== 0) {
243
+ const errorMsg = installResult.stderr || installResult.stdout || "pnpm install failed";
244
+ return {
245
+ passed: false,
246
+ deletedPaths,
247
+ error: `pnpm install failed: ${errorMsg.slice(0, 500)}`
248
+ };
249
+ }
250
+ if (verbose) {
251
+ console.log("Verifying dependency resolution...");
252
+ }
253
+ const lsResult = await securePnpm(["ls", "--depth=0"], {
254
+ cwd: repoRoot,
255
+ stdio: "pipe",
256
+ reject: false
257
+ });
258
+ if (lsResult.exitCode !== 0) {
259
+ return {
260
+ passed: false,
261
+ deletedPaths,
262
+ error: `Dependency verification failed. Some packages may not be explicitly declared in package.json.
263
+
264
+ Tip: If imports fail after --fresh, add missing dependencies to package.json explicitly.
265
+
266
+ Common missing deps: @supabase/supabase-js, drizzle-orm, @hono/node-server`
267
+ };
268
+ }
269
+ return {
270
+ passed: true,
271
+ deletedPaths
272
+ };
273
+ } catch (error) {
274
+ return {
275
+ passed: false,
276
+ deletedPaths: [],
277
+ error: error instanceof Error ? error.message : String(error)
278
+ };
279
+ }
280
+ }
281
+ );
282
+
283
+ // src/commands/build/actors/db-sync.ts
284
+ init_esm_shims();
285
+ var DEFAULT_BUILD_DB_SYNC_TIMEOUT_MS = 18e4;
286
+ function resolveBuildDbSyncTimeoutMs(env) {
287
+ const configured = env.RUNA_BUILD_DB_SYNC_TIMEOUT_MS;
288
+ if (!configured) return DEFAULT_BUILD_DB_SYNC_TIMEOUT_MS;
289
+ const parsed = Number.parseInt(configured, 10);
290
+ if (Number.isNaN(parsed) || parsed <= 0) {
291
+ return DEFAULT_BUILD_DB_SYNC_TIMEOUT_MS;
292
+ }
293
+ return parsed;
294
+ }
295
+ function isTimeoutError(error) {
296
+ if (error && typeof error === "object") {
297
+ const maybeTimedOut = error.timedOut;
298
+ if (maybeTimedOut === true) return true;
299
+ }
300
+ const message = error instanceof Error ? error.message : String(error);
301
+ const normalized = message.toLowerCase();
302
+ return normalized.includes("timed out") || normalized.includes("timeout");
303
+ }
304
+ function buildSupabaseSkipWarning(params) {
305
+ if (params.conflictingProject) {
306
+ const portInfo = params.actualPort != null ? ` (port ${params.actualPort})` : "";
307
+ return `Supabase is not running for this repo${portInfo}: port is used by project '${params.conflictingProject}'. Skipping db sync. Stop the conflicting project or run with '--skip-db'.`;
308
+ }
309
+ if (params.portInUse) {
310
+ const portInfo = params.actualPort != null ? ` (port ${params.actualPort})` : "";
311
+ return `Supabase is not running for this repo${portInfo}: port is already used by another process. Skipping db sync. Stop the conflicting process or run with '--skip-db'.`;
312
+ }
313
+ return "Supabase is not running for this repo. Skipping db sync. Start it with 'supabase start'.";
314
+ }
315
+ function resolveSupabaseSkipWarning(input, repoRoot) {
316
+ if (input.supabaseRunning === false) {
317
+ return "Supabase is not running for this repo. Skipping db sync. Start it with 'supabase start'.";
318
+ }
319
+ if (input.supabaseRunning === true) {
320
+ return null;
321
+ }
322
+ const supabaseStatus = checkSupabaseStatus(repoRoot);
323
+ if (supabaseStatus.running) {
324
+ return null;
325
+ }
326
+ return buildSupabaseSkipWarning({
327
+ portInUse: supabaseStatus.portInUse,
328
+ actualPort: supabaseStatus.actualPort,
329
+ conflictingProject: supabaseStatus.conflictingProject
330
+ });
331
+ }
332
+ function isDatabaseUnavailableError(errorLower) {
333
+ const isConnectionError = errorLower.includes("econnrefused") || errorLower.includes("connection refused") || errorLower.includes("database system is not accepting connections") || errorLower.includes("could not connect to server") || errorLower.includes("connection timed out") || errorLower.includes("no pg_hba.conf entry");
334
+ const isMissingEnvVar = errorLower.includes("database_url") && (errorLower.includes("not set") || errorLower.includes("undefined") || errorLower.includes("missing"));
335
+ const isSupabaseNotRunning = errorLower.includes("supabase is not running") || errorLower.includes("supabase start") || errorLower.includes("supabase db is not running");
336
+ return isConnectionError || isMissingEnvVar || isSupabaseNotRunning;
337
+ }
338
+ var dbSyncActor = fromPromise(
339
+ async ({ input }) => {
340
+ const { repoRoot, tmpDir, env = process.env } = input;
341
+ const startTime = Date.now();
342
+ const timeoutMs = resolveBuildDbSyncTimeoutMs(env);
343
+ try {
344
+ const supabaseSkipWarning = resolveSupabaseSkipWarning(input, repoRoot);
345
+ if (supabaseSkipWarning) {
346
+ return {
347
+ passed: true,
348
+ durationMs: Date.now() - startTime,
349
+ warning: supabaseSkipWarning
350
+ };
351
+ }
352
+ const fullTmpDir = path6.join(repoRoot, tmpDir);
353
+ await mkdir(fullTmpDir, { recursive: true });
354
+ await runLogged({
355
+ cwd: repoRoot,
356
+ env,
357
+ label: "db-sync",
358
+ command: "pnpm",
359
+ args: ["exec", "runa", "db", "sync", "--auto-approve"],
360
+ logFile: path6.join(fullTmpDir, "db-sync.log"),
361
+ timeoutMs
362
+ });
363
+ return {
364
+ passed: true,
365
+ durationMs: Date.now() - startTime
366
+ };
367
+ } catch (error) {
368
+ const errorMessage = error instanceof Error ? error.message : String(error);
369
+ const errorLower = errorMessage.toLowerCase();
370
+ if (isTimeoutError(error)) {
371
+ return {
372
+ passed: true,
373
+ // Non-blocking - timeout should not block build
374
+ durationMs: Date.now() - startTime,
375
+ warning: `Database sync timed out after ${timeoutMs}ms. Skipping db sync. Run 'runa db sync --auto-approve' manually when database is ready.`
376
+ };
377
+ }
378
+ if (isDatabaseUnavailableError(errorLower)) {
379
+ return {
380
+ passed: true,
381
+ // Non-blocking - treat as warning (DB not available is expected in some workflows)
382
+ durationMs: Date.now() - startTime,
383
+ warning: "Database not available. Skipping db sync. Run `runa db sync` manually when database is ready."
384
+ };
385
+ }
386
+ return {
387
+ passed: false,
388
+ durationMs: Date.now() - startTime,
389
+ error: errorMessage
390
+ };
391
+ }
392
+ }
393
+ );
394
+
395
+ // src/commands/build/actors/manifest.ts
396
+ init_esm_shims();
397
+ var manifestActor = fromPromise(
398
+ async ({ input }) => {
399
+ const { repoRoot, tmpDir, env = process.env } = input;
400
+ const startTime = Date.now();
401
+ try {
402
+ const fullTmpDir = path6.join(repoRoot, tmpDir);
403
+ await mkdir(fullTmpDir, { recursive: true });
404
+ await runLogged({
405
+ cwd: repoRoot,
406
+ env,
407
+ label: "manifest",
408
+ command: "pnpm",
409
+ args: ["exec", "runa", "manifest"],
410
+ logFile: path6.join(fullTmpDir, "manifest.log")
411
+ });
412
+ return {
413
+ passed: true,
414
+ durationMs: Date.now() - startTime
415
+ };
416
+ } catch (error) {
417
+ const errorMessage = error instanceof Error ? error.message : String(error);
418
+ return {
419
+ passed: false,
420
+ durationMs: Date.now() - startTime,
421
+ error: `Manifest generation failed: ${errorMessage}. Run 'runa manifest --verbose' for details.`
422
+ };
423
+ }
424
+ }
425
+ );
426
+
427
+ // src/commands/build/actors/static-checks.ts
428
+ init_esm_shims();
429
+ function getCommand(hasTurbo, task) {
430
+ return hasTurbo ? { command: "pnpm", args: ["turbo", "run", task] } : { command: "pnpm", args: [task] };
431
+ }
432
+ function parseCombinedTurboFailure(errorMessage) {
433
+ const normalized = errorMessage.toLowerCase();
434
+ const typeCheckFailed = normalized.includes("#type-check") || normalized.includes(" type-check ") || normalized.includes("type-check exited");
435
+ const lintFailed = normalized.includes("#lint") || normalized.includes(" lint ") || normalized.includes("lint exited");
436
+ if (!typeCheckFailed && !lintFailed) {
437
+ return { typeCheckPassed: false, lintPassed: false };
438
+ }
439
+ return {
440
+ typeCheckPassed: !typeCheckFailed,
441
+ lintPassed: !lintFailed
442
+ };
443
+ }
444
+ function buildOutput(typeCheckPassed, lintPassed, typeCheckDurationMs, lintDurationMs, errors) {
445
+ const passed = errors.length === 0;
446
+ return {
447
+ passed,
448
+ typeCheckPassed,
449
+ lintPassed,
450
+ typeCheckDurationMs,
451
+ lintDurationMs,
452
+ ...passed ? {} : { error: errors.join("; ") }
453
+ };
454
+ }
455
+ function toErrorMessage(error) {
456
+ return error instanceof Error ? error.message : String(error);
457
+ }
458
+ async function runTurboStaticChecksIfApplicable(params) {
459
+ if (!params.hasTurbo || params.skipTypes || params.skipLint) {
460
+ return null;
461
+ }
462
+ try {
463
+ await runLogged({
464
+ cwd: params.repoRoot,
465
+ env: params.env,
466
+ label: "static-checks",
467
+ command: "pnpm",
468
+ args: ["turbo", "run", "type-check", "lint"],
469
+ logFile: path6.join(params.fullTmpDir, "static-checks.log")
470
+ });
471
+ const durationMs = Date.now() - params.startTime;
472
+ return buildOutput(true, true, durationMs, durationMs, []);
473
+ } catch (error) {
474
+ const durationMs = Date.now() - params.startTime;
475
+ const errorMessage = toErrorMessage(error);
476
+ const parsed = parseCombinedTurboFailure(errorMessage);
477
+ return buildOutput(parsed.typeCheckPassed, parsed.lintPassed, durationMs, durationMs, [
478
+ `Static checks failed: ${errorMessage}`
479
+ ]);
480
+ }
481
+ }
482
+ async function runSingleStaticCheck(params) {
483
+ const cmd = getCommand(params.hasTurbo, params.task);
484
+ try {
485
+ await runLogged({
486
+ cwd: params.repoRoot,
487
+ env: params.env,
488
+ label: params.label,
489
+ command: cmd.command,
490
+ args: cmd.args,
491
+ logFile: path6.join(params.fullTmpDir, `${params.label}.log`)
492
+ });
493
+ return { passed: true };
494
+ } catch (error) {
495
+ return { passed: false, error: toErrorMessage(error) };
496
+ }
497
+ }
498
+ var staticChecksActor = fromPromise(
499
+ async ({ input }) => {
500
+ const { repoRoot, tmpDir, hasTurbo, env = process.env, skipTypes, skipLint } = input;
501
+ const fullTmpDir = path6.join(repoRoot, tmpDir);
502
+ await mkdir(fullTmpDir, { recursive: true });
503
+ const startTime = Date.now();
504
+ const turboOutput = await runTurboStaticChecksIfApplicable({
505
+ repoRoot,
506
+ env,
507
+ fullTmpDir,
508
+ startTime,
509
+ hasTurbo,
510
+ skipTypes,
511
+ skipLint
512
+ });
513
+ if (turboOutput) {
514
+ return turboOutput;
515
+ }
516
+ let typeCheckPassed = true;
517
+ let lintPassed = true;
518
+ const errors = [];
519
+ if (!skipTypes) {
520
+ const result = await runSingleStaticCheck({
521
+ repoRoot,
522
+ env,
523
+ fullTmpDir,
524
+ hasTurbo,
525
+ task: "type-check",
526
+ label: "type-check"
527
+ });
528
+ if (!result.passed) {
529
+ typeCheckPassed = false;
530
+ errors.push(`Type check failed: ${result.error}`);
531
+ }
532
+ }
533
+ if (!skipLint) {
534
+ const result = await runSingleStaticCheck({
535
+ repoRoot,
536
+ env,
537
+ fullTmpDir,
538
+ hasTurbo,
539
+ task: "lint",
540
+ label: "lint"
541
+ });
542
+ if (!result.passed) {
543
+ lintPassed = false;
544
+ errors.push(`Lint failed: ${result.error}`);
545
+ }
546
+ }
547
+ const durationMs = Date.now() - startTime;
548
+ return buildOutput(
549
+ skipTypes ? true : typeCheckPassed,
550
+ skipLint ? true : lintPassed,
551
+ skipTypes ? 0 : durationMs,
552
+ skipLint ? 0 : durationMs,
553
+ errors
554
+ );
555
+ }
556
+ );
557
+
558
+ // src/commands/build/actors/validate.ts
559
+ init_esm_shims();
560
+ var validateActor = fromPromise(
561
+ async ({ input }) => {
562
+ const { repoRoot, skipManifest } = input;
563
+ const warnings = [];
564
+ let buildOutputsExist = false;
565
+ let manifestsExist = true;
566
+ const buildOutputPaths = [
567
+ // Single app
568
+ path6.join(repoRoot, ".next"),
569
+ path6.join(repoRoot, "dist"),
570
+ // Monorepo apps
571
+ path6.join(repoRoot, "apps", "web", ".next"),
572
+ path6.join(repoRoot, "apps", "dashboard", ".next"),
573
+ // Packages
574
+ path6.join(repoRoot, "packages", "cli", "dist"),
575
+ path6.join(repoRoot, "packages", "sdk", "dist")
576
+ ];
577
+ for (const outputPath of buildOutputPaths) {
578
+ if (existsSync(outputPath)) {
579
+ buildOutputsExist = true;
580
+ break;
581
+ }
582
+ }
583
+ if (!buildOutputsExist) {
584
+ warnings.push(
585
+ "No build outputs found. Build may have failed or project structure is non-standard."
586
+ );
587
+ }
588
+ if (!skipManifest) {
589
+ const manifestPath = path6.join(repoRoot, ".runa", "manifests", "manifest.json");
590
+ if (!existsSync(manifestPath)) {
591
+ manifestsExist = false;
592
+ warnings.push("No manifest.json found. E2E test generation may be affected.");
593
+ }
594
+ }
595
+ return {
596
+ passed: true,
597
+ // Validation is always "passed" - it just reports warnings
598
+ checks: {
599
+ buildOutputs: buildOutputsExist,
600
+ manifests: manifestsExist
601
+ },
602
+ warnings
603
+ };
604
+ }
605
+ );
606
+
607
+ // src/commands/build/machine-dry-run.ts
608
+ init_esm_shims();
609
+ function getDryRunPhaseStatus(phaseNum, phaseName, config) {
610
+ if (config.shouldRun) {
611
+ return ` ${phaseNum}. ${phaseName}`;
612
+ }
613
+ return ` ${phaseNum}. ${phaseName}: SKIPPED${config.skipReason ? ` (${config.skipReason})` : ""}`;
614
+ }
615
+ function printStaticAnalysisPhase(shouldRunTypes, shouldRunLint) {
616
+ if (shouldRunTypes || shouldRunLint) {
617
+ const checks = [
618
+ ...shouldRunTypes ? ["type-check"] : [],
619
+ ...shouldRunLint ? ["lint"] : []
620
+ ].join(" + ");
621
+ const parallel = shouldRunTypes && shouldRunLint ? " (parallel)" : "";
622
+ console.log(` 3. Static Analysis: ${checks}${parallel}`);
623
+ return;
624
+ }
625
+ console.log(" 3. Static Analysis: SKIPPED (--only)");
626
+ }
627
+ function printDbSyncPhase(context, shouldRunDb) {
628
+ if (context.hasDatabase && !context.input.skipDb && shouldRunDb) {
629
+ console.log(" 5. DB Sync: runa db sync");
630
+ return;
631
+ }
632
+ if (shouldRunDb && !context.hasDatabase) {
633
+ console.log(" 5. DB Sync: SKIPPED (no database configured)");
634
+ return;
635
+ }
636
+ console.log(" 5. DB Sync: SKIPPED (--only)");
637
+ }
638
+ function printManifestPhase(context, shouldRunManifest) {
639
+ if (context.hasManifestTask && !context.input.skipManifest && shouldRunManifest) {
640
+ console.log(" 6. Manifest: runa manifest (bundler-independent)");
641
+ return;
642
+ }
643
+ if (shouldRunManifest && !context.hasManifestTask) {
644
+ console.log(" 6. Manifest: SKIPPED (no manifest task)");
645
+ return;
646
+ }
647
+ console.log(" 6. Manifest: SKIPPED (--only)");
648
+ }
649
+ function printDryRunPhases(context) {
650
+ const only = context.input.only;
651
+ const hasOnly = only && only.length > 0;
652
+ const shouldRunTypes = !hasOnly || only.includes("types");
653
+ const shouldRunLint = !hasOnly || only.includes("lint");
654
+ const shouldRunBuild = !hasOnly || only.includes("build");
655
+ const shouldRunDb = !hasOnly || only.includes("db");
656
+ const shouldRunManifest = !hasOnly || only.includes("manifest");
657
+ if (!context.input.noSetup) {
658
+ console.log(" 0. Auto-Setup: Check deps, env, Supabase");
659
+ }
660
+ if (context.input.clean || context.input.fresh) {
661
+ console.log(" 1. Clean: Delete .next, .turbo, .runa/manifests");
662
+ }
663
+ if (context.input.fresh) {
664
+ console.log(" 2. Fresh: Delete node_modules + pnpm install");
665
+ }
666
+ printStaticAnalysisPhase(shouldRunTypes, shouldRunLint);
667
+ console.log(
668
+ getDryRunPhaseStatus(4, "Build: turbo build", {
669
+ shouldRun: shouldRunBuild,
670
+ skipReason: "--only"
671
+ })
672
+ );
673
+ printDbSyncPhase(context, shouldRunDb);
674
+ printManifestPhase(context, shouldRunManifest);
675
+ console.log(" 7. Validate: Check build outputs");
676
+ }
677
+ function printDryRunConfig(context) {
678
+ const only = context.input.only;
679
+ const hasOnly = only && only.length > 0;
680
+ console.log("\nConfiguration:");
681
+ console.log(` E2E mode: ${context.input.e2e}`);
682
+ console.log(` Auto-setup: ${!context.input.noSetup}`);
683
+ console.log(` Has database: ${context.hasDatabase}`);
684
+ console.log(` Has manifest task: ${context.hasManifestTask}`);
685
+ console.log(` Has turbo: ${context.hasTurbo}`);
686
+ if (hasOnly) {
687
+ console.log(` Only phases: ${only.join(", ")}`);
688
+ }
689
+ }
690
+ function printBuildDryRunPlan(context) {
691
+ const only = context.input.only;
692
+ const hasOnly = only && only.length > 0;
693
+ console.log("\n\u{1F4CB} Dry-run mode: showing what would be done\n");
694
+ if (hasOnly) {
695
+ console.log(`Partial build: only ${only.join(", ")}
696
+ `);
697
+ }
698
+ console.log("Phases to execute:");
699
+ printDryRunPhases(context);
700
+ printDryRunConfig(context);
701
+ }
702
+
703
+ // src/commands/build/machine-e2e-meta.ts
704
+ init_esm_shims();
705
+ var buildMachineE2EMeta = {
706
+ idle: {
707
+ description: "Waiting for START event to begin build workflow",
708
+ severity: "non-critical",
709
+ observables: { log: "Starting build" },
710
+ assertions: ["expect(state).toBe('idle')"],
711
+ nextStates: ["setup", "preClean", "dryRun"]
712
+ },
713
+ dryRun: {
714
+ description: "Show what would be done without executing (--check)",
715
+ severity: "non-critical",
716
+ observables: { log: "Dry-run mode: showing what would be done" },
717
+ assertions: ["expect(log).toContain('Dry-run')"],
718
+ nextStates: ["done"]
719
+ },
720
+ setup: {
721
+ description: "Auto-detect and fix prerequisites (deps, env, Supabase)",
722
+ severity: "blocking",
723
+ observables: {
724
+ log: "Auto-Setup: Check deps, env, Supabase",
725
+ fs: "node_modules installed if needed"
726
+ },
727
+ assertions: ["expect(log).toContain('Auto-Setup')"],
728
+ nextStates: ["preClean", "failed"]
729
+ },
730
+ clean: {
731
+ description: "Delete build caches (.next, .turbo, .runa/manifests)",
732
+ severity: "non-critical",
733
+ observables: {
734
+ log: "Cleaning build caches",
735
+ fs: "Deleted .next, .turbo, .runa/manifests"
736
+ },
737
+ assertions: ["expect(log).toContain('Cleaning')"],
738
+ nextStates: ["staticAnalysis"]
739
+ },
740
+ fresh: {
741
+ description: "Full clean + reinstall node_modules (--fresh)",
742
+ severity: "blocking",
743
+ observables: {
744
+ log: "Fresh install: deleting node_modules",
745
+ fs: "node_modules deleted and reinstalled"
746
+ },
747
+ assertions: ["expect(log).toContain('Fresh install')"],
748
+ nextStates: ["staticAnalysis", "failed"]
749
+ },
750
+ staticAnalysis: {
751
+ description: "Run type-check + lint in parallel",
752
+ severity: "blocking",
753
+ observables: {
754
+ log: "Running type-check and lint",
755
+ exitCode: "pnpm turbo type-check lint"
756
+ },
757
+ assertions: ["expect(log).toContain('type-check')", "expect(log).toContain('lint')"],
758
+ nextStates: ["build", "dbSync", "failed"]
759
+ },
760
+ build: {
761
+ description: "Run turbo build (or pnpm build if no turbo)",
762
+ severity: "blocking",
763
+ observables: {
764
+ log: "Building project",
765
+ fs: ".next/build-manifest.json created"
766
+ },
767
+ assertions: ["expect(log).toContain('build')"],
768
+ nextStates: ["dbSync", "failed"]
769
+ },
770
+ dbSync: {
771
+ description: "Sync database schema (if database exists)",
772
+ severity: "non-critical",
773
+ observables: {
774
+ log: "Syncing database schema",
775
+ db: "Schema applied via pg-schema-diff"
776
+ },
777
+ assertions: ["expect(log).toContain('db-sync').or.toContain('SKIPPED')"],
778
+ nextStates: ["manifest"]
779
+ },
780
+ manifest: {
781
+ description: "Generate XState manifests (if manifest task exists)",
782
+ severity: "non-critical",
783
+ observables: {
784
+ log: "Generating manifests",
785
+ fs: ".runa/manifests/manifest.json created"
786
+ },
787
+ assertions: ["expect(log).toContain('manifest').or.toContain('SKIPPED')"],
788
+ nextStates: ["validate"]
789
+ },
790
+ validate: {
791
+ description: "Validate build outputs (.next, manifests)",
792
+ severity: "non-critical",
793
+ observables: { log: "Validating build outputs" },
794
+ assertions: ["expect(log).toContain('Validating')"],
795
+ nextStates: ["done"]
796
+ },
797
+ done: {
798
+ description: "Build completed successfully",
799
+ severity: "final",
800
+ observables: { log: "Build complete", exitCode: 0 },
801
+ assertions: ["expect(exitCode).toBe(0)", "expect(log).toContain('Build complete')"],
802
+ nextStates: []
803
+ },
804
+ failed: {
805
+ description: "Build failed with error",
806
+ severity: "final",
807
+ observables: { log: "Build failed", exitCode: 1 },
808
+ assertions: ["expect(exitCode).toBe(1)", "expect(log).toContain('Build failed')"],
809
+ nextStates: []
810
+ }
811
+ };
812
+
813
+ // src/commands/build/types.ts
814
+ init_esm_shims();
815
+ function hasBlockingFailure(context) {
816
+ const blockingPhases = ["depsInstall", "typeCheck", "lint", "build"];
817
+ return blockingPhases.some((phase) => context.phases[phase]?.status === "failed");
818
+ }
819
+ function toOutputPhases(context) {
820
+ return {
821
+ depsInstall: context.phases.depsInstall ?? void 0,
822
+ envCheck: context.phases.envCheck ?? void 0,
823
+ supabaseStart: context.phases.supabaseStart ?? void 0,
824
+ clean: context.phases.clean ?? void 0,
825
+ fresh: context.phases.fresh ?? void 0,
826
+ typeCheck: context.phases.typeCheck ?? { status: "skipped", durationMs: 0 },
827
+ lint: context.phases.lint ?? { status: "skipped", durationMs: 0 },
828
+ build: context.phases.build ?? { status: "skipped", durationMs: 0 },
829
+ dbSync: context.phases.dbSync ?? void 0,
830
+ manifest: context.phases.manifest ?? void 0,
831
+ validate: context.phases.validate ?? { status: "skipped", durationMs: 0 }
832
+ };
833
+ }
834
+ function resolveWarnings(warnings) {
835
+ return warnings.length > 0 ? warnings : void 0;
836
+ }
837
+ function createOutput(context) {
838
+ const durationMs = Date.now() - context.startTime;
839
+ const blockingFailure = hasBlockingFailure(context);
840
+ const hasFatalError = Boolean(context.error);
841
+ return {
842
+ success: !hasFatalError && !blockingFailure,
843
+ exitCode: hasFatalError || blockingFailure ? 1 : 0,
844
+ phases: toOutputPhases(context),
845
+ durationMs,
846
+ error: context.error ?? void 0,
847
+ warnings: resolveWarnings(context.warnings)
848
+ };
849
+ }
850
+ function createPhaseResult(status, durationMs, error) {
851
+ return { status, durationMs, error };
852
+ }
853
+
854
+ // src/commands/build/machine.ts
855
+ function normalizeBuildMachineInput(input) {
856
+ const normalizedInput = BuildInputSchema.parse(input?.input ?? {});
857
+ const repoRoot = input?.repoRoot ?? normalizedInput.targetDir ?? process.cwd();
858
+ return {
859
+ input: normalizedInput,
860
+ repoRoot
861
+ };
862
+ }
863
+ var buildMachine = setup({
864
+ types: {},
865
+ actors: {
866
+ // Setup actors
867
+ depsInstall: depsInstallActor,
868
+ envCheck: envCheckActor,
869
+ supabaseStart: supabaseStartActor,
870
+ // Clean actors
871
+ clean: cleanActor,
872
+ fresh: freshActor,
873
+ // Core build actors
874
+ staticChecks: staticChecksActor,
875
+ build: buildActor,
876
+ dbSync: dbSyncActor,
877
+ manifest: manifestActor,
878
+ validate: validateActor
879
+ },
880
+ guards: {
881
+ shouldClean: guards.shouldClean,
882
+ shouldFresh: guards.shouldFresh,
883
+ shouldSkipTypes: guards.shouldSkipTypes,
884
+ shouldSkipLint: guards.shouldSkipLint,
885
+ shouldSkipBuild: guards.shouldSkipBuild,
886
+ shouldSkipStaticAnalysis: guards.shouldSkipStaticAnalysis,
887
+ shouldSkipDb: guards.shouldSkipDb,
888
+ shouldSkipManifest: guards.shouldSkipManifest,
889
+ shouldSkipSetup: guards.shouldSkipSetup,
890
+ isDryRun: guards.isDryRun
891
+ }
892
+ }).createMachine({
893
+ id: "build",
894
+ initial: "idle",
895
+ context: ({ input }) => {
896
+ const normalizedInput = normalizeBuildMachineInput(input);
897
+ const repoRoot = normalizedInput.repoRoot;
898
+ return {
899
+ input: normalizedInput.input,
900
+ repoRoot,
901
+ tmpDir: ".runa/tmp/build",
902
+ hasDatabase: detectDatabase(repoRoot),
903
+ hasManifestTask: detectManifestTask(repoRoot),
904
+ hasTurbo: detectTurbo(repoRoot),
905
+ supabaseRunning: false,
906
+ phases: {
907
+ // Setup phase
908
+ depsInstall: null,
909
+ envCheck: null,
910
+ supabaseStart: null,
911
+ // Clean phase
912
+ clean: null,
913
+ fresh: null,
914
+ // Core phases
915
+ typeCheck: null,
916
+ lint: null,
917
+ build: null,
918
+ dbSync: null,
919
+ manifest: null,
920
+ validate: null
921
+ },
922
+ startTime: Date.now(),
923
+ error: null,
924
+ warnings: []
925
+ };
926
+ },
927
+ states: {
928
+ // ============================================================
929
+ // Idle State
930
+ // ============================================================
931
+ idle: {
932
+ meta: { e2e: buildMachineE2EMeta.idle },
933
+ on: {
934
+ START: [
935
+ // Dry-run mode: show what would be done
936
+ { guard: "isDryRun", target: "dryRun" },
937
+ // Skip setup if --no-setup
938
+ { guard: "shouldSkipSetup", target: "preClean" },
939
+ // Normal: go to setup first
940
+ { target: "setup" }
941
+ ]
942
+ }
943
+ },
944
+ // ============================================================
945
+ // Dry-run State
946
+ // ============================================================
947
+ dryRun: {
948
+ meta: { e2e: buildMachineE2EMeta.dryRun },
949
+ entry: ({ context }) => printBuildDryRunPlan(context),
950
+ always: { target: "done" }
951
+ },
952
+ // ============================================================
953
+ // Setup Phase (Auto-detect and fix prerequisites)
954
+ // ============================================================
955
+ setup: {
956
+ meta: { e2e: buildMachineE2EMeta.setup },
957
+ initial: "depsInstall",
958
+ states: {
959
+ depsInstall: {
960
+ invoke: {
961
+ src: "depsInstall",
962
+ input: ({ context }) => ({
963
+ repoRoot: context.repoRoot,
964
+ verbose: context.input.verbose
965
+ }),
966
+ onDone: {
967
+ target: "envCheck",
968
+ actions: assign({
969
+ phases: ({ context, event }) => ({
970
+ ...context.phases,
971
+ depsInstall: event.output.needed ? createPhaseResult(
972
+ event.output.installed ? "passed" : "failed",
973
+ event.output.durationMs,
974
+ event.output.error
975
+ ) : createPhaseResult("skipped", event.output.durationMs)
976
+ })
977
+ })
978
+ },
979
+ onError: {
980
+ target: "#build.failed",
981
+ // Blocking - can't build without deps
982
+ actions: assign({
983
+ error: ({ event }) => `Dependencies install failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`,
984
+ phases: ({ context, event }) => ({
985
+ ...context.phases,
986
+ depsInstall: createPhaseResult(
987
+ "failed",
988
+ 0,
989
+ event.error instanceof Error ? event.error.message : String(event.error)
990
+ )
991
+ })
992
+ })
993
+ }
994
+ }
995
+ },
996
+ envCheck: {
997
+ invoke: {
998
+ src: "envCheck",
999
+ input: ({ context }) => ({
1000
+ repoRoot: context.repoRoot,
1001
+ verbose: context.input.verbose
1002
+ }),
1003
+ onDone: {
1004
+ target: "supabaseStart",
1005
+ actions: assign({
1006
+ phases: ({ context, event }) => ({
1007
+ ...context.phases,
1008
+ envCheck: createPhaseResult(event.output.configured ? "passed" : "skipped", 0)
1009
+ }),
1010
+ warnings: ({ context, event }) => event.output.warning ? [...context.warnings, event.output.warning] : context.warnings
1011
+ })
1012
+ },
1013
+ onError: {
1014
+ target: "supabaseStart",
1015
+ // Non-blocking
1016
+ actions: assign({
1017
+ phases: ({ context }) => ({
1018
+ ...context.phases,
1019
+ envCheck: createPhaseResult("skipped", 0)
1020
+ })
1021
+ })
1022
+ }
1023
+ }
1024
+ },
1025
+ supabaseStart: {
1026
+ invoke: {
1027
+ src: "supabaseStart",
1028
+ input: ({ context }) => ({
1029
+ repoRoot: context.repoRoot,
1030
+ verbose: context.input.verbose
1031
+ }),
1032
+ onDone: {
1033
+ target: "done",
1034
+ actions: assign({
1035
+ phases: ({ context, event }) => ({
1036
+ ...context.phases,
1037
+ supabaseStart: event.output.needed ? createPhaseResult(
1038
+ event.output.started || event.output.alreadyRunning ? "passed" : "skipped",
1039
+ 0
1040
+ ) : createPhaseResult("skipped", 0)
1041
+ }),
1042
+ supabaseRunning: ({ event }) => event.output.started || event.output.alreadyRunning,
1043
+ warnings: ({ context, event }) => event.output.warning ? [...context.warnings, event.output.warning] : context.warnings
1044
+ })
1045
+ },
1046
+ onError: {
1047
+ target: "done",
1048
+ // Non-blocking
1049
+ actions: assign({
1050
+ phases: ({ context, event }) => ({
1051
+ ...context.phases,
1052
+ supabaseStart: createPhaseResult(
1053
+ "skipped",
1054
+ 0,
1055
+ event.error instanceof Error ? event.error.message : String(event.error)
1056
+ )
1057
+ }),
1058
+ warnings: ({ context, event }) => [
1059
+ ...context.warnings,
1060
+ `Supabase start skipped: ${event.error instanceof Error ? event.error.message : String(event.error)}`
1061
+ ]
1062
+ })
1063
+ }
1064
+ }
1065
+ },
1066
+ done: {
1067
+ type: "final"
1068
+ }
1069
+ },
1070
+ onDone: { target: "preClean" }
1071
+ },
1072
+ // ============================================================
1073
+ // Pre-Clean Decision State
1074
+ // ============================================================
1075
+ preClean: {
1076
+ always: [
1077
+ { guard: "shouldFresh", target: "fresh" },
1078
+ { guard: "shouldClean", target: "clean" },
1079
+ // Skip static analysis if --only doesn't include 'types' or 'lint'
1080
+ // If build is also skipped by --only, jump directly to dbSync.
1081
+ {
1082
+ guard: ({ context }) => guards.shouldSkipStaticAnalysis({ context }) && guards.shouldSkipBuild({ context }),
1083
+ target: "dbSync"
1084
+ },
1085
+ { guard: "shouldSkipStaticAnalysis", target: "build" },
1086
+ { target: "staticAnalysis" }
1087
+ ]
1088
+ },
1089
+ // ============================================================
1090
+ // Clean Phase
1091
+ // ============================================================
1092
+ clean: {
1093
+ meta: { e2e: buildMachineE2EMeta.clean },
1094
+ invoke: {
1095
+ src: "clean",
1096
+ input: ({ context }) => ({
1097
+ repoRoot: context.repoRoot,
1098
+ tmpDir: context.tmpDir,
1099
+ verbose: context.input.verbose
1100
+ }),
1101
+ onDone: {
1102
+ target: "staticAnalysis",
1103
+ actions: assign({
1104
+ phases: ({ context, event }) => ({
1105
+ ...context.phases,
1106
+ clean: createPhaseResult(
1107
+ event.output.passed ? "passed" : "failed",
1108
+ 0,
1109
+ event.output.error
1110
+ )
1111
+ }),
1112
+ warnings: ({ context, event }) => event.output.error ? [...context.warnings, `Clean warning: ${event.output.error}`] : context.warnings
1113
+ })
1114
+ },
1115
+ onError: {
1116
+ target: "staticAnalysis",
1117
+ // Non-blocking
1118
+ actions: assign({
1119
+ phases: ({ context, event }) => ({
1120
+ ...context.phases,
1121
+ clean: createPhaseResult(
1122
+ "failed",
1123
+ 0,
1124
+ event.error instanceof Error ? event.error.message : String(event.error)
1125
+ )
1126
+ }),
1127
+ warnings: ({ context, event }) => [
1128
+ ...context.warnings,
1129
+ `Clean failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
1130
+ ]
1131
+ })
1132
+ }
1133
+ }
1134
+ },
1135
+ // ============================================================
1136
+ // Fresh Phase
1137
+ // ============================================================
1138
+ fresh: {
1139
+ meta: { e2e: buildMachineE2EMeta.fresh },
1140
+ invoke: {
1141
+ src: "fresh",
1142
+ input: ({ context }) => ({
1143
+ repoRoot: context.repoRoot,
1144
+ tmpDir: context.tmpDir,
1145
+ verbose: context.input.verbose
1146
+ }),
1147
+ onDone: {
1148
+ target: "staticAnalysis",
1149
+ actions: assign({
1150
+ phases: ({ context, event }) => ({
1151
+ ...context.phases,
1152
+ fresh: createPhaseResult(
1153
+ event.output.passed ? "passed" : "failed",
1154
+ 0,
1155
+ event.output.error
1156
+ )
1157
+ })
1158
+ })
1159
+ },
1160
+ onError: {
1161
+ target: "failed",
1162
+ // Blocking
1163
+ actions: assign({
1164
+ error: ({ event }) => `Fresh install failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`,
1165
+ phases: ({ context, event }) => ({
1166
+ ...context.phases,
1167
+ fresh: createPhaseResult(
1168
+ "failed",
1169
+ 0,
1170
+ event.error instanceof Error ? event.error.message : String(event.error)
1171
+ )
1172
+ })
1173
+ })
1174
+ }
1175
+ }
1176
+ },
1177
+ // ============================================================
1178
+ // Static Analysis Phase
1179
+ // ============================================================
1180
+ staticAnalysis: {
1181
+ meta: { e2e: buildMachineE2EMeta.staticAnalysis },
1182
+ invoke: {
1183
+ src: "staticChecks",
1184
+ input: ({ context }) => ({
1185
+ repoRoot: context.repoRoot,
1186
+ tmpDir: context.tmpDir,
1187
+ hasTurbo: context.hasTurbo,
1188
+ // Pass skip flags for --only option
1189
+ skipTypes: guards.shouldSkipTypes({ context }),
1190
+ skipLint: guards.shouldSkipLint({ context })
1191
+ }),
1192
+ onDone: [
1193
+ {
1194
+ guard: ({ event }) => !event.output.passed,
1195
+ target: "failed",
1196
+ actions: assign({
1197
+ error: ({ event }) => event.output.error ?? "Static analysis failed",
1198
+ phases: ({ context, event }) => ({
1199
+ ...context.phases,
1200
+ typeCheck: createPhaseResult(
1201
+ event.output.typeCheckPassed ? "passed" : "failed",
1202
+ event.output.typeCheckDurationMs ?? 0
1203
+ ),
1204
+ lint: createPhaseResult(
1205
+ event.output.lintPassed ? "passed" : "failed",
1206
+ event.output.lintDurationMs ?? 0
1207
+ )
1208
+ })
1209
+ })
1210
+ },
1211
+ // Skip build if --only doesn't include 'build'
1212
+ {
1213
+ guard: "shouldSkipBuild",
1214
+ target: "dbSync",
1215
+ actions: assign({
1216
+ phases: ({ context, event }) => ({
1217
+ ...context.phases,
1218
+ typeCheck: createPhaseResult(
1219
+ guards.shouldSkipTypes({ context }) ? "skipped" : "passed",
1220
+ event.output.typeCheckDurationMs ?? 0
1221
+ ),
1222
+ lint: createPhaseResult(
1223
+ guards.shouldSkipLint({ context }) ? "skipped" : "passed",
1224
+ event.output.lintDurationMs ?? 0
1225
+ ),
1226
+ build: createPhaseResult("skipped", 0)
1227
+ })
1228
+ })
1229
+ },
1230
+ {
1231
+ target: "build",
1232
+ actions: assign({
1233
+ phases: ({ context, event }) => ({
1234
+ ...context.phases,
1235
+ typeCheck: createPhaseResult(
1236
+ guards.shouldSkipTypes({ context }) ? "skipped" : "passed",
1237
+ event.output.typeCheckDurationMs ?? 0
1238
+ ),
1239
+ lint: createPhaseResult(
1240
+ guards.shouldSkipLint({ context }) ? "skipped" : "passed",
1241
+ event.output.lintDurationMs ?? 0
1242
+ )
1243
+ })
1244
+ })
1245
+ }
1246
+ ],
1247
+ onError: {
1248
+ target: "failed",
1249
+ actions: assign({
1250
+ error: ({ event }) => `Static analysis failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`,
1251
+ phases: ({ context, event }) => ({
1252
+ ...context.phases,
1253
+ typeCheck: createPhaseResult(
1254
+ "failed",
1255
+ 0,
1256
+ event.error instanceof Error ? event.error.message : String(event.error)
1257
+ ),
1258
+ lint: createPhaseResult("skipped", 0)
1259
+ })
1260
+ })
1261
+ }
1262
+ }
1263
+ },
1264
+ // ============================================================
1265
+ // Build Phase
1266
+ // ============================================================
1267
+ build: {
1268
+ meta: { e2e: buildMachineE2EMeta.build },
1269
+ invoke: {
1270
+ src: "build",
1271
+ input: ({ context }) => ({
1272
+ repoRoot: context.repoRoot,
1273
+ tmpDir: context.tmpDir,
1274
+ hasTurbo: context.hasTurbo,
1275
+ e2e: context.input.e2e
1276
+ }),
1277
+ onDone: [
1278
+ {
1279
+ guard: ({ event }) => !event.output.passed,
1280
+ target: "failed",
1281
+ actions: assign({
1282
+ error: ({ event }) => event.output.error ?? "Build failed",
1283
+ phases: ({ context, event }) => ({
1284
+ ...context.phases,
1285
+ build: createPhaseResult("failed", event.output.durationMs, event.output.error)
1286
+ })
1287
+ })
1288
+ },
1289
+ {
1290
+ target: "dbSync",
1291
+ actions: assign({
1292
+ phases: ({ context, event }) => ({
1293
+ ...context.phases,
1294
+ build: createPhaseResult("passed", event.output.durationMs)
1295
+ })
1296
+ })
1297
+ }
1298
+ ],
1299
+ onError: {
1300
+ target: "failed",
1301
+ actions: assign({
1302
+ error: ({ event }) => `Build failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`,
1303
+ phases: ({ context, event }) => ({
1304
+ ...context.phases,
1305
+ build: createPhaseResult(
1306
+ "failed",
1307
+ 0,
1308
+ event.error instanceof Error ? event.error.message : String(event.error)
1309
+ )
1310
+ })
1311
+ })
1312
+ }
1313
+ }
1314
+ },
1315
+ // ============================================================
1316
+ // DB Sync Phase
1317
+ // ============================================================
1318
+ dbSync: {
1319
+ meta: { e2e: buildMachineE2EMeta.dbSync },
1320
+ always: [{ guard: "shouldSkipDb", target: "manifest" }],
1321
+ invoke: {
1322
+ src: "dbSync",
1323
+ input: ({ context }) => ({
1324
+ repoRoot: context.repoRoot,
1325
+ tmpDir: context.tmpDir,
1326
+ supabaseRunning: context.supabaseRunning
1327
+ }),
1328
+ onDone: {
1329
+ target: "manifest",
1330
+ actions: assign({
1331
+ phases: ({ context, event }) => ({
1332
+ ...context.phases,
1333
+ dbSync: createPhaseResult(
1334
+ event.output.passed ? "passed" : "failed",
1335
+ event.output.durationMs,
1336
+ event.output.error
1337
+ )
1338
+ }),
1339
+ warnings: ({ context, event }) => {
1340
+ const newWarnings = [...context.warnings];
1341
+ if (event.output.warning) {
1342
+ const normalizedWarning = event.output.warning.toLowerCase();
1343
+ const hasSupabaseSetupWarning = context.warnings.some(
1344
+ (warning) => warning.toLowerCase().includes("supabase start skipped")
1345
+ );
1346
+ const isSupabaseNotRunningWarning = normalizedWarning.includes(
1347
+ "supabase is not running for this repo"
1348
+ );
1349
+ const shouldSkipSupabaseDuplicate = hasSupabaseSetupWarning && isSupabaseNotRunningWarning;
1350
+ if (!shouldSkipSupabaseDuplicate && !newWarnings.includes(event.output.warning)) {
1351
+ newWarnings.push(event.output.warning);
1352
+ }
1353
+ }
1354
+ if (!event.output.passed && event.output.error) {
1355
+ const dbSyncErrorWarning = `DB sync failed: ${event.output.error}`;
1356
+ if (!newWarnings.includes(dbSyncErrorWarning)) {
1357
+ newWarnings.push(dbSyncErrorWarning);
1358
+ }
1359
+ }
1360
+ return newWarnings;
1361
+ }
1362
+ })
1363
+ },
1364
+ onError: {
1365
+ target: "manifest",
1366
+ // Non-blocking
1367
+ actions: assign({
1368
+ phases: ({ context, event }) => ({
1369
+ ...context.phases,
1370
+ dbSync: createPhaseResult(
1371
+ "failed",
1372
+ 0,
1373
+ event.error instanceof Error ? event.error.message : String(event.error)
1374
+ )
1375
+ }),
1376
+ warnings: ({ context, event }) => [
1377
+ ...context.warnings,
1378
+ `DB sync failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
1379
+ ]
1380
+ })
1381
+ }
1382
+ }
1383
+ },
1384
+ // ============================================================
1385
+ // Manifest Phase
1386
+ // ============================================================
1387
+ manifest: {
1388
+ meta: { e2e: buildMachineE2EMeta.manifest },
1389
+ always: [{ guard: "shouldSkipManifest", target: "validate" }],
1390
+ invoke: {
1391
+ src: "manifest",
1392
+ input: ({ context }) => ({
1393
+ repoRoot: context.repoRoot,
1394
+ tmpDir: context.tmpDir
1395
+ }),
1396
+ onDone: {
1397
+ target: "validate",
1398
+ actions: assign({
1399
+ phases: ({ context, event }) => ({
1400
+ ...context.phases,
1401
+ manifest: createPhaseResult(
1402
+ event.output.passed ? "passed" : "failed",
1403
+ event.output.durationMs,
1404
+ event.output.error
1405
+ )
1406
+ }),
1407
+ warnings: ({ context, event }) => event.output.warning ? [...context.warnings, event.output.warning] : context.warnings
1408
+ })
1409
+ },
1410
+ onError: {
1411
+ target: "validate",
1412
+ // Non-blocking
1413
+ actions: assign({
1414
+ phases: ({ context, event }) => ({
1415
+ ...context.phases,
1416
+ manifest: createPhaseResult(
1417
+ "failed",
1418
+ 0,
1419
+ event.error instanceof Error ? event.error.message : String(event.error)
1420
+ )
1421
+ }),
1422
+ warnings: ({ context, event }) => [
1423
+ ...context.warnings,
1424
+ `Manifest generation failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
1425
+ ]
1426
+ })
1427
+ }
1428
+ }
1429
+ },
1430
+ // ============================================================
1431
+ // Validate Phase
1432
+ // ============================================================
1433
+ validate: {
1434
+ meta: { e2e: buildMachineE2EMeta.validate },
1435
+ invoke: {
1436
+ src: "validate",
1437
+ input: ({ context }) => ({
1438
+ repoRoot: context.repoRoot,
1439
+ skipManifest: context.input.skipManifest || !context.hasManifestTask
1440
+ }),
1441
+ onDone: {
1442
+ target: "done",
1443
+ actions: assign({
1444
+ phases: ({ context }) => ({
1445
+ ...context.phases,
1446
+ validate: createPhaseResult("passed", 0)
1447
+ }),
1448
+ warnings: ({ context, event }) => [...context.warnings, ...event.output.warnings]
1449
+ })
1450
+ },
1451
+ onError: {
1452
+ target: "done",
1453
+ // Non-blocking
1454
+ actions: assign({
1455
+ phases: ({ context, event }) => ({
1456
+ ...context.phases,
1457
+ validate: createPhaseResult(
1458
+ "failed",
1459
+ 0,
1460
+ event.error instanceof Error ? event.error.message : String(event.error)
1461
+ )
1462
+ }),
1463
+ warnings: ({ context, event }) => [
1464
+ ...context.warnings,
1465
+ `Validation failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
1466
+ ]
1467
+ })
1468
+ }
1469
+ }
1470
+ },
1471
+ // ============================================================
1472
+ // Final States
1473
+ // ============================================================
1474
+ done: {
1475
+ meta: { e2e: buildMachineE2EMeta.done },
1476
+ type: "final"
1477
+ },
1478
+ failed: {
1479
+ meta: { e2e: buildMachineE2EMeta.failed },
1480
+ type: "final"
1481
+ }
1482
+ },
1483
+ output: ({ context }) => createOutput(context)
1484
+ });
1485
+ function getStateName(snapshot) {
1486
+ return getSnapshotStateName(snapshot);
1487
+ }
1488
+ function isComplete(snapshot) {
1489
+ return isSnapshotComplete(snapshot);
1490
+ }
1491
+
1492
+ // src/commands/build/commands/build.ts
1493
+ function parseOnlyOption(only) {
1494
+ if (!only) return void 0;
1495
+ const phases = only.split(",").map((p) => p.trim().toLowerCase());
1496
+ const valid = [];
1497
+ const invalid = [];
1498
+ for (const phase of phases) {
1499
+ if (VALID_BUILD_PHASES.includes(phase)) {
1500
+ valid.push(phase);
1501
+ } else {
1502
+ invalid.push(phase);
1503
+ }
1504
+ }
1505
+ if (invalid.length > 0) {
1506
+ throw new CLIError(`Invalid phases: ${invalid.join(", ")}`, "INVALID_PHASES", [
1507
+ `Valid phases: ${VALID_BUILD_PHASES.join(", ")}`
1508
+ ]);
1509
+ }
1510
+ return valid.length > 0 ? valid : void 0;
1511
+ }
1512
+ var stateLogHandlers = {
1513
+ idle: (logger) => {
1514
+ logger.section("Build");
1515
+ logger.info("Starting smart build...");
1516
+ },
1517
+ dryRun: (_logger) => {
1518
+ },
1519
+ // Setup phase (auto-detect and fix prerequisites)
1520
+ setup: (logger) => {
1521
+ logger.section("Phase 0: Auto-Setup");
1522
+ logger.info("Checking environment prerequisites...");
1523
+ },
1524
+ "setup.depsInstall": (logger) => {
1525
+ logger.info(" Checking dependencies...");
1526
+ },
1527
+ "setup.envCheck": (logger) => {
1528
+ logger.info(" Checking environment variables...");
1529
+ },
1530
+ "setup.supabaseStart": (logger) => {
1531
+ logger.info(" Checking Supabase...");
1532
+ },
1533
+ preClean: (_logger) => {
1534
+ },
1535
+ clean: (logger) => {
1536
+ logger.section("Phase 1: Clean");
1537
+ logger.info("Cleaning build caches...");
1538
+ },
1539
+ fresh: (logger) => {
1540
+ logger.section("Phase 1: Fresh Install");
1541
+ logger.info("Cleaning all caches and reinstalling dependencies...");
1542
+ },
1543
+ staticAnalysis: (logger) => {
1544
+ logger.section("Phase 2: Static Analysis");
1545
+ logger.info("Running type-check and lint in parallel...");
1546
+ },
1547
+ build: (logger) => {
1548
+ logger.section("Phase 3: Build");
1549
+ logger.info("Building project...");
1550
+ },
1551
+ dbSync: (logger) => {
1552
+ logger.section("Phase 4: Database Sync");
1553
+ logger.info("Syncing database schema and generating types...");
1554
+ },
1555
+ manifest: (logger) => {
1556
+ logger.section("Phase 5: Manifest Generation");
1557
+ logger.info("Generating manifests for E2E tests...");
1558
+ },
1559
+ validate: (logger) => {
1560
+ logger.section("Phase 6: Validation");
1561
+ logger.info("Validating build outputs...");
1562
+ }
1563
+ };
1564
+ function handleStateChange(snapshot, prevState, logger) {
1565
+ const state = getStateName(snapshot);
1566
+ if (state === prevState) return;
1567
+ const handler = stateLogHandlers[state] ?? stateLogHandlers[state.split(".")[0]];
1568
+ if (handler) {
1569
+ handler(logger);
1570
+ }
1571
+ }
1572
+ function formatDuration(ms) {
1573
+ if (ms < 1e3) return `${ms}ms`;
1574
+ const seconds = Math.floor(ms / 1e3);
1575
+ const minutes = Math.floor(seconds / 60);
1576
+ if (minutes > 0) {
1577
+ const remainingSeconds = seconds % 60;
1578
+ return `${minutes}m ${remainingSeconds}s`;
1579
+ }
1580
+ return `${seconds}s`;
1581
+ }
1582
+ function getPhaseIcon(status) {
1583
+ if (status === "passed") return "\u2705";
1584
+ if (status === "failed") return "\u274C";
1585
+ return "\u23ED\uFE0F";
1586
+ }
1587
+ function printPhaseResults(logger, phases) {
1588
+ for (const { name, result } of phases) {
1589
+ if (!result) continue;
1590
+ const icon = getPhaseIcon(result.status);
1591
+ const duration = result.durationMs > 0 ? ` (${formatDuration(result.durationMs)})` : "";
1592
+ logger.info(` ${name}: ${icon} ${result.status.toUpperCase()}${duration}`);
1593
+ }
1594
+ }
1595
+ function printWarnings(logger, warnings) {
1596
+ if (!warnings || warnings.length === 0) return;
1597
+ logger.info("");
1598
+ logger.warn("Warnings:");
1599
+ for (const warning of warnings) {
1600
+ logger.warn(` \u26A0\uFE0F ${warning}`);
1601
+ }
1602
+ }
1603
+ function printSummary(logger, output) {
1604
+ logger.section("Summary");
1605
+ const phases = [
1606
+ { name: "Deps Install", result: output.phases.depsInstall },
1607
+ { name: "Env Check", result: output.phases.envCheck },
1608
+ { name: "Supabase", result: output.phases.supabaseStart },
1609
+ { name: "Clean", result: output.phases.clean },
1610
+ { name: "Fresh", result: output.phases.fresh },
1611
+ { name: "Type Check", result: output.phases.typeCheck },
1612
+ { name: "Lint", result: output.phases.lint },
1613
+ { name: "Build", result: output.phases.build },
1614
+ { name: "DB Sync", result: output.phases.dbSync },
1615
+ { name: "Manifest", result: output.phases.manifest },
1616
+ { name: "Validate", result: output.phases.validate }
1617
+ ];
1618
+ printPhaseResults(logger, phases);
1619
+ printWarnings(logger, output.warnings);
1620
+ logger.info("");
1621
+ logger.info(`Total time: ${formatDuration(output.durationMs)}`);
1622
+ if (output.success) {
1623
+ const hasWarnings = output.warnings && output.warnings.length > 0;
1624
+ if (hasWarnings) {
1625
+ logger.success("Build completed with warnings.");
1626
+ } else {
1627
+ logger.success("Build completed successfully!");
1628
+ }
1629
+ } else {
1630
+ logger.error(`Build failed: ${output.error}`);
1631
+ }
1632
+ }
1633
+ function findRepoRoot(startDir) {
1634
+ const { existsSync: existsSync4, readFileSync } = __require("fs");
1635
+ const { join, dirname } = __require("path");
1636
+ let current = startDir;
1637
+ while (current !== dirname(current)) {
1638
+ if (existsSync4(join(current, "turbo.json"))) {
1639
+ return current;
1640
+ }
1641
+ const pkgPath = join(current, "package.json");
1642
+ if (existsSync4(pkgPath)) {
1643
+ try {
1644
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
1645
+ if (pkg.workspaces) {
1646
+ return current;
1647
+ }
1648
+ } catch {
1649
+ }
1650
+ }
1651
+ current = dirname(current);
1652
+ }
1653
+ return startDir;
1654
+ }
1655
+ async function runBuildMachine(input, logger) {
1656
+ const repoRoot = input.targetDir ?? findRepoRoot(process.cwd());
1657
+ return new Promise((resolve, reject) => {
1658
+ const actor = createActor(buildMachine, {
1659
+ input: { input, repoRoot }
1660
+ });
1661
+ let previousState = "";
1662
+ actor.subscribe((snapshot) => {
1663
+ const currentState = getStateName(snapshot);
1664
+ if (currentState !== previousState) {
1665
+ handleStateChange(snapshot, previousState, logger);
1666
+ previousState = currentState;
1667
+ }
1668
+ if (isComplete(snapshot)) {
1669
+ const output = snapshot.output;
1670
+ if (output) {
1671
+ resolve(output);
1672
+ }
1673
+ }
1674
+ });
1675
+ actor.subscribe({
1676
+ error: (error) => {
1677
+ reject(error);
1678
+ actor.stop();
1679
+ }
1680
+ });
1681
+ actor.start();
1682
+ actor.send({ type: "START" });
1683
+ });
1684
+ }
1685
+ async function runBuildAction(options, cmd) {
1686
+ const logger = createCLILogger("build");
1687
+ try {
1688
+ const result = await runBuildMachine(options, logger);
1689
+ printSummary(logger, result);
1690
+ emitJsonSuccess(cmd, BuildOutputSchema, result);
1691
+ if (!result.success) {
1692
+ throw new CLIError(result.error ?? "Build failed", "BUILD_FAILED", [
1693
+ "Run: runa check --verbose (diagnose environment)",
1694
+ "Run: runa db sync (if schema types missing)",
1695
+ "Check logs in .runa/tmp/build/ for details"
1696
+ ]);
1697
+ }
1698
+ } catch (error) {
1699
+ if (error instanceof CLIError) {
1700
+ throw error;
1701
+ }
1702
+ throw new CLIError(
1703
+ error instanceof Error ? error.message : String(error),
1704
+ "BUILD_ERROR",
1705
+ [
1706
+ "Run: runa check --verbose (diagnose environment)",
1707
+ "Check logs in .runa/tmp/build/ for details"
1708
+ ],
1709
+ error instanceof Error ? error : void 0
1710
+ );
1711
+ }
1712
+ }
1713
+ var buildCommand = new Command("build").description("Smart build with auto-setup (like vercel build / next build)").option("--e2e", "Enable E2E mode (test attributes + fresh cache)").option("--clean", "Clear build caches before building").option("--fresh", "Full clean (including node_modules) + reinstall").option("--skip-db", "Skip database sync step").option("--skip-manifest", "Skip manifest generation step").option("--no-setup", "Skip auto-setup phase (deps, env, Supabase)").option("--verbose", "Show detailed output").option("--check", "Dry-run mode (show what would be done)").option("--target-dir <path>", "Target directory (defaults to repo root)").option("--only <phases>", "Only run specific phases (types,lint,build,db,manifest)").action(async (options, cmd) => {
1714
+ const input = {
1715
+ e2e: options.e2e ?? false,
1716
+ clean: options.clean ?? false,
1717
+ fresh: options.fresh ?? false,
1718
+ skipDb: options.skipDb ?? false,
1719
+ skipManifest: options.skipManifest ?? false,
1720
+ verbose: options.verbose ?? false,
1721
+ check: options.check ?? false,
1722
+ noSetup: options.setup === false,
1723
+ // --no-setup sets setup to false
1724
+ targetDir: options.targetDir,
1725
+ only: parseOnlyOption(options.only)
1726
+ };
1727
+ await runBuildAction(input, cmd);
1728
+ });
1729
+
1730
+ export { BuildInputSchema, BuildOutputSchema, buildCommand };