@mesh-tech/mesh-cli 0.20.2 → 0.20.4

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/dist/bin/mesh.d.ts +0 -12
  2. package/dist/bin/mesh.js +15 -13
  3. package/dist/bin/mesh.js.map +1 -2
  4. package/dist/build-info.json +2 -2
  5. package/dist/src/commands/agent-api-client.d.ts +0 -70
  6. package/dist/src/commands/agent-api-client.js +0 -80
  7. package/dist/src/commands/app-check.d.ts +0 -56
  8. package/dist/src/commands/app-check.js +0 -72
  9. package/dist/src/commands/artifacts.d.ts +0 -11
  10. package/dist/src/commands/artifacts.js +0 -33
  11. package/dist/src/commands/cluster.d.ts +0 -39
  12. package/dist/src/commands/cluster.js +0 -73
  13. package/dist/src/commands/conversations.d.ts +0 -36
  14. package/dist/src/commands/conversations.js +0 -59
  15. package/dist/src/commands/create-app.d.ts +0 -98
  16. package/dist/src/commands/create-app.js +1 -163
  17. package/dist/src/commands/db/connect.d.ts +0 -7
  18. package/dist/src/commands/db/connect.js +0 -9
  19. package/dist/src/commands/db/credentials.d.ts +0 -7
  20. package/dist/src/commands/db/credentials.js +0 -10
  21. package/dist/src/commands/db/env.d.ts +0 -6
  22. package/dist/src/commands/db/env.js +0 -14
  23. package/dist/src/commands/db/exec.d.ts +0 -43
  24. package/dist/src/commands/db/exec.js +0 -69
  25. package/dist/src/commands/db/index.d.ts +0 -10
  26. package/dist/src/commands/db/index.js +0 -10
  27. package/dist/src/commands/db/psql.d.ts +0 -7
  28. package/dist/src/commands/db/psql.js +0 -18
  29. package/dist/src/commands/deploy.d.ts +0 -38
  30. package/dist/src/commands/deploy.js +1 -76
  31. package/dist/src/commands/dev-doctor.d.ts +0 -82
  32. package/dist/src/commands/dev-doctor.js +3 -132
  33. package/dist/src/commands/dev-launch.d.ts +0 -52
  34. package/dist/src/commands/dev-launch.js +0 -56
  35. package/dist/src/commands/dev-token-server.d.ts +0 -18
  36. package/dist/src/commands/dev-token-server.js +1 -24
  37. package/dist/src/commands/dev.d.ts +0 -246
  38. package/dist/src/commands/dev.js +5 -963
  39. package/dist/src/commands/docs.d.ts +0 -1
  40. package/dist/src/commands/docs.js +0 -12
  41. package/dist/src/commands/hub/index.d.ts +0 -60
  42. package/dist/src/commands/hub/index.js +2 -139
  43. package/dist/src/commands/init/wizard.d.ts +0 -128
  44. package/dist/src/commands/init/wizard.js +0 -109
  45. package/dist/src/commands/init.d.ts +0 -55
  46. package/dist/src/commands/init.js +0 -70
  47. package/dist/src/commands/install-shim.d.ts +0 -23
  48. package/dist/src/commands/install-shim.js +2 -29
  49. package/dist/src/commands/local/auth-provision.d.ts +0 -80
  50. package/dist/src/commands/local/auth-provision.js +0 -109
  51. package/dist/src/commands/local/dev-local.d.ts +0 -91
  52. package/dist/src/commands/local/dev-local.js +0 -147
  53. package/dist/src/commands/local/docker-runner.d.ts +0 -22
  54. package/dist/src/commands/local/docker-runner.js +2 -35
  55. package/dist/src/commands/local/helpers.d.ts +0 -14
  56. package/dist/src/commands/local/helpers.js +0 -13
  57. package/dist/src/commands/local/hub-local.d.ts +0 -96
  58. package/dist/src/commands/local/hub-local.js +0 -111
  59. package/dist/src/commands/local/index.d.ts +0 -14
  60. package/dist/src/commands/local/index.js +0 -86
  61. package/dist/src/commands/local/mocks.d.ts +0 -269
  62. package/dist/src/commands/local/mocks.js +1 -274
  63. package/dist/src/commands/local/seed-hub-catalog.d.ts +0 -25
  64. package/dist/src/commands/local/seed-hub-catalog.js +0 -41
  65. package/dist/src/commands/local/seed-zitadel.d.ts +0 -82
  66. package/dist/src/commands/local/seed-zitadel.js +0 -158
  67. package/dist/src/commands/local/seed.d.ts +0 -64
  68. package/dist/src/commands/local/seed.js +0 -78
  69. package/dist/src/commands/local/stack.d.ts +0 -141
  70. package/dist/src/commands/local/stack.js +0 -153
  71. package/dist/src/commands/login.d.ts +0 -265
  72. package/dist/src/commands/login.js +4 -418
  73. package/dist/src/commands/peer-addressing.d.ts +0 -39
  74. package/dist/src/commands/peer-addressing.js +0 -37
  75. package/dist/src/commands/port-ownership.d.ts +0 -44
  76. package/dist/src/commands/port-ownership.js +0 -47
  77. package/dist/src/commands/registry-publish.d.ts +0 -1
  78. package/dist/src/commands/registry-publish.js +0 -46
  79. package/dist/src/commands/registry.d.ts +4 -237
  80. package/dist/src/commands/registry.js +2 -316
  81. package/dist/src/commands/secrets/exec.d.ts +0 -16
  82. package/dist/src/commands/secrets/exec.js +0 -24
  83. package/dist/src/commands/secrets/index.d.ts +0 -9
  84. package/dist/src/commands/secrets/index.js +0 -10
  85. package/dist/src/commands/secrets/migrate-config.d.ts +0 -17
  86. package/dist/src/commands/secrets/migrate-config.js +0 -40
  87. package/dist/src/commands/secrets/reindex.d.ts +0 -38
  88. package/dist/src/commands/secrets/reindex.js +0 -39
  89. package/dist/src/commands/secrets/set.d.ts +0 -47
  90. package/dist/src/commands/secrets/set.js +0 -107
  91. package/dist/src/commands/site.d.ts +0 -1
  92. package/dist/src/commands/site.js +0 -61
  93. package/dist/src/commands/skills.d.ts +0 -61
  94. package/dist/src/commands/skills.js +0 -83
  95. package/dist/src/commands/stack.d.ts +0 -15
  96. package/dist/src/commands/stack.js +1 -128
  97. package/dist/src/commands/temporal.d.ts +0 -30
  98. package/dist/src/commands/temporal.js +3 -1
  99. package/dist/src/commands/temporal.js.map +1 -2
  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 +2 -2
  219. package/skills/core/SKILL.md +9 -10
  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,21 +1,3 @@
