@mesh-tech/mesh-cli 0.20.1 → 0.20.3

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 (436) hide show
  1. package/README.md +6 -5
  2. package/dist/bin/mesh.d.ts +0 -12
  3. package/dist/bin/mesh.js +99 -50
  4. package/dist/bin/mesh.js.map +2 -3
  5. package/dist/build-info.json +2 -2
  6. package/dist/src/commands/agent-api-client.d.ts +0 -70
  7. package/dist/src/commands/agent-api-client.js +0 -80
  8. package/dist/src/commands/app-check.d.ts +0 -56
  9. package/dist/src/commands/app-check.js +0 -72
  10. package/dist/src/commands/artifacts.d.ts +0 -11
  11. package/dist/src/commands/artifacts.js +0 -33
  12. package/dist/src/commands/cluster.d.ts +0 -39
  13. package/dist/src/commands/cluster.js +0 -73
  14. package/dist/src/commands/conversations.d.ts +0 -36
  15. package/dist/src/commands/conversations.js +0 -59
  16. package/dist/src/commands/create-app.d.ts +4 -88
  17. package/dist/src/commands/create-app.js +16 -155
  18. package/dist/src/commands/db/connect.d.ts +0 -7
  19. package/dist/src/commands/db/connect.js +0 -9
  20. package/dist/src/commands/db/credentials.d.ts +0 -7
  21. package/dist/src/commands/db/credentials.js +0 -10
  22. package/dist/src/commands/db/env.d.ts +0 -6
  23. package/dist/src/commands/db/env.js +0 -14
  24. package/dist/src/commands/db/exec.d.ts +0 -43
  25. package/dist/src/commands/db/exec.js +0 -69
  26. package/dist/src/commands/db/index.d.ts +0 -10
  27. package/dist/src/commands/db/index.js +0 -10
  28. package/dist/src/commands/db/psql.d.ts +0 -7
  29. package/dist/src/commands/db/psql.js +0 -18
  30. package/dist/src/commands/deploy.d.ts +0 -38
  31. package/dist/src/commands/deploy.js +1 -76
  32. package/dist/src/commands/dev-doctor.d.ts +0 -82
  33. package/dist/src/commands/dev-doctor.js +3 -132
  34. package/dist/src/commands/dev-launch.d.ts +0 -52
  35. package/dist/src/commands/dev-launch.js +0 -56
  36. package/dist/src/commands/dev-token-server.d.ts +0 -18
  37. package/dist/src/commands/dev-token-server.js +1 -24
  38. package/dist/src/commands/dev.d.ts +0 -246
  39. package/dist/src/commands/dev.js +5 -963
  40. package/dist/src/commands/docs.d.ts +0 -1
  41. package/dist/src/commands/docs.js +0 -12
  42. package/dist/src/commands/hub/index.d.ts +0 -60
  43. package/dist/src/commands/hub/index.js +2 -139
  44. package/dist/src/commands/init/wizard.d.ts +5 -116
  45. package/dist/src/commands/init/wizard.js +42 -110
  46. package/dist/src/commands/init.d.ts +0 -55
  47. package/dist/src/commands/init.js +0 -70
  48. package/dist/src/commands/install-shim.d.ts +0 -23
  49. package/dist/src/commands/install-shim.js +2 -29
  50. package/dist/src/commands/local/auth-provision.d.ts +0 -80
  51. package/dist/src/commands/local/auth-provision.js +0 -109
  52. package/dist/src/commands/local/dev-local.d.ts +0 -91
  53. package/dist/src/commands/local/dev-local.js +0 -147
  54. package/dist/src/commands/local/docker-runner.d.ts +0 -22
  55. package/dist/src/commands/local/docker-runner.js +2 -35
  56. package/dist/src/commands/local/helpers.d.ts +0 -14
  57. package/dist/src/commands/local/helpers.js +0 -13
  58. package/dist/src/commands/local/hub-local.d.ts +0 -96
  59. package/dist/src/commands/local/hub-local.js +0 -111
  60. package/dist/src/commands/local/index.d.ts +0 -14
  61. package/dist/src/commands/local/index.js +0 -86
  62. package/dist/src/commands/local/mocks.d.ts +0 -269
  63. package/dist/src/commands/local/mocks.js +1 -274
  64. package/dist/src/commands/local/seed-hub-catalog.d.ts +0 -25
  65. package/dist/src/commands/local/seed-hub-catalog.js +0 -41
  66. package/dist/src/commands/local/seed-zitadel.d.ts +0 -82
  67. package/dist/src/commands/local/seed-zitadel.js +0 -158
  68. package/dist/src/commands/local/seed.d.ts +0 -64
  69. package/dist/src/commands/local/seed.js +0 -78
  70. package/dist/src/commands/local/stack.d.ts +0 -141
  71. package/dist/src/commands/local/stack.js +0 -153
  72. package/dist/src/commands/login.d.ts +0 -265
  73. package/dist/src/commands/login.js +4 -418
  74. package/dist/src/commands/peer-addressing.d.ts +0 -39
  75. package/dist/src/commands/peer-addressing.js +0 -37
  76. package/dist/src/commands/port-ownership.d.ts +0 -44
  77. package/dist/src/commands/port-ownership.js +0 -47
  78. package/dist/src/commands/registry-publish.d.ts +0 -1
  79. package/dist/src/commands/registry-publish.js +0 -46
  80. package/dist/src/commands/registry.d.ts +4 -237
  81. package/dist/src/commands/registry.js +2 -316
  82. package/dist/src/commands/secrets/exec.d.ts +0 -16
  83. package/dist/src/commands/secrets/exec.js +0 -24
  84. package/dist/src/commands/secrets/index.d.ts +0 -9
  85. package/dist/src/commands/secrets/index.js +0 -10
  86. package/dist/src/commands/secrets/migrate-config.d.ts +0 -17
  87. package/dist/src/commands/secrets/migrate-config.js +0 -40
  88. package/dist/src/commands/secrets/reindex.d.ts +0 -38
  89. package/dist/src/commands/secrets/reindex.js +0 -39
  90. package/dist/src/commands/secrets/set.d.ts +0 -47
  91. package/dist/src/commands/secrets/set.js +0 -107
  92. package/dist/src/commands/site.d.ts +0 -1
  93. package/dist/src/commands/site.js +0 -61
  94. package/dist/src/commands/skills.d.ts +0 -61
  95. package/dist/src/commands/skills.js +0 -83
  96. package/dist/src/commands/stack.d.ts +0 -15
  97. package/dist/src/commands/stack.js +1 -128
  98. package/dist/src/commands/temporal.d.ts +0 -30
  99. package/dist/src/commands/temporal.js.map +0 -1
  100. package/dist/src/commands/tenant.d.ts +0 -31
  101. package/dist/src/commands/tenant.js +0 -55
  102. package/dist/src/commands/tunnel/index.d.ts +0 -40
  103. package/dist/src/commands/tunnel/index.js +0 -141
  104. package/dist/src/commands/vcs/clone.d.ts +0 -1
  105. package/dist/src/commands/vcs/clone.js +0 -4
  106. package/dist/src/commands/vcs/common.d.ts +0 -32
  107. package/dist/src/commands/vcs/common.js +0 -41
  108. package/dist/src/commands/vcs/drafts.d.ts +0 -1
  109. package/dist/src/commands/vcs/drafts.js +0 -1
  110. package/dist/src/commands/vcs/get.d.ts +0 -1
  111. package/dist/src/commands/vcs/get.js +0 -11
  112. package/dist/src/commands/vcs/index.d.ts +0 -1
  113. package/dist/src/commands/vcs/index.js +0 -1
  114. package/dist/src/commands/vcs/propose.d.ts +0 -26
  115. package/dist/src/commands/vcs/propose.js +3 -34
  116. package/dist/src/commands/vcs/review.d.ts +0 -1
  117. package/dist/src/commands/vcs/review.js +0 -1
  118. package/dist/src/commands/vcs/rm.d.ts +0 -11
  119. package/dist/src/commands/vcs/rm.js +0 -14
  120. package/dist/src/commands/vcs-enrich.d.ts +0 -12
  121. package/dist/src/commands/vcs-enrich.js +0 -12
  122. package/dist/src/commands/vpn/index.d.ts +0 -17
  123. package/dist/src/commands/vpn/index.js +0 -102
  124. package/dist/src/commands/vpn/tunnel.d.ts +0 -9
  125. package/dist/src/commands/vpn/tunnel.js +0 -37
  126. package/dist/src/commands/workflow.d.ts +0 -22
  127. package/dist/src/commands/workflow.js +0 -80
  128. package/dist/src/docs/assemble.d.ts +0 -117
  129. package/dist/src/docs/assemble.js +0 -142
  130. package/dist/src/docs/cli-reference.d.ts +0 -58
  131. package/dist/src/docs/cli-reference.js +0 -77
  132. package/dist/src/docs/discover.d.ts +0 -40
  133. package/dist/src/docs/discover.js +2 -60
  134. package/dist/src/docs/portal.d.ts +0 -44
  135. package/dist/src/docs/portal.js +0 -49
  136. package/dist/src/docs/registry-docs.d.ts +0 -29
  137. package/dist/src/docs/registry-docs.js +0 -40
  138. package/dist/src/docs/schema.d.ts +0 -36
  139. package/dist/src/docs/schema.js +0 -52
  140. package/dist/src/docs/serve.d.ts +0 -18
  141. package/dist/src/docs/serve.js +2 -30
  142. package/dist/src/docs/start.d.ts +0 -42
  143. package/dist/src/docs/start.js +0 -70
  144. package/dist/src/eval/agent-eval.d.mts +0 -12
  145. package/dist/src/eval/agent-eval.mjs +0 -22
  146. package/dist/src/index.d.ts +0 -6
  147. package/dist/src/index.js.map +0 -1
  148. package/dist/src/program.d.ts +0 -20
  149. package/dist/src/program.js +0 -24
  150. package/dist/src/utils/auth-preflight.d.ts +0 -137
  151. package/dist/src/utils/auth-preflight.js +0 -149
  152. package/dist/src/utils/aws-auth.d.ts +0 -163
  153. package/dist/src/utils/aws-auth.js +3 -232
  154. package/dist/src/utils/bastion.d.ts +0 -27
  155. package/dist/src/utils/bastion.js +0 -28
  156. package/dist/src/utils/build-info.d.ts +0 -22
  157. package/dist/src/utils/build-info.js +0 -27
  158. package/dist/src/utils/cache-home.d.ts +0 -23
  159. package/dist/src/utils/cache-home.js +0 -25
  160. package/dist/src/utils/capture-history.d.ts +0 -54
  161. package/dist/src/utils/capture-history.js +1 -55
  162. package/dist/src/utils/context.d.ts +0 -23
  163. package/dist/src/utils/context.js +0 -43
  164. package/dist/src/utils/credentials.d.ts +0 -38
  165. package/dist/src/utils/credentials.js +0 -39
  166. package/dist/src/utils/deploy-preflight.d.ts +0 -38
  167. package/dist/src/utils/deploy-preflight.js +1 -71
  168. package/dist/src/utils/errors.d.ts +0 -53
  169. package/dist/src/utils/errors.js +0 -49
  170. package/dist/src/utils/first-party-contexts.d.ts +0 -38
  171. package/dist/src/utils/first-party-contexts.js +0 -44
  172. package/dist/src/utils/index.d.ts +0 -4
  173. package/dist/src/utils/index.js +0 -4
  174. package/dist/src/utils/kubeconfig.d.ts +0 -40
  175. package/dist/src/utils/kubeconfig.js +0 -44
  176. package/dist/src/utils/log.d.ts +0 -20
  177. package/dist/src/utils/log.js +0 -20
  178. package/dist/src/utils/mesh-json.d.ts +0 -46
  179. package/dist/src/utils/mesh-json.js +0 -39
  180. package/dist/src/utils/pid.d.ts +0 -42
  181. package/dist/src/utils/pid.js +0 -48
  182. package/dist/src/utils/pulumi-run.d.ts +0 -14
  183. package/dist/src/utils/pulumi-run.js +0 -42
  184. package/dist/src/utils/pulumi.d.ts +0 -34
  185. package/dist/src/utils/pulumi.js +0 -38
  186. package/dist/src/utils/reachability.d.ts +0 -27
  187. package/dist/src/utils/reachability.js +0 -40
  188. package/dist/src/utils/recover-conversation.d.ts +0 -110
  189. package/dist/src/utils/recover-conversation.js +0 -108
  190. package/dist/src/utils/registry-broker.d.ts +5 -84
  191. package/dist/src/utils/registry-broker.js +0 -62
  192. package/dist/src/utils/registry-identity.d.ts +0 -149
  193. package/dist/src/utils/registry-identity.js +0 -143
  194. package/dist/src/utils/scaffold-versions.d.ts +0 -41
  195. package/dist/src/utils/scaffold-versions.js +0 -42
  196. package/dist/src/utils/socks-forward.d.ts +0 -24
  197. package/dist/src/utils/socks-forward.js +2 -25
  198. package/dist/src/utils/stack-flag.d.ts +0 -13
  199. package/dist/src/utils/stack-flag.js +0 -21
  200. package/dist/src/utils/tailscale-targets.d.ts +0 -37
  201. package/dist/src/utils/tailscale-targets.js +0 -33
  202. package/dist/src/utils/tailscale.d.ts +0 -177
  203. package/dist/src/utils/tailscale.js +6 -337
  204. package/dist/src/utils/temporal-auth.d.ts +0 -41
  205. package/dist/src/utils/temporal-auth.js +0 -52
  206. package/dist/src/utils/temporal-codec.d.ts +0 -89
  207. package/dist/src/utils/temporal-codec.js.map +0 -1
  208. package/dist/src/utils/tunnel-ownership.d.ts +0 -79
  209. package/dist/src/utils/tunnel-ownership.js +0 -74
  210. package/dist/src/utils/vpn-join.d.ts +0 -16
  211. package/dist/src/utils/vpn-join.js +0 -17
  212. package/dist/src/utils/vpn.d.ts +0 -42
  213. package/dist/src/utils/vpn.js +0 -52
  214. package/dist/src/utils/workflow-fingerprint.d.ts +0 -39
  215. package/dist/src/utils/workflow-fingerprint.js +1 -63
  216. package/dist/src/utils/worktree-identity.d.ts +0 -62
  217. package/dist/src/utils/worktree-identity.js +0 -88
  218. package/package.json +1 -1
  219. package/skills/core/SKILL.md +10 -11
  220. package/templates/api-auth/api/src/index.ts.hbs +1 -1
  221. package/templates/api-auth/api/src/spicedb-http-provider.ts.hbs +2 -2
  222. package/templates/api-role-gating/api/src/authn.ts.hbs +2 -2
  223. package/templates/api-role-gating/index.ts.hbs +1 -1
  224. package/templates/api-role-gating/skills/develop/SKILL.md.hbs +1 -1
  225. package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +2 -2
  226. package/templates/platform-repo/platform/index.ts +1 -1
  227. package/dist/bin/mesh.d.ts.map +0 -1
  228. package/dist/src/commands/agent-api-client.d.ts.map +0 -1
  229. package/dist/src/commands/agent-api-client.js.map +0 -1
  230. package/dist/src/commands/app-check.d.ts.map +0 -1
  231. package/dist/src/commands/app-check.js.map +0 -1
  232. package/dist/src/commands/artifacts.d.ts.map +0 -1
  233. package/dist/src/commands/artifacts.js.map +0 -1
  234. package/dist/src/commands/cluster.d.ts.map +0 -1
  235. package/dist/src/commands/cluster.js.map +0 -1
  236. package/dist/src/commands/conversations.d.ts.map +0 -1
  237. package/dist/src/commands/conversations.js.map +0 -1
  238. package/dist/src/commands/create-app.d.ts.map +0 -1
  239. package/dist/src/commands/create-app.js.map +0 -1
  240. package/dist/src/commands/db/connect.d.ts.map +0 -1
  241. package/dist/src/commands/db/connect.js.map +0 -1
  242. package/dist/src/commands/db/credentials.d.ts.map +0 -1
  243. package/dist/src/commands/db/credentials.js.map +0 -1
  244. package/dist/src/commands/db/env.d.ts.map +0 -1
  245. package/dist/src/commands/db/env.js.map +0 -1
  246. package/dist/src/commands/db/exec.d.ts.map +0 -1
  247. package/dist/src/commands/db/exec.js.map +0 -1
  248. package/dist/src/commands/db/index.d.ts.map +0 -1
  249. package/dist/src/commands/db/index.js.map +0 -1
  250. package/dist/src/commands/db/psql.d.ts.map +0 -1
  251. package/dist/src/commands/db/psql.js.map +0 -1
  252. package/dist/src/commands/deploy.d.ts.map +0 -1
  253. package/dist/src/commands/deploy.js.map +0 -1
  254. package/dist/src/commands/dev-doctor.d.ts.map +0 -1
  255. package/dist/src/commands/dev-doctor.js.map +0 -1
  256. package/dist/src/commands/dev-launch.d.ts.map +0 -1
  257. package/dist/src/commands/dev-launch.js.map +0 -1
  258. package/dist/src/commands/dev-token-server.d.ts.map +0 -1
  259. package/dist/src/commands/dev-token-server.js.map +0 -1
  260. package/dist/src/commands/dev.d.ts.map +0 -1
  261. package/dist/src/commands/dev.js.map +0 -1
  262. package/dist/src/commands/docs.d.ts.map +0 -1
  263. package/dist/src/commands/docs.js.map +0 -1
  264. package/dist/src/commands/hub/index.d.ts.map +0 -1
  265. package/dist/src/commands/hub/index.js.map +0 -1
  266. package/dist/src/commands/init/wizard.d.ts.map +0 -1
  267. package/dist/src/commands/init/wizard.js.map +0 -1
  268. package/dist/src/commands/init.d.ts.map +0 -1
  269. package/dist/src/commands/init.js.map +0 -1
  270. package/dist/src/commands/install-shim.d.ts.map +0 -1
  271. package/dist/src/commands/install-shim.js.map +0 -1
  272. package/dist/src/commands/local/auth-provision.d.ts.map +0 -1
  273. package/dist/src/commands/local/auth-provision.js.map +0 -1
  274. package/dist/src/commands/local/dev-local.d.ts.map +0 -1
  275. package/dist/src/commands/local/dev-local.js.map +0 -1
  276. package/dist/src/commands/local/docker-runner.d.ts.map +0 -1
  277. package/dist/src/commands/local/docker-runner.js.map +0 -1
  278. package/dist/src/commands/local/helpers.d.ts.map +0 -1
  279. package/dist/src/commands/local/helpers.js.map +0 -1
  280. package/dist/src/commands/local/hub-local.d.ts.map +0 -1
  281. package/dist/src/commands/local/hub-local.js.map +0 -1
  282. package/dist/src/commands/local/index.d.ts.map +0 -1
  283. package/dist/src/commands/local/index.js.map +0 -1
  284. package/dist/src/commands/local/mocks.d.ts.map +0 -1
  285. package/dist/src/commands/local/mocks.js.map +0 -1
  286. package/dist/src/commands/local/seed-hub-catalog.d.ts.map +0 -1
  287. package/dist/src/commands/local/seed-hub-catalog.js.map +0 -1
  288. package/dist/src/commands/local/seed-zitadel.d.ts.map +0 -1
  289. package/dist/src/commands/local/seed-zitadel.js.map +0 -1
  290. package/dist/src/commands/local/seed.d.ts.map +0 -1
  291. package/dist/src/commands/local/seed.js.map +0 -1
  292. package/dist/src/commands/local/stack.d.ts.map +0 -1
  293. package/dist/src/commands/local/stack.js.map +0 -1
  294. package/dist/src/commands/login.d.ts.map +0 -1
  295. package/dist/src/commands/login.js.map +0 -1
  296. package/dist/src/commands/peer-addressing.d.ts.map +0 -1
  297. package/dist/src/commands/peer-addressing.js.map +0 -1
  298. package/dist/src/commands/port-ownership.d.ts.map +0 -1
  299. package/dist/src/commands/port-ownership.js.map +0 -1
  300. package/dist/src/commands/registry-publish.d.ts.map +0 -1
  301. package/dist/src/commands/registry-publish.js.map +0 -1
  302. package/dist/src/commands/registry.d.ts.map +0 -1
  303. package/dist/src/commands/registry.js.map +0 -1
  304. package/dist/src/commands/secrets/exec.d.ts.map +0 -1
  305. package/dist/src/commands/secrets/exec.js.map +0 -1
  306. package/dist/src/commands/secrets/index.d.ts.map +0 -1
  307. package/dist/src/commands/secrets/index.js.map +0 -1
  308. package/dist/src/commands/secrets/migrate-config.d.ts.map +0 -1
  309. package/dist/src/commands/secrets/migrate-config.js.map +0 -1
  310. package/dist/src/commands/secrets/reindex.d.ts.map +0 -1
  311. package/dist/src/commands/secrets/reindex.js.map +0 -1
  312. package/dist/src/commands/secrets/set.d.ts.map +0 -1
  313. package/dist/src/commands/secrets/set.js.map +0 -1
  314. package/dist/src/commands/site.d.ts.map +0 -1
  315. package/dist/src/commands/site.js.map +0 -1
  316. package/dist/src/commands/skills.d.ts.map +0 -1
  317. package/dist/src/commands/skills.js.map +0 -1
  318. package/dist/src/commands/stack.d.ts.map +0 -1
  319. package/dist/src/commands/stack.js.map +0 -1
  320. package/dist/src/commands/temporal.d.ts.map +0 -1
  321. package/dist/src/commands/tenant.d.ts.map +0 -1
  322. package/dist/src/commands/tenant.js.map +0 -1
  323. package/dist/src/commands/tunnel/index.d.ts.map +0 -1
  324. package/dist/src/commands/tunnel/index.js.map +0 -1
  325. package/dist/src/commands/vcs/clone.d.ts.map +0 -1
  326. package/dist/src/commands/vcs/clone.js.map +0 -1
  327. package/dist/src/commands/vcs/common.d.ts.map +0 -1
  328. package/dist/src/commands/vcs/common.js.map +0 -1
  329. package/dist/src/commands/vcs/drafts.d.ts.map +0 -1
  330. package/dist/src/commands/vcs/drafts.js.map +0 -1
  331. package/dist/src/commands/vcs/get.d.ts.map +0 -1
  332. package/dist/src/commands/vcs/get.js.map +0 -1
  333. package/dist/src/commands/vcs/index.d.ts.map +0 -1
  334. package/dist/src/commands/vcs/index.js.map +0 -1
  335. package/dist/src/commands/vcs/propose.d.ts.map +0 -1
  336. package/dist/src/commands/vcs/propose.js.map +0 -1
  337. package/dist/src/commands/vcs/review.d.ts.map +0 -1
  338. package/dist/src/commands/vcs/review.js.map +0 -1
  339. package/dist/src/commands/vcs/rm.d.ts.map +0 -1
  340. package/dist/src/commands/vcs/rm.js.map +0 -1
  341. package/dist/src/commands/vcs-enrich.d.ts.map +0 -1
  342. package/dist/src/commands/vcs-enrich.js.map +0 -1
  343. package/dist/src/commands/vpn/index.d.ts.map +0 -1
  344. package/dist/src/commands/vpn/index.js.map +0 -1
  345. package/dist/src/commands/vpn/tunnel.d.ts.map +0 -1
  346. package/dist/src/commands/vpn/tunnel.js.map +0 -1
  347. package/dist/src/commands/workflow.d.ts.map +0 -1
  348. package/dist/src/commands/workflow.js.map +0 -1
  349. package/dist/src/docs/assemble.d.ts.map +0 -1
  350. package/dist/src/docs/assemble.js.map +0 -1
  351. package/dist/src/docs/cli-reference.d.ts.map +0 -1
  352. package/dist/src/docs/cli-reference.js.map +0 -1
  353. package/dist/src/docs/discover.d.ts.map +0 -1
  354. package/dist/src/docs/discover.js.map +0 -1
  355. package/dist/src/docs/portal.d.ts.map +0 -1
  356. package/dist/src/docs/portal.js.map +0 -1
  357. package/dist/src/docs/registry-docs.d.ts.map +0 -1
  358. package/dist/src/docs/registry-docs.js.map +0 -1
  359. package/dist/src/docs/schema.d.ts.map +0 -1
  360. package/dist/src/docs/schema.js.map +0 -1
  361. package/dist/src/docs/serve.d.ts.map +0 -1
  362. package/dist/src/docs/serve.js.map +0 -1
  363. package/dist/src/docs/start.d.ts.map +0 -1
  364. package/dist/src/docs/start.js.map +0 -1
  365. package/dist/src/eval/agent-eval.d.mts.map +0 -1
  366. package/dist/src/eval/agent-eval.mjs.map +0 -1
  367. package/dist/src/index.d.ts.map +0 -1
  368. package/dist/src/program.d.ts.map +0 -1
  369. package/dist/src/program.js.map +0 -1
  370. package/dist/src/utils/auth-preflight.d.ts.map +0 -1
  371. package/dist/src/utils/auth-preflight.js.map +0 -1
  372. package/dist/src/utils/aws-auth.d.ts.map +0 -1
  373. package/dist/src/utils/aws-auth.js.map +0 -1
  374. package/dist/src/utils/bastion.d.ts.map +0 -1
  375. package/dist/src/utils/bastion.js.map +0 -1
  376. package/dist/src/utils/build-info.d.ts.map +0 -1
  377. package/dist/src/utils/build-info.js.map +0 -1
  378. package/dist/src/utils/cache-home.d.ts.map +0 -1
  379. package/dist/src/utils/cache-home.js.map +0 -1
  380. package/dist/src/utils/capture-history.d.ts.map +0 -1
  381. package/dist/src/utils/capture-history.js.map +0 -1
  382. package/dist/src/utils/context.d.ts.map +0 -1
  383. package/dist/src/utils/context.js.map +0 -1
  384. package/dist/src/utils/credentials.d.ts.map +0 -1
  385. package/dist/src/utils/credentials.js.map +0 -1
  386. package/dist/src/utils/deploy-preflight.d.ts.map +0 -1
  387. package/dist/src/utils/deploy-preflight.js.map +0 -1
  388. package/dist/src/utils/errors.d.ts.map +0 -1
  389. package/dist/src/utils/errors.js.map +0 -1
  390. package/dist/src/utils/first-party-contexts.d.ts.map +0 -1
  391. package/dist/src/utils/first-party-contexts.js.map +0 -1
  392. package/dist/src/utils/index.d.ts.map +0 -1
  393. package/dist/src/utils/index.js.map +0 -1
  394. package/dist/src/utils/kubeconfig.d.ts.map +0 -1
  395. package/dist/src/utils/kubeconfig.js.map +0 -1
  396. package/dist/src/utils/log.d.ts.map +0 -1
  397. package/dist/src/utils/log.js.map +0 -1
  398. package/dist/src/utils/mesh-json.d.ts.map +0 -1
  399. package/dist/src/utils/mesh-json.js.map +0 -1
  400. package/dist/src/utils/pid.d.ts.map +0 -1
  401. package/dist/src/utils/pid.js.map +0 -1
  402. package/dist/src/utils/pulumi-run.d.ts.map +0 -1
  403. package/dist/src/utils/pulumi-run.js.map +0 -1
  404. package/dist/src/utils/pulumi.d.ts.map +0 -1
  405. package/dist/src/utils/pulumi.js.map +0 -1
  406. package/dist/src/utils/reachability.d.ts.map +0 -1
  407. package/dist/src/utils/reachability.js.map +0 -1
  408. package/dist/src/utils/recover-conversation.d.ts.map +0 -1
  409. package/dist/src/utils/recover-conversation.js.map +0 -1
  410. package/dist/src/utils/registry-broker.d.ts.map +0 -1
  411. package/dist/src/utils/registry-broker.js.map +0 -1
  412. package/dist/src/utils/registry-identity.d.ts.map +0 -1
  413. package/dist/src/utils/registry-identity.js.map +0 -1
  414. package/dist/src/utils/scaffold-versions.d.ts.map +0 -1
  415. package/dist/src/utils/scaffold-versions.js.map +0 -1
  416. package/dist/src/utils/socks-forward.d.ts.map +0 -1
  417. package/dist/src/utils/socks-forward.js.map +0 -1
  418. package/dist/src/utils/stack-flag.d.ts.map +0 -1
  419. package/dist/src/utils/stack-flag.js.map +0 -1
  420. package/dist/src/utils/tailscale-targets.d.ts.map +0 -1
  421. package/dist/src/utils/tailscale-targets.js.map +0 -1
  422. package/dist/src/utils/tailscale.d.ts.map +0 -1
  423. package/dist/src/utils/tailscale.js.map +0 -1
  424. package/dist/src/utils/temporal-auth.d.ts.map +0 -1
  425. package/dist/src/utils/temporal-auth.js.map +0 -1
  426. package/dist/src/utils/temporal-codec.d.ts.map +0 -1
  427. package/dist/src/utils/tunnel-ownership.d.ts.map +0 -1
  428. package/dist/src/utils/tunnel-ownership.js.map +0 -1
  429. package/dist/src/utils/vpn-join.d.ts.map +0 -1
  430. package/dist/src/utils/vpn-join.js.map +0 -1
  431. package/dist/src/utils/vpn.d.ts.map +0 -1
  432. package/dist/src/utils/vpn.js.map +0 -1
  433. package/dist/src/utils/workflow-fingerprint.d.ts.map +0 -1
  434. package/dist/src/utils/workflow-fingerprint.js.map +0 -1
  435. package/dist/src/utils/worktree-identity.d.ts.map +0 -1
  436. package/dist/src/utils/worktree-identity.js.map +0 -1
