@mesh-tech/mesh-cli 0.1.1 → 0.12.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 (504) hide show
  1. package/assets/intent/agents-fence.md +10 -0
  2. package/assets/intent/intent-claude-gate.mjs +255 -0
  3. package/assets/log-shipper.mjs +94 -0
  4. package/bin/mesh.mjs +80 -0
  5. package/dist/bin/mesh.d.ts +7 -9
  6. package/dist/bin/mesh.d.ts.map +1 -1
  7. package/dist/bin/mesh.js +20826 -37
  8. package/dist/bin/mesh.js.map +7 -1
  9. package/dist/build-info.json +4 -0
  10. package/dist/src/commands/agent-api-client.d.ts +79 -0
  11. package/dist/src/commands/agent-api-client.d.ts.map +1 -0
  12. package/dist/src/commands/agent-api-client.js +170 -0
  13. package/dist/src/commands/agent-api-client.js.map +1 -0
  14. package/dist/src/commands/artifacts.d.ts +13 -0
  15. package/dist/src/commands/artifacts.d.ts.map +1 -0
  16. package/dist/src/commands/artifacts.js +140 -0
  17. package/dist/src/commands/artifacts.js.map +1 -0
  18. package/dist/src/commands/cluster.d.ts +45 -0
  19. package/dist/src/commands/cluster.d.ts.map +1 -0
  20. package/dist/src/commands/cluster.js +259 -0
  21. package/dist/src/commands/cluster.js.map +1 -0
  22. package/dist/src/commands/conversations.d.ts +61 -0
  23. package/dist/src/commands/conversations.d.ts.map +1 -0
  24. package/dist/src/commands/conversations.js +239 -0
  25. package/dist/src/commands/conversations.js.map +1 -0
  26. package/dist/src/commands/create-app.d.ts +26 -3
  27. package/dist/src/commands/create-app.d.ts.map +1 -1
  28. package/dist/src/commands/create-app.js +465 -107
  29. package/dist/src/commands/create-app.js.map +1 -1
  30. package/dist/src/commands/deploy.d.ts +19 -0
  31. package/dist/src/commands/deploy.d.ts.map +1 -1
  32. package/dist/src/commands/deploy.js +83 -142
  33. package/dist/src/commands/deploy.js.map +1 -1
  34. package/dist/src/commands/dev-doctor.d.ts +137 -0
  35. package/dist/src/commands/dev-doctor.d.ts.map +1 -0
  36. package/dist/src/commands/dev-doctor.js +671 -0
  37. package/dist/src/commands/dev-doctor.js.map +1 -0
  38. package/dist/src/commands/dev-launch.d.ts +59 -0
  39. package/dist/src/commands/dev-launch.d.ts.map +1 -0
  40. package/dist/src/commands/dev-launch.js +118 -0
  41. package/dist/src/commands/dev-launch.js.map +1 -0
  42. package/dist/src/commands/dev-token-server.d.ts +32 -0
  43. package/dist/src/commands/dev-token-server.d.ts.map +1 -0
  44. package/dist/src/commands/dev-token-server.js +68 -0
  45. package/dist/src/commands/dev-token-server.js.map +1 -0
  46. package/dist/src/commands/dev.d.ts +289 -2
  47. package/dist/src/commands/dev.d.ts.map +1 -1
  48. package/dist/src/commands/dev.js +2501 -574
  49. package/dist/src/commands/dev.js.map +1 -1
  50. package/dist/src/commands/docs.d.ts +3 -0
  51. package/dist/src/commands/docs.d.ts.map +1 -0
  52. package/dist/src/commands/docs.js +262 -0
  53. package/dist/src/commands/docs.js.map +1 -0
  54. package/dist/src/commands/hub/index.d.ts +99 -0
  55. package/dist/src/commands/hub/index.d.ts.map +1 -0
  56. package/dist/src/commands/hub/index.js +452 -0
  57. package/dist/src/commands/hub/index.js.map +1 -0
  58. package/dist/src/commands/init.d.ts +65 -0
  59. package/dist/src/commands/init.d.ts.map +1 -0
  60. package/dist/src/commands/init.js +370 -0
  61. package/dist/src/commands/init.js.map +1 -0
  62. package/dist/src/commands/install-shim.d.ts +21 -0
  63. package/dist/src/commands/install-shim.d.ts.map +1 -0
  64. package/dist/src/commands/install-shim.js +132 -0
  65. package/dist/src/commands/install-shim.js.map +1 -0
  66. package/dist/src/commands/local/auth-provision.d.ts +71 -0
  67. package/dist/src/commands/local/auth-provision.d.ts.map +1 -0
  68. package/dist/src/commands/local/auth-provision.js +286 -0
  69. package/dist/src/commands/local/auth-provision.js.map +1 -0
  70. package/dist/src/commands/local/dev-local.d.ts +97 -0
  71. package/dist/src/commands/local/dev-local.d.ts.map +1 -0
  72. package/dist/src/commands/local/dev-local.js +306 -0
  73. package/dist/src/commands/local/dev-local.js.map +1 -0
  74. package/dist/src/commands/local/docker-runner.d.ts +37 -0
  75. package/dist/src/commands/local/docker-runner.d.ts.map +1 -0
  76. package/dist/src/commands/local/docker-runner.js +104 -0
  77. package/dist/src/commands/local/docker-runner.js.map +1 -0
  78. package/dist/src/commands/local/helpers.d.ts +22 -0
  79. package/dist/src/commands/local/helpers.d.ts.map +1 -0
  80. package/dist/src/commands/local/helpers.js +46 -0
  81. package/dist/src/commands/local/helpers.js.map +1 -0
  82. package/dist/src/commands/local/hub-local.d.ts +51 -0
  83. package/dist/src/commands/local/hub-local.d.ts.map +1 -0
  84. package/dist/src/commands/local/hub-local.js +197 -0
  85. package/dist/src/commands/local/hub-local.js.map +1 -0
  86. package/dist/src/commands/local/index.d.ts +23 -0
  87. package/dist/src/commands/local/index.d.ts.map +1 -0
  88. package/dist/src/commands/local/index.js +386 -0
  89. package/dist/src/commands/local/index.js.map +1 -0
  90. package/dist/src/commands/local/mocks.d.ts +361 -0
  91. package/dist/src/commands/local/mocks.d.ts.map +1 -0
  92. package/dist/src/commands/local/mocks.js +756 -0
  93. package/dist/src/commands/local/mocks.js.map +1 -0
  94. package/dist/src/commands/local/seed-zitadel.d.ts +151 -0
  95. package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -0
  96. package/dist/src/commands/local/seed-zitadel.js +408 -0
  97. package/dist/src/commands/local/seed-zitadel.js.map +1 -0
  98. package/dist/src/commands/local/seed.d.ts +106 -0
  99. package/dist/src/commands/local/seed.d.ts.map +1 -0
  100. package/dist/src/commands/local/seed.js +252 -0
  101. package/dist/src/commands/local/seed.js.map +1 -0
  102. package/dist/src/commands/local/stack.d.ts +173 -0
  103. package/dist/src/commands/local/stack.d.ts.map +1 -0
  104. package/dist/src/commands/local/stack.js +499 -0
  105. package/dist/src/commands/local/stack.js.map +1 -0
  106. package/dist/src/commands/login.d.ts +256 -12
  107. package/dist/src/commands/login.d.ts.map +1 -1
  108. package/dist/src/commands/login.js +978 -50
  109. package/dist/src/commands/login.js.map +1 -1
  110. package/dist/src/commands/peer-addressing.d.ts +51 -0
  111. package/dist/src/commands/peer-addressing.d.ts.map +1 -0
  112. package/dist/src/commands/peer-addressing.js +64 -0
  113. package/dist/src/commands/peer-addressing.js.map +1 -0
  114. package/dist/src/commands/port-ownership.d.ts +69 -0
  115. package/dist/src/commands/port-ownership.d.ts.map +1 -0
  116. package/dist/src/commands/port-ownership.js +161 -0
  117. package/dist/src/commands/port-ownership.js.map +1 -0
  118. package/dist/src/commands/registry-publish.d.ts +3 -0
  119. package/dist/src/commands/registry-publish.d.ts.map +1 -0
  120. package/dist/src/commands/registry-publish.js +161 -0
  121. package/dist/src/commands/registry-publish.js.map +1 -0
  122. package/dist/src/commands/registry.d.ts +146 -2
  123. package/dist/src/commands/registry.d.ts.map +1 -1
  124. package/dist/src/commands/registry.js +541 -85
  125. package/dist/src/commands/registry.js.map +1 -1
  126. package/dist/src/commands/secrets/index.d.ts.map +1 -1
  127. package/dist/src/commands/secrets/index.js +15 -1
  128. package/dist/src/commands/secrets/index.js.map +1 -1
  129. package/dist/src/commands/secrets/migrate-config.d.ts +24 -0
  130. package/dist/src/commands/secrets/migrate-config.d.ts.map +1 -0
  131. package/dist/src/commands/secrets/migrate-config.js +277 -0
  132. package/dist/src/commands/secrets/migrate-config.js.map +1 -0
  133. package/dist/src/commands/secrets/set.d.ts +1 -0
  134. package/dist/src/commands/secrets/set.d.ts.map +1 -1
  135. package/dist/src/commands/secrets/set.js +96 -2
  136. package/dist/src/commands/secrets/set.js.map +1 -1
  137. package/dist/src/commands/skills.d.ts +34 -0
  138. package/dist/src/commands/skills.d.ts.map +1 -0
  139. package/dist/src/commands/skills.js +207 -0
  140. package/dist/src/commands/skills.js.map +1 -0
  141. package/dist/src/commands/stack.d.ts.map +1 -1
  142. package/dist/src/commands/stack.js +361 -23
  143. package/dist/src/commands/stack.js.map +1 -1
  144. package/dist/src/commands/temporal.d.ts +15 -0
  145. package/dist/src/commands/temporal.d.ts.map +1 -0
  146. package/dist/src/commands/temporal.js +781 -0
  147. package/dist/src/commands/temporal.js.map +1 -0
  148. package/dist/src/commands/tenant.d.ts +56 -0
  149. package/dist/src/commands/tenant.d.ts.map +1 -0
  150. package/dist/src/commands/tenant.js +233 -0
  151. package/dist/src/commands/tenant.js.map +1 -0
  152. package/dist/src/commands/tunnel/index.d.ts +49 -3
  153. package/dist/src/commands/tunnel/index.d.ts.map +1 -1
  154. package/dist/src/commands/tunnel/index.js +331 -8
  155. package/dist/src/commands/tunnel/index.js.map +1 -1
  156. package/dist/src/commands/vcs/clone.d.ts +3 -0
  157. package/dist/src/commands/vcs/clone.d.ts.map +1 -0
  158. package/dist/src/commands/vcs/clone.js +20 -0
  159. package/dist/src/commands/vcs/clone.js.map +1 -0
  160. package/dist/src/commands/vcs/common.d.ts +21 -0
  161. package/dist/src/commands/vcs/common.d.ts.map +1 -0
  162. package/dist/src/commands/vcs/common.js +62 -0
  163. package/dist/src/commands/vcs/common.js.map +1 -0
  164. package/dist/src/commands/vcs/drafts.d.ts +13 -0
  165. package/dist/src/commands/vcs/drafts.d.ts.map +1 -0
  166. package/dist/src/commands/vcs/drafts.js +45 -0
  167. package/dist/src/commands/vcs/drafts.js.map +1 -0
  168. package/dist/src/commands/vcs/get.d.ts +8 -0
  169. package/dist/src/commands/vcs/get.d.ts.map +1 -0
  170. package/dist/src/commands/vcs/get.js +61 -0
  171. package/dist/src/commands/vcs/get.js.map +1 -0
  172. package/dist/src/commands/vcs/index.d.ts +3 -0
  173. package/dist/src/commands/vcs/index.d.ts.map +1 -0
  174. package/dist/src/commands/vcs/index.js +58 -0
  175. package/dist/src/commands/vcs/index.js.map +1 -0
  176. package/dist/src/commands/vcs/propose.d.ts +23 -0
  177. package/dist/src/commands/vcs/propose.d.ts.map +1 -0
  178. package/dist/src/commands/vcs/propose.js +94 -0
  179. package/dist/src/commands/vcs/propose.js.map +1 -0
  180. package/dist/src/commands/vcs/review.d.ts +15 -0
  181. package/dist/src/commands/vcs/review.d.ts.map +1 -0
  182. package/dist/src/commands/vcs/review.js +35 -0
  183. package/dist/src/commands/vcs/review.js.map +1 -0
  184. package/dist/src/commands/vcs-enrich.d.ts +15 -0
  185. package/dist/src/commands/vcs-enrich.d.ts.map +1 -0
  186. package/dist/src/commands/vcs-enrich.js +28 -0
  187. package/dist/src/commands/vcs-enrich.js.map +1 -0
  188. package/dist/src/commands/vpn/index.d.ts +24 -0
  189. package/dist/src/commands/vpn/index.d.ts.map +1 -0
  190. package/dist/src/commands/vpn/index.js +543 -0
  191. package/dist/src/commands/vpn/index.js.map +1 -0
  192. package/dist/src/commands/vpn/tunnel.d.ts +11 -0
  193. package/dist/src/commands/vpn/tunnel.d.ts.map +1 -0
  194. package/dist/src/commands/vpn/tunnel.js +188 -0
  195. package/dist/src/commands/vpn/tunnel.js.map +1 -0
  196. package/dist/src/commands/workflow.d.ts +24 -0
  197. package/dist/src/commands/workflow.d.ts.map +1 -0
  198. package/dist/src/commands/workflow.js +577 -0
  199. package/dist/src/commands/workflow.js.map +1 -0
  200. package/dist/src/docs/assemble.d.ts +217 -0
  201. package/dist/src/docs/assemble.d.ts.map +1 -0
  202. package/dist/src/docs/assemble.js +739 -0
  203. package/dist/src/docs/assemble.js.map +1 -0
  204. package/dist/src/docs/cli-reference.d.ts +93 -0
  205. package/dist/src/docs/cli-reference.d.ts.map +1 -0
  206. package/dist/src/docs/cli-reference.js +256 -0
  207. package/dist/src/docs/cli-reference.js.map +1 -0
  208. package/dist/src/docs/discover.d.ts +60 -0
  209. package/dist/src/docs/discover.d.ts.map +1 -0
  210. package/dist/src/docs/discover.js +233 -0
  211. package/dist/src/docs/discover.js.map +1 -0
  212. package/dist/src/docs/portal.d.ts +79 -0
  213. package/dist/src/docs/portal.d.ts.map +1 -0
  214. package/dist/src/docs/portal.js +242 -0
  215. package/dist/src/docs/portal.js.map +1 -0
  216. package/dist/src/docs/registry-docs.d.ts +43 -0
  217. package/dist/src/docs/registry-docs.d.ts.map +1 -0
  218. package/dist/src/docs/registry-docs.js +138 -0
  219. package/dist/src/docs/registry-docs.js.map +1 -0
  220. package/dist/src/docs/schema.d.ts +48 -0
  221. package/dist/src/docs/schema.d.ts.map +1 -0
  222. package/dist/src/docs/schema.js +96 -0
  223. package/dist/src/docs/schema.js.map +1 -0
  224. package/dist/src/docs/serve.d.ts +27 -0
  225. package/dist/src/docs/serve.d.ts.map +1 -0
  226. package/dist/src/docs/serve.js +102 -0
  227. package/dist/src/docs/serve.js.map +1 -0
  228. package/dist/src/docs/start.d.ts +80 -0
  229. package/dist/src/docs/start.d.ts.map +1 -0
  230. package/dist/src/docs/start.js +313 -0
  231. package/dist/src/docs/start.js.map +1 -0
  232. package/dist/src/eval/agent-eval.d.mts +14 -0
  233. package/dist/src/eval/agent-eval.d.mts.map +1 -0
  234. package/dist/src/eval/agent-eval.mjs +273 -0
  235. package/dist/src/eval/agent-eval.mjs.map +1 -0
  236. package/dist/src/index.js +624 -7
  237. package/dist/src/index.js.map +7 -1
  238. package/dist/src/program.d.ts +26 -0
  239. package/dist/src/program.d.ts.map +1 -0
  240. package/dist/src/program.js +76 -0
  241. package/dist/src/program.js.map +1 -0
  242. package/dist/src/utils/auth-preflight.d.ts +159 -0
  243. package/dist/src/utils/auth-preflight.d.ts.map +1 -0
  244. package/dist/src/utils/auth-preflight.js +298 -0
  245. package/dist/src/utils/auth-preflight.js.map +1 -0
  246. package/dist/src/utils/aws-auth.d.ts +181 -0
  247. package/dist/src/utils/aws-auth.d.ts.map +1 -0
  248. package/dist/src/utils/aws-auth.js +527 -0
  249. package/dist/src/utils/aws-auth.js.map +1 -0
  250. package/dist/src/utils/bastion.d.ts +1 -1
  251. package/dist/src/utils/bastion.d.ts.map +1 -1
  252. package/dist/src/utils/bastion.js +29 -8
  253. package/dist/src/utils/bastion.js.map +1 -1
  254. package/dist/src/utils/build-info.d.ts +33 -0
  255. package/dist/src/utils/build-info.d.ts.map +1 -0
  256. package/dist/src/utils/build-info.js +102 -0
  257. package/dist/src/utils/build-info.js.map +1 -0
  258. package/dist/src/utils/capture-history.d.ts +62 -0
  259. package/dist/src/utils/capture-history.d.ts.map +1 -0
  260. package/dist/src/utils/capture-history.js +94 -0
  261. package/dist/src/utils/capture-history.js.map +1 -0
  262. package/dist/src/utils/deploy-preflight.d.ts +52 -0
  263. package/dist/src/utils/deploy-preflight.d.ts.map +1 -0
  264. package/dist/src/utils/deploy-preflight.js +183 -0
  265. package/dist/src/utils/deploy-preflight.js.map +1 -0
  266. package/dist/src/utils/errors.d.ts +75 -0
  267. package/dist/src/utils/errors.d.ts.map +1 -0
  268. package/dist/src/utils/errors.js +106 -0
  269. package/dist/src/utils/errors.js.map +1 -0
  270. package/dist/src/utils/first-party-contexts.d.ts +40 -0
  271. package/dist/src/utils/first-party-contexts.d.ts.map +1 -0
  272. package/dist/src/utils/first-party-contexts.js +53 -0
  273. package/dist/src/utils/first-party-contexts.js.map +1 -0
  274. package/dist/src/utils/index.d.ts +2 -0
  275. package/dist/src/utils/index.d.ts.map +1 -1
  276. package/dist/src/utils/index.js +2 -0
  277. package/dist/src/utils/index.js.map +1 -1
  278. package/dist/src/utils/kubeconfig.d.ts +62 -0
  279. package/dist/src/utils/kubeconfig.d.ts.map +1 -0
  280. package/dist/src/utils/kubeconfig.js +118 -0
  281. package/dist/src/utils/kubeconfig.js.map +1 -0
  282. package/dist/src/utils/log.d.ts +27 -1
  283. package/dist/src/utils/log.d.ts.map +1 -1
  284. package/dist/src/utils/log.js +59 -5
  285. package/dist/src/utils/log.js.map +1 -1
  286. package/dist/src/utils/pid.d.ts +47 -0
  287. package/dist/src/utils/pid.d.ts.map +1 -0
  288. package/dist/src/utils/pid.js +83 -0
  289. package/dist/src/utils/pid.js.map +1 -0
  290. package/dist/src/utils/pulumi-run.d.ts +23 -0
  291. package/dist/src/utils/pulumi-run.d.ts.map +1 -0
  292. package/dist/src/utils/pulumi-run.js +112 -0
  293. package/dist/src/utils/pulumi-run.js.map +1 -0
  294. package/dist/src/utils/pulumi.d.ts +15 -0
  295. package/dist/src/utils/pulumi.d.ts.map +1 -1
  296. package/dist/src/utils/pulumi.js +35 -0
  297. package/dist/src/utils/pulumi.js.map +1 -1
  298. package/dist/src/utils/reachability.d.ts +29 -0
  299. package/dist/src/utils/reachability.d.ts.map +1 -0
  300. package/dist/src/utils/reachability.js +81 -0
  301. package/dist/src/utils/reachability.js.map +1 -0
  302. package/dist/src/utils/recover-conversation.d.ts +154 -0
  303. package/dist/src/utils/recover-conversation.d.ts.map +1 -0
  304. package/dist/src/utils/recover-conversation.js +314 -0
  305. package/dist/src/utils/recover-conversation.js.map +1 -0
  306. package/dist/src/utils/registry-broker.d.ts +148 -0
  307. package/dist/src/utils/registry-broker.d.ts.map +1 -0
  308. package/dist/src/utils/registry-broker.js +180 -0
  309. package/dist/src/utils/registry-broker.js.map +1 -0
  310. package/dist/src/utils/socks-forward.d.ts +40 -0
  311. package/dist/src/utils/socks-forward.d.ts.map +1 -0
  312. package/dist/src/utils/socks-forward.js +97 -0
  313. package/dist/src/utils/socks-forward.js.map +1 -0
  314. package/dist/src/utils/stack-flag.d.ts +23 -0
  315. package/dist/src/utils/stack-flag.d.ts.map +1 -0
  316. package/dist/src/utils/stack-flag.js +41 -0
  317. package/dist/src/utils/stack-flag.js.map +1 -0
  318. package/dist/src/utils/tailscale-targets.d.ts +52 -0
  319. package/dist/src/utils/tailscale-targets.d.ts.map +1 -0
  320. package/dist/src/utils/tailscale-targets.js +93 -0
  321. package/dist/src/utils/tailscale-targets.js.map +1 -0
  322. package/dist/src/utils/tailscale.d.ts +277 -0
  323. package/dist/src/utils/tailscale.d.ts.map +1 -0
  324. package/dist/src/utils/tailscale.js +1007 -0
  325. package/dist/src/utils/tailscale.js.map +1 -0
  326. package/dist/src/utils/temporal-auth.d.ts +43 -0
  327. package/dist/src/utils/temporal-auth.d.ts.map +1 -0
  328. package/dist/src/utils/temporal-auth.js +176 -0
  329. package/dist/src/utils/temporal-auth.js.map +1 -0
  330. package/dist/src/utils/temporal-codec.d.ts +101 -0
  331. package/dist/src/utils/temporal-codec.d.ts.map +1 -0
  332. package/dist/src/utils/temporal-codec.js +319 -0
  333. package/dist/src/utils/temporal-codec.js.map +1 -0
  334. package/dist/src/utils/tunnel-ownership.d.ts +130 -0
  335. package/dist/src/utils/tunnel-ownership.d.ts.map +1 -0
  336. package/dist/src/utils/tunnel-ownership.js +274 -0
  337. package/dist/src/utils/tunnel-ownership.js.map +1 -0
  338. package/dist/src/utils/vpn-join.d.ts +32 -0
  339. package/dist/src/utils/vpn-join.d.ts.map +1 -0
  340. package/dist/src/utils/vpn-join.js +62 -0
  341. package/dist/src/utils/vpn-join.js.map +1 -0
  342. package/dist/src/utils/vpn.d.ts +62 -0
  343. package/dist/src/utils/vpn.d.ts.map +1 -0
  344. package/dist/src/utils/vpn.js +183 -0
  345. package/dist/src/utils/vpn.js.map +1 -0
  346. package/dist/src/utils/workflow-fingerprint.d.ts +49 -0
  347. package/dist/src/utils/workflow-fingerprint.d.ts.map +1 -0
  348. package/dist/src/utils/workflow-fingerprint.js +135 -0
  349. package/dist/src/utils/workflow-fingerprint.js.map +1 -0
  350. package/dist/src/utils/worktree-identity.d.ts +86 -0
  351. package/dist/src/utils/worktree-identity.d.ts.map +1 -0
  352. package/dist/src/utils/worktree-identity.js +164 -0
  353. package/dist/src/utils/worktree-identity.js.map +1 -0
  354. package/fragments/agents/AGENTS.md.hbs +92 -0
  355. package/fragments/agents/CLAUDE.md.hbs +8 -0
  356. package/fragments/base/Pulumi.dev.yaml.hbs +10 -0
  357. package/fragments/base/Pulumi.yaml.hbs +9 -0
  358. package/fragments/base/index.ts.hbs +107 -0
  359. package/fragments/base/package.json.hbs +22 -0
  360. package/{templates/api-web-db/api → fragments/base}/tsconfig.json +3 -4
  361. package/fragments/bucket/api/src/storage.ts.hbs +81 -0
  362. package/fragments/database/api/src/db.ts.hbs +23 -0
  363. package/fragments/database/prisma/schema.prisma.hbs +18 -0
  364. package/{templates/api-web-db → fragments/service}/api/.dockerignore +2 -0
  365. package/fragments/service/api/package.json.hbs +40 -0
  366. package/fragments/service/api/src/index.ts.hbs +58 -0
  367. package/{templates/api-web-db → fragments/service/api}/tsconfig.json +5 -3
  368. package/fragments/temporal/worker/.dockerignore +4 -0
  369. package/fragments/temporal/worker/Dockerfile +15 -0
  370. package/{templates/temporal-api-worker → fragments/temporal}/worker/package.json.hbs +3 -2
  371. package/fragments/temporal/worker/src/activities.ts.hbs +14 -0
  372. package/fragments/temporal/worker/src/worker.ts.hbs +27 -0
  373. package/fragments/temporal/worker/src/workflows.ts.hbs +24 -0
  374. package/fragments/temporal/worker/tsconfig.json +13 -0
  375. package/package.json +36 -22
  376. package/skills/core/SKILL.md +365 -0
  377. package/skills/pull-remote-agent-context/SKILL.md +194 -0
  378. package/stack/docker-compose.hub.yml +134 -0
  379. package/stack/docker-compose.yml +447 -0
  380. package/stack/hub/Dockerfile.api +18 -0
  381. package/stack/hub/Dockerfile.auth +10 -0
  382. package/stack/hub/Dockerfile.ui +10 -0
  383. package/stack/init/01-databases.sql +12 -0
  384. package/stack/observability/blackbox.yml +20 -0
  385. package/stack/observability/otel-collector.yaml +73 -0
  386. package/stack/observability/prometheus.yml +36 -0
  387. package/stack/observability/tempo.yaml +25 -0
  388. package/stack/temporal/local.yaml +44 -0
  389. package/templates/api-auth/AGENTS.md.hbs +16 -0
  390. package/templates/api-auth/Pulumi.dev.yaml.hbs +8 -0
  391. package/templates/api-auth/Pulumi.yaml.hbs +8 -0
  392. package/templates/api-auth/README.md.hbs +67 -0
  393. package/templates/api-auth/api/package.json.hbs +28 -0
  394. package/templates/api-auth/api/src/index.ts.hbs +96 -0
  395. package/templates/api-auth/api/src/schema.ts.hbs +35 -0
  396. package/templates/api-auth/api/src/seed-authz.ts.hbs +48 -0
  397. package/templates/api-auth/api/src/spicedb-http-provider.ts.hbs +89 -0
  398. package/templates/api-auth/index.ts.hbs +65 -0
  399. package/templates/api-auth/package.json.hbs +20 -0
  400. package/templates/api-auth/skills/develop/SKILL.md.hbs +32 -0
  401. package/templates/api-role-gating/AGENTS.md.hbs +20 -0
  402. package/templates/api-role-gating/Pulumi.dev.yaml.hbs +8 -0
  403. package/templates/api-role-gating/Pulumi.yaml.hbs +8 -0
  404. package/templates/api-role-gating/README.md.hbs +64 -0
  405. package/templates/api-role-gating/api/Dockerfile +17 -0
  406. package/templates/api-role-gating/api/package.json.hbs +28 -0
  407. package/templates/api-role-gating/api/src/authn.ts.hbs +29 -0
  408. package/templates/api-role-gating/api/src/authz.ts.hbs +12 -0
  409. package/templates/api-role-gating/api/src/main.ts.hbs +58 -0
  410. package/templates/api-role-gating/api/src/schema.ts.hbs +22 -0
  411. package/templates/api-role-gating/api/tsconfig.json +13 -0
  412. package/templates/api-role-gating/index.ts.hbs +107 -0
  413. package/templates/api-role-gating/package.json.hbs +21 -0
  414. package/templates/api-role-gating/skills/develop/SKILL.md.hbs +60 -0
  415. package/templates/api-role-gating/tsconfig.json +10 -0
  416. package/templates/apps-repo/README.md.hbs +24 -0
  417. package/templates/apps-repo/gitignore +41 -0
  418. package/templates/apps-repo/npmrc.hbs +7 -0
  419. package/templates/apps-repo/package.json.hbs +15 -0
  420. package/templates/apps-repo/pnpm-workspace.yaml +3 -0
  421. package/templates/apps-repo/tsconfig.json +18 -0
  422. package/templates/external-service/AGENTS.md.hbs +20 -0
  423. package/templates/external-service/Pulumi.dev.yaml.hbs +8 -0
  424. package/templates/external-service/Pulumi.yaml.hbs +8 -0
  425. package/templates/external-service/README.md.hbs +56 -0
  426. package/templates/external-service/api/Dockerfile +15 -0
  427. package/templates/external-service/api/package.json.hbs +25 -0
  428. package/templates/external-service/api/src/index.ts.hbs +81 -0
  429. package/templates/external-service/index.ts.hbs +82 -0
  430. package/templates/external-service/mocks/vendorpay/package.json.hbs +9 -0
  431. package/templates/external-service/mocks/vendorpay/server.mjs.hbs +61 -0
  432. package/templates/external-service/package.json.hbs +34 -0
  433. package/templates/external-service/skills/develop/SKILL.md.hbs +55 -0
  434. package/templates/external-service/tsconfig.json +10 -0
  435. package/templates/platform-repo/AGENTS.md.hbs +18 -0
  436. package/templates/platform-repo/README.md.hbs +38 -0
  437. package/templates/platform-repo/core/Pulumi.yaml.hbs +12 -0
  438. package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +57 -0
  439. package/templates/platform-repo/core/index.ts +62 -0
  440. package/templates/platform-repo/core/package.json.hbs +22 -0
  441. package/templates/platform-repo/core/tsconfig.json +8 -0
  442. package/templates/platform-repo/package.json.hbs +15 -0
  443. package/templates/platform-repo/platform/Pulumi.yaml.hbs +12 -0
  444. package/templates/platform-repo/platform/Pulumi.{{tenant}}-{{env}}.yaml.hbs +59 -0
  445. package/templates/platform-repo/platform/index.ts +95 -0
  446. package/templates/platform-repo/platform/package.json.hbs +26 -0
  447. package/templates/platform-repo/platform/tsconfig.json +8 -0
  448. package/templates/platform-repo/pnpm-workspace.yaml +3 -0
  449. package/templates/workflow/AGENTS.md.hbs +15 -0
  450. package/templates/workflow/Pulumi.dev.yaml.hbs +8 -0
  451. package/templates/workflow/Pulumi.yaml.hbs +8 -0
  452. package/templates/workflow/README.md.hbs +45 -0
  453. package/templates/workflow/api/.dockerignore +4 -0
  454. package/templates/workflow/api/Dockerfile +15 -0
  455. package/templates/{temporal-api-worker → workflow}/api/package.json.hbs +8 -6
  456. package/templates/workflow/api/src/index.ts.hbs +130 -0
  457. package/templates/workflow/api/tsconfig.json +14 -0
  458. package/templates/workflow/index.ts.hbs +67 -0
  459. package/templates/workflow/package.json.hbs +20 -0
  460. package/templates/workflow/skills/develop/SKILL.md.hbs +32 -0
  461. package/templates/workflow/tsconfig.json +10 -0
  462. package/templates/workflow/worker/.dockerignore +4 -0
  463. package/templates/workflow/worker/Dockerfile +13 -0
  464. package/templates/workflow/worker/package.json.hbs +25 -0
  465. package/templates/workflow/worker/src/worker.ts.hbs +24 -0
  466. package/templates/workflow/worker/tsconfig.json +14 -0
  467. package/dist/src/commands/devbox.d.ts +0 -22
  468. package/dist/src/commands/devbox.d.ts.map +0 -1
  469. package/dist/src/commands/devbox.js +0 -463
  470. package/dist/src/commands/devbox.js.map +0 -1
  471. package/templates/api-web-db/api/Dockerfile +0 -16
  472. package/templates/api-web-db/api/package.json.hbs +0 -21
  473. package/templates/api-web-db/api/src/index.ts.hbs +0 -123
  474. package/templates/api-web-db/package.json.hbs +0 -27
  475. package/templates/api-web-db/sst.config.ts.hbs +0 -151
  476. package/templates/api-web-db/web/.dockerignore +0 -3
  477. package/templates/api-web-db/web/Dockerfile +0 -17
  478. package/templates/api-web-db/web/app/lib/db.server.ts +0 -36
  479. package/templates/api-web-db/web/app/root.tsx +0 -29
  480. package/templates/api-web-db/web/app/routes/home.tsx.hbs +0 -114
  481. package/templates/api-web-db/web/app/routes.ts +0 -3
  482. package/templates/api-web-db/web/package.json.hbs +0 -30
  483. package/templates/api-web-db/web/prisma/schema.prisma +0 -25
  484. package/templates/api-web-db/web/prisma.config.ts +0 -18
  485. package/templates/api-web-db/web/react-router.config.ts +0 -5
  486. package/templates/api-web-db/web/tsconfig.json +0 -19
  487. package/templates/api-web-db/web/vite.config.ts +0 -9
  488. package/templates/temporal-api-worker/README.md.hbs +0 -133
  489. package/templates/temporal-api-worker/api/src/index.ts.hbs +0 -145
  490. package/templates/temporal-api-worker/package.json.hbs +0 -29
  491. package/templates/temporal-api-worker/sst.config.ts.hbs +0 -161
  492. package/templates/temporal-api-worker/worker/Dockerfile +0 -11
  493. package/templates/temporal-api-worker/worker/src/bundle-workflows.ts +0 -38
  494. package/templates/temporal-api-worker/worker/src/worker.ts.hbs +0 -93
  495. /package/templates/{temporal-api-worker → api-auth}/api/.dockerignore +0 -0
  496. /package/templates/{temporal-api-worker → api-auth}/api/Dockerfile +0 -0
  497. /package/templates/{temporal-api-worker → api-auth}/api/tsconfig.json +0 -0
  498. /package/templates/{temporal-api-worker → api-auth}/tsconfig.json +0 -0
  499. /package/templates/{temporal-api-worker/worker → api-role-gating/api}/.dockerignore +0 -0
  500. /package/templates/{temporal-api-worker/worker → external-service/api}/tsconfig.json +0 -0
  501. /package/templates/{temporal-api-worker → workflow}/api/src/encryption-codec.ts +0 -0
  502. /package/templates/{temporal-api-worker → workflow}/worker/src/activities.ts.hbs +0 -0
  503. /package/templates/{temporal-api-worker → workflow}/worker/src/encryption-codec.ts +0 -0
  504. /package/templates/{temporal-api-worker → workflow}/worker/src/workflows.ts.hbs +0 -0
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Helpers for the `mesh start/stop/status` full-local platform stack.
3
+ *
4
+ * The docker compose project (name `mesh-local`) ships inside the CLI package
5
+ * at `<package root>/stack/`, so the stack works in any repo with only Docker
6
+ * installed and is version-locked to the CLI.
7
+ */
8
+ import { execFileSync, spawn, spawnSync } from "child_process";
9
+ import * as fs from "fs";
10
+ import { probeTcp } from "./helpers.js";
11
+ import * as os from "os";
12
+ import * as path from "path";
13
+ import { fileURLToPath } from "url";
14
+ import { parse as parseYaml } from "yaml";
15
+ import { MeshCliError } from "../../utils/errors.js";
16
+ import { startHeartbeat } from "../../utils/log.js";
17
+ export const COMPOSE_PROJECT = "mesh-local";
18
+ /**
19
+ * Host directory `mesh dev --local` writes service logs into
20
+ * ({namespace}/{service}.log). The stack's OTel collector tails it (filelog
21
+ * receiver) and ships to Loki with the hosted k8s_* label scheme, so the
22
+ * Hub's logs view works on local runs unchanged.
23
+ */
24
+ export function localLogsDir() {
25
+ const dir = path.join(os.homedir(), ".cache", "mesh", "mesh-local", "logs");
26
+ fs.mkdirSync(dir, { recursive: true });
27
+ return dir;
28
+ }
29
+ /**
30
+ * Host directory holding blackbox probe targets (Prometheus file_sd JSON) —
31
+ * written by `mesh dev --externals` for external services, mounted into the
32
+ * stack's Prometheus. The local analog of the hosted Probe CRs.
33
+ */
34
+ export function localProbesDir() {
35
+ const dir = path.join(os.homedir(), ".cache", "mesh", "mesh-local", "probes");
36
+ fs.mkdirSync(dir, { recursive: true });
37
+ return dir;
38
+ }
39
+ export const STACK_ENDPOINTS = [
40
+ {
41
+ service: "temporal",
42
+ label: "Temporal gRPC",
43
+ url: "localhost:7233",
44
+ probe: { kind: "tcp", port: 7233 },
45
+ },
46
+ {
47
+ service: "temporal-ui",
48
+ label: "Temporal UI",
49
+ url: "http://localhost:8233/namespaces/local-dev/workflows",
50
+ probe: { kind: "http", url: "http://localhost:8233" },
51
+ hint: "seeded namespace: local-dev",
52
+ },
53
+ {
54
+ service: "zitadel",
55
+ label: "Zitadel console",
56
+ url: "http://localhost:8080",
57
+ probe: { kind: "http", url: "http://localhost:8080/debug/healthz" },
58
+ hint: "admin@local.mesh / LocalDev1!",
59
+ },
60
+ {
61
+ service: "database",
62
+ label: "Postgres",
63
+ url: "postgres://postgres:postgres@localhost:5433",
64
+ probe: { kind: "tcp", port: 5433 },
65
+ hint: "databases: temporal, app, spicedb, hub",
66
+ },
67
+ {
68
+ service: "spicedb",
69
+ label: "SpiceDB gRPC",
70
+ url: "localhost:50051",
71
+ probe: { kind: "tcp", port: 50051 },
72
+ hint: "preshared key: local-dev-key",
73
+ },
74
+ {
75
+ service: "ministack",
76
+ label: "ministack (local AWS endpoint)",
77
+ url: "http://localhost:4566",
78
+ probe: { kind: "http", url: "http://localhost:4566/_ministack/health" },
79
+ hint: "SSM registry under /mesh-platform/local/dev",
80
+ },
81
+ {
82
+ service: "stackport",
83
+ label: "StackPort (local AWS console)",
84
+ url: "http://localhost:4567",
85
+ probe: { kind: "http", url: "http://localhost:4567" },
86
+ hint: "browse the registry (SSM), secrets, S3 artifacts",
87
+ },
88
+ {
89
+ service: "memcached",
90
+ label: "Memcached",
91
+ url: "localhost:11211",
92
+ probe: { kind: "tcp", port: 11211 },
93
+ },
94
+ {
95
+ service: "loki",
96
+ label: "Loki (logs)",
97
+ url: "http://localhost:3100",
98
+ probe: { kind: "http", url: "http://localhost:3100/ready" },
99
+ hint: "mesh dev --local service logs, hosted label scheme",
100
+ },
101
+ {
102
+ service: "tempo",
103
+ label: "Tempo (traces)",
104
+ url: "http://localhost:3200",
105
+ probe: { kind: "http", url: "http://localhost:3200/ready" },
106
+ },
107
+ {
108
+ service: "prometheus",
109
+ label: "Prometheus (metrics)",
110
+ url: "http://localhost:9090",
111
+ probe: { kind: "http", url: "http://localhost:9090/-/ready" },
112
+ },
113
+ {
114
+ service: "otel-collector",
115
+ label: "OTel collector (OTLP in)",
116
+ url: "http://localhost:4318",
117
+ probe: { kind: "http", url: "http://localhost:13133" },
118
+ hint: "apps: OTEL_EXPORTER_OTLP_ENDPOINT (injected by mesh dev --local)",
119
+ },
120
+ {
121
+ service: "elasticsearch",
122
+ label: "OpenSearch (Temporal visibility)",
123
+ url: "http://localhost:9200",
124
+ probe: { kind: "http", url: "http://localhost:9200" },
125
+ },
126
+ ];
127
+ /** Default host port for the containerized local Hub. `mesh hub dev` derives
128
+ * its dev-server default from this too (hub/index.ts), so the two Hubs share
129
+ * one source for "9000" while keeping separate override variables
130
+ * (MESH_HUB_PORT here, MESH_HUB_DEV_PORT there). */
131
+ export const DEFAULT_HUB_PORT = "9000";
132
+ /**
133
+ * Host port the Hub is published on (docker-compose.hub.yml binds
134
+ * `${MESH_HUB_PORT:-9000}:4180`). Override with MESH_HUB_PORT to run the
135
+ * local Hub beside another process that owns 9000 — e.g. a hub-ui dev
136
+ * server running from a different checkout. Export it for BOTH `mesh start`
137
+ * and later `mesh status` calls: the compose file and these probes read the
138
+ * same variable (MESH-2256 tracks deriving it from the running stack so
139
+ * `mesh status` stops depending on shell hygiene). `mesh start` reconciles
140
+ * the seeded Zitadel Hub app's redirect URIs to include the chosen port —
141
+ * Zitadel requires every redirect URI to be registered even in devMode
142
+ * (devMode only allows http).
143
+ *
144
+ * Empty string falls back like compose's `${MESH_HUB_PORT:-9000}` does —
145
+ * `??` alone would diverge (probe `:`, publish 9000).
146
+ */
147
+ export function hubPort() {
148
+ const raw = process.env.MESH_HUB_PORT?.trim();
149
+ if (!raw)
150
+ return DEFAULT_HUB_PORT;
151
+ if (!/^\d+$/.test(raw) || Number(raw) < 1 || Number(raw) > 65535) {
152
+ throw new MeshCliError(`MESH_HUB_PORT must be a TCP port number 1–65535 (got '${raw}').`, {
153
+ remediation: { command: "unset MESH_HUB_PORT # or export a valid port, e.g. 9100" },
154
+ });
155
+ }
156
+ return raw;
157
+ }
158
+ /** Hub overlay endpoints — probed only when the hub containers exist.
159
+ * A function (not a module constant) so hubPort() is read at call time:
160
+ * the CLI's env is fixed before node starts, but tests and programmatic
161
+ * callers set MESH_HUB_PORT after import. */
162
+ export function hubEndpoints() {
163
+ return [
164
+ {
165
+ service: "hub-api",
166
+ label: "Hub API",
167
+ url: "http://localhost:4568",
168
+ probe: { kind: "http", url: "http://localhost:4568/health" },
169
+ },
170
+ {
171
+ service: "hub-ui",
172
+ label: "Hub UI",
173
+ url: `http://localhost:${hubPort()}`,
174
+ probe: { kind: "http", url: `http://localhost:${hubPort()}/ping` },
175
+ hint: "sign in: admin@local.mesh or dev@local.mesh / LocalDev1! (oauth2-proxy, same as deployed)",
176
+ },
177
+ ];
178
+ }
179
+ /**
180
+ * Locate the CLI package root (the directory whose package.json is
181
+ * @mesh-tech/mesh-cli). Works from both the compiled layout (dist/src/…)
182
+ * and the source layout (src/… under tsx).
183
+ */
184
+ export function findPackageRoot(startDir) {
185
+ let dir = startDir ?? path.dirname(fileURLToPath(import.meta.url));
186
+ for (let i = 0; i < 8; i++) {
187
+ const pkgPath = path.join(dir, "package.json");
188
+ if (fs.existsSync(pkgPath)) {
189
+ try {
190
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
191
+ if (pkg.name === "@mesh-tech/mesh-cli")
192
+ return dir;
193
+ }
194
+ catch {
195
+ // unreadable package.json — keep walking
196
+ }
197
+ }
198
+ const parent = path.dirname(dir);
199
+ if (parent === dir)
200
+ break;
201
+ dir = parent;
202
+ }
203
+ throw new MeshCliError("Could not locate the mesh-cli package root (stack assets missing).", {
204
+ remediation: { command: "npm install -g @mesh-tech/mesh-cli" },
205
+ });
206
+ }
207
+ export function stackDir() {
208
+ const dir = path.join(findPackageRoot(), "stack");
209
+ if (!fs.existsSync(path.join(dir, "docker-compose.yml"))) {
210
+ throw new MeshCliError(`Local stack assets not found at ${dir}.`, {
211
+ remediation: { command: "npm install -g @mesh-tech/mesh-cli" },
212
+ });
213
+ }
214
+ return dir;
215
+ }
216
+ /** The compose overlay that declares the Hub services. */
217
+ export const HUB_OVERLAY_FILE = "docker-compose.hub.yml";
218
+ /** Top-level service names a compose file declares. Pure — takes the file text. */
219
+ export function parseComposeServiceNames(yamlText) {
220
+ const doc = parseYaml(yamlText);
221
+ return Object.keys(doc?.services ?? {});
222
+ }
223
+ let hubOverlayServicesCache;
224
+ /**
225
+ * The services the Hub overlay — and only the overlay — declares.
226
+ *
227
+ * Read from `docker-compose.hub.yml` rather than hard-coded beside
228
+ * ONE_SHOT_SERVICES on purpose: a second name list rots the moment the
229
+ * overlay gains or renames a service. (It already declares three — hub-api,
230
+ * hub-ui, hub-auth — not the two the Hub is usually described by.)
231
+ */
232
+ export function hubOverlayServices() {
233
+ if (!hubOverlayServicesCache) {
234
+ const file = path.join(stackDir(), HUB_OVERLAY_FILE);
235
+ if (!fs.existsSync(file)) {
236
+ throw new MeshCliError(`Local stack assets are incomplete: ${file} is missing.`, {
237
+ remediation: { command: "npm install -g @mesh-tech/mesh-cli" },
238
+ });
239
+ }
240
+ hubOverlayServicesCache = new Set(parseComposeServiceNames(fs.readFileSync(file, "utf-8")));
241
+ }
242
+ return hubOverlayServicesCache;
243
+ }
244
+ /**
245
+ * The compose project is a MACHINE-WIDE singleton (`mesh-local`), but any
246
+ * checkout of the CLI can drive it — and `docker compose up` from a checkout
247
+ * whose stack config differs will recreate shared containers out from under
248
+ * whatever else is running against the stack (a second project's `mesh dev`
249
+ * session, a Hub built from another worktree, …).
250
+ *
251
+ * Returns the working dir of the checkout that last (re)created the running
252
+ * stack when it is NOT this one; undefined when the stack isn't running or
253
+ * is already owned here. Callers gate lifecycle commands on it.
254
+ */
255
+ export function stackOwnedElsewhere() {
256
+ // Fail-open by design: a stack that exists but is NOT running (`ps -q`
257
+ // without -a) has nothing to disrupt, so `start` silently re-owns it; and
258
+ // any docker/inspect hiccup disables the guard rather than blocking
259
+ // legitimate lifecycle commands.
260
+ try {
261
+ const first = compose(["ps", "-q"]).trim().split("\n").filter(Boolean)[0];
262
+ if (!first)
263
+ return undefined;
264
+ const label = execFileSync("docker", ["inspect", first, "--format", '{{ index .Config.Labels "com.docker.compose.project.working_dir" }}'], { encoding: "utf-8" }).trim();
265
+ if (!label)
266
+ return undefined;
267
+ // realpath both sides: symlinked layouts (macOS /tmp → /private/tmp,
268
+ // linked worktree parents) must not make the same physical dir compare
269
+ // as foreign. Fall back to the raw path when realpath fails (dir gone).
270
+ const real = (p) => {
271
+ try {
272
+ return fs.realpathSync(p);
273
+ }
274
+ catch {
275
+ return path.resolve(p);
276
+ }
277
+ };
278
+ return real(label) === real(stackDir()) ? undefined : label;
279
+ }
280
+ catch {
281
+ return undefined;
282
+ }
283
+ }
284
+ /** Throw a remediated error if the docker daemon isn't reachable. */
285
+ export function ensureDockerAvailable() {
286
+ const probe = spawnSync("docker", ["info", "--format", "{{.ServerVersion}}"], {
287
+ stdio: ["ignore", "pipe", "pipe"],
288
+ });
289
+ if (probe.error || probe.status !== 0) {
290
+ throw new MeshCliError("Docker is not available (is Docker Desktop / the docker daemon running?).", {
291
+ remediation: { docs: "https://docs.docker.com/get-docker/" },
292
+ });
293
+ }
294
+ }
295
+ /** Run `docker compose` against the packaged stack. `hub` adds the Hub
296
+ * overlay file (safe for ps/logs/down: services simply may not exist);
297
+ * `env` adds process-env overrides (e.g. MESH_HUB_VERSION). */
298
+ export function compose(args, opts = {}) {
299
+ const dir = stackDir();
300
+ const files = ["-f", path.join(dir, "docker-compose.yml")];
301
+ if (opts.hub)
302
+ files.push("-f", path.join(dir, "docker-compose.hub.yml"));
303
+ const fullArgs = ["compose", "-p", COMPOSE_PROJECT, ...files, ...args];
304
+ return execFileSync("docker", fullArgs, {
305
+ cwd: dir,
306
+ encoding: "utf-8",
307
+ // MESH_LOCAL_LOGS on every call: the compose file mounts it into the
308
+ // OTel collector, and an unset variable would both warn and resolve to
309
+ // a different mount (recreate churn between CLI and raw compose runs).
310
+ // IGNORE_ORPHANS: base-only `up` calls would otherwise flag the hub
311
+ // overlay's running containers as orphans.
312
+ env: {
313
+ ...process.env,
314
+ MESH_LOCAL_LOGS: localLogsDir(),
315
+ MESH_LOCAL_PROBES: localProbesDir(),
316
+ COMPOSE_IGNORE_ORPHANS: "1",
317
+ ...opts.env,
318
+ },
319
+ stdio: opts.inherit ? ["ignore", "inherit", "inherit"] : ["ignore", "pipe", "pipe"],
320
+ });
321
+ }
322
+ /**
323
+ * Pick the one line worth reading out of a failed compose run's output:
324
+ * the last error-looking line, else the last non-empty line (MESH-2479).
325
+ * Pure so the selection heuristic is unit-testable.
326
+ */
327
+ export function summarizeComposeFailure(output) {
328
+ const lines = output
329
+ .split("\n")
330
+ .map((l) => l.trim())
331
+ .filter(Boolean);
332
+ const errorish = lines.filter((l) => /\b(error|failed|failure|fatal|denied|unauthorized|cannot|no such)\b/i.test(l));
333
+ const line = errorish.at(-1) ?? lines.at(-1) ?? "no output captured";
334
+ return line.length > 300 ? `${line.slice(0, 297)}…` : line;
335
+ }
336
+ /** Where a lifecycle command's full compose output is written (per operation). */
337
+ export function composeLogPath(op) {
338
+ const dir = path.join(os.homedir(), ".cache", "mesh", "mesh-local");
339
+ fs.mkdirSync(dir, { recursive: true });
340
+ return path.join(dir, `compose-${op.replace(/[^a-z0-9-]/gi, "_")}.log`);
341
+ }
342
+ /**
343
+ * `docker compose` for lifecycle commands (`up -d`): stream output like
344
+ * `compose({inherit: true})` does, but never bury the failure — on a non-zero
345
+ * exit throw a one-line summary instead of leaving ~200 lines of pull/create
346
+ * noise as the only signal (MESH-2479). In non-TTY runs the output is also
347
+ * teed to a log file (named in the error) and a heartbeat fills long quiet
348
+ * stretches; interactive terminals keep docker's own progress rendering.
349
+ */
350
+ export async function composeStreamed(args, opts = {}) {
351
+ const dir = stackDir();
352
+ const files = ["-f", path.join(dir, "docker-compose.yml")];
353
+ if (opts.hub)
354
+ files.push("-f", path.join(dir, "docker-compose.hub.yml"));
355
+ const fullArgs = ["compose", "-p", COMPOSE_PROJECT, ...files, ...args];
356
+ const env = {
357
+ ...process.env,
358
+ MESH_LOCAL_LOGS: localLogsDir(),
359
+ MESH_LOCAL_PROBES: localProbesDir(),
360
+ COMPOSE_IGNORE_ORPHANS: "1",
361
+ ...opts.env,
362
+ };
363
+ const op = args[0] ?? "cmd";
364
+ if (process.stderr.isTTY) {
365
+ const res = spawnSync("docker", fullArgs, {
366
+ cwd: dir,
367
+ env,
368
+ stdio: ["ignore", "inherit", "inherit"],
369
+ });
370
+ if (res.status !== 0) {
371
+ throw new MeshCliError(`docker compose ${op} failed (exit ${res.status ?? "?"}) — the compose output above has the details.`, {
372
+ remediation: {
373
+ command: `docker compose -p ${COMPOSE_PROJECT} ps && docker compose -p ${COMPOSE_PROJECT} logs --tail 50`,
374
+ },
375
+ });
376
+ }
377
+ return;
378
+ }
379
+ const logPath = composeLogPath(op);
380
+ const logStream = fs.createWriteStream(logPath);
381
+ const heartbeat = startHeartbeat(`docker compose ${args.join(" ")}`);
382
+ let captured = "";
383
+ let exitCode;
384
+ try {
385
+ exitCode = await new Promise((resolve, reject) => {
386
+ const child = spawn("docker", fullArgs, {
387
+ cwd: dir,
388
+ env,
389
+ stdio: ["ignore", "pipe", "pipe"],
390
+ });
391
+ const consume = (chunk) => {
392
+ heartbeat.touch();
393
+ const text = chunk.toString();
394
+ captured += text;
395
+ logStream.write(text);
396
+ process.stderr.write(text);
397
+ };
398
+ child.stdout.on("data", consume);
399
+ child.stderr.on("data", consume);
400
+ child.on("error", reject);
401
+ child.on("close", (code) => resolve(code ?? 1));
402
+ });
403
+ }
404
+ finally {
405
+ heartbeat.stop();
406
+ // Flush the log file before any throw can reach handleCliError's
407
+ // process.exit(), which doesn't wait for pending writes.
408
+ await new Promise((resolve) => logStream.end(resolve));
409
+ }
410
+ if (exitCode !== 0) {
411
+ throw new MeshCliError(`docker compose ${op} failed (exit ${exitCode}): ${summarizeComposeFailure(captured)}`, {
412
+ remediation: {
413
+ command: `docker compose -p ${COMPOSE_PROJECT} logs --tail 50`,
414
+ docs: logPath,
415
+ },
416
+ });
417
+ }
418
+ }
419
+ /** Parse `docker compose ps --format json` (NDJSON, one object per line). */
420
+ export function parseComposePs(output) {
421
+ const services = [];
422
+ for (const line of output.split("\n")) {
423
+ const trimmed = line.trim();
424
+ if (!trimmed)
425
+ continue;
426
+ try {
427
+ const entry = JSON.parse(trimmed);
428
+ services.push({
429
+ name: entry.Service ?? entry.Name ?? "unknown",
430
+ state: entry.State ?? "unknown",
431
+ health: entry.Health || undefined,
432
+ });
433
+ }
434
+ catch {
435
+ // non-JSON noise from docker — skip
436
+ }
437
+ }
438
+ return services;
439
+ }
440
+ export function stackServices() {
441
+ // Include the hub overlay so its containers show up when running.
442
+ return parseComposePs(compose(["ps", "-a", "--format", "json"], { hub: true }));
443
+ }
444
+ /** Services expected to exit (one-shot jobs) — an `exited` state is fine. */
445
+ export const ONE_SHOT_SERVICES = new Set(["spicedb-migrate", "zitadel-machinekey-init"]);
446
+ /**
447
+ * The services whose `exited` state is a real failure *right now*.
448
+ *
449
+ * `stackServices()` scans the whole `mesh-local` compose project, overlay
450
+ * included — but `mesh start` brings the base stack up first and the Hub
451
+ * overlay only afterwards. Before that point an `exited` hub container is a
452
+ * leftover from a previous run (a Docker restart, a laptop sleep), not a
453
+ * crash: the base `up -d` deliberately never started it. Counting it made
454
+ * `mesh start` abort before it ever tried to start the Hub, pointing at the
455
+ * wrong thing.
456
+ *
457
+ * Once the overlay HAS been started, an exited overlay service is a crash
458
+ * like any other — pass `overlayStarted: true` and the signal is preserved.
459
+ */
460
+ export function crashedServices(services, opts) {
461
+ return services.filter((s) => s.state === "exited" &&
462
+ !ONE_SHOT_SERVICES.has(s.name) &&
463
+ (opts.overlayStarted || !opts.overlayServices.has(s.name)));
464
+ }
465
+ /**
466
+ * Whether the Hub overlay is up in this run — i.e. at least one overlay
467
+ * container is actually `running`. `mesh status` has no other way to know
468
+ * (it never started anything), and "a container exists" is not it: a
469
+ * leftover `exited` one exists too.
470
+ */
471
+ export function hubOverlayRunning(services, overlayServices) {
472
+ return services.some((s) => overlayServices.has(s.name) && s.state === "running");
473
+ }
474
+ /**
475
+ * Whether the Hub API is serving. `some(s => s.name === "hub-api")` is not
476
+ * the same question — that is true of a leftover exited container, and
477
+ * probing Hub endpoints that were never meant to be up this run reports the
478
+ * stack unhealthy for a Hub nobody started.
479
+ */
480
+ export function hubApiRunning(services) {
481
+ return services.some((s) => s.name === "hub-api" && s.state === "running");
482
+ }
483
+ /** Probe a host endpoint (http 2xx-4xx counts as up; tcp connect counts as up). */
484
+ export async function probeEndpoint(endpoint) {
485
+ if (endpoint.probe.kind === "http") {
486
+ try {
487
+ const res = await fetch(endpoint.probe.url, { signal: AbortSignal.timeout(3000) });
488
+ return res.status < 500;
489
+ }
490
+ catch {
491
+ return false;
492
+ }
493
+ }
494
+ if (endpoint.probe.kind === "tcp") {
495
+ return probeTcp(endpoint.probe.port, { timeoutMs: 3000 });
496
+ }
497
+ return true;
498
+ }
499
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/commands/local/stack.ts"],"names":[],"mappings":"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"}