1
- /**
2
- * App-tenant auth auto-provisioning for the local platform — the local analog
3
- * of what the Pulumi components do in the cloud, per the approved Zitadel
4
- * tenant-auth pattern (Org / Project / Application / Service User):
5
- *
6
- * Org = app tenant (ZitadelTenantIdentity parity)
7
- * Project = one per app, (ZitadelAppIdentity parity —
8
- * name = authz schema namespace the app IS the authz boundary)
9
- * Application = one per service inside it (API app, Basic creds)
10
- * Secret = mesh/{tenant}/{env}/apps/{app}/zitadel/{service}
11
- * (ministack Secrets Manager — same canonical path as cloud)
12
- *
13
- * `mesh dev --local` calls this on startup so scaffolding + running an app
14
- * auto-creates its auth config — no Pulumi deploy, no manual Zitadel steps.
15
- * Idempotent: search-before-create everywhere; the credential secret is only
16
- * written when the application is first created (Zitadel returns the secret
17
- * once).
18
- */
19
1
  import { logInfo, logSuccess } from "../../utils/log.js";
20
2
  import { LOCAL_ENV, LOCAL_AWS_CONFIG, registerTenantEnv } from "./seed.js";
21
3
  import { api, readSeederPat, PLATFORM_ORG, ensureZitadelProject, searchZitadelApp } from "./seed-zitadel.js";
@@ -35,8 +17,6 @@ async function ensureOrg(pat, name) {
35
17
  return created.organizationId;
36
18
  }
37
19
  const ensureProject = (pat, orgId, name) => ensureZitadelProject(pat, name, { orgId, describe: "app" });