@@ -1,3 +1,2 @@
1
1
  import { Command } from "commander";
2
2
  export declare function registerDocsCommand(program: Command): void;
3
- //# sourceMappingURL=docs.d.ts.map
@@ -122,15 +122,7 @@ async function buildDocs(configPathArg) {
122
122
  }
123
123
  logSuccess(`Docs build complete (${generatedSpecs.size} OpenAPI file${generatedSpecs.size === 1 ? "" : "s"})`);
124
124
  }
125
- /** Default location of the committed, reviewable CLI reference. */
126
125
  const CLI_REFERENCE_PATH = "docs/portal/generated/cli-reference.md";
127
- /**
128
- * Render the CLI reference markdown.
129
- *
130
- * `../program.js` is imported dynamically because it imports this module —
131
- * a static import would close the cycle. It also keeps the whole command tree
132
- * out of the module graph for every other `mesh` invocation.
133
- */
134
126
  async function renderCliReference() {
135
127
  const [{ createProgram }, { extractCliReference, renderCliReferenceMarkdown }] = await Promise.all([
136
128
  import("../program.js"),
@@ -138,7 +130,6 @@ async function renderCliReference() {
138
130
  ]);
139
131
  return renderCliReferenceMarkdown(extractCliReference(createProgram()));
140
132
  }
141
- /** Wrap an action so any thrown error becomes a one-line failure + exit 1. */
142
133
  function guarded(action) {
143
134
  return async () => {
144
135
  try {
@@ -241,8 +232,6 @@ export function registerDocsCommand(program) {
241
232
  const { runDocsStop } = await import("../docs/start.js");
242
233
  runDocsStop();
243
234
  })());
244
- // Hidden: the tmux session re-enters through this. Not in the reference —
245
- // cli-reference excludes hidden commands by design.
246
235
  docs
247
236
  .command("serve-static", { hidden: true })
248
237
  .option("--root <dir>", "built site root", "")
@@ -259,4 +248,3 @@ export function registerDocsCommand(program) {
259
248
  await runDocsList();
260
249
  })());
