@runa-ai/runa-cli 0.5.72 → 0.7.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 (528) hide show
  1. package/dist/build-V66FAQXB.js +1719 -0
  2. package/dist/cache-N7WNPEYF.js +111 -0
  3. package/dist/check-LOMVIRHX.js +12 -0
  4. package/dist/chunk-2APB25TT.js +442 -0
  5. package/dist/chunk-3FDQW524.js +544 -0
  6. package/dist/chunk-3WDV32GA.js +33 -0
  7. package/dist/chunk-5FT3F36G.js +59 -0
  8. package/dist/chunk-5NKWR4FF.js +254 -0
  9. package/dist/chunk-644FVGIQ.js +194 -0
  10. package/dist/chunk-6AALH2ED.js +121 -0
  11. package/dist/chunk-6FAU4IGR.js +63 -0
  12. package/dist/chunk-6Y3LAUGL.js +35 -0
  13. package/dist/chunk-7B5C6U2K.js +274 -0
  14. package/dist/chunk-AAIE4F2U.js +140 -0
  15. package/dist/chunk-AIP6MR42.js +12 -0
  16. package/dist/chunk-CCKG5R4Y.js +59 -0
  17. package/dist/chunk-DRSUEMAK.js +123 -0
  18. package/dist/chunk-FHG3ILE4.js +2011 -0
  19. package/dist/chunk-H2AHNI75.js +31 -0
  20. package/dist/chunk-HD74F6W2.js +460 -0
  21. package/dist/chunk-HKUWEGUX.js +36 -0
  22. package/dist/chunk-IBVVGH6X.js +33 -0
  23. package/dist/chunk-II7VYQEM.js +179 -0
  24. package/dist/chunk-JMJP4A47.js +204 -0
  25. package/dist/chunk-JQXOVCOP.js +574 -0
  26. package/dist/chunk-KE6QJBZG.js +41 -0
  27. package/dist/chunk-KWX3JHCY.js +85 -0
  28. package/dist/chunk-MXRWBNIY.js +74 -0
  29. package/dist/chunk-NPSRD26F.js +149 -0
  30. package/dist/chunk-QDF7QXBL.js +67 -0
  31. package/dist/chunk-QM53IQHM.js +209 -0
  32. package/dist/chunk-RZLYEO4U.js +219 -0
  33. package/dist/chunk-SGJG3BKD.js +351 -0
  34. package/dist/chunk-TYIAD6SB.js +74 -0
  35. package/dist/chunk-UWWSAPDR.js +31 -0
  36. package/dist/chunk-VM3IWOT5.js +458 -0
  37. package/dist/chunk-VRXHCR5K.js +42 -0
  38. package/dist/chunk-WJXC4MVY.js +75 -0
  39. package/dist/chunk-XDCHRVE3.js +215 -0
  40. package/dist/chunk-Z4Z5DNW4.js +1196 -0
  41. package/dist/chunk-ZZOXM6Q4.js +8 -0
  42. package/dist/ci-ZWRVWNFX.js +9298 -0
  43. package/dist/cli/contract-output.d.ts +1 -0
  44. package/dist/cli/index.d.ts +7 -1
  45. package/dist/cli/requested-command.d.ts +8 -0
  46. package/dist/cli-2JNBJUBB.js +704 -0
  47. package/dist/commands/build/actors/db-sync.d.ts +2 -0
  48. package/dist/commands/build/actors/static-checks.d.ts +7 -6
  49. package/dist/commands/build/actors/validate.d.ts +2 -0
  50. package/dist/commands/build/contract.d.ts +30 -30
  51. package/dist/commands/build/machine-dry-run.d.ts +3 -0
  52. package/dist/commands/build/machine-e2e-meta.d.ts +120 -0
  53. package/dist/commands/build/machine.d.ts +22 -22
  54. package/dist/commands/build/types.d.ts +2 -4
  55. package/dist/commands/check/commands/check.d.ts +8 -3
  56. package/dist/commands/ci/machine/actors/db/collect-schema-stats.d.ts +9 -6
  57. package/dist/commands/ci/machine/actors/db/schema-canonical-diff.d.ts +55 -0
  58. package/dist/commands/ci/machine/actors/db/schema-stats.d.ts +11 -0
  59. package/dist/commands/ci/machine/actors/db/sync-schema.d.ts +9 -1
  60. package/dist/commands/ci/machine/contract.d.ts +26 -26
  61. package/dist/commands/ci/machine/formatters/sections/final-comment.d.ts +1 -5
  62. package/dist/commands/ci/machine/formatters/sections/format-helpers.d.ts +5 -0
  63. package/dist/commands/ci/machine/formatters/sections/index.d.ts +2 -2
  64. package/dist/commands/ci/machine/formatters/sections/schema-matrix.d.ts +3 -3
  65. package/dist/commands/ci/machine/machine-execution-helpers.d.ts +40 -0
  66. package/dist/commands/ci/machine/machine-state-helpers.d.ts +14 -0
  67. package/dist/commands/ci/machine/machine.d.ts +12 -12
  68. package/dist/commands/ci/machine/types.d.ts +2 -5
  69. package/dist/commands/ci/utils/ci-summary.d.ts +15 -15
  70. package/dist/commands/ci/utils/execa-helpers.d.ts +2 -0
  71. package/dist/commands/db/apply/actors/idempotent-actors.d.ts +34 -0
  72. package/dist/commands/db/apply/actors/lock-actors.d.ts +16 -0
  73. package/dist/commands/db/apply/actors/pg-schema-diff-actors.d.ts +31 -0
  74. package/dist/commands/db/apply/actors/seed-actors.d.ts +11 -0
  75. package/dist/commands/db/apply/actors/shared.d.ts +9 -0
  76. package/dist/commands/db/apply/actors.d.ts +16 -65
  77. package/dist/commands/db/apply/contract.d.ts +8 -1
  78. package/dist/commands/db/apply/helpers/data-compatibility-checker.d.ts +3 -4
  79. package/dist/commands/db/apply/helpers/data-integrity-verifier.d.ts +37 -0
  80. package/dist/commands/db/apply/helpers/fresh-db-handler.d.ts +34 -0
  81. package/dist/commands/db/apply/helpers/hazard-handler.d.ts +60 -0
  82. package/dist/commands/db/apply/helpers/idempotent-object-registry.d.ts +96 -0
  83. package/dist/commands/db/apply/helpers/idempotent-transaction.d.ts +20 -0
  84. package/dist/commands/db/apply/helpers/index.d.ts +6 -0
  85. package/dist/commands/db/apply/helpers/partition-validator.d.ts +2 -15
  86. package/dist/commands/db/apply/helpers/pg-schema-diff-helpers.d.ts +18 -162
  87. package/dist/commands/db/apply/helpers/pg-schema-diff-patterns.d.ts +55 -0
  88. package/dist/commands/db/apply/helpers/pg-schema-diff-version.d.ts +50 -0
  89. package/dist/commands/db/apply/helpers/plan-validator.d.ts +4 -10
  90. package/dist/commands/db/apply/helpers/rbac-password-manager.d.ts +34 -0
  91. package/dist/commands/db/apply/helpers/retry-logic.d.ts +16 -2
  92. package/dist/commands/db/apply/helpers/shadow-db-manager.d.ts +1 -1
  93. package/dist/commands/db/apply/helpers/sql-utils.d.ts +26 -0
  94. package/dist/commands/db/apply/machine.d.ts +52 -1
  95. package/dist/commands/db/commands/db-apply.d.ts +18 -0
  96. package/dist/commands/db/commands/db-sync/boundary-classifier.d.ts +21 -0
  97. package/dist/commands/db/commands/db-sync/error-classifier.d.ts +9 -0
  98. package/dist/commands/db/commands/db-sync/plan-hazard-analyzer.d.ts +13 -0
  99. package/dist/commands/db/commands/db-sync/risk-reporter.d.ts +19 -0
  100. package/dist/commands/db/commands/db-sync/sql-parser.d.ts +25 -0
  101. package/dist/commands/db/commands/db-sync/types.d.ts +47 -0
  102. package/dist/commands/db/commands/db-sync.d.ts +14 -0
  103. package/dist/commands/db/sync/contract.d.ts +6 -2
  104. package/dist/commands/db/sync/machine.d.ts +2 -1
  105. package/dist/commands/db/types.d.ts +2 -0
  106. package/dist/commands/db/utils/boundary-policy/rule-compiler.d.ts +11 -0
  107. package/dist/commands/db/utils/boundary-policy/types.d.ts +105 -0
  108. package/dist/commands/db/utils/boundary-policy/validation.d.ts +20 -0
  109. package/dist/commands/db/utils/boundary-policy-runtime.d.ts +28 -0
  110. package/dist/commands/db/utils/boundary-policy.d.ts +5 -0
  111. package/dist/commands/db/utils/idempotent-risk-context.d.ts +29 -0
  112. package/dist/commands/db/utils/preflight-check.d.ts +14 -0
  113. package/dist/commands/db/utils/preflight-checks/domain-naming-checks.d.ts +106 -0
  114. package/dist/commands/db/utils/preflight-checks/orphan-checks.d.ts +36 -0
  115. package/dist/commands/db/utils/preflight-checks/schema-risk-checks.d.ts +22 -0
  116. package/dist/commands/db/utils/preflight-checks/supabase-checks.d.ts +55 -0
  117. package/dist/commands/db/utils/risk-detector-loader.d.ts +8 -0
  118. package/dist/commands/db/utils/schema-precheck-budget.d.ts +17 -0
  119. package/dist/commands/db/utils/sql-boundary-parser.d.ts +12 -0
  120. package/dist/commands/db/utils/sql-file-collector.d.ts +8 -0
  121. package/dist/commands/db/utils/sql-filename-parser.d.ts +20 -0
  122. package/dist/commands/db/utils/sql-table-extractor-ast.d.ts +19 -0
  123. package/dist/commands/db/utils/sql-table-extractor-regex.d.ts +50 -0
  124. package/dist/commands/db/utils/sql-table-extractor-rls.d.ts +13 -0
  125. package/dist/commands/db/utils/sql-table-extractor.d.ts +79 -1
  126. package/dist/commands/db/utils/table-registry-introspection.d.ts +68 -0
  127. package/dist/commands/db/utils/table-registry.d.ts +3 -38
  128. package/dist/commands/dev/actors/app-lifecycle.d.ts +18 -0
  129. package/dist/commands/dev/actors/index.d.ts +12 -2
  130. package/dist/commands/dev/actors/process-check.d.ts +12 -0
  131. package/dist/commands/dev/actors/shared.d.ts +15 -0
  132. package/dist/commands/dev/actors/tables-manifest.d.ts +16 -0
  133. package/dist/commands/dev/contract.d.ts +3 -3
  134. package/dist/commands/dev/guards.d.ts +24 -0
  135. package/dist/commands/dev/machine.d.ts +27 -32
  136. package/dist/commands/dev/types.d.ts +2 -0
  137. package/dist/commands/doctor.d.ts +9 -0
  138. package/dist/commands/env/commands/env-pull/auth.d.ts +13 -0
  139. package/dist/commands/env/commands/env-pull/dotenv-files.d.ts +14 -0
  140. package/dist/commands/env/commands/env-pull/security.d.ts +12 -0
  141. package/dist/commands/env/commands/env-pull/service.d.ts +8 -0
  142. package/dist/commands/env/commands/env-pull/shared.d.ts +79 -0
  143. package/dist/commands/env/commands/setup/types.d.ts +1 -1
  144. package/dist/commands/env/constants/local-supabase.d.ts +2 -0
  145. package/dist/commands/inject-test-attrs/defaults.d.ts +9 -0
  146. package/dist/commands/template-check/contract.d.ts +6 -6
  147. package/dist/commands/template-check/machine.d.ts +2 -2
  148. package/dist/commands/template-check/types.d.ts +0 -4
  149. package/dist/commands/template-check/utils/diff-analyzer.d.ts +0 -4
  150. package/dist/commands/utils/machine-state-logging.d.ts +20 -0
  151. package/dist/commands/utils/repo-root.d.ts +2 -0
  152. package/dist/config/env.d.ts +4 -4
  153. package/dist/config-loader-GT3HAQ7U.js +7 -0
  154. package/dist/db-XULCILOU.js +14137 -0
  155. package/dist/dev-5YXNPTCJ.js +992 -0
  156. package/dist/doctor-MZLOA53G.js +44 -0
  157. package/dist/env-HMMRSYCI.js +7 -0
  158. package/dist/env-SS66PZ4B.js +2623 -0
  159. package/dist/env-files-2UIUYLLR.js +8 -0
  160. package/dist/error-handler-HEXBRNVV.js +460 -0
  161. package/dist/hotfix-YA3DGLOM.js +1477 -0
  162. package/dist/index.d.ts +5 -1
  163. package/dist/index.js +48 -42995
  164. package/dist/init-ZIL6LRFO.js +631 -0
  165. package/dist/inject-test-attrs-P44BVTQS.js +23 -0
  166. package/dist/internal/machines/snapshot-helpers.d.ts +6 -0
  167. package/dist/lib/sql-comment-utils.d.ts +25 -0
  168. package/dist/license-OB7GVJQ2.js +468 -0
  169. package/dist/link-VSNDVZZD.js +59 -0
  170. package/dist/manifest-TMFLESHW.js +19 -0
  171. package/dist/prepare-32DOVHTE.js +250 -0
  172. package/dist/risk-detector-4U6ZJ2G5.js +6 -0
  173. package/dist/risk-detector-core-TK4OAI3N.js +166 -0
  174. package/dist/risk-detector-plpgsql-HWKS4OLR.js +1886 -0
  175. package/dist/sdk-XK6HQU7S.js +348 -0
  176. package/dist/services-7VK5KZTO.js +177 -0
  177. package/dist/session-SFW5QSXZ.js +142 -0
  178. package/dist/signal-handler-DO3OANW5.js +6 -0
  179. package/dist/status-UTKS63AB.js +94 -0
  180. package/dist/telemetry-P56UBLZ2.js +93 -0
  181. package/dist/template-check-3P4HZXVY.js +1944 -0
  182. package/dist/test-V4KQL574.js +650 -0
  183. package/dist/test-gen-FS4CEY3P.js +88 -0
  184. package/dist/ui-RJAMCWUI.js +331 -0
  185. package/dist/upgrade-NUK3ZBCL.js +637 -0
  186. package/dist/utils/config-loader.d.ts +0 -3
  187. package/dist/validate-CAAW4Y44.js +54 -0
  188. package/dist/validators/risk-detector-content-risks.d.ts +13 -0
  189. package/dist/validators/risk-detector-core.d.ts +25 -0
  190. package/dist/validators/risk-detector-patterns.d.ts +15 -0
  191. package/dist/validators/risk-detector-plpgsql-expression-resolver.d.ts +22 -0
  192. package/dist/validators/risk-detector-plpgsql-parser.d.ts +5 -0
  193. package/dist/validators/risk-detector-plpgsql-tokenizer.d.ts +18 -0
  194. package/dist/validators/risk-detector-plpgsql.d.ts +9 -0
  195. package/dist/validators/risk-detector-text-utils.d.ts +6 -0
  196. package/dist/validators/risk-detector-types.d.ts +16 -0
  197. package/dist/validators/risk-detector.d.ts +7 -26
  198. package/dist/vuln-check-2W7N5TA2.js +121 -0
  199. package/dist/vuln-checker-IQJ56RUV.js +3223 -0
  200. package/dist/watch-PNTKZYFB.js +911 -0
  201. package/dist/workflow-H75N4BXX.js +897 -0
  202. package/package.json +5 -2
  203. package/dist/cli/contract-mode.d.ts.map +0 -1
  204. package/dist/cli/contract-output.d.ts.map +0 -1
  205. package/dist/cli/early-flags.d.ts.map +0 -1
  206. package/dist/cli/error-handler.d.ts.map +0 -1
  207. package/dist/cli/exec.d.ts.map +0 -1
  208. package/dist/cli/index.d.ts.map +0 -1
  209. package/dist/cli/json-output.d.ts.map +0 -1
  210. package/dist/cli/non-interactive.d.ts.map +0 -1
  211. package/dist/cli/output-format.d.ts.map +0 -1
  212. package/dist/cli/signal-handler.d.ts.map +0 -1
  213. package/dist/commands/build/actors/build.d.ts.map +0 -1
  214. package/dist/commands/build/actors/clean.d.ts.map +0 -1
  215. package/dist/commands/build/actors/db-sync.d.ts.map +0 -1
  216. package/dist/commands/build/actors/index.d.ts.map +0 -1
  217. package/dist/commands/build/actors/manifest.d.ts.map +0 -1
  218. package/dist/commands/build/actors/setup.d.ts.map +0 -1
  219. package/dist/commands/build/actors/static-checks.d.ts.map +0 -1
  220. package/dist/commands/build/actors/validate.d.ts.map +0 -1
  221. package/dist/commands/build/commands/build.d.ts.map +0 -1
  222. package/dist/commands/build/contract.d.ts.map +0 -1
  223. package/dist/commands/build/guards.d.ts.map +0 -1
  224. package/dist/commands/build/index.d.ts.map +0 -1
  225. package/dist/commands/build/machine.d.ts.map +0 -1
  226. package/dist/commands/build/types.d.ts.map +0 -1
  227. package/dist/commands/cache.d.ts.map +0 -1
  228. package/dist/commands/check/commands/check.d.ts.map +0 -1
  229. package/dist/commands/check/index.d.ts.map +0 -1
  230. package/dist/commands/ci/commands/ci-checks.d.ts.map +0 -1
  231. package/dist/commands/ci/commands/ci-layer-content.d.ts.map +0 -1
  232. package/dist/commands/ci/commands/ci-pr-capabilities.d.ts.map +0 -1
  233. package/dist/commands/ci/commands/ci-prod-apply.d.ts.map +0 -1
  234. package/dist/commands/ci/commands/ci-prod-db-operations.d.ts.map +0 -1
  235. package/dist/commands/ci/commands/ci-prod-github.d.ts.map +0 -1
  236. package/dist/commands/ci/commands/ci-prod-types.d.ts.map +0 -1
  237. package/dist/commands/ci/commands/ci-prod-utils.d.ts.map +0 -1
  238. package/dist/commands/ci/commands/ci-prod-workflow.d.ts.map +0 -1
  239. package/dist/commands/ci/commands/ci-resolvers.d.ts.map +0 -1
  240. package/dist/commands/ci/commands/ci-static.d.ts.map +0 -1
  241. package/dist/commands/ci/commands/ci-supabase-local.d.ts.map +0 -1
  242. package/dist/commands/ci/index.d.ts.map +0 -1
  243. package/dist/commands/ci/machine/actors/build/app-build.d.ts.map +0 -1
  244. package/dist/commands/ci/machine/actors/build/app-start.d.ts.map +0 -1
  245. package/dist/commands/ci/machine/actors/build/build-and-playwright.d.ts.map +0 -1
  246. package/dist/commands/ci/machine/actors/build/index.d.ts.map +0 -1
  247. package/dist/commands/ci/machine/actors/build/playwright-install.d.ts.map +0 -1
  248. package/dist/commands/ci/machine/actors/build/static-checks.d.ts.map +0 -1
  249. package/dist/commands/ci/machine/actors/db/apply-seeds.d.ts.map +0 -1
  250. package/dist/commands/ci/machine/actors/db/collect-schema-stats.d.ts.map +0 -1
  251. package/dist/commands/ci/machine/actors/db/index.d.ts.map +0 -1
  252. package/dist/commands/ci/machine/actors/db/pgtap-install.d.ts.map +0 -1
  253. package/dist/commands/ci/machine/actors/db/production-preview.d.ts.map +0 -1
  254. package/dist/commands/ci/machine/actors/db/pull-production.d.ts.map +0 -1
  255. package/dist/commands/ci/machine/actors/db/reset.d.ts.map +0 -1
  256. package/dist/commands/ci/machine/actors/db/schema-stats.d.ts.map +0 -1
  257. package/dist/commands/ci/machine/actors/db/setup-roles.d.ts.map +0 -1
  258. package/dist/commands/ci/machine/actors/db/sync-schema.d.ts.map +0 -1
  259. package/dist/commands/ci/machine/actors/finalize/github.d.ts.map +0 -1
  260. package/dist/commands/ci/machine/actors/finalize/index.d.ts.map +0 -1
  261. package/dist/commands/ci/machine/actors/finalize/summary.d.ts.map +0 -1
  262. package/dist/commands/ci/machine/actors/index.d.ts.map +0 -1
  263. package/dist/commands/ci/machine/actors/setup/index.d.ts.map +0 -1
  264. package/dist/commands/ci/machine/actors/setup/local.d.ts.map +0 -1
  265. package/dist/commands/ci/machine/actors/setup/pr-common.d.ts.map +0 -1
  266. package/dist/commands/ci/machine/actors/setup/pr-local.d.ts.map +0 -1
  267. package/dist/commands/ci/machine/actors/test/capabilities.d.ts.map +0 -1
  268. package/dist/commands/ci/machine/actors/test/index.d.ts.map +0 -1
  269. package/dist/commands/ci/machine/actors/test/run-layers.d.ts.map +0 -1
  270. package/dist/commands/ci/machine/commands/ci-local.d.ts.map +0 -1
  271. package/dist/commands/ci/machine/commands/ci-pr.d.ts.map +0 -1
  272. package/dist/commands/ci/machine/commands/index.d.ts.map +0 -1
  273. package/dist/commands/ci/machine/commands/machine-runner.d.ts.map +0 -1
  274. package/dist/commands/ci/machine/commands/runtime-env.d.ts.map +0 -1
  275. package/dist/commands/ci/machine/contract.d.ts.map +0 -1
  276. package/dist/commands/ci/machine/formatters/github-comment-types.d.ts.map +0 -1
  277. package/dist/commands/ci/machine/formatters/github-comment.d.ts.map +0 -1
  278. package/dist/commands/ci/machine/formatters/index.d.ts.map +0 -1
  279. package/dist/commands/ci/machine/formatters/sections/final-comment.d.ts.map +0 -1
  280. package/dist/commands/ci/machine/formatters/sections/format-helpers.d.ts.map +0 -1
  281. package/dist/commands/ci/machine/formatters/sections/index.d.ts.map +0 -1
  282. package/dist/commands/ci/machine/formatters/sections/progress-comment.d.ts.map +0 -1
  283. package/dist/commands/ci/machine/formatters/sections/schema-matrix.d.ts.map +0 -1
  284. package/dist/commands/ci/machine/formatters/summary.d.ts.map +0 -1
  285. package/dist/commands/ci/machine/guards.d.ts.map +0 -1
  286. package/dist/commands/ci/machine/helpers.d.ts.map +0 -1
  287. package/dist/commands/ci/machine/index.d.ts.map +0 -1
  288. package/dist/commands/ci/machine/machine.d.ts.map +0 -1
  289. package/dist/commands/ci/machine/types.d.ts.map +0 -1
  290. package/dist/commands/ci/utils/ai-report.d.ts.map +0 -1
  291. package/dist/commands/ci/utils/app-process.d.ts.map +0 -1
  292. package/dist/commands/ci/utils/app-runtime.d.ts.map +0 -1
  293. package/dist/commands/ci/utils/ci-config.d.ts.map +0 -1
  294. package/dist/commands/ci/utils/ci-env-schema.d.ts.map +0 -1
  295. package/dist/commands/ci/utils/ci-logging.d.ts.map +0 -1
  296. package/dist/commands/ci/utils/ci-summary.d.ts.map +0 -1
  297. package/dist/commands/ci/utils/config-readers.d.ts.map +0 -1
  298. package/dist/commands/ci/utils/db-url-utils.d.ts.map +0 -1
  299. package/dist/commands/ci/utils/e2e-auth-setup.d.ts.map +0 -1
  300. package/dist/commands/ci/utils/env-security.d.ts.map +0 -1
  301. package/dist/commands/ci/utils/execa-helpers.d.ts.map +0 -1
  302. package/dist/commands/ci/utils/exit-code-computation.d.ts.map +0 -1
  303. package/dist/commands/ci/utils/github-api.d.ts.map +0 -1
  304. package/dist/commands/ci/utils/github.d.ts.map +0 -1
  305. package/dist/commands/ci/utils/index.d.ts.map +0 -1
  306. package/dist/commands/ci/utils/pgtap-installer.d.ts.map +0 -1
  307. package/dist/commands/ci/utils/rls-verification.d.ts.map +0 -1
  308. package/dist/commands/ci/utils/schema-operations.d.ts.map +0 -1
  309. package/dist/commands/ci/utils/seed-operations.d.ts.map +0 -1
  310. package/dist/commands/ci/utils/test-parallel.d.ts.map +0 -1
  311. package/dist/commands/ci/utils/timestamp-invariants.d.ts.map +0 -1
  312. package/dist/commands/ci/utils/workflow-idempotency.d.ts.map +0 -1
  313. package/dist/commands/db/apply/actors.d.ts.map +0 -1
  314. package/dist/commands/db/apply/contract.d.ts.map +0 -1
  315. package/dist/commands/db/apply/helpers/advisory-lock.d.ts.map +0 -1
  316. package/dist/commands/db/apply/helpers/data-compatibility-checker.d.ts.map +0 -1
  317. package/dist/commands/db/apply/helpers/index.d.ts.map +0 -1
  318. package/dist/commands/db/apply/helpers/partition-acl-cleaner.d.ts.map +0 -1
  319. package/dist/commands/db/apply/helpers/partition-prefilter.d.ts.map +0 -1
  320. package/dist/commands/db/apply/helpers/partition-validator.d.ts.map +0 -1
  321. package/dist/commands/db/apply/helpers/pg-schema-diff-helpers.d.ts.map +0 -1
  322. package/dist/commands/db/apply/helpers/plan-validator.d.ts.map +0 -1
  323. package/dist/commands/db/apply/helpers/retry-logic.d.ts.map +0 -1
  324. package/dist/commands/db/apply/helpers/shadow-db-manager.d.ts.map +0 -1
  325. package/dist/commands/db/apply/index.d.ts.map +0 -1
  326. package/dist/commands/db/apply/machine.d.ts.map +0 -1
  327. package/dist/commands/db/commands/db-apply.d.ts.map +0 -1
  328. package/dist/commands/db/commands/db-audit.d.ts.map +0 -1
  329. package/dist/commands/db/commands/db-backup.d.ts.map +0 -1
  330. package/dist/commands/db/commands/db-cleanup.d.ts.map +0 -1
  331. package/dist/commands/db/commands/db-derive-role-passwords.d.ts.map +0 -1
  332. package/dist/commands/db/commands/db-derive-urls.d.ts.map +0 -1
  333. package/dist/commands/db/commands/db-diagram.d.ts.map +0 -1
  334. package/dist/commands/db/commands/db-drizzle.d.ts.map +0 -1
  335. package/dist/commands/db/commands/db-extension.d.ts.map +0 -1
  336. package/dist/commands/db/commands/db-generate-password.d.ts.map +0 -1
  337. package/dist/commands/db/commands/db-lifecycle.d.ts.map +0 -1
  338. package/dist/commands/db/commands/db-rollback.d.ts.map +0 -1
  339. package/dist/commands/db/commands/db-schema.d.ts.map +0 -1
  340. package/dist/commands/db/commands/db-seed-metadata.d.ts.map +0 -1
  341. package/dist/commands/db/commands/db-seed-verify.d.ts.map +0 -1
  342. package/dist/commands/db/commands/db-seed.d.ts.map +0 -1
  343. package/dist/commands/db/commands/db-snapshot.d.ts.map +0 -1
  344. package/dist/commands/db/commands/db-stack.d.ts.map +0 -1
  345. package/dist/commands/db/commands/db-stats.d.ts.map +0 -1
  346. package/dist/commands/db/commands/db-sync.d.ts.map +0 -1
  347. package/dist/commands/db/commands/db-test.d.ts.map +0 -1
  348. package/dist/commands/db/constants.d.ts.map +0 -1
  349. package/dist/commands/db/extension-registry.d.ts.map +0 -1
  350. package/dist/commands/db/index.d.ts.map +0 -1
  351. package/dist/commands/db/preflight/actors.d.ts.map +0 -1
  352. package/dist/commands/db/preflight/contract.d.ts.map +0 -1
  353. package/dist/commands/db/preflight/index.d.ts.map +0 -1
  354. package/dist/commands/db/sync/actors.d.ts.map +0 -1
  355. package/dist/commands/db/sync/contract.d.ts.map +0 -1
  356. package/dist/commands/db/sync/index.d.ts.map +0 -1
  357. package/dist/commands/db/sync/machine.d.ts.map +0 -1
  358. package/dist/commands/db/types.d.ts.map +0 -1
  359. package/dist/commands/db/utils/db-target.d.ts.map +0 -1
  360. package/dist/commands/db/utils/db-url-builder.d.ts.map +0 -1
  361. package/dist/commands/db/utils/error-handlers.d.ts.map +0 -1
  362. package/dist/commands/db/utils/import-impact-analyzer.d.ts.map +0 -1
  363. package/dist/commands/db/utils/preflight-check.d.ts.map +0 -1
  364. package/dist/commands/db/utils/psql.d.ts.map +0 -1
  365. package/dist/commands/db/utils/schema-detector.d.ts.map +0 -1
  366. package/dist/commands/db/utils/schema-sync.d.ts.map +0 -1
  367. package/dist/commands/db/utils/script-runner.d.ts.map +0 -1
  368. package/dist/commands/db/utils/seed-manager.d.ts.map +0 -1
  369. package/dist/commands/db/utils/semantic-mapper.d.ts.map +0 -1
  370. package/dist/commands/db/utils/sql-table-extractor.d.ts.map +0 -1
  371. package/dist/commands/db/utils/stack-detector.d.ts.map +0 -1
  372. package/dist/commands/db/utils/table-registry.d.ts.map +0 -1
  373. package/dist/commands/db/utils/table-source-classifier.d.ts.map +0 -1
  374. package/dist/commands/dev/actors/index.d.ts.map +0 -1
  375. package/dist/commands/dev/commands/dev.d.ts.map +0 -1
  376. package/dist/commands/dev/contract.d.ts.map +0 -1
  377. package/dist/commands/dev/guards.d.ts.map +0 -1
  378. package/dist/commands/dev/helpers/stale-process-detector.d.ts.map +0 -1
  379. package/dist/commands/dev/machine.d.ts.map +0 -1
  380. package/dist/commands/dev/types.d.ts.map +0 -1
  381. package/dist/commands/env/commands/env-check.d.ts.map +0 -1
  382. package/dist/commands/env/commands/env-encrypt.d.ts.map +0 -1
  383. package/dist/commands/env/commands/env-pull.d.ts.map +0 -1
  384. package/dist/commands/env/commands/env-setup.d.ts.map +0 -1
  385. package/dist/commands/env/commands/env-sync.d.ts.map +0 -1
  386. package/dist/commands/env/commands/setup/action.d.ts.map +0 -1
  387. package/dist/commands/env/commands/setup/auth.d.ts.map +0 -1
  388. package/dist/commands/env/commands/setup/file-export.d.ts.map +0 -1
  389. package/dist/commands/env/commands/setup/github-api.d.ts.map +0 -1
  390. package/dist/commands/env/commands/setup/helpers.d.ts.map +0 -1
  391. package/dist/commands/env/commands/setup/index.d.ts.map +0 -1
  392. package/dist/commands/env/commands/setup/parsers.d.ts.map +0 -1
  393. package/dist/commands/env/commands/setup/prompts.d.ts.map +0 -1
  394. package/dist/commands/env/commands/setup/supabase-api.d.ts.map +0 -1
  395. package/dist/commands/env/commands/setup/types.d.ts.map +0 -1
  396. package/dist/commands/env/commands/setup/vercel-api.d.ts.map +0 -1
  397. package/dist/commands/env/constants/local-supabase.d.ts.map +0 -1
  398. package/dist/commands/env/index.d.ts.map +0 -1
  399. package/dist/commands/hotfix/actors.d.ts.map +0 -1
  400. package/dist/commands/hotfix/commands/hotfix-complete.d.ts.map +0 -1
  401. package/dist/commands/hotfix/commands/hotfix-create.d.ts.map +0 -1
  402. package/dist/commands/hotfix/commands/hotfix-deploy.d.ts.map +0 -1
  403. package/dist/commands/hotfix/commands/hotfix-status.d.ts.map +0 -1
  404. package/dist/commands/hotfix/contract.d.ts.map +0 -1
  405. package/dist/commands/hotfix/index.d.ts.map +0 -1
  406. package/dist/commands/hotfix/machine.d.ts.map +0 -1
  407. package/dist/commands/hotfix/metadata.d.ts.map +0 -1
  408. package/dist/commands/hotfix/utils/hotfix-machine-helper.d.ts.map +0 -1
  409. package/dist/commands/init.d.ts.map +0 -1
  410. package/dist/commands/inject-test-attrs/action.d.ts.map +0 -1
  411. package/dist/commands/inject-test-attrs/commands/inject-test-attrs.d.ts.map +0 -1
  412. package/dist/commands/inject-test-attrs/contract.d.ts.map +0 -1
  413. package/dist/commands/inject-test-attrs/detection-diagnostics.d.ts.map +0 -1
  414. package/dist/commands/inject-test-attrs/formatter.d.ts.map +0 -1
  415. package/dist/commands/inject-test-attrs/index.d.ts.map +0 -1
  416. package/dist/commands/inject-test-attrs/manifest-generator.d.ts.map +0 -1
  417. package/dist/commands/inject-test-attrs/processor-utils.d.ts.map +0 -1
  418. package/dist/commands/inject-test-attrs/processor.d.ts.map +0 -1
  419. package/dist/commands/inject-test-attrs/types.d.ts.map +0 -1
  420. package/dist/commands/link.d.ts.map +0 -1
  421. package/dist/commands/manifest/index.d.ts.map +0 -1
  422. package/dist/commands/prepare/commands/prepare.d.ts.map +0 -1
  423. package/dist/commands/prepare/index.d.ts.map +0 -1
  424. package/dist/commands/sdk/commands/publish.d.ts.map +0 -1
  425. package/dist/commands/sdk/index.d.ts.map +0 -1
  426. package/dist/commands/services/index.d.ts.map +0 -1
  427. package/dist/commands/session/index.d.ts.map +0 -1
  428. package/dist/commands/status.d.ts.map +0 -1
  429. package/dist/commands/telemetry.d.ts.map +0 -1
  430. package/dist/commands/template-check/actors/compare.d.ts.map +0 -1
  431. package/dist/commands/template-check/actors/discover.d.ts.map +0 -1
  432. package/dist/commands/template-check/actors/index.d.ts.map +0 -1
  433. package/dist/commands/template-check/actors/report.d.ts.map +0 -1
  434. package/dist/commands/template-check/commands/template-check.d.ts.map +0 -1
  435. package/dist/commands/template-check/config.d.ts.map +0 -1
  436. package/dist/commands/template-check/contract.d.ts.map +0 -1
  437. package/dist/commands/template-check/index.d.ts.map +0 -1
  438. package/dist/commands/template-check/machine.d.ts.map +0 -1
  439. package/dist/commands/template-check/types.d.ts.map +0 -1
  440. package/dist/commands/template-check/utils/diff-analyzer.d.ts.map +0 -1
  441. package/dist/commands/template-check/utils/normalizer.d.ts.map +0 -1
  442. package/dist/commands/template-check/utils/path-mapping.d.ts.map +0 -1
  443. package/dist/commands/test/commands/test-db.d.ts.map +0 -1
  444. package/dist/commands/test/commands/test-e2e.d.ts.map +0 -1
  445. package/dist/commands/test/commands/test-fast.d.ts.map +0 -1
  446. package/dist/commands/test/commands/test-integration.d.ts.map +0 -1
  447. package/dist/commands/test/commands/test-layer.d.ts.map +0 -1
  448. package/dist/commands/test/commands/test-owasp-generate.d.ts.map +0 -1
  449. package/dist/commands/test/commands/test-service.d.ts.map +0 -1
  450. package/dist/commands/test/commands/test-static.d.ts.map +0 -1
  451. package/dist/commands/test/commands/test.d.ts.map +0 -1
  452. package/dist/commands/test/index.d.ts.map +0 -1
  453. package/dist/commands/test-gen.d.ts.map +0 -1
  454. package/dist/commands/ui.d.ts.map +0 -1
  455. package/dist/commands/upgrade.d.ts.map +0 -1
  456. package/dist/commands/validate.d.ts.map +0 -1
  457. package/dist/commands/vuln-check.d.ts.map +0 -1
  458. package/dist/commands/watch.d.ts.map +0 -1
  459. package/dist/commands/workflow/commands/deploy-production.d.ts.map +0 -1
  460. package/dist/commands/workflow/commands/final-status.d.ts.map +0 -1
  461. package/dist/commands/workflow/commands/log.d.ts.map +0 -1
  462. package/dist/commands/workflow/commands/notify.d.ts.map +0 -1
  463. package/dist/commands/workflow/commands/paths.d.ts.map +0 -1
  464. package/dist/commands/workflow/commands/sync.d.ts.map +0 -1
  465. package/dist/commands/workflow/commands/validate.d.ts.map +0 -1
  466. package/dist/commands/workflow/commands/verify-credentials.d.ts.map +0 -1
  467. package/dist/commands/workflow/index.d.ts.map +0 -1
  468. package/dist/commands/workflow/types.d.ts.map +0 -1
  469. package/dist/config/env-files.d.ts.map +0 -1
  470. package/dist/config/env.d.ts.map +0 -1
  471. package/dist/constants/versions.d.ts.map +0 -1
  472. package/dist/contracts/envelope.d.ts.map +0 -1
  473. package/dist/errors/catalog.d.ts.map +0 -1
  474. package/dist/errors/exit-codes.d.ts.map +0 -1
  475. package/dist/errors/index.d.ts.map +0 -1
  476. package/dist/incremental/affected-tests.d.ts.map +0 -1
  477. package/dist/index.d.ts.map +0 -1
  478. package/dist/internal/machines/index.d.ts.map +0 -1
  479. package/dist/internal/machines/machine-runner.d.ts.map +0 -1
  480. package/dist/internal/machines/snapshot-helpers.d.ts.map +0 -1
  481. package/dist/internal/machines/types.d.ts.map +0 -1
  482. package/dist/internal/vuln-checker/analyzers/dependency-analyzer.d.ts.map +0 -1
  483. package/dist/internal/vuln-checker/analyzers/rls-analyzer.d.ts.map +0 -1
  484. package/dist/internal/vuln-checker/analyzers/secret-analyzer.d.ts.map +0 -1
  485. package/dist/internal/vuln-checker/analyzers/typescript-analyzer.d.ts.map +0 -1
  486. package/dist/internal/vuln-checker/config/loader.d.ts.map +0 -1
  487. package/dist/internal/vuln-checker/constants.d.ts.map +0 -1
  488. package/dist/internal/vuln-checker/ignore/matcher.d.ts.map +0 -1
  489. package/dist/internal/vuln-checker/index.d.ts.map +0 -1
  490. package/dist/internal/vuln-checker/reporters/console-reporter.d.ts.map +0 -1
  491. package/dist/internal/vuln-checker/reporters/json-reporter.d.ts.map +0 -1
  492. package/dist/internal/vuln-checker/reporters/markdown-reporter.d.ts.map +0 -1
  493. package/dist/internal/vuln-checker/reporters/sarif-reporter.d.ts.map +0 -1
  494. package/dist/internal/vuln-checker/security/path-validation.d.ts.map +0 -1
  495. package/dist/internal/vuln-checker/types.d.ts.map +0 -1
  496. package/dist/notifiers/desktop-notifier.d.ts.map +0 -1
  497. package/dist/ui/components/db-panel.d.ts.map +0 -1
  498. package/dist/ui/components/status-bar.d.ts.map +0 -1
  499. package/dist/ui/components/test-panel.d.ts.map +0 -1
  500. package/dist/ui/dashboard.d.ts.map +0 -1
  501. package/dist/ui/index.d.ts.map +0 -1
  502. package/dist/utils/config-loader.d.ts.map +0 -1
  503. package/dist/utils/config-updater.d.ts.map +0 -1
  504. package/dist/utils/diagnostics.d.ts.map +0 -1
  505. package/dist/utils/dotenvx.d.ts.map +0 -1
  506. package/dist/utils/env-local-bridge.d.ts.map +0 -1
  507. package/dist/utils/execution-plan.d.ts.map +0 -1
  508. package/dist/utils/github-output-security.d.ts.map +0 -1
  509. package/dist/utils/help-system.d.ts.map +0 -1
  510. package/dist/utils/license/admin-auth.d.ts.map +0 -1
  511. package/dist/utils/license/allowlist-checker.d.ts.map +0 -1
  512. package/dist/utils/license/ci-detector.d.ts.map +0 -1
  513. package/dist/utils/license/index.d.ts.map +0 -1
  514. package/dist/utils/license/owner-resolver.d.ts.map +0 -1
  515. package/dist/utils/license/types.d.ts.map +0 -1
  516. package/dist/utils/license/validate-owner.d.ts.map +0 -1
  517. package/dist/utils/path-security.d.ts.map +0 -1
  518. package/dist/utils/port-allocator.d.ts.map +0 -1
  519. package/dist/utils/secure-exec.d.ts.map +0 -1
  520. package/dist/utils/template-fetcher.d.ts.map +0 -1
  521. package/dist/utils/type-guards.d.ts.map +0 -1
  522. package/dist/utils/vercel-project.d.ts.map +0 -1
  523. package/dist/utils/workspace-detector.d.ts.map +0 -1
  524. package/dist/validators/risk-detector.d.ts.map +0 -1
  525. package/dist/validators/schema-validator.d.ts.map +0 -1
  526. package/dist/version.d.ts.map +0 -1
  527. package/dist/watchers/schema-watcher.d.ts.map +0 -1
  528. package/dist/watchers/test-watcher.d.ts.map +0 -1