38
- /** Ensure the service's API application exists; returns fresh credentials
39
- * when it was created this run. */
40
20
  async function ensureServiceApp(pat, orgId, projectId, service) {
41
21
  const existing = await searchZitadelApp(pat, projectId, service, orgId);
42
22
  if (existing) {
@@ -46,7 +26,6 @@ async function ensureServiceApp(pat, orgId, projectId, service) {
46
26
  logSuccess(`Created Zitadel application '${service}' (service)`);
47
27
  return { created: true, clientId: created.clientId, clientSecret: created.clientSecret };
48
28
  }
49
- /** Ensure the app-declared project roles exist (idempotent). */
50
29
  async function ensureProjectRoles(pat, orgId, projectId, roles) {
51
30
  if (roles.length === 0)
52
31
  return;
@@ -59,13 +38,6 @@ async function ensureProjectRoles(pat, orgId, projectId, roles) {
59
38
  logSuccess(`Created project role '${key}'`);
60
39
  }
61
40
  }
62
- /**
63
- * Ensure the app's LOCAL M2M caller: a machine user (`{app}-m2m`) with a
64
- * client-credentials secret, granted the app project (+ declared roles).
65
- * API applications are resource servers — they cannot obtain tokens — so
66
- * without this there is no way to mint a caller token against the local
67
- * Zitadel at all. Secret stored at mesh/{tenant}/dev/apps/{app}/zitadel/m2m.
68
- */
69
41
  async function ensureM2mCaller(pat, tenant, app, orgId, projectId, roles) {
70
42
  const userName = `${app}-m2m`;
71
43
  const search = await api(pat, "POST", "/management/v1/users/_search", { queries: [{ userNameQuery: { userName, method: "TEXT_QUERY_METHOD_EQUALS" } }] }, orgId);
@@ -77,8 +49,6 @@ async function ensureM2mCaller(pat, tenant, app, orgId, projectId, roles) {
77
49
  createdUser = true;
78
50
  logSuccess(`Created machine user '${userName}' (local M2M caller)`);
79
51
  }
80
- // Grant the project (+ declared roles); on re-runs update the existing
81
- // grant so newly-declared roles apply.
82
52
  try {
83
53
  await api(pat, "POST", `/management/v1/users/${userId}/grants`, { projectId, roleKeys: roles }, orgId);
84
54
  }
@@ -93,10 +63,6 @@ async function ensureM2mCaller(pat, tenant, app, orgId, projectId, roles) {
93
63
  await api(pat, "PUT", `/management/v1/users/${userId}/grants/${grantId}`, { roleKeys: roles }, orgId);
94
64
  }
95
65
  catch (updateErr) {
96
- // Zitadel 400s a no-op update ("User grant has not been changed",
97
- // COMMAND-Rs8fy) — the grant already carries the declared roles.
98
- // Anything else is real. Must not throw here: aborting mid-provision
99
- // skips the secret (re-)mint below and leaves callers without creds.
100
66
  const ue = updateErr;
101
67
  if (!/has not been changed/i.test(String(ue.message)))
102
68
  throw updateErr;
@@ -126,20 +92,11 @@ async function writeAuthSecret(tenant, app, service, value) {
126
92
  await upsertLocalSecret(name, value);
127
93
  logSuccess(`Stored service credentials → ${name}`);
128
94
  }
129
- /**
130
- * Register the running app in the local platform registry — the same
131
- * self-registration path deployed apps use (/mesh-platform/{tenant}/{env}/
132
- * apps/{app}/meta), so StackPort (and the local Hub once its images land)
133
- * can visualize local apps.
134
- */
135
95
  export async function registerLocalApp(args) {
136
96
  const { SSMClient, PutParameterCommand } = await import("@aws-sdk/client-ssm");
137
97
  const ssm = new SSMClient(LOCAL_AWS_CONFIG);
138
98
  const put = (name, value, description) => ssm.send(new PutParameterCommand({ Name: name, Type: "String", Overwrite: true, Value: JSON.stringify(value), Description: description }));
139
- // The app's tenant + env must be registered for the Hub to list the app.
140
99
  await registerTenantEnv(args.tenant);
141
- // Per-stack registration in the exact shape hub-api's SSM assembler reads
142
- // (stack "local" = the mesh dev --local runtime).
143
100
  const namespace = `${args.tenant}-${LOCAL_ENV}-${args.app}`;
144
101
  const base = `/mesh-platform/${args.tenant}/${LOCAL_ENV}/apps/${args.app}/stacks/local`;
145
102
  await put(base, {
@@ -159,14 +116,6 @@ export async function registerLocalApp(args) {
159
116
  ...(!isMock && args.links?.length ? { links: args.links } : {}),
160
117
  }, `Local service registration (${service})`);
161
118
  }
162
- // Dagster registration — the local counterpart of the SSM Export a deployed
163
- // DagsterInstance writes ({kind, graphqlUrl, uiUrl} at …/stacks/{stack}/dagster),
164
- // which is the record hub-api's discoverDagsterInstances() filters on; the
165
- // plain services/{name} entry above is invisible to Dagster discovery.
166
- // graphqlUrl uses host.docker.internal: the consumer is the CONTAINERIZED
167
- // hub-api (`mesh start`), which must cross the Docker boundary to reach the
168
- // host `dg dev` process. uiUrl stays localhost — it is opened in the
169
- // developer's browser, where host.docker.internal does not resolve.
170
119
  for (const service of args.services) {
171
120
  if (args.kinds?.[service] !== "dagster")
172
121
  continue;
@@ -179,10 +128,6 @@ export async function registerLocalApp(args) {
179
128
  uiUrl: `http://localhost:${port}`,
180
129
  }, `Local Dagster discovery record (${service})`);
181
130
  }
182
- // Worker registration — the shape deployed TemporalWorker components
183
- // write; hub-api discovers a tenant's Temporal namespaces from these, so
184
- // the tenant-wide workflows view finds local runs without an explicit
185
- // namespace filter. Template convention: worker services are named so.
186
131
  for (const service of args.services) {
187
132
  if (!/worker/i.test(service))
188
133
  continue;
@@ -192,27 +137,12 @@ export async function registerLocalApp(args) {
192
137
  runtime: "mesh-dev-local",
193
138
  services: args.services,
194
139
  ports: args.ports ?? {},
195
- // The same two fields a deployed stack stamps, so the Hub's app list and
196
- // its activity timeline read a local run exactly as they read a deploy —
197
- // which version of this app is running here, and since when. Without them
198
- // a local app shows a blank version and never appears on the timeline,
199
- // and "deployments aren't tracked" is indistinguishable from "no deploys".
200
140
  ...(args.version ? { version: args.version } : {}),
201
141
  deployedAt: new Date().toISOString(),
202
142
  }, "Local run metadata (mesh dev --local)");
203
143
  logSuccess(`Registered app in the local registry → ${base}`);
204
144
  return base;
205
145
  }
206
- /**
207
- * Reconcile the platform registry from Zitadel — every app-tenant org (and
208
- * its projects = apps, applications = services) provisioned in Zitadel gets
209
- * a Hub-readable registration, even if the app hasn't been run since it was
210
- * provisioned. Zitadel is the auth source of truth; the registry mirrors it,
211
- * exactly like the cloud where ZitadelTenantIdentity/ZitadelAppIdentity and
212
- * the app's self-registration both flow from the same deploy. Idempotent:
213
- * existing per-stack registrations (which carry live ports/URLs from
214
- * `mesh dev --local`) are never overwritten.
215
- */
216
146
  export async function reconcileRegistryFromZitadel() {
217
147
  const pat = readSeederPat();
218
148
  const { SSMClient, GetParameterCommand, PutParameterCommand } = await import("@aws-sdk/client-ssm");
@@ -222,7 +152,6 @@ export async function reconcileRegistryFromZitadel() {
222
152
  let apps = 0;
223
153
  for (const org of orgs?.result ?? []) {
224
154
  const tenant = org?.name;
225
- // The platform org holds platform-service auth config, not an app tenant.
226
155
  if (!tenant || tenant === PLATFORM_ORG)
227
156
  continue;
228
157
  await registerTenantEnv(tenant);
@@ -267,39 +196,12 @@ export async function reconcileRegistryFromZitadel() {
267
196
  }
268
197
  return { tenants, apps };
269
198
  }
270
- /**
271
- * Ensure a service has a BROWSER sign-in, not just an API client.
272
- *
273
- * `ensureServiceApp` gives every service a Zitadel **API** application, which is
274
- * what a machine caller authenticates with. A person cannot sign in to one:
275
- * there is no authorization endpoint and no redirect URI, so the Hub's
276
- * Access → Sign-in tab reports the app has no browser login and refuses to
277
- * create a user — correctly, since the account would have nowhere to log in.
278
- *
279
- * An app declares which of its services carry a login in `package.json`:
280
- *
281
- * ```json
282
- * { "mesh": { "auth": { "signIn": ["ui"] } } }
283
- * ```
284
- *
285
- * which mirrors what the Pulumi program expresses as a `web` OIDC application
286
- * on `ZitadelAppIdentity`. Deployed, the redirect URI comes from the service's
287
- * public hostname; locally it is the port `mesh dev` allocated, so this runs
288
- * AFTER port allocation and re-asserts the URIs on every launch — a session
289
- * that lands on a different port must not leave the previous one registered as
290
- * the only valid callback.
291
- *
292
- * Idempotent, and best-effort at the call site: a missing sign-in app degrades
293
- * the Access tab, it does not stop the dev loop.
294
- */
295
199
  export async function ensureSignInApp(args) {
296
200
  const pat = readSeederPat();
297
201
  const orgId = await ensureOrg(pat, args.tenant);
298
202
  const projectId = await ensureProject(pat, orgId, args.app);
299
203
  const name = `${args.service}-web`;
300
204
  const base = args.baseUrl.replace(/\/+$/, "");
301
- // oauth2-proxy's callback, and both slash forms for post-logout — Zitadel
302
- // exact-matches the latter, and proxies differ on the trailing slash.
303
205
  const redirectUris = [`${base}/oauth2/callback`];
304
206
  const postLogoutRedirectUris = [base, `${base}/`];
305
207
  const config = {
@@ -309,13 +211,10 @@ export async function ensureSignInApp(args) {
309
211
  grantTypes: ["OIDC_GRANT_TYPE_AUTHORIZATION_CODE", "OIDC_GRANT_TYPE_REFRESH_TOKEN"],
310
212
  appType: "OIDC_APP_TYPE_WEB",
311
213
  authMethodType: "OIDC_AUTH_METHOD_TYPE_BASIC",
312
- // Roles must ride in the token: the app authorizes on them, and the Hub
313
- // shows which roles a person holds by reading the same grants.
314
214
  accessTokenType: "OIDC_TOKEN_TYPE_JWT",
315
215
  accessTokenRoleAssertion: true,
316
216
  idTokenRoleAssertion: true,
317
217
  idTokenUserinfoAssertion: true,
318
- // http:// callbacks are only permitted in dev mode.
319
218
  devMode: true,
320
219
  };
321
220
  const existing = await searchZitadelApp(pat, projectId, name, orgId);
@@ -333,10 +232,6 @@ export async function ensureSignInApp(args) {
333
232
  });
334
233
  logSuccess(`Created Zitadel application '${name}' (browser sign-in → ${base}/oauth2/callback)`);
335
234
  }
336
- /**
337
- * Ensure the app tenant's full auth config exists (org → project →
338
- * application-per-service → credential secrets).
339
- */
340
235
  export async function ensureAppTenantAuth(args) {
341
236
  const pat = readSeederPat();
342
237
  const orgId = await ensureOrg(pat, args.tenant);
@@ -357,9 +252,6 @@ export async function ensureAppTenantAuth(args) {
357
252
  created.push(service);
358
253
  }
359
254
  else if (!(await authSecretExists(args.tenant, args.app, service))) {
360
- // Zitadel persists across stack restarts but the local secret store is
361
- // in-memory — heal the gap by regenerating the application's secret
362
- // (Zitadel returns it only once, so a lost secret can't be re-read).
363
255
  const regenerated = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/${result.appId}/api_config/_generate_client_secret`, {}, orgId);
364
256
  await writeAuthSecret(args.tenant, args.app, service, {
365
257
  clientId: result.clientId ?? "",
@@ -380,4 +272,3 @@ export async function ensureAppTenantAuth(args) {
380
272
  }
381
273
  return { orgId, projectId, created };
382
274
  }
383
- //# sourceMappingURL=auth-provision.js.map
@@ -1,23 +1,3 @@
1
- /**
2
- * Local DevOutput source for `mesh dev` (design §5.2, AC C1/C3).
3
- *
4
- * Instead of reading a deployed Pulumi stack, synthesize the same DevOutput
5
- * shape from repo conventions and point every service at the running
6
- * `mesh start` platform. Zero AWS credentials, zero VPN, zero Pulumi state —
7
- * the app's code never knows it's local:
8
- * - Temporal → localhost:7233, namespace local-dev (seeded)
9
- * - Postgres → the local `app` database
10
- * - Zitadel → http://localhost:8080 (seeded org/app/users)
11
- * - SpiceDB → localhost:50051 (preshared key)
12
- * - AWS SDK → ministack via AWS_ENDPOINT_URL (SSM/Secrets/S3 registry)
13
- *
14
- * Detection convention = what `mesh create-app` templates emit: immediate
15
- * subdirectories of the app root whose package.json has a `dev` script
16
- * (api/, worker/, web/, …); a single-package app root with its own `dev`
17
- * script becomes one service.
18
- */
19
- /** Matches dev.ts's DevEnvVar/DevService/DevOutput shapes (kept structural —
20
- * dev.ts owns the canonical interfaces). */
21
1
  interface LocalDevEnvVar {
22
2
  value: string;
23
3
  }
@@ -26,9 +6,6 @@ interface LocalDevService {
26
6
  port: number;
27
7
  command: string[];
28
8
  env?: Record<string, LocalDevEnvVar>;
29
- /** Service kind discriminator (see dev.ts DevService). `"dagster"` marks the
30
- * synthesized `dg dev` webserver so local registration writes the Dagster
31
- * discovery record the Hub's Data section reads. */
32
9
  kind?: "dagster";
33
10
  }
34
11
  export interface LocalDevOutput {
@@ -42,88 +19,20 @@ export interface LocalDevOutput {
42
19
  tunnels: Record<string, never>;
43
20
  }
44
21
  export declare const LOCAL_STACK_NAME = "local";
45
- /**
46
- * The app's namespace, exactly the name the cloud gives it in K8s AND
47
- * Temporal ({tenant}-{env}-{app}) — the Hub resolves both from this one
48
- * convention, so local runs are addressable with zero translation.
49
- */
50
22
  export declare function localAppNamespace(tenant: string, appName: string): string;
51
- /** The OTLP log shipper (assets/log-shipper.mjs) each local service's
52
- * launch pipeline pipes through — ships stdout to the stack's collector
53
- * with the hosted k8s_* attribution. */
54
23
  export declare function logShipperPath(): string;
55
- /**
56
- * OTel SDK bootstrap — the local analog of the OTel Operator's pod
57
- * injection: when the service ships `@opentelemetry/auto-instrumentations-
58
- * node` (the templates declare it), the platform injects the `--import`
59
- * register hook + exporter env, and HTTP/fetch/gRPC spans flow to the
60
- * stack's collector → Tempo → the Hub's Traces views. Apps without the
61
- * package run untouched.
62
- */
63
24
  export declare function autoInstrumentationEnv(appRoot: string, src: string): Record<string, LocalDevEnvVar>;
64
- /** Hosted-parity resource attribution for a local service — what the
65
- * in-cluster k8sattributes processor stamps. */
66
25
  export declare function otelEnv(tenant: string, appName: string, serviceName: string): Record<string, LocalDevEnvVar>;
67
- /** Endpoints of the running `mesh start` platform, as service env. */
68
26
  export declare function localPlatformEnv(tenant: string, appName: string, serviceName: string): Record<string, LocalDevEnvVar>;
69
- /**
70
- * A Dagster workspace announces itself in one of the two shapes `dg dev`
71
- * accepts: a `dg.toml` at the root (workspace convention — one file listing
72
- * one or more projects), or a root `pyproject.toml` carrying a `[tool.dg]`
73
- * table (single-project convention). Either earns the synthesized `dg dev`
74
- * service.
75
- *
76
- * @example
77
- * isDagsterWorkspaceRoot("/repos/acme-dagster"); // true — has dg.toml
78
- * isDagsterWorkspaceRoot("/repos/bank-statements"); // true — pyproject.toml has [tool.dg]
79
- * isDagsterWorkspaceRoot("/repos/plain-hono-api"); // false
80
- */
81
27
  export declare function isDagsterWorkspaceRoot(appRoot: string): boolean;
82
- /**
83
- * Locate the `dg` binary for a workspace, by layout convention:
84
- * `deployments/local/.venv` (a workspace keeping its dev CLI venv separate
85
- * from per-project venvs) first, then a root `.venv` (single-project
86
- * workspaces where one `uv sync` at the root covers everything). Falls back
87
- * to `dg` on PATH (uv tool install / pipx) when neither venv exists yet —
88
- * the launch window then shows dg's own error, which names the missing venv
89
- * more usefully than a failed path lookup would.
90
- *
91
- * @example
92
- * resolveDgBinary("/repos/acme-dagster"); // "deployments/local/.venv/bin/dg"
93
- * resolveDgBinary("/repos/bank-statements"); // ".venv/bin/dg" (root uv sync)
94
- * resolveDgBinary("/repos/fresh-clone"); // "dg" (no venv built yet)
95
- */
96
28
  export declare function resolveDgBinary(appRoot: string): string;
97
- /**
98
- * Detect runnable services by template convention: immediate subdirectories
99
- * with a package.json `dev` script; falls back to the app root itself when
100
- * it is a single-package app.
101
- */
102
29
  export declare function detectLocalServices(appRoot: string): Record<string, {
103
30
  src: string;
104
31
  }>;
105
- /** Synthesize the DevOutput `mesh dev` would otherwise read from Pulumi.
106
- * `tenant` is the app tenant (detectLocalTenant) — it scopes the app's
107
- * namespace ({tenant}-{env}-{app}) for Temporal, logs, and traces.
108
- * `opts.mocks` (mesh dev --externals) appends declared mock services and injects
109
- * their ExternalService credential prefixes into every app service. */
110
32
  export declare function buildLocalDevOutput(appRoot: string, tenant: string, opts?: {
111
33
  mocks?: Record<string, import("./mocks.js").LocalMockDecl>;
112
34
  }): LocalDevOutput;
113
- /**
114
- * Whether the app is backed by a Pulumi program: its own (Pulumi.yaml or a
115
- * Pulumi.<stack>.yaml stack config in the app dir), or a monorepo ROOT
116
- * program above it (walk up to the repo boundary — .git/pnpm-workspace).
117
- * Apps like apps/hub deploy via a root program and have no per-app
118
- * Pulumi.yaml; they must NOT default into `mesh dev` local mode.
119
- */
120
35
  export declare function hasStackBacking(appRoot: string): boolean;
121
- /**
122
- * The app's tenant, for auth provisioning: `mesh:tenant` from the app's
123
- * Pulumi stack config when present (templates write it), else "local".
124
- */
125
36
  export declare function detectLocalTenant(appRoot: string): string;
126
- /** The local platform must be up before `mesh dev` can wire services to it. */
127
37
  export declare function ensureLocalPlatformRunning(): Promise<void>;
128
38
  export {};
129
- //# sourceMappingURL=dev-local.d.ts.map
@@ -1,21 +1,3 @@
1
- /**
2
- * Local DevOutput source for `mesh dev` (design §5.2, AC C1/C3).
3
- *
4
- * Instead of reading a deployed Pulumi stack, synthesize the same DevOutput
5
- * shape from repo conventions and point every service at the running
6
- * `mesh start` platform. Zero AWS credentials, zero VPN, zero Pulumi state —
7
- * the app's code never knows it's local:
8
- * - Temporal → localhost:7233, namespace local-dev (seeded)
9
- * - Postgres → the local `app` database
10
- * - Zitadel → http://localhost:8080 (seeded org/app/users)
11
- * - SpiceDB → localhost:50051 (preshared key)
12
- * - AWS SDK → ministack via AWS_ENDPOINT_URL (SSM/Secrets/S3 registry)
13
- *
14
- * Detection convention = what `mesh create-app` templates emit: immediate
15
- * subdirectories of the app root whose package.json has a `dev` script
16
- * (api/, worker/, web/, …); a single-package app root with its own `dev`
17
- * script becomes one service.
18
- */
19
1
  import * as fs from "fs";
20
2
  import * as path from "path";
21
3
  import { isServiceMode, openapiMockCommand } from "./mocks.js";
@@ -30,28 +12,12 @@ import { getContextConfig } from "../login.js";
30
12
  import { findMeshJson } from "../../utils/mesh-json.js";
31
13
  export const LOCAL_STACK_NAME = "local";
32
14
  const BASE_PORT = 3000;
33
- /**
34
- * The app's namespace, exactly the name the cloud gives it in K8s AND
35
- * Temporal ({tenant}-{env}-{app}) — the Hub resolves both from this one
36
- * convention, so local runs are addressable with zero translation.
37
- */
38
15
  export function localAppNamespace(tenant, appName) {
39
16
  return `${tenant}-${LOCAL_ENV}-${appName}`;
40
17
  }
41
- /** The OTLP log shipper (assets/log-shipper.mjs) each local service's
42
- * launch pipeline pipes through — ships stdout to the stack's collector
43
- * with the hosted k8s_* attribution. */
44
18
  export function logShipperPath() {
45
19
  return path.join(findPackageRoot(), "assets", "log-shipper.mjs");
46
20
  }
47
- /**
48
- * OTel SDK bootstrap — the local analog of the OTel Operator's pod
49
- * injection: when the service ships `@opentelemetry/auto-instrumentations-
50
- * node` (the templates declare it), the platform injects the `--import`
51
- * register hook + exporter env, and HTTP/fetch/gRPC spans flow to the
52
- * stack's collector → Tempo → the Hub's Traces views. Apps without the
53
- * package run untouched.
54
- */
55
21
  export function autoInstrumentationEnv(appRoot, src) {
56
22
  const pkgDir = path.join("node_modules", "@opentelemetry", "auto-instrumentations-node");
57
23
  const present = fs.existsSync(path.join(appRoot, src, pkgDir)) || fs.existsSync(path.join(appRoot, pkgDir));
@@ -60,15 +26,11 @@ export function autoInstrumentationEnv(appRoot, src) {
60
26
  return {
61
27
  NODE_OPTIONS: { value: "--import @opentelemetry/auto-instrumentations-node/register" },
62
28
  OTEL_TRACES_EXPORTER: { value: "otlp" },
63
- // Logs ship via the launch pipeline; metrics locally come from
64
- // Prometheus scrapes — keep the SDK to traces.
65
29
  OTEL_METRICS_EXPORTER: { value: "none" },
66
30
  OTEL_LOGS_EXPORTER: { value: "none" },
67
31
  OTEL_NODE_DISABLED_INSTRUMENTATIONS: { value: "fs,dns,net" },
68
32
  };
69
33
  }
70
- /** Hosted-parity resource attribution for a local service — what the
71
- * in-cluster k8sattributes processor stamps. */
72
34
  export function otelEnv(tenant, appName, serviceName) {
73
35
  const namespace = localAppNamespace(tenant, appName);
74
36
  return {
@@ -79,23 +41,15 @@ export function otelEnv(tenant, appName, serviceName) {
79
41
  },
80
42
  };
81
43
  }
82
- /** Endpoints of the running `mesh start` platform, as service env. */
83
44
  export function localPlatformEnv(tenant, appName, serviceName) {
84
45
  const namespace = localAppNamespace(tenant, appName);
85
46
  const env = {
86
47
  TEMPORAL_ADDRESS: { value: TEMPORAL_ADDRESS },
87
48
  TEMPORAL_NAMESPACE: { value: namespace },
88
49
  TEMPORAL_TASK_QUEUE: { value: appName },
89
- // OTel wiring, two consumers: instrumented services ship traces/metrics
90
- // themselves, and the launch pipeline's log shipper reads these to ship
91
- // stdout logs — both with the in-cluster k8sattributes attribution.
92
50
  ...otelEnv(tenant, appName, serviceName),
93
51
  DATABASE_URL: { value: "postgres://postgres:postgres@localhost:5433/app" },
94
52
  ZITADEL_ISSUER: { value: ZITADEL_ISSUER },
95
- // The service's own Zitadel M2M credentials (created by ensureAppTenantAuth
96
- // on session start) — resolveCredentials("zitadel") picks this up, so apps
97
- // can hydrate introspection/M2M config the same way they resolve
98
- // ExternalService links instead of hand-carrying client ids in env files.
99
53
  ZITADEL_SECRET_PREFIX: { value: authSecretPath(tenant, appName, serviceName) },
100
54
  SPICEDB_ENDPOINT: { value: "localhost:50051" },
101
55
  SPICEDB_HTTP_ENDPOINT: { value: "http://localhost:8443" },
@@ -104,9 +58,6 @@ export function localPlatformEnv(tenant, appName, serviceName) {
104
58
  MESH_LOCAL: { value: "1" },
105
59
  MESH_SERVICE: { value: serviceName },
106
60
  };
107
- // Local tokens come from `mesh login local` (the seeded CLI app), so that
108
- // app's clientId is the audience local APIs should verify. In the cloud,
109
- // consumers request the API project's audience scope instead.
110
61
  const cliClientId = getContextConfig(LOGIN_CONTEXT)?.clientId;
111
62
  if (cliClientId) {
112
63
  env.AUTH_AUDIENCE = { value: cliClientId };
@@ -116,18 +67,6 @@ export function localPlatformEnv(tenant, appName, serviceName) {
116
67
  }
117
68
  return env;
118
69
  }
119
- /**
120
- * A Dagster workspace announces itself in one of the two shapes `dg dev`
121
- * accepts: a `dg.toml` at the root (workspace convention — one file listing
122
- * one or more projects), or a root `pyproject.toml` carrying a `[tool.dg]`
123
- * table (single-project convention). Either earns the synthesized `dg dev`
124
- * service.
125
- *
126
- * @example
127
- * isDagsterWorkspaceRoot("/repos/acme-dagster"); // true — has dg.toml
128
- * isDagsterWorkspaceRoot("/repos/bank-statements"); // true — pyproject.toml has [tool.dg]
129
- * isDagsterWorkspaceRoot("/repos/plain-hono-api"); // false
130
- */
131
70
  export function isDagsterWorkspaceRoot(appRoot) {
132
71
  if (fs.existsSync(path.join(appRoot, "dg.toml")))
133
72
  return true;
@@ -141,20 +80,6 @@ export function isDagsterWorkspaceRoot(appRoot) {
141
80
  return false;
142
81
  }
143
82
  }
144
- /**
145
- * Locate the `dg` binary for a workspace, by layout convention:
146
- * `deployments/local/.venv` (a workspace keeping its dev CLI venv separate
147
- * from per-project venvs) first, then a root `.venv` (single-project
148
- * workspaces where one `uv sync` at the root covers everything). Falls back
149
- * to `dg` on PATH (uv tool install / pipx) when neither venv exists yet —
150
- * the launch window then shows dg's own error, which names the missing venv
151
- * more usefully than a failed path lookup would.
152
- *
153
- * @example
154
- * resolveDgBinary("/repos/acme-dagster"); // "deployments/local/.venv/bin/dg"
155
- * resolveDgBinary("/repos/bank-statements"); // ".venv/bin/dg" (root uv sync)
156
- * resolveDgBinary("/repos/fresh-clone"); // "dg" (no venv built yet)
157
- */
158
83
  export function resolveDgBinary(appRoot) {
159
84
  for (const candidate of ["deployments/local/.venv/bin/dg", ".venv/bin/dg"]) {
160
85
  if (fs.existsSync(path.join(appRoot, candidate)))
@@ -174,11 +99,6 @@ function hasDevScript(dir) {
174
99
  return false;
175
100
  }
176
101
  }
177
- /**
178
- * Detect runnable services by template convention: immediate subdirectories
179
- * with a package.json `dev` script; falls back to the app root itself when
180
- * it is a single-package app.
181
- */
182
102
  export function detectLocalServices(appRoot) {
183
103
  const services = {};
184
104
  for (const entry of fs.readdirSync(appRoot, { withFileTypes: true })) {
@@ -193,26 +113,13 @@ export function detectLocalServices(appRoot) {
193
113
  }
194
114
  return services;
195
115
  }
196
- /** Synthesize the DevOutput `mesh dev` would otherwise read from Pulumi.
197
- * `tenant` is the app tenant (detectLocalTenant) — it scopes the app's
198
- * namespace ({tenant}-{env}-{app}) for Temporal, logs, and traces.
199
- * `opts.mocks` (mesh dev --externals) appends declared mock services and injects
200
- * their ExternalService credential prefixes into every app service. */
201
116
  export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
202
117
  const detected = detectLocalServices(appRoot);
203
118
  const names = Object.keys(detected);
204
- // A Dagster workspace (dg.toml, or [tool.dg] in a root pyproject.toml) is
205
- // runnable even with zero package.json services — the common shape: the
206
- // pipelines are Python, the only Node artifact is the Pulumi program.
207
119
  const isDagsterWorkspace = isDagsterWorkspaceRoot(appRoot);
208
120
  if (names.length === 0 && !isDagsterWorkspace) {
209
121
  throw new MeshCliError(`No runnable services found under ${appRoot} — expected subdirectories (api/, worker/, …) with a package.json 'dev' script, or a Dagster workspace (dg.toml, or [tool.dg] in pyproject.toml).`, { remediation: { command: "mesh create-app" } });
210
122
  }
211
- // App name = project name = authz namespace. Pulumi.yaml `name:` wins
212
- // (matches getProjectName — a stack-backed app run with --local must keep
213
- // its deployed identity), then package.json name, then the basename.
214
- // Scoped package names (@scu-apps/plaid) are unusable as Temporal/K8s
215
- // namespaces — drop the scope.
216
123
  let appName = path.basename(appRoot);
217
124
  try {
218
125
  const pkg = JSON.parse(fs.readFileSync(path.join(appRoot, "package.json"), "utf-8"));
@@ -220,7 +127,6 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
220
127
  appName = pkg.name.replace(/^@[^/]+\//, "");
221
128
  }
222
129
  catch {
223
- // no root package.json — keep the basename
224
130
  }
225
131
  const pulumiYaml = path.join(appRoot, "Pulumi.yaml");
226
132
  if (fs.existsSync(pulumiYaml)) {
@@ -230,13 +136,7 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
230
136
  }
231
137
  const services = {};
232
138
  const mocks = opts.mocks ?? {};
233
- // Only process/openapi declarations run as mock-{name} services in this
234
- // orchestration; compose externals are docker-managed and sandbox
235
- // declarations spawn nothing (dev.ts seeds their credentials directly).
236
139
  const mockNames = Object.keys(mocks).filter((name) => isServiceMode(name, mocks[name]));
237
- // The ExternalService link() contract, synthesized: every app service gets
238
- // {EXT}_SECRET_PREFIX for each mocked external, so resolveCredentials()
239
- // runs the exact deployed code path against the locally seeded secret.
240
140
  const externalEnv = {};
241
141
  for (const decl of Object.values(mocks)) {
242
142
  if (!decl.external)
@@ -253,7 +153,6 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
253
153
  port,
254
154
  command: ["pnpm", "dev"],
255
155
  env: {
256
- // allocatePorts keeps service.port and env.PORT in sync on reallocation
257
156
  PORT: { value: String(port) },
258
157
  ...localPlatformEnv(tenant, appName, name),
259
158
  ...autoInstrumentationEnv(appRoot, detected[name].src),
@@ -261,18 +160,6 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
261
160
  },
262
161
  };
263
162
  });
264
- // Sibling-service URLs — the local analog of the deployed cross-service
265
- // wiring (http://{svc}.{namespace}.svc.cluster.local:{port} in-cluster):
266
- // every app service gets SERVICE_{NAME}_URL for each app service, so code
267
- // can wire cross-service clients locally without knowing allocated ports.
268
- // allocatePorts' cross-service localhost:{port} rewrite keeps them in sync
269
- // when ports are reallocated.
270
- //
271
- // This is a PUBLIC, app-facing env contract — {NAME} is the service's
272
- // directory name upper-cased, non-[A-Z0-9] → "_". Apps that name their
273
- // link the same way (events.link({ environmentPrefix: "SERVICE_EVENTS" }))
274
- // read ONE variable deployed and locally, with no isLocal branch.
275
- // See docs/guides/mesh-dev-local-env.md.
276
163
  for (const name of names) {
277
164
  const key = `SERVICE_${name.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_URL`;
278
165
  const url = `http://localhost:${services[name].port}`;
@@ -280,25 +167,9 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
280
167
  services[other].env[key] = { value: url };
281
168
  }
282
169
  }
283
- // Dagster workspace: synthesize the `dg dev` webserver as a first-class
284
- // service — the local counterpart of the dev service a DagsterInstance
285
- // registers from its Pulumi program. The binary is resolved by layout
286
- // convention (resolveDgBinary). `-p "$PORT"` is expanded by the launch
287
- // shell from the sourced env file, so a reallocated port
288
- // (rewriteOwnServicePort keeps env.PORT in sync) still binds correctly — a
289
- // literal port in the argv would go stale. DAGSTER_HOME pins instance
290
- // state under the app root so `dg dev` doesn't scatter
291
- // .tmp_dagster_home_* directories. The service inherits localPlatformEnv,
292
- // so pipelines reach ministack S3 (AWS_ENDPOINT_URL) with no credential
293
- // setup.
294
170
  if (isDagsterWorkspace) {
295
171
  const port = BASE_PORT + names.length + mockNames.length;
296
172
  services["dagster"] = {
297
- // Absolute on purpose: a relative src is MONOREPO-ROOT-relative by the
298
- // ServiceDevOutput contract (rebaseServiceSrc), which for an app nested
299
- // in the monorepo would cd the launch shell to the repo root — where
300
- // neither dg.toml nor the venv path resolves. The absolute app root
301
- // survives rebasing in both the monorepo and standalone-repo shapes.
302
173
  src: appRoot,
303
174
  kind: "dagster",
304
175
  port,
@@ -310,14 +181,11 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
310
181
  },
311
182
  };
312
183
  }
313
- // Declared mocks join the same orchestration (ports, env file, tmux
314
- // window, log pipeline) as first-class services named mock-{name}.
315
184
  mockNames.forEach((name, i) => {
316
185
  const decl = mocks[name];
317
186
  const serviceName = `mock-${name}`;
318
187
  const port = decl.port ?? BASE_PORT + names.length + i;
319
188
  services[serviceName] = {
320
- // openapi mode runs Prism from the app root against the spec path.
321
189
  src: decl.src ?? ".",
322
190
  port,
323
191
  command: decl.openapi ? openapiMockCommand(decl) : (decl.command ?? ["pnpm", "dev"]),
@@ -336,13 +204,6 @@ export function buildLocalDevOutput(appRoot, tenant, opts = {}) {
336
204
  tunnels: {},
337
205
  };
338
206
  }
339
- /**
340
- * Whether the app is backed by a Pulumi program: its own (Pulumi.yaml or a
341
- * Pulumi.<stack>.yaml stack config in the app dir), or a monorepo ROOT
342
- * program above it (walk up to the repo boundary — .git/pnpm-workspace).
343
- * Apps like apps/hub deploy via a root program and have no per-app
344
- * Pulumi.yaml; they must NOT default into `mesh dev` local mode.
345
- */
346
207
  export function hasStackBacking(appRoot) {
347
208
  const hasOwn = fs.existsSync(path.join(appRoot, "Pulumi.yaml")) ||
348
209
  fs.readdirSync(appRoot).some((f) => /^Pulumi\..+\.yaml$/.test(f));
@@ -361,10 +222,6 @@ export function hasStackBacking(appRoot) {
361
222
  dir = parent;
362
223
  }
363
224
  }
364
- /**
365
- * The app's tenant, for auth provisioning: `mesh:tenant` from the app's
366
- * Pulumi stack config when present (templates write it), else "local".
367
- */
368
225
  export function detectLocalTenant(appRoot) {
369
226
  for (const file of fs.readdirSync(appRoot)) {
370
227
  if (!/^Pulumi\..*\.yaml$/.test(file))
@@ -375,18 +232,14 @@ export function detectLocalTenant(appRoot) {
375
232
  if (match)
376
233
  return match[1];
377
234
  }
378
- // No per-app stack config names a tenant: fall back to the repo-level
379
- // record `mesh init` writes, then to the local default.
380
235
  const recorded = findMeshJson(appRoot);
381
236
  if (recorded)
382
237
  return recorded.data.tenant;
383
238
  return "local";
384
239
  }
385
- /** The local platform must be up before `mesh dev` can wire services to it. */
386
240
  export async function ensureLocalPlatformRunning() {
387
241
  const [temporalUp, fabricUp] = await Promise.all([probeTcp(7233), probeTcp(4566)]);
388
242
  if (!temporalUp || !fabricUp) {
389
243
  throw new MeshCliError("The local Mesh platform is not running (mesh dev local mode wires services to it).", { remediation: { command: "mesh start" } });
390
244
  }
391
245
  }
392
- //# sourceMappingURL=dev-local.js.map