261
250
  }
262
- //# sourceMappingURL=docs.js.map
@@ -1,29 +1,5 @@
1
- /**
2
- * mesh hub dev — one-command local Hub over a running dev-local stack (MESH-2275).
3
- *
4
- * Launches the CURRENT-CODE Hub (apps/hub api + ui from a mesh-platform
5
- * checkout) pointed at an existing `mesh dev` session's stack, auto-assembling
6
- * the env that used to be hand-set (the FUB-demo runbook §6 recipe):
7
- *
8
- * HUB_TENANT / HUB_SCOPE_ENV / HUB_SCOPE_TENANTS from the session's platform context
9
- * TEMPORAL_ADDRESS from the session's tunnel (VPN or SSM)
10
- * AWS_* from the session's scratch credential_process profile
11
- * DEV_USER_* / DEV_USER_TOKEN_URL from the session's injected dev identity +
12
- * per-session token-server (MESH-2039)
13
- *
14
- * The `mesh dev` session already resolved all of these — its tmux session
15
- * environment and state file (`$TMPDIR/mesh-dev-sessions/<name>.json`) are the
16
- * source of truth; this command only reads them and never mutates the app
17
- * session.
18
- *
19
- * Scoped-tenant enumeration is validated up front: HUB_SCOPE_ENV without a
20
- * non-empty HUB_SCOPE_TENANTS makes the Hub API silently return zero
21
- * registrations (apps/hub/api/src/lib/ssm/reader.ts), so that combination is
22
- * a loud error here, never an empty Hub.
23
- */
24
1
  import { Command } from "commander";