@@ -0,0 +1,992 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'module';
3
+ import { generateTablesManifest, writeEnvLocalBridge } from './chunk-FHG3ILE4.js';
4
+ import { startAppBackground, waitForAppReady, detectApp } from './chunk-HD74F6W2.js';
5
+ import './chunk-7B5C6U2K.js';
6
+ import { manifestActor, supabaseStartActor, envCheckActor, depsInstallActor, detectManifestTask, detectDatabase } from './chunk-2APB25TT.js';
7
+ import { findRepoRoot } from './chunk-3WDV32GA.js';
8
+ import './chunk-6FAU4IGR.js';
9
+ import { createMachineStateChangeLogger } from './chunk-5FT3F36G.js';
10
+ import './chunk-II7VYQEM.js';
11
+ import { init_local_supabase, buildLocalDatabaseUrl, detectLocalSupabasePorts } from './chunk-VM3IWOT5.js';
12
+ import { secureExeca } from './chunk-RZLYEO4U.js';
13
+ import { emitJsonSuccess } from './chunk-KE6QJBZG.js';
14
+ import './chunk-WJXC4MVY.js';
15
+ import './chunk-HKUWEGUX.js';
16
+ import './chunk-5NKWR4FF.js';
17
+ import './chunk-JMJP4A47.js';
18
+ import { init_esm_shims } from './chunk-VRXHCR5K.js';
19
+ import { createCLILogger, CLIError } from '@runa-ai/runa';
20
+ import { Command } from 'commander';
21
+ import { fromPromise, setup, assign, createActor } from 'xstate';
22
+ import { z } from 'zod';
23
+ import net from 'net';
24
+ import { existsSync, rmSync, readFileSync, unlinkSync } from 'fs';
25
+ import path3 from 'path';
26
+ import { mkdir } from 'fs/promises';
27
+
28
+ createRequire(import.meta.url);
29
+
30
+ // src/commands/dev/commands/dev.ts
31
+ init_esm_shims();
32
+
33
+ // src/commands/dev/contract.ts
34
+ init_esm_shims();
35
+ var DevInputSchema = z.object({
36
+ /** Port for Next.js dev server (default: 3000) */
37
+ port: z.number().int().positive().default(3e3),
38
+ /** Skip Supabase start */
39
+ skipDb: z.boolean().default(false),
40
+ /** Skip app start (Supabase only) */
41
+ skipApp: z.boolean().default(false),
42
+ /** Show detailed output */
43
+ verbose: z.boolean().default(false),
44
+ /** Stream app output to terminal (in addition to log file). Default: true */
45
+ stream: z.boolean().default(true),
46
+ /** Target directory (defaults to cwd) */
47
+ targetDir: z.string().optional(),
48
+ /** Replace existing runa dev process if already running */
49
+ replace: z.boolean().default(false),
50
+ /** Bundler to use for Next.js dev server */
51
+ bundler: z.enum(["turbopack", "webpack"]).optional()
52
+ }).strict();
53
+ z.enum(["pending", "running", "passed", "failed", "skipped"]);
54
+ var DevOutputSchema = z.object({
55
+ /** Overall success status */
56
+ success: z.boolean(),
57
+ /** Exit code: 0 = success, 1 = failure */
58
+ exitCode: z.union([z.literal(0), z.literal(1)]),
59
+ /** App PID if started */
60
+ appPid: z.number().optional(),
61
+ /** Supabase status */
62
+ supabaseStarted: z.boolean().optional(),
63
+ /** Error message if failed */
64
+ error: z.string().optional()
65
+ }).strict();
66
+
67
+ // src/commands/dev/commands/dev.ts
68
+ init_local_supabase();
69
+
70
+ // src/commands/dev/machine.ts
71
+ init_esm_shims();
72
+
73
+ // src/commands/dev/actors/index.ts
74
+ init_esm_shims();
75
+
76
+ // src/commands/dev/actors/tables-manifest.ts
77
+ init_esm_shims();
78
+ init_local_supabase();
79
+ var tablesManifestActor = fromPromise(
80
+ async ({ input }) => {
81
+ const startTime = Date.now();
82
+ try {
83
+ await generateTablesManifest(input.repoRoot, {
84
+ databaseUrl: buildLocalDatabaseUrl(input.repoRoot)
85
+ });
86
+ return {
87
+ passed: true,
88
+ durationMs: Date.now() - startTime
89
+ };
90
+ } catch (error) {
91
+ const errorMessage = error instanceof Error ? error.message : String(error);
92
+ return {
93
+ passed: false,
94
+ durationMs: Date.now() - startTime,
95
+ error: `Tables manifest refresh failed: ${errorMessage}`
96
+ };
97
+ }
98
+ }
99
+ );
100
+
101
+ // src/commands/dev/actors/process-check.ts
102
+ init_esm_shims();
103
+
104
+ // src/commands/ci/utils/app-process.ts
105
+ init_esm_shims();
106
+ function killProcessGroup(pid) {
107
+ try {
108
+ process.kill(-pid, "SIGTERM");
109
+ } catch {
110
+ process.kill(pid, "SIGTERM");
111
+ }
112
+ }
113
+ function forceKillProcessGroup(pid) {
114
+ try {
115
+ process.kill(-pid, "SIGKILL");
116
+ } catch {
117
+ }
118
+ try {
119
+ process.kill(pid, "SIGKILL");
120
+ } catch {
121
+ }
122
+ }
123
+ async function terminateAppProcessByPid(params) {
124
+ const { pid, logger } = params;
125
+ if (!Number.isFinite(pid) || pid <= 0) {
126
+ logger.warn(`Invalid PID: ${pid}`);
127
+ return;
128
+ }
129
+ logger.info(`Terminating app process group (pid=${pid})`);
130
+ killProcessGroup(pid);
131
+ await new Promise((r) => setTimeout(r, 1e3));
132
+ forceKillProcessGroup(pid);
133
+ logger.info("App process terminated");
134
+ }
135
+
136
+ // src/commands/dev/helpers/stale-process-detector.ts
137
+ init_esm_shims();
138
+ var SAFE_TO_KILL_NAMES = ["node", "next-server", "next-router-worker", "tsx", "ts-node"];
139
+ async function findProcessOnPort(port) {
140
+ try {
141
+ const result = await secureExeca("lsof", ["-i", `:${port}`, "-sTCP:LISTEN", "-P", "-n"], {
142
+ reject: false
143
+ });
144
+ const stdout = String(result.stdout ?? "");
145
+ if (result.exitCode !== 0 || !stdout) {
146
+ return null;
147
+ }
148
+ const lines = stdout.trim().split("\n");
149
+ if (lines.length < 2) return null;
150
+ const dataLine = lines[1];
151
+ const parts = dataLine.split(/\s+/);
152
+ if (parts.length < 2) return null;
153
+ const name = parts[0];
154
+ const pid = parseInt(parts[1], 10);
155
+ if (Number.isNaN(pid) || pid <= 0) return null;
156
+ let command = "";
157
+ try {
158
+ const psResult = await secureExeca("lsof", ["-p", `${pid}`, "-Fn"], { reject: false });
159
+ command = String(psResult.stdout ?? "");
160
+ } catch {
161
+ }
162
+ return { pid, name, command };
163
+ } catch {
164
+ return null;
165
+ }
166
+ }
167
+ function isNodeOrNextProcess(name, command) {
168
+ const lowerName = name.toLowerCase();
169
+ if (!SAFE_TO_KILL_NAMES.some((safe) => lowerName === safe)) {
170
+ return false;
171
+ }
172
+ if (lowerName === "node") {
173
+ return command.toLowerCase().includes("next");
174
+ }
175
+ return true;
176
+ }
177
+ async function isServerHealthy(port) {
178
+ try {
179
+ const controller = new AbortController();
180
+ const timeout = setTimeout(() => controller.abort(), 2e3);
181
+ const response = await fetch(`http://localhost:${port}/`, {
182
+ signal: controller.signal,
183
+ method: "GET"
184
+ });
185
+ clearTimeout(timeout);
186
+ return response.status > 0;
187
+ } catch {
188
+ return false;
189
+ }
190
+ }
191
+ async function detectAndRecoverStaleProcess(port, logger) {
192
+ const processInfo = await findProcessOnPort(port);
193
+ if (!processInfo) {
194
+ return { status: "port-free" };
195
+ }
196
+ const { pid, name, command } = processInfo;
197
+ logger.info(`Found process on port ${port}: ${name} (PID: ${pid})`);
198
+ if (!isNodeOrNextProcess(name, command)) {
199
+ return { status: "foreign-process", pid, name };
200
+ }
201
+ const healthy = await isServerHealthy(port);
202
+ if (healthy) {
203
+ return { status: "healthy-running", pid, name };
204
+ }
205
+ logger.info(`Stale process detected (${name}, PID: ${pid}). Recovering...`);
206
+ try {
207
+ await terminateAppProcessByPid({ pid, logger });
208
+ logger.info(`Stale process terminated (PID: ${pid})`);
209
+ return { status: "stale-killed", pid, name };
210
+ } catch (error) {
211
+ return {
212
+ status: "detection-failed",
213
+ reason: `Failed to terminate PID ${pid}: ${error instanceof Error ? error.message : String(error)}`
214
+ };
215
+ }
216
+ }
217
+
218
+ // src/commands/dev/actors/shared.ts
219
+ init_esm_shims();
220
+ var consoleLogger = {
221
+ info: console.log,
222
+ warn: console.warn
223
+ };
224
+
225
+ // src/commands/dev/actors/process-check.ts
226
+ function isProcessAlive(pid) {
227
+ try {
228
+ process.kill(pid, 0);
229
+ return true;
230
+ } catch {
231
+ return false;
232
+ }
233
+ }
234
+ function checkPortAvailable(port) {
235
+ return new Promise((resolve, reject) => {
236
+ const server = net.createServer();
237
+ server.once("error", (err) => {
238
+ if (err.code === "EADDRINUSE") {
239
+ reject(
240
+ new Error(
241
+ `Port ${port} is already in use. Use --port <number> to specify a different port, or --replace to restart.`
242
+ )
243
+ );
244
+ } else {
245
+ reject(err);
246
+ }
247
+ });
248
+ server.once("listening", () => {
249
+ server.close(() => resolve());
250
+ });
251
+ server.listen(port, "127.0.0.1");
252
+ });
253
+ }
254
+ function readPidFileContent(pidFile) {
255
+ try {
256
+ return readFileSync(pidFile, "utf-8").trim();
257
+ } catch {
258
+ return null;
259
+ }
260
+ }
261
+ function parsePid(content) {
262
+ const pid = Number.parseInt(content, 10);
263
+ return Number.isNaN(pid) ? null : pid;
264
+ }
265
+ async function stopExistingProcess(pid, replace) {
266
+ if (!isProcessAlive(pid)) return;
267
+ if (!replace) {
268
+ throw new Error(
269
+ `runa dev is already running (PID: ${pid}). Use --replace to restart, or stop the existing process first.`
270
+ );
271
+ }
272
+ await terminateAppProcessByPid({
273
+ pid,
274
+ logger: consoleLogger
275
+ });
276
+ }
277
+ function cleanupPidFile(pidFile) {
278
+ try {
279
+ unlinkSync(pidFile);
280
+ } catch {
281
+ }
282
+ }
283
+ async function handlePidFile(pidFile, replace) {
284
+ const pidFileContent = readPidFileContent(pidFile);
285
+ if (!pidFileContent) return;
286
+ const pid = parsePid(pidFileContent);
287
+ if (pid !== null) {
288
+ await stopExistingProcess(pid, replace);
289
+ }
290
+ cleanupPidFile(pidFile);
291
+ }
292
+ function isPortInUseError(portError) {
293
+ return portError instanceof Error && portError.message.includes("already in use");
294
+ }
295
+ async function waitForPortRelease(port) {
296
+ for (let attempt = 0; attempt < 5; attempt++) {
297
+ try {
298
+ await checkPortAvailable(port);
299
+ return;
300
+ } catch {
301
+ if (attempt === 4) {
302
+ throw new Error(`Port ${port} still in use after killing stale process`);
303
+ }
304
+ await new Promise((resolve) => setTimeout(resolve, 100));
305
+ }
306
+ }
307
+ }
308
+ function createPortRecoveryError(result, port) {
309
+ if (result.status === "healthy-running") {
310
+ return new Error(
311
+ `Port ${port} is in use by a running server (${result.name}, PID: ${result.pid}). Use --port <number> or --replace to restart.`
312
+ );
313
+ }
314
+ return new Error(
315
+ `Port ${port} is in use by ${result.name} (PID: ${result.pid}). Stop it manually before running runa dev.`
316
+ );
317
+ }
318
+ async function recoverPortConflict(port, portError) {
319
+ if (!isPortInUseError(portError)) {
320
+ throw portError;
321
+ }
322
+ const result = await detectAndRecoverStaleProcess(port, consoleLogger);
323
+ if (result.status === "port-free") {
324
+ return false;
325
+ }
326
+ if (result.status === "stale-killed") {
327
+ await waitForPortRelease(port);
328
+ return true;
329
+ }
330
+ if (result.status === "detection-failed") {
331
+ throw portError;
332
+ }
333
+ throw createPortRecoveryError(result, port);
334
+ }
335
+ var processCheckActor = fromPromise(
336
+ async ({ input }) => {
337
+ const pidFile = path3.join(input.repoRoot, input.tmpDir, "app.pid");
338
+ let staleProcessRecovered = false;
339
+ await handlePidFile(pidFile, input.replace);
340
+ if (!input.skipApp) {
341
+ try {
342
+ await checkPortAvailable(input.port);
343
+ } catch (portError) {
344
+ staleProcessRecovered = await recoverPortConflict(input.port, portError);
345
+ }
346
+ }
347
+ return { staleProcessRecovered };
348
+ }
349
+ );
350
+
351
+ // src/commands/dev/actors/app-lifecycle.ts
352
+ init_esm_shims();
353
+ var appStartActor = fromPromise(
354
+ async ({ input }) => {
355
+ const { repoRoot, appDir, port, tmpDir, stream, bundler } = input;
356
+ const fullTmpDir = path3.join(repoRoot, tmpDir);
357
+ await mkdir(fullTmpDir, { recursive: true });
358
+ const nextDir = path3.join(appDir, ".next");
359
+ if (existsSync(nextDir)) {
360
+ rmSync(nextDir, { recursive: true, force: true });
361
+ console.log("[runa dev] Cleaned .next cache for fresh start");
362
+ }
363
+ const result = await startAppBackground({
364
+ repoRoot,
365
+ appDir,
366
+ port,
367
+ env: process.env,
368
+ tmpDir: fullTmpDir,
369
+ mode: "dev",
370
+ stream,
371
+ bundler
372
+ });
373
+ await waitForAppReady({
374
+ port,
375
+ timeoutSeconds: 120,
376
+ tmpDir: fullTmpDir
377
+ });
378
+ return result;
379
+ }
380
+ );
381
+ var shutdownActor = fromPromise(
382
+ async ({ input }) => {
383
+ const { pid } = input;
384
+ if (pid > 0) {
385
+ await terminateAppProcessByPid({
386
+ pid,
387
+ logger: consoleLogger
388
+ });
389
+ }
390
+ }
391
+ );
392
+
393
+ // src/commands/dev/guards.ts
394
+ init_esm_shims();
395
+ function shouldSkipDb({ context }) {
396
+ return context.input.skipDb || !context.hasDatabase;
397
+ }
398
+ function shouldSkipApp({ context }) {
399
+ return context.input.skipApp;
400
+ }
401
+ function shouldSkipManifest({ context }) {
402
+ return context.input.skipApp || !context.hasManifestTask;
403
+ }
404
+ function shouldSkipTablesManifest({ context }) {
405
+ return context.input.skipApp || context.input.skipDb || !context.hasDatabase || !context.supabaseStarted;
406
+ }
407
+ function phaseFailed({
408
+ event
409
+ }) {
410
+ return event?.output?.passed === false;
411
+ }
412
+ var guards = {
413
+ shouldSkipDb,
414
+ shouldSkipApp,
415
+ shouldSkipManifest,
416
+ shouldSkipTablesManifest,
417
+ phaseFailed
418
+ };
419
+
420
+ // src/commands/dev/types.ts
421
+ init_esm_shims();
422
+ function createOutput(context) {
423
+ return {
424
+ success: context.error === null,
425
+ exitCode: context.error ? 1 : 0,
426
+ appPid: context.appPid ?? void 0,
427
+ supabaseStarted: context.supabaseStarted,
428
+ error: context.error ?? void 0
429
+ };
430
+ }
431
+
432
+ // src/commands/dev/machine.ts
433
+ var e2eMeta = {
434
+ idle: {
435
+ description: "Waiting for START event to begin dev workflow",
436
+ severity: "non-critical",
437
+ observables: {
438
+ log: "Starting dev"
439
+ },
440
+ assertions: ["expect(log).toContain('Starting dev')", "expect(state).toBe('idle')"],
441
+ nextStates: ["processCheck"]
442
+ },
443
+ processCheck: {
444
+ description: "Check for existing runa dev process and port availability",
445
+ severity: "blocking",
446
+ observables: {
447
+ log: "Checking for existing processes"
448
+ },
449
+ assertions: ["expect(log).toContain('Checking for existing processes')"],
450
+ nextStates: ["setup", "failed"]
451
+ },
452
+ setup: {
453
+ description: "Setup phase: deps, env, Supabase",
454
+ severity: "blocking",
455
+ observables: {
456
+ log: "Setup"
457
+ },
458
+ assertions: ["expect(log).toContain('Setup')"],
459
+ nextStates: ["appStart", "running", "failed"]
460
+ },
461
+ appStart: {
462
+ description: "Start Next.js dev server",
463
+ severity: "blocking",
464
+ observables: {
465
+ log: "Starting app",
466
+ process: "Next.js dev server process started"
467
+ },
468
+ assertions: ["expect(log).toContain('Starting app')", "expect(ctx.appPid).toBeGreaterThan(0)"],
469
+ nextStates: ["running", "failed"]
470
+ },
471
+ manifest: {
472
+ description: "Refresh manifest.json before starting the dev app",
473
+ severity: "blocking",
474
+ observables: {
475
+ log: "Refreshing manifest",
476
+ fs: ".runa/manifests/manifest.json updated"
477
+ },
478
+ assertions: ["expect(log).toContain('Refreshing manifest')"],
479
+ nextStates: ["appStart", "failed"]
480
+ },
481
+ tablesManifest: {
482
+ description: "Refresh tables.json from the local database before starting the dev app",
483
+ severity: "blocking",
484
+ observables: {
485
+ log: "Refreshing tables manifest",
486
+ fs: ".runa/manifests/tables.json updated"
487
+ },
488
+ assertions: ["expect(log).toContain('Refreshing tables manifest')"],
489
+ nextStates: ["manifest", "failed"]
490
+ },
491
+ running: {
492
+ description: "Dev server running until STOP signal",
493
+ severity: "non-critical",
494
+ observables: {
495
+ log: "Dev server running",
496
+ http: "http://localhost:3000 responding"
497
+ },
498
+ assertions: ["expect(log).toContain('Dev server running')"],
499
+ nextStates: ["shutdown"]
500
+ },
501
+ shutdown: {
502
+ description: "Gracefully shutdown dev server",
503
+ severity: "blocking",
504
+ observables: {
505
+ log: "Shutting down",
506
+ process: "Dev server process terminated"
507
+ },
508
+ assertions: ["expect(log).toContain('Shutting down')"],
509
+ nextStates: ["done"]
510
+ },
511
+ done: {
512
+ description: "Dev workflow completed successfully",
513
+ severity: "final",
514
+ observables: {
515
+ exit: 0
516
+ },
517
+ assertions: ["expect(exitCode).toBe(0)"],
518
+ nextStates: []
519
+ },
520
+ failed: {
521
+ description: "Dev workflow failed with error",
522
+ severity: "final",
523
+ observables: {
524
+ exit: 1
525
+ },
526
+ assertions: ["expect(exitCode).toBe(1)"],
527
+ nextStates: []
528
+ }
529
+ };
530
+ function normalizeDevMachineInput(input) {
531
+ const normalizedInput = DevInputSchema.parse(input?.input ?? {});
532
+ const repoRoot = input?.repoRoot ?? normalizedInput.targetDir ?? process.cwd();
533
+ return {
534
+ input: normalizedInput,
535
+ repoRoot
536
+ };
537
+ }
538
+ var devMachine = setup({
539
+ types: {},
540
+ actors: {
541
+ processCheck: processCheckActor,
542
+ depsInstall: depsInstallActor,
543
+ envCheck: envCheckActor,
544
+ supabaseStart: supabaseStartActor,
545
+ tablesManifest: tablesManifestActor,
546
+ manifest: manifestActor,
547
+ appStart: appStartActor,
548
+ shutdown: shutdownActor
549
+ },
550
+ guards: {
551
+ shouldSkipDb: guards.shouldSkipDb,
552
+ shouldSkipApp: guards.shouldSkipApp,
553
+ shouldSkipTablesManifest: guards.shouldSkipTablesManifest,
554
+ shouldSkipManifest: guards.shouldSkipManifest,
555
+ phaseFailed: guards.phaseFailed
556
+ }
557
+ }).createMachine({
558
+ id: "dev",
559
+ initial: "idle",
560
+ context: ({ input }) => {
561
+ const normalizedInput = normalizeDevMachineInput(input);
562
+ const repoRoot = normalizedInput.repoRoot;
563
+ return {
564
+ input: normalizedInput.input,
565
+ repoRoot,
566
+ tmpDir: ".runa/tmp/dev",
567
+ hasDatabase: detectDatabase(repoRoot),
568
+ hasManifestTask: detectManifestTask(repoRoot),
569
+ appPid: null,
570
+ supabaseStarted: false,
571
+ staleProcessRecovered: false,
572
+ startTime: Date.now(),
573
+ error: null
574
+ };
575
+ },
576
+ states: {
577
+ // ============================================================
578
+ // Idle State
579
+ // ============================================================
580
+ idle: {
581
+ meta: { e2e: e2eMeta.idle },
582
+ on: {
583
+ START: { target: "processCheck" }
584
+ }
585
+ },
586
+ // ============================================================
587
+ // Process Check Phase
588
+ // ============================================================
589
+ processCheck: {
590
+ meta: { e2e: e2eMeta.processCheck },
591
+ invoke: {
592
+ src: "processCheck",
593
+ input: ({ context }) => ({
594
+ repoRoot: context.repoRoot,
595
+ tmpDir: context.tmpDir,
596
+ port: context.input.port,
597
+ replace: context.input.replace,
598
+ skipApp: context.input.skipApp
599
+ }),
600
+ onDone: {
601
+ target: "setup",
602
+ actions: assign({
603
+ staleProcessRecovered: ({ event }) => {
604
+ const output = event.output;
605
+ return output?.staleProcessRecovered ?? false;
606
+ }
607
+ })
608
+ },
609
+ onError: {
610
+ target: "failed",
611
+ actions: assign({
612
+ error: ({ event }) => event.error instanceof Error ? event.error.message : String(event.error)
613
+ })
614
+ }
615
+ }
616
+ },
617
+ // ============================================================
618
+ // Setup Phase
619
+ // ============================================================
620
+ setup: {
621
+ meta: { e2e: e2eMeta.setup },
622
+ initial: "depsInstall",
623
+ states: {
624
+ depsInstall: {
625
+ invoke: {
626
+ src: "depsInstall",
627
+ input: ({ context }) => ({
628
+ repoRoot: context.repoRoot,
629
+ verbose: context.input.verbose
630
+ }),
631
+ onDone: { target: "envCheck" },
632
+ onError: {
633
+ target: "#dev.failed",
634
+ actions: assign({
635
+ error: ({ event }) => `Dependencies install failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
636
+ })
637
+ }
638
+ }
639
+ },
640
+ envCheck: {
641
+ invoke: {
642
+ src: "envCheck",
643
+ input: ({ context }) => ({
644
+ repoRoot: context.repoRoot,
645
+ verbose: context.input.verbose
646
+ }),
647
+ onDone: { target: "supabaseStart" },
648
+ onError: { target: "supabaseStart" }
649
+ // Non-blocking
650
+ }
651
+ },
652
+ supabaseStart: {
653
+ always: [{ guard: "shouldSkipDb", target: "done" }],
654
+ invoke: {
655
+ src: "supabaseStart",
656
+ input: ({ context }) => ({
657
+ repoRoot: context.repoRoot,
658
+ verbose: context.input.verbose
659
+ }),
660
+ onDone: {
661
+ target: "done",
662
+ actions: assign({
663
+ supabaseStarted: ({ event }) => event.output.started || event.output.alreadyRunning
664
+ })
665
+ },
666
+ onError: { target: "done" }
667
+ // Non-blocking
668
+ }
669
+ },
670
+ done: {
671
+ type: "final"
672
+ }
673
+ },
674
+ onDone: [{ guard: "shouldSkipApp", target: "running" }, { target: "tablesManifest" }]
675
+ },
676
+ // ============================================================
677
+ // Tables Manifest Refresh Phase
678
+ // ============================================================
679
+ tablesManifest: {
680
+ meta: { e2e: e2eMeta.tablesManifest },
681
+ always: [{ guard: "shouldSkipTablesManifest", target: "manifest" }],
682
+ invoke: {
683
+ src: "tablesManifest",
684
+ input: ({ context }) => ({
685
+ repoRoot: context.repoRoot
686
+ }),
687
+ onDone: [
688
+ {
689
+ guard: "phaseFailed",
690
+ target: "failed",
691
+ actions: assign({
692
+ error: ({ event }) => event.output.error ?? "Tables manifest refresh failed during dev startup"
693
+ })
694
+ },
695
+ { target: "manifest" }
696
+ ],
697
+ onError: {
698
+ target: "failed",
699
+ actions: assign({
700
+ error: ({ event }) => `Tables manifest refresh failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
701
+ })
702
+ }
703
+ }
704
+ },
705
+ // ============================================================
706
+ // Manifest Refresh Phase
707
+ // ============================================================
708
+ manifest: {
709
+ meta: { e2e: e2eMeta.manifest },
710
+ always: [{ guard: "shouldSkipManifest", target: "appStart" }],
711
+ invoke: {
712
+ src: "manifest",
713
+ input: ({ context }) => ({
714
+ repoRoot: context.repoRoot,
715
+ tmpDir: context.tmpDir
716
+ }),
717
+ onDone: [
718
+ {
719
+ guard: "phaseFailed",
720
+ target: "failed",
721
+ actions: assign({
722
+ error: ({ event }) => event.output.error ?? "Manifest refresh failed during dev startup"
723
+ })
724
+ },
725
+ { target: "appStart" }
726
+ ],
727
+ onError: {
728
+ target: "failed",
729
+ actions: assign({
730
+ error: ({ event }) => `Manifest refresh failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
731
+ })
732
+ }
733
+ }
734
+ },
735
+ // ============================================================
736
+ // App Start Phase
737
+ // ============================================================
738
+ appStart: {
739
+ meta: { e2e: e2eMeta.appStart },
740
+ invoke: {
741
+ src: "appStart",
742
+ input: ({ context }) => {
743
+ const detected = detectApp(context.repoRoot);
744
+ return {
745
+ repoRoot: context.repoRoot,
746
+ appDir: detected?.appDir ?? context.repoRoot,
747
+ port: context.input.port,
748
+ tmpDir: context.tmpDir,
749
+ stream: context.input.stream,
750
+ bundler: context.input.bundler
751
+ };
752
+ },
753
+ onDone: {
754
+ target: "running",
755
+ actions: assign({
756
+ appPid: ({ event }) => event.output.pid
757
+ })
758
+ },
759
+ onError: {
760
+ target: "failed",
761
+ actions: assign({
762
+ error: ({ event }) => `App start failed: ${event.error instanceof Error ? event.error.message : String(event.error)}`
763
+ })
764
+ }
765
+ }
766
+ },
767
+ // ============================================================
768
+ // Running State (waiting for STOP signal)
769
+ // ============================================================
770
+ running: {
771
+ meta: { e2e: e2eMeta.running },
772
+ on: {
773
+ STOP: { target: "shutdown" }
774
+ }
775
+ },
776
+ // ============================================================
777
+ // Shutdown Phase
778
+ // ============================================================
779
+ shutdown: {
780
+ meta: { e2e: e2eMeta.shutdown },
781
+ invoke: {
782
+ src: "shutdown",
783
+ input: ({ context }) => ({
784
+ pid: context.appPid ?? 0
785
+ }),
786
+ onDone: { target: "done" },
787
+ onError: { target: "done" }
788
+ // Still exit on error
789
+ }
790
+ },
791
+ // ============================================================
792
+ // Final States
793
+ // ============================================================
794
+ done: {
795
+ meta: { e2e: e2eMeta.done },
796
+ type: "final"
797
+ },
798
+ failed: {
799
+ meta: { e2e: e2eMeta.failed },
800
+ type: "final"
801
+ }
802
+ },
803
+ output: ({ context }) => createOutput(context)
804
+ });
805
+ function getStateName(snapshot) {
806
+ if (typeof snapshot.value === "string") {
807
+ return snapshot.value;
808
+ }
809
+ const topLevel = Object.keys(snapshot.value)[0];
810
+ if (topLevel && typeof snapshot.value === "object") {
811
+ const nested = snapshot.value[topLevel];
812
+ if (nested && typeof nested === "string") {
813
+ return `${topLevel}.${nested}`;
814
+ }
815
+ }
816
+ return topLevel ?? "unknown";
817
+ }
818
+ function isComplete(snapshot) {
819
+ return snapshot.status === "done";
820
+ }
821
+
822
+ // src/commands/dev/commands/dev.ts
823
+ var stateLogHandlers = {
824
+ idle: (logger) => {
825
+ logger.section("Dev Server");
826
+ logger.info("Starting development environment...");
827
+ },
828
+ processCheck: (logger) => {
829
+ logger.info("Checking for existing processes...");
830
+ },
831
+ setup: (logger) => {
832
+ logger.section("Phase 0: Setup");
833
+ logger.info("Checking environment prerequisites...");
834
+ },
835
+ "setup.depsInstall": (logger) => {
836
+ logger.info(" Checking dependencies...");
837
+ },
838
+ "setup.envCheck": (logger) => {
839
+ logger.info(" Checking environment variables...");
840
+ },
841
+ "setup.supabaseStart": (logger) => {
842
+ logger.info(" Starting Supabase...");
843
+ },
844
+ tablesManifest: (logger) => {
845
+ logger.section("Phase 1: Tables");
846
+ logger.info("Refreshing tables manifest...");
847
+ },
848
+ manifest: (logger) => {
849
+ logger.section("Phase 2: Manifest");
850
+ logger.info("Refreshing manifest artifacts...");
851
+ },
852
+ appStart: (logger) => {
853
+ logger.section("Phase 3: App Start");
854
+ logger.info("Starting Next.js dev server...");
855
+ },
856
+ running: (logger, _context, extra) => {
857
+ logger.section("Development Server Running");
858
+ logger.success(`App running at http://localhost:${extra?.port ?? 3e3}`);
859
+ logger.info("");
860
+ logger.info("Press Ctrl+C to stop");
861
+ },
862
+ shutdown: (logger) => {
863
+ logger.info("");
864
+ logger.section("Shutting Down");
865
+ logger.info("Stopping dev server...");
866
+ }
867
+ };
868
+ var handleStateChange = createMachineStateChangeLogger({
869
+ getState: getStateName,
870
+ getContext: (snapshot) => snapshot.context,
871
+ handlers: stateLogHandlers,
872
+ useParentState: true
873
+ });
874
+ function shouldLogStaleRecovery(state, prevState, snapshot) {
875
+ return prevState === "processCheck" && state.startsWith("setup") && snapshot.context.staleProcessRecovered;
876
+ }
877
+ function printSummary(logger, output) {
878
+ if (output.success) {
879
+ logger.success("Dev server stopped successfully");
880
+ } else {
881
+ logger.error(`Dev server failed: ${output.error}`);
882
+ }
883
+ }
884
+ function shouldWritePortBridge(snapshot, previousState, currentState) {
885
+ return previousState.startsWith("setup") && (currentState === "appStart" || currentState === "running") && snapshot.context.supabaseStarted;
886
+ }
887
+ function logPortBridgeResult(logger, bridgeResult) {
888
+ if (bridgeResult.written) {
889
+ logger.info(
890
+ ` \u2192 .env.local written (port override: api=${bridgeResult.ports.api}, db=${bridgeResult.ports.db})`
891
+ );
892
+ return;
893
+ }
894
+ if (bridgeResult.reason === "user-managed") {
895
+ logger.warn(" \u2192 .env.local exists but is user-managed; port override skipped");
896
+ }
897
+ }
898
+ function tryWritePortBridge(snapshot, previousState, currentState, logger) {
899
+ if (!shouldWritePortBridge(snapshot, previousState, currentState)) {
900
+ return;
901
+ }
902
+ try {
903
+ const bridgeResult = writeEnvLocalBridge(
904
+ snapshot.context.repoRoot,
905
+ detectLocalSupabasePorts(snapshot.context.repoRoot)
906
+ );
907
+ logPortBridgeResult(logger, bridgeResult);
908
+ } catch (error) {
909
+ }
910
+ }
911
+ function resolveOutputIfComplete(snapshot, resolve) {
912
+ if (!isComplete(snapshot)) return;
913
+ const output = snapshot.output;
914
+ if (output) {
915
+ resolve(output);
916
+ }
917
+ }
918
+ async function runDevMachine(input, logger) {
919
+ const repoRoot = input.targetDir ?? findRepoRoot(process.cwd());
920
+ return new Promise((resolve, reject) => {
921
+ const actor = createActor(devMachine, {
922
+ input: { input, repoRoot }
923
+ });
924
+ let previousState = "";
925
+ actor.subscribe((snapshot) => {
926
+ const currentState = getStateName(snapshot);
927
+ if (currentState !== previousState) {
928
+ handleStateChange(snapshot, previousState, logger, { port: input.port ?? 3e3 });
929
+ if (shouldLogStaleRecovery(currentState, previousState, snapshot)) {
930
+ logger.success(" Stale process recovered. Port is now available.");
931
+ }
932
+ tryWritePortBridge(snapshot, previousState, currentState, logger);
933
+ previousState = currentState;
934
+ }
935
+ resolveOutputIfComplete(snapshot, resolve);
936
+ });
937
+ actor.subscribe({
938
+ error: (error) => {
939
+ reject(error);
940
+ actor.stop();
941
+ }
942
+ });
943
+ const handleSignal = () => {
944
+ logger.info("");
945
+ logger.info("Received shutdown signal...");
946
+ actor.send({ type: "STOP" });
947
+ };
948
+ process.on("SIGINT", handleSignal);
949
+ process.on("SIGTERM", handleSignal);
950
+ actor.start();
951
+ actor.send({ type: "START" });
952
+ });
953
+ }
954
+ async function runDevAction(options, cmd) {
955
+ const logger = createCLILogger("dev");
956
+ try {
957
+ const result = await runDevMachine(options, logger);
958
+ printSummary(logger, result);
959
+ emitJsonSuccess(cmd, DevOutputSchema, result);
960
+ if (!result.success) {
961
+ throw new CLIError(result.error ?? "Dev server failed", "DEV_FAILED", [
962
+ "Check logs in .runa/tmp/dev/ for details",
963
+ "Run with --verbose for more output"
964
+ ]);
965
+ }
966
+ } catch (error) {
967
+ if (error instanceof CLIError) {
968
+ throw error;
969
+ }
970
+ throw new CLIError(
971
+ error instanceof Error ? error.message : String(error),
972
+ "DEV_ERROR",
973
+ ["Run with --verbose for more details"],
974
+ error instanceof Error ? error : void 0
975
+ );
976
+ }
977
+ }
978
+ var devCommand = new Command("dev").description("Start development server (Supabase + Next.js)").option("--port <number>", "Port for Next.js dev server", (val) => Number.parseInt(val, 10), 3e3).option("--skip-db", "Skip Supabase start").option("--skip-app", "Start Supabase only (no app server)").option("--verbose", "Show detailed output").option("--no-stream", "Disable streaming app output to terminal (log to file only)").option("--target-dir <path>", "Target directory (defaults to repo root)").option("--replace", "Replace existing runa dev process if already running").option("--bundler <type>", "Bundler for Next.js dev server (turbopack or webpack)").action(async (options, cmd) => {
979
+ const input = {
980
+ port: options.port,
981
+ skipDb: options.skipDb ?? false,
982
+ skipApp: options.skipApp ?? false,
983
+ verbose: options.verbose ?? false,
984
+ stream: options.stream ?? true,
985
+ targetDir: options.targetDir,
986
+ replace: options.replace ?? false,
987
+ bundler: options.bundler
988
+ };
989
+ await runDevAction(input, cmd);
990
+ });
991
+
992
+ export { devCommand };