@mesh-tech/mesh-cli 0.1.1 → 0.12.1

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 +20878 -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 +28 -0
  63. package/dist/src/commands/install-shim.d.ts.map +1 -0
  64. package/dist/src/commands/install-shim.js +191 -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 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,EAGL,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAMpC,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAM7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAClC,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAqFzB;AA6HD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8G3D"}
@@ -0,0 +1,370 @@
1
+ /**
2
+ * mesh init app-tenant — the doctor for a tenant apps repo (design §3.1,
3
+ * AC A1–A3).
4
+ *
5
+ * Runs a read-only check pipeline; every failure names the exact `mesh`
6
+ * command that fixes it (never a person — A2). Re-running IS the doctor
7
+ * (A3): exit 0 iff everything passes. `--json` is the agent surface (A5);
8
+ * `--fix` applies the developer-scope fixes directly (registry token
9
+ * refresh, skills sync) and leaves operator actions as remediations.
10
+ *
11
+ * Checks (API-first; local platform = the same Hub API on localhost):
12
+ * 1. CLI auth — cached `mesh login` credentials for the context
13
+ * 2. Registry access — the CodeArtifact token in ~/.npmrc is accepted by the
14
+ * registry (a live probe, not a substring match — an
15
+ * expired token used to report `pass`); local: skipped
16
+ * 2b. Public npm not hijacked — no unscoped `registry=<codeartifact>` in
17
+ * ~/.npmrc making CodeArtifact the DEFAULT registry
18
+ * 3. Platform tenant — Hub API /tenants (the platform registry)
19
+ * 4. App tenant — tenant present in the Hub registry
20
+ * 5. Deployer role — mesh:deployerRole config present (cloud contexts)
21
+ * 6. Repo shape — pnpm workspace + apps layout create-app expects
22
+ * 7. Skills wired — `mesh skills sync --check`
23
+ */
24
+ import chalk from "chalk";
25
+ import * as fs from "fs";
26
+ import * as path from "path";
27
+ import { logInfo } from "../utils/log.js";
28
+ import { MeshCliError, emitJsonPayload } from "../utils/errors.js";
29
+ import { findUnscopedCodeArtifactRegistry, homeNpmrcPath, probeRegistryToken, } from "../utils/auth-preflight.js";
30
+ import { readCredentials } from "./login.js";
31
+ import { resolveTargetRoot, syncSkills } from "./skills.js";
32
+ import { detectLocalTenant } from "./local/dev-local.js";
33
+ import { LOGIN_CONTEXT } from "./local/seed-zitadel.js";
34
+ const LOCAL_HUB_API = "http://localhost:4568";
35
+ function isLocalContext(context) {
36
+ return context === LOGIN_CONTEXT;
37
+ }
38
+ async function probeHubTenants(hubUrl, accessToken) {
39
+ try {
40
+ const response = await fetch(`${hubUrl}/tenants`, {
41
+ headers: accessToken ? { Authorization: `Bearer ${accessToken}` } : {},
42
+ signal: AbortSignal.timeout(5000),
43
+ });
44
+ if (response.status === 401)
45
+ return { ok: false, reason: "unauthenticated against the Hub API" };
46
+ if (!response.ok)
47
+ return { ok: false, reason: `Hub API returned ${response.status}` };
48
+ return { ok: true, tenants: (await response.json()) };
49
+ }
50
+ catch {
51
+ return { ok: false, reason: `Hub API unreachable at ${hubUrl}` };
52
+ }
53
+ }
54
+ function readHomeNpmrc() {
55
+ try {
56
+ return fs.readFileSync(homeNpmrcPath(), "utf-8");
57
+ }
58
+ catch {
59
+ return "";
60
+ }
61
+ }
62
+ /**
63
+ * The remediation string the doctor prints for a registry fault. It must render
64
+ * the command `--fix` actually executes: `runRegistryLogin` is called with the
65
+ * doctor's own `--profile` (or none), so advertising a hardcoded
66
+ * `--profile mesh-dev` would be a command the doctor never runs.
67
+ */
68
+ export function registryFixCommand(profile, context) {
69
+ // Context first: `--fix` calls runRegistryLogin(ctx, …), and a context-less
70
+ // `mesh registry login` skips the broker entirely — so advertising the bare
71
+ // form sends someone with no AWS account to a command that cannot work.
72
+ const base = context ? `mesh registry login ${context}` : "mesh registry login";
73
+ return profile ? `${base} --profile ${profile}` : base;
74
+ }
75
+ /**
76
+ * The two registry checks, exported for tests.
77
+ *
78
+ * 1. **Registry access** — does the token in ~/.npmrc actually work? The old
79
+ * check was `content.includes("codeartifact")`, which reports `pass` for a
80
+ * token that expired two days ago. `probeRegistryToken` asks the registry.
81
+ * 2. **Public npm not hijacked** — is there an *unscoped* `registry=` line
82
+ * pointing at CodeArtifact? A bare `aws codeartifact login` (no
83
+ * `--namespace @mesh-tech`) writes one, which routes every public package
84
+ * through CodeArtifact and makes the whole of npm 401 at the 12h token
85
+ * expiry. `mesh registry login` now removes it, so it is the fix for both.
86
+ */
87
+ export async function registryChecks(args) {
88
+ const { context, fix, profile } = args;
89
+ const probe = args.probe ?? probeRegistryToken;
90
+ const login = args.login ??
91
+ (async (ctx) => {
92
+ const { runRegistryLogin } = await import("./registry.js");
93
+ await runRegistryLogin(ctx, profile ? { profile } : {});
94
+ });
95
+ // The command we ADVERTISE must be the command `--fix` RUNS — otherwise the
96
+ // doctor tells you to pass a profile it then silently drops.
97
+ const REGISTRY_FIX = registryFixCommand(profile, context);
98
+ let tokenState = await probe({ npmrcPath: homeNpmrcPath() });
99
+ let hijack = findUnscopedCodeArtifactRegistry(readHomeNpmrc());
100
+ let repaired = false;
101
+ let loginError = null;
102
+ // One login repairs both: it refreshes the token AND strips the unscoped line.
103
+ if (fix && (tokenState.state === "expired" || tokenState.state === "missing" || hijack)) {
104
+ try {
105
+ await login(context);
106
+ repaired = true;
107
+ tokenState = await probe({ npmrcPath: homeNpmrcPath() });
108
+ hijack = findUnscopedCodeArtifactRegistry(readHomeNpmrc());
109
+ }
110
+ catch (err) {
111
+ loginError = err instanceof Error ? err.message : String(err);
112
+ }
113
+ }
114
+ const suffix = repaired ? " (--fix)" : "";
115
+ const checks = [];
116
+ if (loginError) {
117
+ checks.push({
118
+ name: "Registry access",
119
+ status: "fail",
120
+ detail: `token refresh failed: ${loginError}`,
121
+ fix: REGISTRY_FIX,
122
+ });
123
+ }
124
+ else if (tokenState.state === "fresh") {
125
+ checks.push({
126
+ name: "Registry access",
127
+ status: "pass",
128
+ detail: `CodeArtifact token in ~/.npmrc is accepted by the registry${suffix}`,
129
+ });
130
+ }
131
+ else if (tokenState.state === "unreachable") {
132
+ // A network fault is not an auth fault — don't send someone to `aws sso login`.
133
+ checks.push({
134
+ name: "Registry access",
135
+ status: "warn",
136
+ detail: `could not reach the registry to verify the token (${tokenState.detail ?? "unknown error"})`,
137
+ fix: REGISTRY_FIX,
138
+ });
139
+ }
140
+ else {
141
+ checks.push({
142
+ name: "Registry access",
143
+ status: "fail",
144
+ detail: tokenState.state === "expired"
145
+ ? `the CodeArtifact token in ~/.npmrc is expired (${tokenState.detail ?? "rejected by the registry"})`
146
+ : "no CodeArtifact token in ~/.npmrc",
147
+ fix: REGISTRY_FIX,
148
+ });
149
+ }
150
+ checks.push(hijack
151
+ ? {
152
+ name: "Public npm not hijacked",
153
+ status: "fail",
154
+ detail: `~/.npmrc makes CodeArtifact the DEFAULT registry (${hijack.trim()}) — every public ` +
155
+ "package resolves through it and 401s when the 12h token expires",
156
+ fix: REGISTRY_FIX,
157
+ }
158
+ : {
159
+ name: "Public npm not hijacked",
160
+ status: "pass",
161
+ detail: `no unscoped CodeArtifact registry= in ~/.npmrc${repaired ? " (--fix removed it)" : ""}`,
162
+ });
163
+ return checks;
164
+ }
165
+ async function runChecks(args) {
166
+ const { root, tenant, context, hubUrl, fix, profile } = args;
167
+ const checks = [];
168
+ const local = isLocalContext(context);
169
+ // 1. CLI auth
170
+ const creds = readCredentials(context);
171
+ const expired = creds ? new Date(creds.expiresAt).getTime() < Date.now() : true;
172
+ checks.push(creds && !expired
173
+ ? { name: "CLI auth", status: "pass", detail: `logged in (${context}${creds.email ? `, ${creds.email}` : ""})` }
174
+ : {
175
+ name: "CLI auth",
176
+ status: "fail",
177
+ detail: creds ? `credentials for '${context}' are expired` : `no credentials for context '${context}'`,
178
+ fix: `mesh login ${context}`,
179
+ });
180
+ const accessToken = creds && !expired ? creds.accessToken : null;
181
+ // 2 + 2b. Registry access (CodeArtifact) — the local platform has no registry
182
+ if (local) {
183
+ checks.push({ name: "Registry access", status: "pass", detail: "local context — no registry required" });
184
+ checks.push({ name: "Public npm not hijacked", status: "pass", detail: "local context — no registry required" });
185
+ }
186
+ else {
187
+ checks.push(...(await registryChecks({ context, fix, profile })));
188
+ }
189
+ // 3 + 4. Platform tenant + app tenant via the Hub API (the registry)
190
+ const hub = await probeHubTenants(hubUrl, accessToken);
191
+ if (!hub.ok) {
192
+ const fixCmd = local ? "mesh start" : `mesh login ${context}`;
193
+ checks.push({ name: "Platform reachable", status: "fail", detail: hub.reason, fix: fixCmd });
194
+ checks.push({
195
+ name: `App tenant '${tenant}'`,
196
+ status: "warn",
197
+ detail: "not verifiable while the platform registry is unreachable",
198
+ fix: fixCmd,
199
+ });
200
+ }
201
+ else {
202
+ checks.push({
203
+ name: "Platform reachable",
204
+ status: "pass",
205
+ detail: `Hub API at ${hubUrl} (${hub.tenants.length} tenant(s) registered)`,
206
+ });
207
+ const registered = hub.tenants.some((t) => t.name === tenant);
208
+ checks.push(registered
209
+ ? { name: `App tenant '${tenant}'`, status: "pass", detail: "registered in the platform registry" }
210
+ : {
211
+ name: `App tenant '${tenant}'`,
212
+ status: local ? "warn" : "fail",
213
+ detail: local
214
+ ? "not registered yet — auto-created on the first `mesh dev` run of an app in this repo"
215
+ : "not registered — register it on the platform stack and deploy",
216
+ fix: local ? "mesh dev" : `mesh tenant add ${tenant} # in the platform repo, then: mesh deploy up`,
217
+ });
218
+ }
219
+ // 5. Deployer role (cloud contexts only — local has no IAM)
220
+ if (local) {
221
+ checks.push({ name: "Deployer role", status: "pass", detail: "local context — no deployer role required" });
222
+ }
223
+ else {
224
+ const stackFiles = fs.existsSync(root)
225
+ ? fs.readdirSync(root).filter((f) => /^Pulumi\..*\.yaml$/.test(f))
226
+ : [];
227
+ const hasRole = stackFiles.some((f) => /mesh:deployerRole/.test(fs.readFileSync(path.join(root, f), "utf-8")));
228
+ checks.push(hasRole
229
+ ? { name: "Deployer role", status: "pass", detail: "mesh:deployerRole configured in stack config" }
230
+ : {
231
+ name: "Deployer role",
232
+ status: "warn",
233
+ detail: "no mesh:deployerRole in Pulumi.*.yaml — `mesh deploy` will not be able to assume a role",
234
+ fix: "mesh create-app # scaffolds stack config with the deployer role",
235
+ });
236
+ }
237
+ // 6. Repo shape (what create-app/mesh dev expect)
238
+ const shapeProblems = [];
239
+ if (!fs.existsSync(path.join(root, "package.json")))
240
+ shapeProblems.push("package.json");
241
+ const hasWorkspace = fs.existsSync(path.join(root, "pnpm-workspace.yaml")) ||
242
+ fs.existsSync(path.join(root, "pnpm-lock.yaml"));
243
+ if (!hasWorkspace)
244
+ shapeProblems.push("pnpm-workspace.yaml");
245
+ checks.push(shapeProblems.length === 0
246
+ ? { name: "Repo shape", status: "pass", detail: "pnpm workspace layout present" }
247
+ : {
248
+ name: "Repo shape",
249
+ status: "warn",
250
+ detail: `missing: ${shapeProblems.join(", ")}`,
251
+ fix: "mesh create-app # scaffold an app (workspace files included)",
252
+ });
253
+ // 7. Skills wired
254
+ const skillsOk = fix ? syncSkills(root) : syncSkills(root, { check: true });
255
+ checks.push(skillsOk
256
+ ? { name: "Agent skills", status: "pass", detail: "base skills + Intent discovery in sync" }
257
+ : {
258
+ name: "Agent skills",
259
+ status: fix ? "pass" : "fail",
260
+ detail: fix ? "synced (--fix)" : "missing or stale",
261
+ fix: "mesh skills sync",
262
+ });
263
+ return checks;
264
+ }
265
+ export function registerInitCommands(program) {
266
+ const init = program.command("init").description("Initialize / diagnose a repo against the Mesh platform");
267
+ init
268
+ .command("platform <tenant>")
269
+ .description("Scaffold a tenant PLATFORM repo (core + platform Pulumi layers on @mesh-tech/infra-components) that deploys with `mesh deploy` unmodified — the proven mesh-sandbox shape, annotated.")
270
+ .option("--env <env>", "environment the first stack targets", "dev")
271
+ .option("--region <region>", "AWS region", "us-east-2")
272
+ .option("--domain <domain>", "base public domain (ingress zone becomes {env}.{domain})", "example.com")
273
+ .option("--profile <profile>", "AWS profile the stack config references", "default")
274
+ .option("--state-bucket <bucket>", "Pulumi state S3 bucket (created by an operator)", undefined)
275
+ .option("--dir <path>", "target directory (default: ./{tenant}-mesh-platform)")
276
+ .action(async (tenant, opts) => {
277
+ if (!/^[a-z][a-z0-9-]*$/.test(tenant)) {
278
+ throw new MeshCliError(`Invalid tenant name '${tenant}' (lowercase alphanumeric + dashes).`);
279
+ }
280
+ const targetDir = path.resolve(opts.dir ?? `${tenant}-mesh-platform`);
281
+ if (fs.existsSync(targetDir) && fs.readdirSync(targetDir).length > 0) {
282
+ throw new MeshCliError(`Target directory is not empty: ${targetDir}`, {
283
+ remediation: { command: `mesh init platform ${tenant} --dir <empty-dir>` },
284
+ });
285
+ }
286
+ const { copyTemplate } = await import("./create-app.js");
287
+ const { findPackageRoot } = await import("./local/stack.js");
288
+ const templateDir = path.join(findPackageRoot(), "templates", "platform-repo");
289
+ const context = {
290
+ tenant,
291
+ env: opts.env,
292
+ region: opts.region,
293
+ domain: opts.domain,
294
+ profile: opts.profile,
295
+ stateBucket: opts.stateBucket ?? `${tenant}-mesh-platform-pulumi-state`,
296
+ };
297
+ fs.mkdirSync(targetDir, { recursive: true });
298
+ copyTemplate(templateDir, targetDir, context);
299
+ syncSkills(targetDir);
300
+ logInfo(`Platform repo scaffolded at ${targetDir}`);
301
+ console.log("");
302
+ console.log("Next steps:");
303
+ console.log(` cd ${path.relative(process.cwd(), targetDir) || "."}`);
304
+ console.log(` mesh login ${tenant}.${opts.env} # or an operator context with access`);
305
+ console.log(" pnpm install");
306
+ console.log(" cd core && mesh deploy up");
307
+ console.log(" cd ../platform && mesh deploy up");
308
+ console.log("");
309
+ logInfo(`Review the annotated stack configs (Pulumi.${tenant}-${opts.env}.yaml) before the first deploy.`);
310
+ });
311
+ init
312
+ .command("app-tenant")
313
+ .description("Check (and with --fix, repair) everything an app-tenant repo needs: auth, registry, tenant registration, repo shape, agent skills. Re-run any time — it is the doctor.")
314
+ .option("--tenant <name>", "app tenant (default: mesh:tenant from Pulumi config, else 'local')")
315
+ .option("--context <ctx>", "login context to check against (default: 'local' when the local platform is targeted)", LOGIN_CONTEXT)
316
+ .option("--hub-url <url>", "platform Hub API base URL", LOCAL_HUB_API)
317
+ .option("--fix", "apply developer-scope fixes (registry token, skills sync)", false)
318
+ .option("--profile <profile>", "AWS SSO profile --fix logs into CodeArtifact with (e.g. mesh-dev)")
319
+ .option("--json", "machine-readable output", false)
320
+ .action(async (opts) => {
321
+ const root = resolveTargetRoot();
322
+ const tenant = opts.tenant ?? detectLocalTenant(root);
323
+ if (!opts.json) {
324
+ logInfo(`Checking app-tenant repo ${root} (tenant '${tenant}', context '${opts.context}')…`);
325
+ }
326
+ // Under --json, stdout is the machine surface (A5): route the check
327
+ // helpers' human chatter (syncSkills / registry login logInfo etc.) to
328
+ // stderr so stdout stays pure parseable JSON.
329
+ const origLog = console.log;
330
+ if (opts.json)
331
+ console.log = (...a) => console.error(...a);
332
+ let checks;
333
+ try {
334
+ checks = await runChecks({
335
+ root,
336
+ tenant,
337
+ context: opts.context,
338
+ hubUrl: opts.hubUrl.replace(/\/+$/, ""),
339
+ fix: opts.fix,
340
+ profile: opts.profile,
341
+ });
342
+ }
343
+ finally {
344
+ console.log = origLog;
345
+ }
346
+ // Warns are advisory (expected on a fresh repo pre-`mesh dev`): only
347
+ // hard failures gate the exit code (A3). `ok` mirrors that contract.
348
+ const ok = !checks.some((c) => c.status === "fail");
349
+ if (opts.json) {
350
+ emitJsonPayload({ ok, root, tenant, context: opts.context, checks });
351
+ }
352
+ else {
353
+ console.log("");
354
+ for (const check of checks) {
355
+ const icon = check.status === "pass" ? chalk.green("✔") : check.status === "warn" ? chalk.yellow("▲") : chalk.red("✘");
356
+ console.log(` ${icon} ${check.name.padEnd(24)} ${check.detail}`);
357
+ if (check.fix && check.status !== "pass") {
358
+ console.log(` ${chalk.dim("→ run:")} ${chalk.cyan(check.fix)}`);
359
+ }
360
+ }
361
+ console.log("");
362
+ }
363
+ if (!ok) {
364
+ throw new MeshCliError("app-tenant checks failed — apply the fixes above and re-run.", {
365
+ remediation: { command: "mesh init app-tenant --fix" },
366
+ });
367
+ }
368
+ });
369
+ }
370
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `mesh install-shim` — make bare `mesh` work on the PATH without a build.
4
+ *
5
+ * People and agents reach for `mesh dev`, not `pnpm exec mesh dev`. Getting a
6
+ * bare `mesh` onto the PATH inherently needs one PATH entry — but it can be a
7
+ * build-free, cwd-aware resolver: a tiny shell script that, on each run, walks
8
+ * up from the current directory to the nearest workspace `node_modules/.bin/mesh`
9
+ * and execs it. That `.bin/mesh` is the `bin/mesh.mjs` launcher, which runs the
10
+ * CLI from TypeScript source — so bare `mesh` always runs the LOCAL source of
11
+ * whatever worktree/app you are in, with no build and nothing global to keep in
12
+ * sync (MESH-2261). Run this once; it survives worktree switches and pulls.
13
+ *
14
+ * Outside any workspace it falls through to a globally installed CLI
15
+ * (MESH-2869). The shim sits in `~/.local/bin`, which is typically ahead of the
16
+ * npm global bin on PATH, so without that fall-through it *shadows*
17
+ * `npm i -g @mesh-tech/mesh-cli`: the new developer's very first commands —
18
+ * `mesh --version`, `mesh login mesh.dev`, run from `~` — die with "not inside a
19
+ * Mesh workspace" even though the CLI is installed and working.
20
+ */
21
+ /** The cwd-aware resolver written to the PATH. Pure so it can be unit-tested. */
22
+ export declare function shimScript(): string;
23
+ /** Default install target: ~/.local/bin (conventional per-user PATH dir). */
24
+ export declare function defaultShimDir(): string;
25
+ /** True if `dir` is a component of the PATH env string. */
26
+ export declare function dirOnPath(dir: string, pathEnv: string | undefined): boolean;
27
+ export declare function registerInstallShimCommand(program: Command): void;
28
+ //# sourceMappingURL=install-shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-shim.d.ts","sourceRoot":"","sources":["../../../src/commands/install-shim.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iFAAiF;AACjF,wBAAgB,UAAU,IAAI,MAAM,CAsEnC;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG3E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmFjE"}
@@ -0,0 +1,191 @@
1
+ import { execFileSync } from "child_process";
2
+ import * as fs from "fs";
3
+ import * as os from "os";
4
+ import * as path from "path";
5
+ import { logError, logInfo, logSuccess, logWarn } from "../utils/log.js";
6
+ /**
7
+ * `mesh install-shim` — make bare `mesh` work on the PATH without a build.
8
+ *
9
+ * People and agents reach for `mesh dev`, not `pnpm exec mesh dev`. Getting a
10
+ * bare `mesh` onto the PATH inherently needs one PATH entry — but it can be a
11
+ * build-free, cwd-aware resolver: a tiny shell script that, on each run, walks
12
+ * up from the current directory to the nearest workspace `node_modules/.bin/mesh`
13
+ * and execs it. That `.bin/mesh` is the `bin/mesh.mjs` launcher, which runs the
14
+ * CLI from TypeScript source — so bare `mesh` always runs the LOCAL source of
15
+ * whatever worktree/app you are in, with no build and nothing global to keep in
16
+ * sync (MESH-2261). Run this once; it survives worktree switches and pulls.
17
+ *
18
+ * Outside any workspace it falls through to a globally installed CLI
19
+ * (MESH-2869). The shim sits in `~/.local/bin`, which is typically ahead of the
20
+ * npm global bin on PATH, so without that fall-through it *shadows*
21
+ * `npm i -g @mesh-tech/mesh-cli`: the new developer's very first commands —
22
+ * `mesh --version`, `mesh login mesh.dev`, run from `~` — die with "not inside a
23
+ * Mesh workspace" even though the CLI is installed and working.
24
+ */
25
+ /** The cwd-aware resolver written to the PATH. Pure so it can be unit-tested. */
26
+ export function shimScript() {
27
+ return `#!/bin/sh
28
+ # mesh — canonical launcher shim (installed by \`mesh install-shim\`, MESH-2261).
29
+ # Walks up from the current directory to the nearest workspace mesh CLI and runs
30
+ # it. That resolves to bin/mesh.mjs, which runs the CLI from TypeScript source —
31
+ # so this always runs the LOCAL source of whatever worktree/app you are in, with
32
+ # no build step. Nothing here is version-pinned; do not edit by hand.
33
+ #
34
+ # Outside a workspace it hands off to a globally installed mesh CLI (MESH-2869).
35
+ # Without that hand-off the shim shadows \`npm i -g @mesh-tech/mesh-cli\` on the
36
+ # PATH and \`mesh login\` is unreachable from the home directory — which is the
37
+ # very first thing a new developer runs.
38
+ # True when $1 is another copy of this shim. Reads the marker line with the
39
+ # shell alone — no head/grep — so a stripped PATH cannot break the check.
40
+ _mesh_is_shim() {
41
+ _n=0
42
+ while [ "$_n" -lt 6 ] && IFS= read -r _line; do
43
+ case $_line in *"canonical launcher shim"*) return 0 ;; esac
44
+ _n=$((_n + 1))
45
+ done < "$1"
46
+ return 1
47
+ }
48
+
49
+ # Walk up to the nearest workspace CLI. Parameter expansion, not \`dirname\`:
50
+ # an unavailable dirname used to leave $dir empty and spin this loop forever.
51
+ dir=$(pwd)
52
+ while [ -n "$dir" ]; do
53
+ if [ -x "$dir/node_modules/.bin/mesh" ]; then
54
+ exec "$dir/node_modules/.bin/mesh" "$@"
55
+ fi
56
+ [ "$dir" = "/" ] && break
57
+ parent=\${dir%/*}
58
+ [ -n "$parent" ] || parent=/
59
+ dir=$parent
60
+ done
61
+
62
+ # Not in a workspace: exec the next \`mesh\` on PATH that is not another copy of
63
+ # this shim (matched on the marker line above, so we can never exec ourselves).
64
+ self_dir=\${0%/*}
65
+ [ "$self_dir" = "$0" ] && self_dir=.
66
+ self_dir=$(CDPATH= cd -- "$self_dir" 2>/dev/null && pwd -P)
67
+ saved_ifs=$IFS
68
+ IFS=:
69
+ set -f
70
+ for entry in $PATH; do
71
+ IFS=$saved_ifs
72
+ set +f
73
+ [ -n "$entry" ] || entry=.
74
+ candidate=$entry/mesh
75
+ # -f as well as -x: [ -x ] is true for a DIRECTORY named mesh, which would be
76
+ # taken for the CLI and exec'd into a bare 126 without ever reaching the real
77
+ # one further down PATH. A shell's own PATH search skips directories.
78
+ if [ -f "$candidate" ] && [ -x "$candidate" ]; then
79
+ entry_dir=$(CDPATH= cd -- "$entry" 2>/dev/null && pwd -P)
80
+ if [ -n "$entry_dir" ] && [ "$entry_dir" != "$self_dir" ] && ! _mesh_is_shim "$candidate"; then
81
+ exec "$candidate" "$@"
82
+ fi
83
+ fi
84
+ IFS=:
85
+ set -f
86
+ done
87
+ IFS=$saved_ifs
88
+ set +f
89
+
90
+ echo "mesh: not inside a Mesh workspace (no node_modules/.bin/mesh found)," >&2
91
+ echo " and no global mesh CLI found on PATH." >&2
92
+ echo " Install it: npm i -g @mesh-tech/mesh-cli" >&2
93
+ echo " Or cd into your app/repo (after 'pnpm install') and use 'pnpm exec mesh'." >&2
94
+ exit 1
95
+ `;
96
+ }
97
+ /** Default install target: ~/.local/bin (conventional per-user PATH dir). */
98
+ export function defaultShimDir() {
99
+ return path.join(os.homedir(), ".local", "bin");
100
+ }
101
+ /** True if `dir` is a component of the PATH env string. */
102
+ export function dirOnPath(dir, pathEnv) {
103
+ if (!pathEnv)
104
+ return false;
105
+ return pathEnv.split(path.delimiter).some((p) => p === dir);
106
+ }
107
+ export function registerInstallShimCommand(program) {
108
+ program
109
+ .command("install-shim")
110
+ .description("Install a build-free `mesh` shim on your PATH so bare `mesh` runs the local source")
111
+ .option("--dir <dir>", "Directory to install into (must be on your PATH)", defaultShimDir())
112
+ .option("-f, --force", "Overwrite an existing file at the target path", false)
113
+ .action((opts) => {
114
+ const dir = path.resolve(opts.dir);
115
+ const target = path.join(dir, "mesh");
116
+ if (fs.existsSync(target) && !opts.force) {
117
+ logWarn(`A file already exists at ${target}.`);
118
+ logInfo("Re-run with --force to overwrite it, or pass --dir <other-path-on-PATH>.");
119
+ return;
120
+ }
121
+ try {
122
+ fs.mkdirSync(dir, { recursive: true });
123
+ fs.writeFileSync(target, shimScript(), { mode: 0o755 });
124
+ fs.chmodSync(target, 0o755);
125
+ }
126
+ catch (err) {
127
+ logError(`Could not write the shim to ${target}: ${err.message}`);
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ logSuccess(`Installed mesh shim → ${target}`);
132
+ if (!dirOnPath(dir, process.env.PATH)) {
133
+ logWarn(`${dir} is not on your PATH.`);
134
+ logInfo(`Add it, e.g.: echo 'export PATH="${dir}:$PATH"' >> ~/.zshrc && source ~/.zshrc`);
135
+ }
136
+ else {
137
+ logInfo("Bare `mesh <cmd>` now runs the local source of whatever workspace you're in.");
138
+ }
139
+ // Post-install self-test: run the freshly installed shim and record a full
140
+ // diagnostic (env + stdout/stderr + exit) to a file, so a failure is
141
+ // debuggable without copy-pasting terminal output.
142
+ const diagPath = path.join(os.tmpdir(), "mesh-shim-selftest.log");
143
+ let stdout = "";
144
+ let stderr = "";
145
+ let status = 0;
146
+ let ok = true;
147
+ try {
148
+ stdout = execFileSync(target, ["--help"], {
149
+ cwd: process.cwd(),
150
+ encoding: "utf8",
151
+ stdio: ["ignore", "pipe", "pipe"],
152
+ });
153
+ }
154
+ catch (err) {
155
+ ok = false;
156
+ const e = err;
157
+ status = typeof e.status === "number" ? e.status : 1;
158
+ stdout = e.stdout?.toString?.() ?? "";
159
+ stderr = e.stderr?.toString?.() ?? String(e.message ?? err);
160
+ }
161
+ const diag = [
162
+ `mesh install-shim self-test — ${new Date().toISOString()}`,
163
+ `cwd: ${process.cwd()}`,
164
+ `shim: ${target}`,
165
+ `node: ${process.execPath} (${process.version})`,
166
+ `PATH: ${process.env.PATH ?? ""}`,
167
+ `command: mesh --help`,
168
+ `exit: ${status}`,
169
+ `--- stdout (${stdout.length} bytes) ---`,
170
+ stdout,
171
+ `--- stderr (${stderr.length} bytes) ---`,
172
+ stderr,
173
+ "",
174
+ ].join("\n");
175
+ try {
176
+ fs.writeFileSync(diagPath, diag);
177
+ }
178
+ catch {
179
+ /* diagnostics are best-effort */
180
+ }
181
+ if (ok && /Commands:|Usage:/.test(stdout)) {
182
+ logSuccess(`Self-test passed: \`mesh --help\` ran cleanly. Diagnostic: ${diagPath}`);
183
+ }
184
+ else {
185
+ logError(`Self-test FAILED (exit ${status}). Full diagnostic written to:`);
186
+ logError(` ${diagPath}`);
187
+ process.exitCode = 1;
188
+ }
189
+ });
190
+ }
191
+ //# sourceMappingURL=install-shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-shim.js","sourceRoot":"","sources":["../../../src/commands/install-shim.ts"],"names":[],"mappings":"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"}