25
2
  import { type SessionState } from "../dev.js";
26
- /** tmux session the Hub runs in — fixed, one local Hub at a time. */
27
3
  export declare const HUB_SESSION = "mesh-hub-dev";
28
4
  export declare const DEFAULT_HUB_UI_PORT: number;
29
5
  export declare const DEFAULT_HUB_API_PORT = 3002;
@@ -32,28 +8,14 @@ export interface DiscoveredSession {
32
8
  state: SessionState;
33
9
  }
34
10
  export declare function devSessionsDir(): string;
35
- /** All persisted `mesh dev` session states (unparseable files skipped). */
36
11
  export declare function listDevSessions(dir?: string): DiscoveredSession[];
37
- /**
38
- * Pick the dev session to point the Hub at.
39
- *
40
- * 1. --session <name> wins (error if its state file is missing).
41
- * 2. The session whose appRoot equals the cwd's app root (both sides come
42
- * from findAppRoot, so exact equality is the right comparison).
43
- * 3. A sole running session.
44
- *
45
- * Ambiguity (multiple sessions, none matching cwd) is an error listing the
46
- * candidates — never a silent guess.
47
- */
48
12
  export declare function pickDevSession(sessions: DiscoveredSession[], opts: {
49
13
  session?: string;
50
14
  cwdAppRoot?: string | null;
51
15
  }): DiscoveredSession;
52
- /** Parse `tmux show-environment` output (`KEY=value` lines; `-KEY` = unset). */
53
16
  export declare function parseTmuxEnv(output: string): Record<string, string>;
54
17
  export declare function forwardedSessionVars(sessionEnv: Record<string, string>): Record<string, string>;
55
18
  export interface HubDevEnvOptions {
56
- /** Comma-separated tenant override (--tenants). */
57
19
  tenants?: string;
58
20
  uiPort: number;
59
21
  apiPort: number;
@@ -61,7 +23,6 @@ export interface HubDevEnvOptions {
61
23
  export interface AssembledHubEnv {
62
24
  apiEnv: Record<string, string>;
63
25
  uiEnv: Record<string, string>;
64
- /** Human-readable scope summary for the launch banner. */
65
26
  scope: {
66
27
  hubTenant: string;
67
28
  scopeEnv: string;
@@ -69,31 +30,10 @@ export interface AssembledHubEnv {
69
30
  };
70
31
  temporalAddress: string;
71
32
  warnings: string[];
72
- /** Informational — things the command is handling itself, not user problems. */
73
33
  notes: string[];
74
34
  }
75
- /**
76
- * Assemble the Hub api/ui env from a discovered dev session. Throws loudly on
77
- * the combinations that today produce a silently-empty Hub.
78
- */
79
35
  export declare function assembleHubEnv(session: DiscoveredSession, sessionEnv: Record<string, string>, opts: HubDevEnvOptions): AssembledHubEnv;
80
- /**
81
- * Locate the mesh-platform checkout the Hub runs from:
82
- * --platform-dir → $MESH_PLATFORM_DIR → walk up from cwd (monorepo case).
83
- *
84
- * An invalid `--platform-dir` is fatal (the user named it explicitly), but a
85
- * stale `MESH_PLATFORM_DIR` left over in the shell only warns and falls through
86
- * to the cwd walk-up — otherwise it would hard-fail runs made from inside a
87
- * perfectly good checkout.
88
- */
89
36
  export declare function resolvePlatformDir(explicit: string | undefined, cwd: string, env?: Record<string, string | undefined>): string;
90
- /**
91
- * Parse a port option, naming its source in the error. Without this a typo'd
92
- * `--port` (or a stale non-numeric `MESH_HUB_DEV_PORT` left in the shell) becomes
93
- * `NaN`, lands in the env file as `PORT=NaN`, and reaches `net.connect` — which
94
- * throws a raw `ERR_SOCKET_BAD_PORT` instead of an actionable CLI error.
95
- */
96
37
  export declare function parsePort(raw: string | undefined, fallback: number, source: string): number;
97
38
  export declare function redactEnv(env: Record<string, string>): Record<string, string>;
98
39
  export declare function registerHubCommands(program: Command): void;
99
- //# sourceMappingURL=index.d.ts.map
@@ -1,26 +1,3 @@
1
- /**
2
- * mesh hub dev — one-command local Hub over a running dev-local stack (MESH-2275).
3
- *
4
- * Launches the CURRENT-CODE Hub (apps/hub api + ui from a mesh-platform
5
- * checkout) pointed at an existing `mesh dev` session's stack, auto-assembling
6
- * the env that used to be hand-set (the FUB-demo runbook §6 recipe):
7
- *
8
- * HUB_TENANT / HUB_SCOPE_ENV / HUB_SCOPE_TENANTS from the session's platform context
9
- * TEMPORAL_ADDRESS from the session's tunnel (VPN or SSM)
10
- * AWS_* from the session's scratch credential_process profile
11
- * DEV_USER_* / DEV_USER_TOKEN_URL from the session's injected dev identity +
12
- * per-session token-server (MESH-2039)
13
- *
14
- * The `mesh dev` session already resolved all of these — its tmux session
15
- * environment and state file (`$TMPDIR/mesh-dev-sessions/<name>.json`) are the
16
- * source of truth; this command only reads them and never mutates the app
17
- * session.
18
- *
19
- * Scoped-tenant enumeration is validated up front: HUB_SCOPE_ENV without a
20
- * non-empty HUB_SCOPE_TENANTS makes the Hub API silently return zero
21
- * registrations (apps/hub/api/src/lib/ssm/reader.ts), so that combination is
22
- * a loud error here, never an empty Hub.
23
- */
24
1
  import { execFileSync } from "node:child_process";
25
2
  import * as fs from "node:fs";
26
3
  import * as net from "node:net";
@@ -33,19 +10,12 @@ import { MeshCliError } from "../../utils/errors.js";
33
10
  import { DEFAULT_HUB_PORT } from "../local/stack.js";
34
11
  import { logInfo, logSuccess, logWarn } from "../../utils/log.js";
35
12
  import { findAppRoot } from "../../utils/pulumi.js";
36
- /** tmux session the Hub runs in — fixed, one local Hub at a time. */
37
13
  export const HUB_SESSION = "mesh-hub-dev";
38
- // Same default as the containerized Hub (local/stack.ts DEFAULT_HUB_PORT),
39
- // but a SEPARATE override variable: MESH_HUB_PORT moves the containerized
40
- // Hub's published port, MESH_HUB_DEV_PORT moves this dev-server Hub. The two
41
- // are built to run side by side — one shared variable would make "move the
42
- // containerized Hub off 9000" also move the dev server onto the same port.
43
14
  export const DEFAULT_HUB_UI_PORT = Number(DEFAULT_HUB_PORT);
44
15
  export const DEFAULT_HUB_API_PORT = 3002;
45
16
  export function devSessionsDir() {
46
17
  return path.join(os.tmpdir(), "mesh-dev-sessions");
47
18
  }
48
- /** All persisted `mesh dev` session states (unparseable files skipped). */
49
19
  export function listDevSessions(dir = devSessionsDir()) {
50
20
  if (!fs.existsSync(dir))
51
21
  return [];
@@ -60,22 +30,10 @@ export function listDevSessions(dir = devSessionsDir()) {
60
30
  }
61
31
  }
62
32
  catch {
63
- // stale/corrupt state file — not a candidate
64
33
  }
65
34
  }
66
35
  return sessions;
67
36
  }
68
- /**
69
- * Pick the dev session to point the Hub at.
70
- *
71
- * 1. --session <name> wins (error if its state file is missing).
72
- * 2. The session whose appRoot equals the cwd's app root (both sides come
73
- * from findAppRoot, so exact equality is the right comparison).
74
- * 3. A sole running session.
75
- *
76
- * Ambiguity (multiple sessions, none matching cwd) is an error listing the
77
- * candidates — never a silent guess.
78
- */
79
37
  export function pickDevSession(sessions, opts) {
80
38
  if (opts.session) {
81
39
  const match = sessions.find((s) => s.name === opts.session);
@@ -99,8 +57,6 @@ export function pickDevSession(sessions, opts) {
99
57
  .map((s) => `${s.name} (${s.state.appRoot})`)
100
58
  .join(", ")}`, { remediation: { command: "mesh hub dev --session <name>" } });
101
59
  }
102
- // ── tmux session env ─────────────────────────────────────────────────────────
103
- /** Parse `tmux show-environment` output (`KEY=value` lines; `-KEY` = unset). */
104
60
  export function parseTmuxEnv(output) {
105
61
  const env = {};
106
62
  for (const line of output.split("\n")) {
@@ -134,8 +90,6 @@ function tmuxSessionExists(sessionName) {
134
90
  return false;
135
91
  }
136
92
  }
137
- // ── env assembly ─────────────────────────────────────────────────────────────
138
- /** Vars carried over verbatim from the dev session's tmux environment. */
139
93
  const FORWARD_PREFIXES = ["AWS_", "DEV_USER_"];
140
94
  export function forwardedSessionVars(sessionEnv) {
141
95
  const out = {};
@@ -145,10 +99,6 @@ export function forwardedSessionVars(sessionEnv) {
145
99
  }
146
100
  return out;
147
101
  }
148
- /**
149
- * Assemble the Hub api/ui env from a discovered dev session. Throws loudly on
150
- * the combinations that today produce a silently-empty Hub.
151
- */
152
102
  export function assembleHubEnv(session, sessionEnv, opts) {
153
103
  const warnings = [];
154
104
  const notes = [];
@@ -158,9 +108,6 @@ export function assembleHubEnv(session, sessionEnv, opts) {
158
108
  }
159
109
  const isLocalPlatform = platform.tenant === "local";
160
110
  if (isLocalPlatform) {
161
- // Supported, and deliberately so: `mesh start`'s own Hub is built from the
162
- // PUBLISHED tarball, so it is the one place a Hub change cannot be tried
163
- // before it ships. The backing services come from `localPlatformEnv` below.
164
111
  notes.push("Local platform session — the Hub runs from this checkout against `mesh start`. " +
165
112
  "Its containerized Hub keeps :9000, so pass --port/--api-port to run both.");
166
113
  }
@@ -171,9 +118,6 @@ export function assembleHubEnv(session, sessionEnv, opts) {
171
118
  .map((t) => t.trim())
172
119
  .filter(Boolean);
173
120
  if (scopeTenants.length === 0) {
174
- // The Hub API's scoped SSM reader returns [] with no error when
175
- // HUB_SCOPE_ENV is set and HUB_SCOPE_TENANTS is empty — every page renders
176
- // blank with nothing in the logs. Refuse to launch into that state.
177
121
  throw new MeshCliError("Tenant scope resolved EMPTY (HUB_SCOPE_ENV set, no HUB_SCOPE_TENANTS) — the Hub would launch but show zero tenants everywhere.", { remediation: { command: "mesh hub dev --tenants <tenant>[,<tenant>…]" } });
178
122
  }
179
123
  const forwarded = forwardedSessionVars(sessionEnv);
@@ -185,16 +129,12 @@ export function assembleHubEnv(session, sessionEnv, opts) {
185
129
  `${scopeEnv}\` and relaunch \`mesh dev\`.`);
186
130
  }
187
131
  if (!forwarded.DEV_USER_TOKEN_URL) {
188
- // Not a warning: the launch path starts a dedicated token-server for this
189
- // case, so telling the user to restart `mesh dev` would contradict the
190
- // `✔ Dev-user token-server: …` line printed moments later.
191
- notes.push("Dev session predates the per-session token-server (MESH-2039) — starting a dedicated one so tokens stay fresh past ~1h.");
132
+ notes.push("Dev session predates the per-session token-server starting a dedicated one so tokens stay fresh past ~1h.");
192
133
  }
193
134
  const temporalAddress = sessionEnv.TEMPORAL_ADDRESS ??
194
135
  (session.state.devOutput.tunnels["temporal"]
195
136
  ? tunnelClientAddress(session.state.devOutput.tunnels["temporal"])
196
- : // The local platform runs Temporal as a published container, so there is
197
- // no tunnel to record and none to demand — the address is fixed.
137
+ :
198
138
  isLocalPlatform
199
139
  ? "localhost:7233"
200
140
  : undefined);
@@ -215,33 +155,13 @@ export function assembleHubEnv(session, sessionEnv, opts) {
215
155
  PORT: String(opts.uiPort),
216
156
  API_URL: `http://localhost:${opts.apiPort}`,
217
157
  HUB_TENANT: hubTenant,
218
- // UI namespace parsing + session defaults land on the scoped tenant.
219
158
  DEFAULT_ORG: scopeTenants[0],
220
159
  DEFAULT_ENV: scopeEnv,
221
160
  };
222
161
  return { apiEnv, uiEnv, scope: { hubTenant, scopeEnv, scopeTenants }, temporalAddress, warnings, notes };
223
162
  }
224
- /**
225
- * The backing services a Hub needs when the dev session targets `mesh start`.
226
- *
227
- * A tethered session forwards these from the deployed stack, but a local one
228
- * cannot: the platform is a set of containers whose addresses only exist on
229
- * this machine. Without them the Hub comes up able to VERIFY a token and unable
230
- * to write anything — no ops database, so no API-key rows, and no Zitadel admin
231
- * key, so no machine user to attach a key to. The console renders with the
232
- * create affordances simply absent, which reads as a broken feature rather than
233
- * an unprovisioned one.
234
- *
235
- * The values mirror `stack/docker-compose.hub.yml`, translated from compose
236
- * service names to the ports that compose publishes on the host — `mesh hub dev`
237
- * runs the Hub as a host process, not inside the stack's network.
238
- */
239
163
  const localPlatformEnv = (sessionEnv) => ({
240
- // The issuer the local `mesh login` tokens carry. Zitadel routes by Host
241
- // header, so the host must stay `localhost` on both sides of the call.
242
164
  ZITADEL_ISSUER: sessionEnv.ZITADEL_ISSUER ?? "http://localhost:8080",
243
- // Postgres publishes on 5433; the Hub's ops schema lives in the `hub` database
244
- // alongside the per-app ones.
245
165
  OPS_DB_HOST: "localhost",
246
166
  OPS_DB_PORT: "5433",
247
167
  OPS_DB_NAME: "hub",
@@ -249,9 +169,6 @@ const localPlatformEnv = (sessionEnv) => ({
249
169
  DATABASE_PASSWORD: "postgres",
250
170
  PGSSLMODE: "disable",
251
171
  DATABASE_URL: "postgres://postgres:postgres@localhost:5433/hub?sslmode=disable",
252
- // The Hub's ADMIN plane. `mesh start` seeds the machine key this names, in the
253
- // platform org with IAM_OWNER, so the Hub can administer each app tenant's own
254
- // Zitadel org rather than only its own.
255
172
  ZITADEL_OPSHUB_SECRET_NAME: "mesh/local/dev/zitadel/ops-hub",
256
173
  SPICEDB_ENDPOINT: "localhost:50051",
257
174
  SPICEDB_HTTP_ENDPOINT: "http://localhost:8443",
@@ -261,30 +178,13 @@ const localPlatformEnv = (sessionEnv) => ({
261
178
  TEMPO_URL: "http://localhost:3200",
262
179
  PROMETHEUS_URL: "http://localhost:9090",
263
180
  TEMPORAL_UI_URL: "http://localhost:8233",
264
- // The stack's namespace. Absent, the Hub's compliance schedules fail to
265
- // register with "Temporal namespace is required".
266
181
  TEMPORAL_NAMESPACE: "local-dev",
267
- // Dagster discovery records written by `mesh dev --local` carry
268
- // `host.docker.internal` (for the containerized `mesh start` hub). This hub
269
- // runs on the host, where that name does not resolve — tell the Data
270
- // section's resolver to swap it for localhost.
271
182
  MESH_DAGSTER_LOCAL_HOST: "localhost",
272
183
  });
273
- // ── platform checkout resolution ────────────────────────────────────────────
274
- /** Does `dir` look like a mesh-platform checkout root (has the Hub app)? */
275
184
  function isPlatformRoot(dir) {
276
185
  return (fs.existsSync(path.join(dir, "apps", "hub", "api", "package.json")) &&
277
186
  fs.existsSync(path.join(dir, "apps", "hub", "ui", "package.json")));
278
187
  }
279
- /**
280
- * Locate the mesh-platform checkout the Hub runs from:
281
- * --platform-dir → $MESH_PLATFORM_DIR → walk up from cwd (monorepo case).
282
- *
283
- * An invalid `--platform-dir` is fatal (the user named it explicitly), but a
284
- * stale `MESH_PLATFORM_DIR` left over in the shell only warns and falls through
285
- * to the cwd walk-up — otherwise it would hard-fail runs made from inside a
286
- * perfectly good checkout.
287
- */
288
188
  export function resolvePlatformDir(explicit, cwd, env = process.env) {
289
189
  if (explicit) {
290
190
  const resolved = path.resolve(explicit);
@@ -313,7 +213,6 @@ export function resolvePlatformDir(explicit, cwd, env = process.env) {
313
213
  },
314
214
  });
315
215
  }
316
- // ── token server ─────────────────────────────────────────────────────────────
317
216
  async function findFreePort() {
318
217
  return new Promise((resolve, reject) => {
319
218
  const server = net.createServer();
@@ -337,17 +236,9 @@ function isPortListening(port) {
337
236
  socket.once("error", () => done(false));
338
237
  });
339
238
  }
340
- // ── env file dir ─────────────────────────────────────────────────────────────
341
239
  function hubEnvDir() {
342
240
  return path.join(os.tmpdir(), "mesh-dev-sessions", HUB_SESSION);
343
241
  }
344
- // ── port parsing ─────────────────────────────────────────────────────────────
345
- /**
346
- * Parse a port option, naming its source in the error. Without this a typo'd
347
- * `--port` (or a stale non-numeric `MESH_HUB_DEV_PORT` left in the shell) becomes
348
- * `NaN`, lands in the env file as `PORT=NaN`, and reaches `net.connect` — which
349
- * throws a raw `ERR_SOCKET_BAD_PORT` instead of an actionable CLI error.
350
- */
351
242
  export function parsePort(raw, fallback, source) {
352
243
  if (raw === undefined)
353
244
  return fallback;
@@ -359,12 +250,10 @@ export function parsePort(raw, fallback, source) {
359
250
  }
360
251
  return n;
361
252
  }
362
- // ── redaction for --print-env ────────────────────────────────────────────────
363
253
  const SENSITIVE_RE = /TOKEN|SECRET|KEY|PASSWORD/i;
364
254
  export function redactEnv(env) {
365
255
  const out = {};
366
256
  for (const [key, value] of Object.entries(env)) {
367
- // URLs named *_TOKEN_URL etc. are locators, not credentials.
368
257
  const sensitive = SENSITIVE_RE.test(key) && !key.endsWith("_URL") && !key.endsWith("_FILE");
369
258
  out[key] = sensitive ? `<redacted ${value.length} chars>` : value;
370
259
  }
@@ -386,16 +275,13 @@ async function hubDevAction(opts) {
386
275
  ? parsePort(opts.port, DEFAULT_HUB_UI_PORT, "--port")
387
276
  : parsePort(process.env.MESH_HUB_DEV_PORT, DEFAULT_HUB_UI_PORT, "MESH_HUB_DEV_PORT");
388
277
  const apiPort = parsePort(opts.apiPort, DEFAULT_HUB_API_PORT, "--api-port");
389
- // 1. The Hub's source.
390
278
  const platformDir = resolvePlatformDir(opts.platformDir, process.cwd());
391
- // 2. The dev-local stack session to observe.
392
279
  const cwdAppRoot = findAppRoot(process.cwd());
393
280
  const session = pickDevSession(listDevSessions(), { session: opts.session, cwdAppRoot });
394
281
  if (!tmuxSessionExists(session.name)) {
395
282
  throw new MeshCliError(`Dev session '${session.name}' has a state file but no live tmux session — its tunnels and token-server are gone.`, { remediation: { command: `mesh dev # from ${session.state.appRoot}` } });
396
283
  }
397
284
  const sessionEnv = readTmuxSessionEnv(session.name);
398
- // 3. Assemble the env (loud failures instead of a silently-empty Hub).
399
285
  const assembled = assembleHubEnv(session, sessionEnv, { tenants: opts.tenants, uiPort, apiPort });
400
286
  if (opts.printEnv) {
401
287
  console.log(chalk.bold("\nhub-api env:"));
@@ -411,13 +297,6 @@ async function hubDevAction(opts) {
411
297
  remediation: { command: "mesh hub dev --kill # then re-run mesh hub dev" },
412
298
  });
413
299
  }
414
- // Pre-flight the ports. Without this, a port already owned by ANOTHER Hub
415
- // (the containerized `mesh start` one is fixed at :9000, or a plain
416
- // `mesh dev` from apps/hub holds :3002) makes the post-launch waitForPort
417
- // succeed against that other process: vite has no strictPort in its config
418
- // so the UI silently falls forward to the next free port, and we would then
419
- // print "Hub → http://localhost:9000" pointing at someone else's Hub — the
420
- // exact silently-wrong-Hub failure this command exists to remove.
421
300
  for (const [label, port, flag] of [
422
301
  ["API", apiPort, "--api-port"],
423
302
  ["UI", uiPort, "--port"],
@@ -437,9 +316,6 @@ async function hubDevAction(opts) {
437
316
  const apiDir = path.join(platformDir, "apps", "hub", "api");
438
317
  const uiDir = path.join(platformDir, "apps", "hub", "ui");
439
318
  execFileSync("tmux", ["new-session", "-d", "-s", HUB_SESSION, "-n", "api", "-c", apiDir]);
440
- // Fresh dev tokens: reuse the app session's token-server when it has one;
441
- // otherwise run our own (MESH-2039 pattern) so the Hub survives past the
442
- // ~1h Zitadel horizon either way.
443
319
  if (!assembled.apiEnv.DEV_USER_TOKEN_URL && assembled.apiEnv.DEV_USER_ID_TOKEN) {
444
320
  const platform = session.state.devOutput.platform;
445
321
  const credContext = `mesh.${platform.env}`;
@@ -475,18 +351,6 @@ async function hubDevAction(opts) {
475
351
  execFileSync("tmux", ["send-keys", "-t", `${HUB_SESSION}:${window}`, buildLaunchCommand(envFile, dir, cmd), "Enter"]);
476
352
  };
477
353
  launch("api", apiDir, assembled.apiEnv, "pnpm dev", false);
478
- // --strictPort: the Hub UI's vite config sets `port` but NOT `strictPort`, so
479
- // vite would silently fall forward to the next free port and we'd advertise a
480
- // URL serving something else. Fail instead — the pre-flight above already
481
- // rejects a taken port, this closes the race. (`host: true` is already in
482
- // apps/hub/ui/vite.config.ts, so the tailnet binding needs no flag here.)
483
- //
484
- // No `--` separator before the flags: the script is `react-router dev`, whose
485
- // first positional is the PROJECT DIRECTORY. `pnpm dev -- --port …` forwards
486
- // the separator, react-router reads `--` as that directory, looks for a vite
487
- // config inside it, finds none, and exits with "React Router Vite plugin not
488
- // found in Vite config" — a message that points at the config rather than at
489
- // the argument that caused it. pnpm passes trailing args through regardless.
490
354
  launch("ui", uiDir, assembled.uiEnv, `pnpm dev --port ${uiPort} --strictPort`, true);
491
355
  logInfo("Waiting for the Hub to come up…");
492
356
  const apiUp = await waitForPort("127.0.0.1", apiPort, 90_000);
@@ -515,4 +379,3 @@ export function registerHubCommands(program) {
515
379
  .option("--kill", "tear down the running Hub session")
516
380
  .action(hubDevAction);
517
381
  }
518
- //# sourceMappingURL=index.js.map
@@ -1,103 +1,56 @@
1
- /**
2
- * Bare `mesh init` — the guided setup of a machine and a repo for one tenant.
3
- *
4
- * Four questions and four steps, in order:
5
- *
6
- * 1. tenant — which tenant this repo belongs to
7
- * 2. mode — local only (`mesh start` / `mesh dev`) or a deployed platform
8
- * 3. registry — package-registry access, signing in if the machine has none
9
- * 4. platform — (deployed only) `mesh login <tenant>.<env>` in-process
10
- * 5. repo — bootstrap an empty apps repo, or check an existing one
11
- * 6. skills — the agent skills the repo's packages ship
12
- *
13
- * Two identities never mix: the registry step talks to the ONE global package
14
- * registry and never needs a context; the platform step is the only place a
15
- * `<tenant>.<env>` context appears, and the local branch never mentions it.
16
- *
17
- * Every step is data (`WizardStep` → `StepResult`) so the summary, the exit
18
- * code and the `--json` document are one reducer over one list, and a step
19
- * that fails without blocking (a registry 403 — the user needs the summary to
20
- * know whom to ask) lets the rest run. Every prompt has a flag, so a runner
21
- * with `--tenant … --local --yes` sees no prompt at all.
22
- */
23
1
  import { probeRegistryToken } from "../../utils/auth-preflight.js";
24
2
  import { type RegistryLoginOptions } from "../registry.js";
25
3
  import { type MeshJson } from "../../utils/mesh-json.js";
26
- /** The flags — one per wizard answer, so a headless run needs no prompt. */
27
4
  export interface WizardOptions {
28
5
  tenant?: string;
29
- /** Local only: `mesh start` / `mesh dev`, no deployed platform. */
30
6
  local?: boolean;
31
- /** A deployed platform's environment (`dev`, `uat`, …) → context `<tenant>.<env>`. */
32
7
  platform?: string;
33
- /** Device-code sign-in for the registry and platform steps (headless / SSH). */
34
8
  device?: boolean;
35
- /** Deployers only: an AWS profile that can read the registry (skips the broker). */
36
9
  profile?: string;
37
- /** Do not touch the repo (no bootstrap, no doctor, no skills). */
38
10
  skipRepo?: boolean;
39
- /** Accept every default and never prompt. */
40
11
  yes?: boolean;
41
- /** One JSON document on stdout; human output on stderr. */
42
12
  json?: boolean;
43
13
  }
44
14
  export type StepStatus = "pass" | "fail" | "warn" | "skip";
45
- /** One step's verdict — what the summary, the exit code and `--json` all read. */
46
15
  export interface StepResult {
47
16
  name: string;
48
17
  status: StepStatus;
49
18
  detail: string;
50
- /** The exact command (or, for a grant, the person to ask) that fixes it. */
51
19
  fix?: string;
52
- /** `false` = a failure the wizard carries on past (a registry 403). */
53
20
  blocking?: boolean;
54
21
  }
55
- /** Where the tenant runs. */
56
22
  export type WizardMode = "local" | {
57
23
  platform: string;
58
24
  };
59
- /** The wizard's answers, shared by every step. */
60
25
  export interface WizardCtx {
61
26
  cwd: string;
62
27
  tenant: string;
63
28
  mode: WizardMode;
64
- /** The `<tenant>.<env>` context — only in deployed mode. */
65
29
  context: string | null;
66
30
  device?: boolean;
67
31
  profile?: string;
68
- /** True when a prompt or a browser can be used on this run. */
69
32
  interactive: boolean;
70
- /**
71
- * True when no browser can open here (SSH, a container, no TTY), so the
72
- * device code is the sign-in that works and every remediation names it.
73
- */
74
33
  remote: boolean;
75
34
  yes: boolean;
76
35
  skipRepo: boolean;
77
36
  prompts: Prompts;
78
- /** Test seams for the steps' side effects; production leaves them unset. */
79
37
  seams?: WizardSeams;
80
38
  }
81
- /** The impure calls a step makes, injectable so the real steps run under test. */
82
39
  export interface WizardSeams {
83
- /** The `~/.npmrc` token probe — defaults to `probeRegistryToken`. */
84
40
  probe?: typeof probeRegistryToken;
85
- /** The in-process registry login — defaults to `runRegistryLogin(undefined, opts)`. */
86
41
  runRegistryLogin?: (opts: RegistryLoginOptions) => Promise<void>;
42
+ gitInit?: (dir: string) => void;
87
43
  }
88
- /** A step: a name and a runner. */
89
44
  export interface WizardStep {
90
45
  name: "registry" | "platform" | "repo" | "skills";
91
46
  run(ctx: WizardCtx): Promise<StepResult>;
92
47
  }
93
- /** The final document — rendered for a terminal or emitted as `--json`. */
94
48
  export interface WizardOutcome {
95
49
  tenant: string;
96
50
  mode: WizardMode;
97
51
  steps: StepResult[];
98
52
  next: string[];
99
53
  }
100
- /** The prompt surface, injectable so the flow is testable without a TTY. */
101
54
  export interface Prompts {
102
55
  input(args: {
103
56
  message: string;
@@ -117,94 +70,31 @@ export interface Prompts {
117
70
  default?: boolean;
118
71
  }): Promise<boolean>;
119
72
  }
120
- /** Printed when the registry step has no session and no way to sign in. */
121
73
  export declare const NO_SESSION_NO_TTY_MESSAGE: string;
122
- /** Printed when a non-TTY run has no `--tenant`. */
123
74
  export declare const TENANT_REQUIRED_MESSAGE = "--tenant is required (no TTY for interactive mode)";
124
- /** Exit code for a Ctrl-C at a prompt: nothing half-written, conventional SIGINT code. */
125
75
  export declare const INTERRUPTED_EXIT_CODE = 130;
126
- /**
127
- * The exit code for a finished run: 1 when any step failed (blocking or not
128
- * — a registry 403 still means the machine is not set up), else 0.
129
- *
130
- * @example
131
- * wizardExitCode([{ name: "Registry access", status: "fail", detail: "…", blocking: false }]); // → 1
132
- */
133
76
  export declare function wizardExitCode(steps: ReadonlyArray<Pick<StepResult, "status">>): number;
134
- /**
135
- * The commands to run next, by mode.
136
- *
137
- * @example
138
- * wizardNextCommands({ platform: "dev" }); // → ["mesh create-app", "mesh deploy up # from the app directory"]
139
- */
140
- export declare function wizardNextCommands(mode: WizardMode): string[];
141
- /**
142
- * Whether the wizard should stop after `result`: a failing step that did not
143
- * opt out of blocking.
144
- */
77
+ export declare function wizardNextCommands(mode: WizardMode, steps?: ReadonlyArray<StepResult>): string[];
145
78
  export declare function stepBlocks(result: StepResult): boolean;
146
- /** The mode as a short phrase for the summary heading. */
147
79
  export declare function describeMode(mode: WizardMode): string;
148
- /**
149
- * Render the summary check-list — the same lines for a terminal and for the
150
- * stderr side of `--json`.
151
- *
152
- * @example
153
- * renderWizardSummary({ tenant: "acme", mode: "local", steps: [], next: ["mesh create-app"] });
154
- */
155
80
  export declare function renderWizardSummary(outcome: WizardOutcome, opts?: {
156
81
  color?: boolean;
157
82
  }): string;
158
- /**
159
- * Resolve the answers that need no prompt: flags first, then `--yes`
160
- * defaults, then what the repo already records. Returns the questions still
161
- * open so the caller prompts for exactly those.
162
- *
163
- * @example
164
- * resolveAnswers({ tenant: "acme", local: true }, null, false)
165
- * // → { tenant: "acme", mode: "local", open: [] }
166
- */
167
83
  export declare function resolveAnswers(opts: WizardOptions, recorded: MeshJson | null, interactive: boolean): {
168
84
  tenant?: string;
169
85
  mode?: WizardMode;
170
86
  open: Array<"tenant" | "mode">;
171
87
  };
172
- /** The registry step, exported so a test can drive the real thing through its seams. */
173
88
  export declare const registryStep: WizardStep;
174
- /** What kind of directory the wizard is standing in. */
175
- export type RepoKind = "platform-monorepo" | "empty-apps-repo" | "apps-repo" | "other-repo" | "no-repo";
176
- /**
177
- * Classify `cwd` for the repo step. Pure over the filesystem; exported for
178
- * tests.
179
- *
180
- * @example
181
- * classifyRepo("/tmp/empty-git-clone"); // → "empty-apps-repo"
182
- */
89
+ export type RepoKind = "platform-monorepo" | "empty-apps-repo" | "apps-repo" | "other-repo" | "empty-dir" | "no-repo";
183
90
  export declare function classifyRepo(cwd: string): {
184
91
  kind: RepoKind;
185
92
  root: string;
186
93
  };
187
- /** The steps in run order. Exported so tests can drive the reducer with fakes. */
94
+ export declare const INIT_REPO_FIX = "git init && mesh init";
95
+ export declare const repoStep: WizardStep;
188
96
  export declare const WIZARD_STEPS: readonly WizardStep[];
189
- /**
190
- * Run `steps` in order, stopping after the first blocking failure. Pure over
191
- * the steps' results — the reducer the CLI and the tests share.
192
- *
193
- * @example
194
- * const steps = await runWizardSteps(ctx, WIZARD_STEPS);
195
- */
196
97
  export declare function runWizardSteps(ctx: WizardCtx, steps: readonly WizardStep[]): Promise<StepResult[]>;
197
- /**
198
- * The wizard entry point behind bare `mesh init`.
199
- *
200
- * Returns the process exit code instead of exiting, so the caller decides
201
- * (and a test can assert on it). Ctrl-C at a prompt returns 130 with nothing
202
- * written. All human output goes to stderr under `--json`, leaving stdout for
203
- * the one document.
204
- *
205
- * @example
206
- * process.exitCode = await runInitWizard({ tenant: "acme", local: true, yes: true });
207
- */
208
98
  export declare function runInitWizard(opts: WizardOptions, deps?: {
209
99
  cwd?: string;
210
100
  prompts?: Prompts;
@@ -213,4 +103,3 @@ export declare function runInitWizard(opts: WizardOptions, deps?: {
213
103
  remote?: boolean;
214
104
  seams?: WizardSeams;
215
105
  }): Promise<number>;
216
- //# sourceMappingURL=wizard.d.ts.map