@mesh-tech/mesh-cli 0.1.1 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/assets/intent/agents-fence.md +10 -0
  2. package/assets/intent/intent-claude-gate.mjs +255 -0
  3. package/assets/log-shipper.mjs +94 -0
  4. package/bin/mesh.mjs +80 -0
  5. package/dist/bin/mesh.d.ts +7 -9
  6. package/dist/bin/mesh.d.ts.map +1 -1
  7. package/dist/bin/mesh.js +20878 -37
  8. package/dist/bin/mesh.js.map +7 -1
  9. package/dist/build-info.json +4 -0
  10. package/dist/src/commands/agent-api-client.d.ts +79 -0
  11. package/dist/src/commands/agent-api-client.d.ts.map +1 -0
  12. package/dist/src/commands/agent-api-client.js +170 -0
  13. package/dist/src/commands/agent-api-client.js.map +1 -0
  14. package/dist/src/commands/artifacts.d.ts +13 -0
  15. package/dist/src/commands/artifacts.d.ts.map +1 -0
  16. package/dist/src/commands/artifacts.js +140 -0
  17. package/dist/src/commands/artifacts.js.map +1 -0
  18. package/dist/src/commands/cluster.d.ts +45 -0
  19. package/dist/src/commands/cluster.d.ts.map +1 -0
  20. package/dist/src/commands/cluster.js +259 -0
  21. package/dist/src/commands/cluster.js.map +1 -0
  22. package/dist/src/commands/conversations.d.ts +61 -0
  23. package/dist/src/commands/conversations.d.ts.map +1 -0
  24. package/dist/src/commands/conversations.js +239 -0
  25. package/dist/src/commands/conversations.js.map +1 -0
  26. package/dist/src/commands/create-app.d.ts +26 -3
  27. package/dist/src/commands/create-app.d.ts.map +1 -1
  28. package/dist/src/commands/create-app.js +465 -107
  29. package/dist/src/commands/create-app.js.map +1 -1
  30. package/dist/src/commands/deploy.d.ts +19 -0
  31. package/dist/src/commands/deploy.d.ts.map +1 -1
  32. package/dist/src/commands/deploy.js +83 -142
  33. package/dist/src/commands/deploy.js.map +1 -1
  34. package/dist/src/commands/dev-doctor.d.ts +137 -0
  35. package/dist/src/commands/dev-doctor.d.ts.map +1 -0
  36. package/dist/src/commands/dev-doctor.js +671 -0
  37. package/dist/src/commands/dev-doctor.js.map +1 -0
  38. package/dist/src/commands/dev-launch.d.ts +59 -0
  39. package/dist/src/commands/dev-launch.d.ts.map +1 -0
  40. package/dist/src/commands/dev-launch.js +118 -0
  41. package/dist/src/commands/dev-launch.js.map +1 -0
  42. package/dist/src/commands/dev-token-server.d.ts +32 -0
  43. package/dist/src/commands/dev-token-server.d.ts.map +1 -0
  44. package/dist/src/commands/dev-token-server.js +68 -0
  45. package/dist/src/commands/dev-token-server.js.map +1 -0
  46. package/dist/src/commands/dev.d.ts +289 -2
  47. package/dist/src/commands/dev.d.ts.map +1 -1
  48. package/dist/src/commands/dev.js +2501 -574
  49. package/dist/src/commands/dev.js.map +1 -1
  50. package/dist/src/commands/docs.d.ts +3 -0
  51. package/dist/src/commands/docs.d.ts.map +1 -0
  52. package/dist/src/commands/docs.js +262 -0
  53. package/dist/src/commands/docs.js.map +1 -0
  54. package/dist/src/commands/hub/index.d.ts +99 -0
  55. package/dist/src/commands/hub/index.d.ts.map +1 -0
  56. package/dist/src/commands/hub/index.js +452 -0
  57. package/dist/src/commands/hub/index.js.map +1 -0
  58. package/dist/src/commands/init.d.ts +65 -0
  59. package/dist/src/commands/init.d.ts.map +1 -0
  60. package/dist/src/commands/init.js +370 -0
  61. package/dist/src/commands/init.js.map +1 -0
  62. package/dist/src/commands/install-shim.d.ts +28 -0
  63. package/dist/src/commands/install-shim.d.ts.map +1 -0
  64. package/dist/src/commands/install-shim.js +191 -0
  65. package/dist/src/commands/install-shim.js.map +1 -0
  66. package/dist/src/commands/local/auth-provision.d.ts +71 -0
  67. package/dist/src/commands/local/auth-provision.d.ts.map +1 -0
  68. package/dist/src/commands/local/auth-provision.js +286 -0
  69. package/dist/src/commands/local/auth-provision.js.map +1 -0
  70. package/dist/src/commands/local/dev-local.d.ts +97 -0
  71. package/dist/src/commands/local/dev-local.d.ts.map +1 -0
  72. package/dist/src/commands/local/dev-local.js +306 -0
  73. package/dist/src/commands/local/dev-local.js.map +1 -0
  74. package/dist/src/commands/local/docker-runner.d.ts +37 -0
  75. package/dist/src/commands/local/docker-runner.d.ts.map +1 -0
  76. package/dist/src/commands/local/docker-runner.js +104 -0
  77. package/dist/src/commands/local/docker-runner.js.map +1 -0
  78. package/dist/src/commands/local/helpers.d.ts +22 -0
  79. package/dist/src/commands/local/helpers.d.ts.map +1 -0
  80. package/dist/src/commands/local/helpers.js +46 -0
  81. package/dist/src/commands/local/helpers.js.map +1 -0
  82. package/dist/src/commands/local/hub-local.d.ts +51 -0
  83. package/dist/src/commands/local/hub-local.d.ts.map +1 -0
  84. package/dist/src/commands/local/hub-local.js +197 -0
  85. package/dist/src/commands/local/hub-local.js.map +1 -0
  86. package/dist/src/commands/local/index.d.ts +23 -0
  87. package/dist/src/commands/local/index.d.ts.map +1 -0
  88. package/dist/src/commands/local/index.js +386 -0
  89. package/dist/src/commands/local/index.js.map +1 -0
  90. package/dist/src/commands/local/mocks.d.ts +361 -0
  91. package/dist/src/commands/local/mocks.d.ts.map +1 -0
  92. package/dist/src/commands/local/mocks.js +756 -0
  93. package/dist/src/commands/local/mocks.js.map +1 -0
  94. package/dist/src/commands/local/seed-zitadel.d.ts +151 -0
  95. package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -0
  96. package/dist/src/commands/local/seed-zitadel.js +408 -0
  97. package/dist/src/commands/local/seed-zitadel.js.map +1 -0
  98. package/dist/src/commands/local/seed.d.ts +106 -0
  99. package/dist/src/commands/local/seed.d.ts.map +1 -0
  100. package/dist/src/commands/local/seed.js +252 -0
  101. package/dist/src/commands/local/seed.js.map +1 -0
  102. package/dist/src/commands/local/stack.d.ts +173 -0
  103. package/dist/src/commands/local/stack.d.ts.map +1 -0
  104. package/dist/src/commands/local/stack.js +499 -0
  105. package/dist/src/commands/local/stack.js.map +1 -0
  106. package/dist/src/commands/login.d.ts +256 -12
  107. package/dist/src/commands/login.d.ts.map +1 -1
  108. package/dist/src/commands/login.js +978 -50
  109. package/dist/src/commands/login.js.map +1 -1
  110. package/dist/src/commands/peer-addressing.d.ts +51 -0
  111. package/dist/src/commands/peer-addressing.d.ts.map +1 -0
  112. package/dist/src/commands/peer-addressing.js +64 -0
  113. package/dist/src/commands/peer-addressing.js.map +1 -0
  114. package/dist/src/commands/port-ownership.d.ts +69 -0
  115. package/dist/src/commands/port-ownership.d.ts.map +1 -0
  116. package/dist/src/commands/port-ownership.js +161 -0
  117. package/dist/src/commands/port-ownership.js.map +1 -0
  118. package/dist/src/commands/registry-publish.d.ts +3 -0
  119. package/dist/src/commands/registry-publish.d.ts.map +1 -0
  120. package/dist/src/commands/registry-publish.js +161 -0
  121. package/dist/src/commands/registry-publish.js.map +1 -0
  122. package/dist/src/commands/registry.d.ts +146 -2
  123. package/dist/src/commands/registry.d.ts.map +1 -1
  124. package/dist/src/commands/registry.js +541 -85
  125. package/dist/src/commands/registry.js.map +1 -1
  126. package/dist/src/commands/secrets/index.d.ts.map +1 -1
  127. package/dist/src/commands/secrets/index.js +15 -1
  128. package/dist/src/commands/secrets/index.js.map +1 -1
  129. package/dist/src/commands/secrets/migrate-config.d.ts +24 -0
  130. package/dist/src/commands/secrets/migrate-config.d.ts.map +1 -0
  131. package/dist/src/commands/secrets/migrate-config.js +277 -0
  132. package/dist/src/commands/secrets/migrate-config.js.map +1 -0
  133. package/dist/src/commands/secrets/set.d.ts +1 -0
  134. package/dist/src/commands/secrets/set.d.ts.map +1 -1
  135. package/dist/src/commands/secrets/set.js +96 -2
  136. package/dist/src/commands/secrets/set.js.map +1 -1
  137. package/dist/src/commands/skills.d.ts +34 -0
  138. package/dist/src/commands/skills.d.ts.map +1 -0
  139. package/dist/src/commands/skills.js +207 -0
  140. package/dist/src/commands/skills.js.map +1 -0
  141. package/dist/src/commands/stack.d.ts.map +1 -1
  142. package/dist/src/commands/stack.js +361 -23
  143. package/dist/src/commands/stack.js.map +1 -1
  144. package/dist/src/commands/temporal.d.ts +15 -0
  145. package/dist/src/commands/temporal.d.ts.map +1 -0
  146. package/dist/src/commands/temporal.js +781 -0
  147. package/dist/src/commands/temporal.js.map +1 -0
  148. package/dist/src/commands/tenant.d.ts +56 -0
  149. package/dist/src/commands/tenant.d.ts.map +1 -0
  150. package/dist/src/commands/tenant.js +233 -0
  151. package/dist/src/commands/tenant.js.map +1 -0
  152. package/dist/src/commands/tunnel/index.d.ts +49 -3
  153. package/dist/src/commands/tunnel/index.d.ts.map +1 -1
  154. package/dist/src/commands/tunnel/index.js +331 -8
  155. package/dist/src/commands/tunnel/index.js.map +1 -1
  156. package/dist/src/commands/vcs/clone.d.ts +3 -0
  157. package/dist/src/commands/vcs/clone.d.ts.map +1 -0
  158. package/dist/src/commands/vcs/clone.js +20 -0
  159. package/dist/src/commands/vcs/clone.js.map +1 -0
  160. package/dist/src/commands/vcs/common.d.ts +21 -0
  161. package/dist/src/commands/vcs/common.d.ts.map +1 -0
  162. package/dist/src/commands/vcs/common.js +62 -0
  163. package/dist/src/commands/vcs/common.js.map +1 -0
  164. package/dist/src/commands/vcs/drafts.d.ts +13 -0
  165. package/dist/src/commands/vcs/drafts.d.ts.map +1 -0
  166. package/dist/src/commands/vcs/drafts.js +45 -0
  167. package/dist/src/commands/vcs/drafts.js.map +1 -0
  168. package/dist/src/commands/vcs/get.d.ts +8 -0
  169. package/dist/src/commands/vcs/get.d.ts.map +1 -0
  170. package/dist/src/commands/vcs/get.js +61 -0
  171. package/dist/src/commands/vcs/get.js.map +1 -0
  172. package/dist/src/commands/vcs/index.d.ts +3 -0
  173. package/dist/src/commands/vcs/index.d.ts.map +1 -0
  174. package/dist/src/commands/vcs/index.js +58 -0
  175. package/dist/src/commands/vcs/index.js.map +1 -0
  176. package/dist/src/commands/vcs/propose.d.ts +23 -0
  177. package/dist/src/commands/vcs/propose.d.ts.map +1 -0
  178. package/dist/src/commands/vcs/propose.js +94 -0
  179. package/dist/src/commands/vcs/propose.js.map +1 -0
  180. package/dist/src/commands/vcs/review.d.ts +15 -0
  181. package/dist/src/commands/vcs/review.d.ts.map +1 -0
  182. package/dist/src/commands/vcs/review.js +35 -0
  183. package/dist/src/commands/vcs/review.js.map +1 -0
  184. package/dist/src/commands/vcs-enrich.d.ts +15 -0
  185. package/dist/src/commands/vcs-enrich.d.ts.map +1 -0
  186. package/dist/src/commands/vcs-enrich.js +28 -0
  187. package/dist/src/commands/vcs-enrich.js.map +1 -0
  188. package/dist/src/commands/vpn/index.d.ts +24 -0
  189. package/dist/src/commands/vpn/index.d.ts.map +1 -0
  190. package/dist/src/commands/vpn/index.js +543 -0
  191. package/dist/src/commands/vpn/index.js.map +1 -0
  192. package/dist/src/commands/vpn/tunnel.d.ts +11 -0
  193. package/dist/src/commands/vpn/tunnel.d.ts.map +1 -0
  194. package/dist/src/commands/vpn/tunnel.js +188 -0
  195. package/dist/src/commands/vpn/tunnel.js.map +1 -0
  196. package/dist/src/commands/workflow.d.ts +24 -0
  197. package/dist/src/commands/workflow.d.ts.map +1 -0
  198. package/dist/src/commands/workflow.js +577 -0
  199. package/dist/src/commands/workflow.js.map +1 -0
  200. package/dist/src/docs/assemble.d.ts +217 -0
  201. package/dist/src/docs/assemble.d.ts.map +1 -0
  202. package/dist/src/docs/assemble.js +739 -0
  203. package/dist/src/docs/assemble.js.map +1 -0
  204. package/dist/src/docs/cli-reference.d.ts +93 -0
  205. package/dist/src/docs/cli-reference.d.ts.map +1 -0
  206. package/dist/src/docs/cli-reference.js +256 -0
  207. package/dist/src/docs/cli-reference.js.map +1 -0
  208. package/dist/src/docs/discover.d.ts +60 -0
  209. package/dist/src/docs/discover.d.ts.map +1 -0
  210. package/dist/src/docs/discover.js +233 -0
  211. package/dist/src/docs/discover.js.map +1 -0
  212. package/dist/src/docs/portal.d.ts +79 -0
  213. package/dist/src/docs/portal.d.ts.map +1 -0
  214. package/dist/src/docs/portal.js +242 -0
  215. package/dist/src/docs/portal.js.map +1 -0
  216. package/dist/src/docs/registry-docs.d.ts +43 -0
  217. package/dist/src/docs/registry-docs.d.ts.map +1 -0
  218. package/dist/src/docs/registry-docs.js +138 -0
  219. package/dist/src/docs/registry-docs.js.map +1 -0
  220. package/dist/src/docs/schema.d.ts +48 -0
  221. package/dist/src/docs/schema.d.ts.map +1 -0
  222. package/dist/src/docs/schema.js +96 -0
  223. package/dist/src/docs/schema.js.map +1 -0
  224. package/dist/src/docs/serve.d.ts +27 -0
  225. package/dist/src/docs/serve.d.ts.map +1 -0
  226. package/dist/src/docs/serve.js +102 -0
  227. package/dist/src/docs/serve.js.map +1 -0
  228. package/dist/src/docs/start.d.ts +80 -0
  229. package/dist/src/docs/start.d.ts.map +1 -0
  230. package/dist/src/docs/start.js +313 -0
  231. package/dist/src/docs/start.js.map +1 -0
  232. package/dist/src/eval/agent-eval.d.mts +14 -0
  233. package/dist/src/eval/agent-eval.d.mts.map +1 -0
  234. package/dist/src/eval/agent-eval.mjs +273 -0
  235. package/dist/src/eval/agent-eval.mjs.map +1 -0
  236. package/dist/src/index.js +624 -7
  237. package/dist/src/index.js.map +7 -1
  238. package/dist/src/program.d.ts +26 -0
  239. package/dist/src/program.d.ts.map +1 -0
  240. package/dist/src/program.js +76 -0
  241. package/dist/src/program.js.map +1 -0
  242. package/dist/src/utils/auth-preflight.d.ts +159 -0
  243. package/dist/src/utils/auth-preflight.d.ts.map +1 -0
  244. package/dist/src/utils/auth-preflight.js +298 -0
  245. package/dist/src/utils/auth-preflight.js.map +1 -0
  246. package/dist/src/utils/aws-auth.d.ts +181 -0
  247. package/dist/src/utils/aws-auth.d.ts.map +1 -0
  248. package/dist/src/utils/aws-auth.js +527 -0
  249. package/dist/src/utils/aws-auth.js.map +1 -0
  250. package/dist/src/utils/bastion.d.ts +1 -1
  251. package/dist/src/utils/bastion.d.ts.map +1 -1
  252. package/dist/src/utils/bastion.js +29 -8
  253. package/dist/src/utils/bastion.js.map +1 -1
  254. package/dist/src/utils/build-info.d.ts +33 -0
  255. package/dist/src/utils/build-info.d.ts.map +1 -0
  256. package/dist/src/utils/build-info.js +102 -0
  257. package/dist/src/utils/build-info.js.map +1 -0
  258. package/dist/src/utils/capture-history.d.ts +62 -0
  259. package/dist/src/utils/capture-history.d.ts.map +1 -0
  260. package/dist/src/utils/capture-history.js +94 -0
  261. package/dist/src/utils/capture-history.js.map +1 -0
  262. package/dist/src/utils/deploy-preflight.d.ts +52 -0
  263. package/dist/src/utils/deploy-preflight.d.ts.map +1 -0
  264. package/dist/src/utils/deploy-preflight.js +183 -0
  265. package/dist/src/utils/deploy-preflight.js.map +1 -0
  266. package/dist/src/utils/errors.d.ts +75 -0
  267. package/dist/src/utils/errors.d.ts.map +1 -0
  268. package/dist/src/utils/errors.js +106 -0
  269. package/dist/src/utils/errors.js.map +1 -0
  270. package/dist/src/utils/first-party-contexts.d.ts +40 -0
  271. package/dist/src/utils/first-party-contexts.d.ts.map +1 -0
  272. package/dist/src/utils/first-party-contexts.js +53 -0
  273. package/dist/src/utils/first-party-contexts.js.map +1 -0
  274. package/dist/src/utils/index.d.ts +2 -0
  275. package/dist/src/utils/index.d.ts.map +1 -1
  276. package/dist/src/utils/index.js +2 -0
  277. package/dist/src/utils/index.js.map +1 -1
  278. package/dist/src/utils/kubeconfig.d.ts +62 -0
  279. package/dist/src/utils/kubeconfig.d.ts.map +1 -0
  280. package/dist/src/utils/kubeconfig.js +118 -0
  281. package/dist/src/utils/kubeconfig.js.map +1 -0
  282. package/dist/src/utils/log.d.ts +27 -1
  283. package/dist/src/utils/log.d.ts.map +1 -1
  284. package/dist/src/utils/log.js +59 -5
  285. package/dist/src/utils/log.js.map +1 -1
  286. package/dist/src/utils/pid.d.ts +47 -0
  287. package/dist/src/utils/pid.d.ts.map +1 -0
  288. package/dist/src/utils/pid.js +83 -0
  289. package/dist/src/utils/pid.js.map +1 -0
  290. package/dist/src/utils/pulumi-run.d.ts +23 -0
  291. package/dist/src/utils/pulumi-run.d.ts.map +1 -0
  292. package/dist/src/utils/pulumi-run.js +112 -0
  293. package/dist/src/utils/pulumi-run.js.map +1 -0
  294. package/dist/src/utils/pulumi.d.ts +15 -0
  295. package/dist/src/utils/pulumi.d.ts.map +1 -1
  296. package/dist/src/utils/pulumi.js +35 -0
  297. package/dist/src/utils/pulumi.js.map +1 -1
  298. package/dist/src/utils/reachability.d.ts +29 -0
  299. package/dist/src/utils/reachability.d.ts.map +1 -0
  300. package/dist/src/utils/reachability.js +81 -0
  301. package/dist/src/utils/reachability.js.map +1 -0
  302. package/dist/src/utils/recover-conversation.d.ts +154 -0
  303. package/dist/src/utils/recover-conversation.d.ts.map +1 -0
  304. package/dist/src/utils/recover-conversation.js +314 -0
  305. package/dist/src/utils/recover-conversation.js.map +1 -0
  306. package/dist/src/utils/registry-broker.d.ts +148 -0
  307. package/dist/src/utils/registry-broker.d.ts.map +1 -0
  308. package/dist/src/utils/registry-broker.js +180 -0
  309. package/dist/src/utils/registry-broker.js.map +1 -0
  310. package/dist/src/utils/socks-forward.d.ts +40 -0
  311. package/dist/src/utils/socks-forward.d.ts.map +1 -0
  312. package/dist/src/utils/socks-forward.js +97 -0
  313. package/dist/src/utils/socks-forward.js.map +1 -0
  314. package/dist/src/utils/stack-flag.d.ts +23 -0
  315. package/dist/src/utils/stack-flag.d.ts.map +1 -0
  316. package/dist/src/utils/stack-flag.js +41 -0
  317. package/dist/src/utils/stack-flag.js.map +1 -0
  318. package/dist/src/utils/tailscale-targets.d.ts +52 -0
  319. package/dist/src/utils/tailscale-targets.d.ts.map +1 -0
  320. package/dist/src/utils/tailscale-targets.js +93 -0
  321. package/dist/src/utils/tailscale-targets.js.map +1 -0
  322. package/dist/src/utils/tailscale.d.ts +277 -0
  323. package/dist/src/utils/tailscale.d.ts.map +1 -0
  324. package/dist/src/utils/tailscale.js +1007 -0
  325. package/dist/src/utils/tailscale.js.map +1 -0
  326. package/dist/src/utils/temporal-auth.d.ts +43 -0
  327. package/dist/src/utils/temporal-auth.d.ts.map +1 -0
  328. package/dist/src/utils/temporal-auth.js +176 -0
  329. package/dist/src/utils/temporal-auth.js.map +1 -0
  330. package/dist/src/utils/temporal-codec.d.ts +101 -0
  331. package/dist/src/utils/temporal-codec.d.ts.map +1 -0
  332. package/dist/src/utils/temporal-codec.js +319 -0
  333. package/dist/src/utils/temporal-codec.js.map +1 -0
  334. package/dist/src/utils/tunnel-ownership.d.ts +130 -0
  335. package/dist/src/utils/tunnel-ownership.d.ts.map +1 -0
  336. package/dist/src/utils/tunnel-ownership.js +274 -0
  337. package/dist/src/utils/tunnel-ownership.js.map +1 -0
  338. package/dist/src/utils/vpn-join.d.ts +32 -0
  339. package/dist/src/utils/vpn-join.d.ts.map +1 -0
  340. package/dist/src/utils/vpn-join.js +62 -0
  341. package/dist/src/utils/vpn-join.js.map +1 -0
  342. package/dist/src/utils/vpn.d.ts +62 -0
  343. package/dist/src/utils/vpn.d.ts.map +1 -0
  344. package/dist/src/utils/vpn.js +183 -0
  345. package/dist/src/utils/vpn.js.map +1 -0
  346. package/dist/src/utils/workflow-fingerprint.d.ts +49 -0
  347. package/dist/src/utils/workflow-fingerprint.d.ts.map +1 -0
  348. package/dist/src/utils/workflow-fingerprint.js +135 -0
  349. package/dist/src/utils/workflow-fingerprint.js.map +1 -0
  350. package/dist/src/utils/worktree-identity.d.ts +86 -0
  351. package/dist/src/utils/worktree-identity.d.ts.map +1 -0
  352. package/dist/src/utils/worktree-identity.js +164 -0
  353. package/dist/src/utils/worktree-identity.js.map +1 -0
  354. package/fragments/agents/AGENTS.md.hbs +92 -0
  355. package/fragments/agents/CLAUDE.md.hbs +8 -0
  356. package/fragments/base/Pulumi.dev.yaml.hbs +10 -0
  357. package/fragments/base/Pulumi.yaml.hbs +9 -0
  358. package/fragments/base/index.ts.hbs +107 -0
  359. package/fragments/base/package.json.hbs +22 -0
  360. package/{templates/api-web-db/api → fragments/base}/tsconfig.json +3 -4
  361. package/fragments/bucket/api/src/storage.ts.hbs +81 -0
  362. package/fragments/database/api/src/db.ts.hbs +23 -0
  363. package/fragments/database/prisma/schema.prisma.hbs +18 -0
  364. package/{templates/api-web-db → fragments/service}/api/.dockerignore +2 -0
  365. package/fragments/service/api/package.json.hbs +40 -0
  366. package/fragments/service/api/src/index.ts.hbs +58 -0
  367. package/{templates/api-web-db → fragments/service/api}/tsconfig.json +5 -3
  368. package/fragments/temporal/worker/.dockerignore +4 -0
  369. package/fragments/temporal/worker/Dockerfile +15 -0
  370. package/{templates/temporal-api-worker → fragments/temporal}/worker/package.json.hbs +3 -2
  371. package/fragments/temporal/worker/src/activities.ts.hbs +14 -0
  372. package/fragments/temporal/worker/src/worker.ts.hbs +27 -0
  373. package/fragments/temporal/worker/src/workflows.ts.hbs +24 -0
  374. package/fragments/temporal/worker/tsconfig.json +13 -0
  375. package/package.json +36 -22
  376. package/skills/core/SKILL.md +365 -0
  377. package/skills/pull-remote-agent-context/SKILL.md +194 -0
  378. package/stack/docker-compose.hub.yml +134 -0
  379. package/stack/docker-compose.yml +447 -0
  380. package/stack/hub/Dockerfile.api +18 -0
  381. package/stack/hub/Dockerfile.auth +10 -0
  382. package/stack/hub/Dockerfile.ui +10 -0
  383. package/stack/init/01-databases.sql +12 -0
  384. package/stack/observability/blackbox.yml +20 -0
  385. package/stack/observability/otel-collector.yaml +73 -0
  386. package/stack/observability/prometheus.yml +36 -0
  387. package/stack/observability/tempo.yaml +25 -0
  388. package/stack/temporal/local.yaml +44 -0
  389. package/templates/api-auth/AGENTS.md.hbs +16 -0
  390. package/templates/api-auth/Pulumi.dev.yaml.hbs +8 -0
  391. package/templates/api-auth/Pulumi.yaml.hbs +8 -0
  392. package/templates/api-auth/README.md.hbs +67 -0
  393. package/templates/api-auth/api/package.json.hbs +28 -0
  394. package/templates/api-auth/api/src/index.ts.hbs +96 -0
  395. package/templates/api-auth/api/src/schema.ts.hbs +35 -0
  396. package/templates/api-auth/api/src/seed-authz.ts.hbs +48 -0
  397. package/templates/api-auth/api/src/spicedb-http-provider.ts.hbs +89 -0
  398. package/templates/api-auth/index.ts.hbs +65 -0
  399. package/templates/api-auth/package.json.hbs +20 -0
  400. package/templates/api-auth/skills/develop/SKILL.md.hbs +32 -0
  401. package/templates/api-role-gating/AGENTS.md.hbs +20 -0
  402. package/templates/api-role-gating/Pulumi.dev.yaml.hbs +8 -0
  403. package/templates/api-role-gating/Pulumi.yaml.hbs +8 -0
  404. package/templates/api-role-gating/README.md.hbs +64 -0
  405. package/templates/api-role-gating/api/Dockerfile +17 -0
  406. package/templates/api-role-gating/api/package.json.hbs +28 -0
  407. package/templates/api-role-gating/api/src/authn.ts.hbs +29 -0
  408. package/templates/api-role-gating/api/src/authz.ts.hbs +12 -0
  409. package/templates/api-role-gating/api/src/main.ts.hbs +58 -0
  410. package/templates/api-role-gating/api/src/schema.ts.hbs +22 -0
  411. package/templates/api-role-gating/api/tsconfig.json +13 -0
  412. package/templates/api-role-gating/index.ts.hbs +107 -0
  413. package/templates/api-role-gating/package.json.hbs +21 -0
  414. package/templates/api-role-gating/skills/develop/SKILL.md.hbs +60 -0
  415. package/templates/api-role-gating/tsconfig.json +10 -0
  416. package/templates/apps-repo/README.md.hbs +24 -0
  417. package/templates/apps-repo/gitignore +41 -0
  418. package/templates/apps-repo/npmrc.hbs +7 -0
  419. package/templates/apps-repo/package.json.hbs +15 -0
  420. package/templates/apps-repo/pnpm-workspace.yaml +3 -0
  421. package/templates/apps-repo/tsconfig.json +18 -0
  422. package/templates/external-service/AGENTS.md.hbs +20 -0
  423. package/templates/external-service/Pulumi.dev.yaml.hbs +8 -0
  424. package/templates/external-service/Pulumi.yaml.hbs +8 -0
  425. package/templates/external-service/README.md.hbs +56 -0
  426. package/templates/external-service/api/Dockerfile +15 -0
  427. package/templates/external-service/api/package.json.hbs +25 -0
  428. package/templates/external-service/api/src/index.ts.hbs +81 -0
  429. package/templates/external-service/index.ts.hbs +82 -0
  430. package/templates/external-service/mocks/vendorpay/package.json.hbs +9 -0
  431. package/templates/external-service/mocks/vendorpay/server.mjs.hbs +61 -0
  432. package/templates/external-service/package.json.hbs +34 -0
  433. package/templates/external-service/skills/develop/SKILL.md.hbs +55 -0
  434. package/templates/external-service/tsconfig.json +10 -0
  435. package/templates/platform-repo/AGENTS.md.hbs +18 -0
  436. package/templates/platform-repo/README.md.hbs +38 -0
  437. package/templates/platform-repo/core/Pulumi.yaml.hbs +12 -0
  438. package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +57 -0
  439. package/templates/platform-repo/core/index.ts +62 -0
  440. package/templates/platform-repo/core/package.json.hbs +22 -0
  441. package/templates/platform-repo/core/tsconfig.json +8 -0
  442. package/templates/platform-repo/package.json.hbs +15 -0
  443. package/templates/platform-repo/platform/Pulumi.yaml.hbs +12 -0
  444. package/templates/platform-repo/platform/Pulumi.{{tenant}}-{{env}}.yaml.hbs +59 -0
  445. package/templates/platform-repo/platform/index.ts +95 -0
  446. package/templates/platform-repo/platform/package.json.hbs +26 -0
  447. package/templates/platform-repo/platform/tsconfig.json +8 -0
  448. package/templates/platform-repo/pnpm-workspace.yaml +3 -0
  449. package/templates/workflow/AGENTS.md.hbs +15 -0
  450. package/templates/workflow/Pulumi.dev.yaml.hbs +8 -0
  451. package/templates/workflow/Pulumi.yaml.hbs +8 -0
  452. package/templates/workflow/README.md.hbs +45 -0
  453. package/templates/workflow/api/.dockerignore +4 -0
  454. package/templates/workflow/api/Dockerfile +15 -0
  455. package/templates/{temporal-api-worker → workflow}/api/package.json.hbs +8 -6
  456. package/templates/workflow/api/src/index.ts.hbs +130 -0
  457. package/templates/workflow/api/tsconfig.json +14 -0
  458. package/templates/workflow/index.ts.hbs +67 -0
  459. package/templates/workflow/package.json.hbs +20 -0
  460. package/templates/workflow/skills/develop/SKILL.md.hbs +32 -0
  461. package/templates/workflow/tsconfig.json +10 -0
  462. package/templates/workflow/worker/.dockerignore +4 -0
  463. package/templates/workflow/worker/Dockerfile +13 -0
  464. package/templates/workflow/worker/package.json.hbs +25 -0
  465. package/templates/workflow/worker/src/worker.ts.hbs +24 -0
  466. package/templates/workflow/worker/tsconfig.json +14 -0
  467. package/dist/src/commands/devbox.d.ts +0 -22
  468. package/dist/src/commands/devbox.d.ts.map +0 -1
  469. package/dist/src/commands/devbox.js +0 -463
  470. package/dist/src/commands/devbox.js.map +0 -1
  471. package/templates/api-web-db/api/Dockerfile +0 -16
  472. package/templates/api-web-db/api/package.json.hbs +0 -21
  473. package/templates/api-web-db/api/src/index.ts.hbs +0 -123
  474. package/templates/api-web-db/package.json.hbs +0 -27
  475. package/templates/api-web-db/sst.config.ts.hbs +0 -151
  476. package/templates/api-web-db/web/.dockerignore +0 -3
  477. package/templates/api-web-db/web/Dockerfile +0 -17
  478. package/templates/api-web-db/web/app/lib/db.server.ts +0 -36
  479. package/templates/api-web-db/web/app/root.tsx +0 -29
  480. package/templates/api-web-db/web/app/routes/home.tsx.hbs +0 -114
  481. package/templates/api-web-db/web/app/routes.ts +0 -3
  482. package/templates/api-web-db/web/package.json.hbs +0 -30
  483. package/templates/api-web-db/web/prisma/schema.prisma +0 -25
  484. package/templates/api-web-db/web/prisma.config.ts +0 -18
  485. package/templates/api-web-db/web/react-router.config.ts +0 -5
  486. package/templates/api-web-db/web/tsconfig.json +0 -19
  487. package/templates/api-web-db/web/vite.config.ts +0 -9
  488. package/templates/temporal-api-worker/README.md.hbs +0 -133
  489. package/templates/temporal-api-worker/api/src/index.ts.hbs +0 -145
  490. package/templates/temporal-api-worker/package.json.hbs +0 -29
  491. package/templates/temporal-api-worker/sst.config.ts.hbs +0 -161
  492. package/templates/temporal-api-worker/worker/Dockerfile +0 -11
  493. package/templates/temporal-api-worker/worker/src/bundle-workflows.ts +0 -38
  494. package/templates/temporal-api-worker/worker/src/worker.ts.hbs +0 -93
  495. /package/templates/{temporal-api-worker → api-auth}/api/.dockerignore +0 -0
  496. /package/templates/{temporal-api-worker → api-auth}/api/Dockerfile +0 -0
  497. /package/templates/{temporal-api-worker → api-auth}/api/tsconfig.json +0 -0
  498. /package/templates/{temporal-api-worker → api-auth}/tsconfig.json +0 -0
  499. /package/templates/{temporal-api-worker/worker → api-role-gating/api}/.dockerignore +0 -0
  500. /package/templates/{temporal-api-worker/worker → external-service/api}/tsconfig.json +0 -0
  501. /package/templates/{temporal-api-worker → workflow}/api/src/encryption-codec.ts +0 -0
  502. /package/templates/{temporal-api-worker → workflow}/worker/src/activities.ts.hbs +0 -0
  503. /package/templates/{temporal-api-worker → workflow}/worker/src/encryption-codec.ts +0 -0
  504. /package/templates/{temporal-api-worker → workflow}/worker/src/workflows.ts.hbs +0 -0
@@ -0,0 +1,313 @@
1
+ /**
2
+ * `mesh docs start` / `mesh docs list` / `mesh docs stop` — the docs as a
3
+ * local, role-gated server (MESH-1803 follow-up).
4
+ *
5
+ * Two content modes, chosen automatically:
6
+ *
7
+ * - **Repo mode** — inside a checkout that has doc roots (mesh-platform):
8
+ * assemble the working tree, build, and serve the static output. This is
9
+ * the contributor path; the docs are exactly what is on disk.
10
+ * - **Registry mode** — anywhere else (a tenant repo, a global install):
11
+ * fetch the published `@mesh-tech/docs` artifact — versioned with the
12
+ * @mesh-tech/* baseline — from the role-gated registry and serve it.
13
+ * `-v <version>` pins; default is the registry's `latest` dist-tag.
14
+ *
15
+ * Two run modes: by default the server runs DETACHED in a tmux session with
16
+ * the constant name `mesh-docs` — the handle that keeps a backgrounded server
17
+ * from getting lost — and the command prints the URL once it answers.
18
+ * `--foreground` (or a non-TTY, i.e. an agent/CI) serves in the foreground.
19
+ * `--dev` (repo mode) runs the Zudoku dev server and is foreground-only: it
20
+ * is an authoring tool — you are supposed to watch it.
21
+ *
22
+ * The registry mode is the distribution point: the people who can read the
23
+ * docs are exactly the people who can install the packages, and no public
24
+ * hosting is required.
25
+ */
26
+ import { execFileSync } from "node:child_process";
27
+ import { appendFileSync, existsSync, writeFileSync } from "node:fs";
28
+ import path from "node:path";
29
+ import { logError, logInfo, logSuccess } from "../utils/log.js";
30
+ import { resolveCliRuntime } from "../utils/build-info.js";
31
+ import { discoverDocRoots } from "./discover.js";
32
+ import { runAssemble, reportAssembly, DOCS_APP_DIR } from "./portal.js";
33
+ import { serveDocsSite } from "./serve.js";
34
+ import { DOCS_PACKAGE, fetchDocsArtifact, listDocsVersions, readDocsRegistryAuth, } from "./registry-docs.js";
35
+ /** The one tmux session name — the constant handle for the detached server. */
36
+ export const DOCS_TMUX_SESSION = "mesh-docs";
37
+ function registryAuthOrThrow() {
38
+ const auth = readDocsRegistryAuth();
39
+ if (!auth) {
40
+ throw new Error("no CodeArtifact token in ~/.npmrc — run `mesh registry login` first " +
41
+ "(the docs artifact is role-gated the same way the packages are).");
42
+ }
43
+ return auth;
44
+ }
45
+ /** `mesh docs list` — published docs versions, newest first. */
46
+ export async function runDocsList() {
47
+ const auth = registryAuthOrThrow();
48
+ const { versions, latest } = await listDocsVersions(auth);
49
+ if (versions.length === 0) {
50
+ logInfo(`No ${DOCS_PACKAGE} versions published yet.`);
51
+ return;
52
+ }
53
+ logInfo(`Published docs versions (docs version == @mesh-tech/* baseline):`);
54
+ for (const version of [...versions].reverse()) {
55
+ const marker = version === latest ? " ← latest" : "";
56
+ process.stdout.write(` ${version}${marker}\n`);
57
+ }
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Detached (tmux) machinery
61
+ // ---------------------------------------------------------------------------
62
+ /** The install command to show when tmux is missing, per platform. */
63
+ export function tmuxInstallHint(platform = process.platform) {
64
+ if (platform === "darwin")
65
+ return "brew install tmux";
66
+ if (platform === "linux")
67
+ return "sudo apt-get install tmux # or your distro's package manager";
68
+ return "install tmux via your package manager";
69
+ }
70
+ /** True when tmux is runnable. */
71
+ export function tmuxAvailable() {
72
+ try {
73
+ execFileSync("tmux", ["-V"], { stdio: ["pipe", "pipe", "pipe"] });
74
+ return true;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ /** The detached/foreground decision, as one pure predicate. */
81
+ export function shouldDetach(args) {
82
+ return !args.foreground && !args.dev && args.isTTY;
83
+ }
84
+ /** True when the detached session currently exists. */
85
+ export function docsSessionExists() {
86
+ try {
87
+ execFileSync("tmux", ["has-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ /**
95
+ * The argv the tmux session runs: a hidden foreground serve of the prepared
96
+ * directory. Source checkouts re-enter through `pnpm exec mesh` at the repo
97
+ * root (the shim-free canonical form); a published install re-enters through
98
+ * the `mesh` bin on PATH.
99
+ */
100
+ export function tmuxServeArgs(args) {
101
+ const serveArgs = ["docs", "serve-static", "--root", args.serveRoot, "--port", String(args.port)];
102
+ if (args.mode === "dist") {
103
+ return { command: ["mesh", ...serveArgs], cwd: args.repoRoot };
104
+ }
105
+ return { command: ["pnpm", "exec", "mesh", ...serveArgs], cwd: args.repoRoot };
106
+ }
107
+ /** (Re)start the detached docs session and wait for it to answer. */
108
+ export async function startDetached(args) {
109
+ if (!tmuxAvailable()) {
110
+ throw new Error(`tmux is not installed — the detached docs server runs in a tmux session named "${DOCS_TMUX_SESSION}".\n` +
111
+ `Install it with: ${tmuxInstallHint()}\n` +
112
+ `Or run in the foreground instead: mesh docs start --foreground`);
113
+ }
114
+ // Restart semantics: the session name is the constant handle, so a second
115
+ // `docs start` replaces the first rather than orphaning it. Say so when it
116
+ // happens — a developer serving `-v 1.11.3` who starts the working tree
117
+ // should not lose the first server silently.
118
+ if (docsSessionExists()) {
119
+ logInfo(`Replacing the docs server already running in tmux session "${DOCS_TMUX_SESSION}".`);
120
+ try {
121
+ execFileSync("tmux", ["kill-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
122
+ }
123
+ catch {
124
+ // raced with its own shutdown — harmless
125
+ }
126
+ }
127
+ const { command, cwd } = tmuxServeArgs(args);
128
+ // Pass the argv ARRAY: tmux execs a multi-argument command directly, with no
129
+ // shell. A single joined string would go through `sh -c`, and a `$()` or
130
+ // backtick in a path (which mesh-ops worktree names can legitimately carry)
131
+ // would be evaluated. Verified empirically on tmux 3.6a.
132
+ execFileSync("tmux", ["new-session", "-d", "-s", DOCS_TMUX_SESSION, "-c", cwd, "--", ...command], { stdio: ["pipe", "pipe", "pipe"] });
133
+ // Wait for the server to answer before printing the URL — "one click" only
134
+ // works if the link is live when it appears.
135
+ const deadline = Date.now() + 60_000;
136
+ const url = `http://127.0.0.1:${args.port}`;
137
+ let lastError = "";
138
+ while (Date.now() < deadline) {
139
+ try {
140
+ const response = await fetch(`${url}/healthz`);
141
+ if (response.ok) {
142
+ printReady(url, args.label);
143
+ return;
144
+ }
145
+ lastError = `HTTP ${response.status}`;
146
+ }
147
+ catch (error) {
148
+ lastError = error instanceof Error ? error.message : String(error);
149
+ }
150
+ await new Promise((resolve) => setTimeout(resolve, 500));
151
+ }
152
+ throw new Error(`the docs server did not answer at ${url} within 60s (${lastError || "no response"}).\n` +
153
+ `Read its log with: tmux attach -t ${DOCS_TMUX_SESSION} (detach: Ctrl-B then D)`);
154
+ }
155
+ function printReady(url, label) {
156
+ logSuccess(`Mesh docs (${label}) are live:`);
157
+ // Bare on its own line — one click from any terminal.
158
+ process.stdout.write(`\n ${url}\n\n`);
159
+ logInfo(`Running detached in the tmux session "${DOCS_TMUX_SESSION}".`);
160
+ logInfo(` attach: tmux attach -t ${DOCS_TMUX_SESSION}`);
161
+ logInfo(` stop: mesh docs stop`);
162
+ }
163
+ /** `mesh docs stop` — kill the detached session if it exists. */
164
+ export function runDocsStop() {
165
+ try {
166
+ execFileSync("tmux", ["kill-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
167
+ logSuccess(`Stopped the docs server (tmux session "${DOCS_TMUX_SESSION}").`);
168
+ }
169
+ catch {
170
+ logInfo(`No docs server is running (no tmux session named "${DOCS_TMUX_SESSION}").`);
171
+ }
172
+ }
173
+ /** The hidden `mesh docs serve-static` the tmux session re-enters through. */
174
+ export async function runDocsServeStatic(args) {
175
+ const requestedPort = Number.parseInt(args.port, 10);
176
+ if (!Number.isInteger(requestedPort) || requestedPort < 0 || requestedPort > 65535) {
177
+ throw new Error(`Invalid --port: ${args.port}`);
178
+ }
179
+ if (!args.root || !existsSync(path.join(args.root, "index.html"))) {
180
+ throw new Error(`--root ${args.root || "(empty)"} does not hold a built site (no index.html). ` +
181
+ `This command exists so the detached tmux session can re-enter; you probably want \`mesh docs start\`.`);
182
+ }
183
+ const server = await serveDocsSite({ root: args.root, port: requestedPort });
184
+ logSuccess(`Mesh docs serving at ${server.url} (from ${args.root})`);
185
+ await new Promise((resolve) => {
186
+ const stop = () => void server.close().finally(() => resolve());
187
+ process.once("SIGINT", stop);
188
+ process.once("SIGTERM", stop);
189
+ });
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // mesh docs start
193
+ // ---------------------------------------------------------------------------
194
+ /** `mesh docs start` — serve the docs locally, detached by default. */
195
+ export async function runDocsStart(args) {
196
+ const requestedPort = Number.parseInt(args.port, 10);
197
+ if (!Number.isInteger(requestedPort) || requestedPort < 0 || requestedPort > 65535) {
198
+ throw new Error(`Invalid --port: ${args.port}`);
199
+ }
200
+ // Compute the run mode BEFORE any prepare work (assemble+build is the
201
+ // expensive part; refuse bad combinations up front).
202
+ const detached = shouldDetach({
203
+ foreground: args.foreground,
204
+ dev: args.dev,
205
+ isTTY: process.stdout.isTTY === true,
206
+ });
207
+ if (detached && requestedPort === 0) {
208
+ // A detached server that picks its own port cannot report the choice back:
209
+ // the parent would poll 127.0.0.1:0 for a minute and "fail" while a
210
+ // perfectly good server runs on a port nobody knows.
211
+ throw new Error("--port 0 (pick a free port) needs a foreground server, because the detached session " +
212
+ "cannot report the port it chose back to this process. Use `mesh docs start --foreground --port 0`, " +
213
+ "or pass an explicit port to run detached.");
214
+ }
215
+ const localRoots = discoverDocRoots(args.repoRoot);
216
+ const repoHasDocs = localRoots.roots.length > 0;
217
+ const registryMode = args.version !== undefined || !repoHasDocs;
218
+ let serveRoot;
219
+ let label;
220
+ if (registryMode) {
221
+ const auth = registryAuthOrThrow();
222
+ const version = args.version === undefined || args.version === "latest"
223
+ ? (await listDocsVersions(auth)).latest
224
+ : args.version;
225
+ if (!version) {
226
+ throw new Error(`the registry has no ${DOCS_PACKAGE} versions tagged latest`);
227
+ }
228
+ logInfo(`Fetching ${DOCS_PACKAGE}@${version} from the registry…`);
229
+ const artifactDir = await fetchDocsArtifact(auth, version);
230
+ serveRoot = path.join(artifactDir, "dist");
231
+ label = `@mesh-tech/* ${version} (published artifact)`;
232
+ }
233
+ else {
234
+ if (localRoots.errors.length > 0) {
235
+ for (const error of localRoots.errors)
236
+ logError(error);
237
+ throw new Error(`docs discovery failed with ${localRoots.errors.length} problem(s)`);
238
+ }
239
+ const appDir = path.join(args.repoRoot, DOCS_APP_DIR);
240
+ if (args.dev) {
241
+ // HMR mode for docs authoring: assemble, then hand the tree to the
242
+ // Zudoku dev server. Foreground-only by design — an authoring tool is
243
+ // watched, not detached.
244
+ const result = runAssemble({
245
+ repoRoot: args.repoRoot,
246
+ outDir: path.join(appDir, "content"),
247
+ configOut: path.join(appDir, "zudoku.config.ts"),
248
+ });
249
+ reportAssembly(result);
250
+ const { spawn } = await import("node:child_process");
251
+ const child = spawn("pnpm", ["exec", "zudoku", "dev", "--port", String(requestedPort)], {
252
+ cwd: appDir,
253
+ stdio: "inherit",
254
+ env: process.env,
255
+ });
256
+ await new Promise((resolve) => {
257
+ child.on("close", () => resolve());
258
+ process.once("SIGINT", () => child.kill("SIGINT"));
259
+ process.once("SIGTERM", () => child.kill("SIGTERM"));
260
+ });
261
+ return;
262
+ }
263
+ // Detached mode keeps the waiting display to two lines; the build's noise
264
+ // lands in a log file instead of the terminal.
265
+ const buildLog = path.join(args.repoRoot, DOCS_APP_DIR, "build.log");
266
+ logInfo(`Preparing the docs from this checkout (assemble + build — log: ${path.relative(args.repoRoot, buildLog)})…`);
267
+ const result = runAssemble({
268
+ repoRoot: args.repoRoot,
269
+ outDir: path.join(appDir, "content"),
270
+ configOut: path.join(appDir, "zudoku.config.ts"),
271
+ });
272
+ reportAssembly(result);
273
+ const { spawn } = await import("node:child_process");
274
+ writeFileSync(buildLog, "");
275
+ const code = await new Promise((resolve) => {
276
+ const child = spawn("pnpm", ["exec", "zudoku", "build"], {
277
+ cwd: appDir,
278
+ stdio: ["ignore", "pipe", "pipe"],
279
+ env: process.env,
280
+ });
281
+ child.stdout?.on("data", (chunk) => appendFileSync(buildLog, chunk));
282
+ child.stderr?.on("data", (chunk) => appendFileSync(buildLog, chunk));
283
+ child.on("error", () => resolve(1));
284
+ child.on("close", (exitCode) => resolve(exitCode ?? 1));
285
+ });
286
+ if (code !== 0)
287
+ throw new Error(`zudoku build exited with code ${code} — see ${buildLog}`);
288
+ serveRoot = path.join(appDir, "dist");
289
+ label = "this checkout";
290
+ }
291
+ if (detached) {
292
+ const runtime = resolveCliRuntime({ vcs: false });
293
+ await startDetached({
294
+ mode: runtime.mode,
295
+ repoRoot: args.repoRoot,
296
+ serveRoot,
297
+ port: requestedPort,
298
+ label,
299
+ });
300
+ return;
301
+ }
302
+ const server = await serveDocsSite({ root: serveRoot, port: requestedPort });
303
+ logSuccess(`Mesh docs (${label}) serving at ${server.url}`);
304
+ logInfo("Press Ctrl-C to stop");
305
+ await new Promise((resolve) => {
306
+ const stop = () => {
307
+ void server.close().finally(() => resolve());
308
+ };
309
+ process.once("SIGINT", stop);
310
+ process.once("SIGTERM", stop);
311
+ });
312
+ }
313
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/docs/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Agent eval runner — sends prompts to a mesh.ai.Agent API and captures
4
+ * structured traces of tool calls, results, errors, and artifacts.
5
+ *
6
+ * Usage:
7
+ * npx tsx agent-eval.mts --prompt "Build a contract onboarding workflow..."
8
+ * npx tsx agent-eval.mts --prompt-file prompts/contract-onboarding.md
9
+ * npx tsx agent-eval.mts --prompt "..." --api http://localhost:8787 --conversation conv-123
10
+ *
11
+ * Output: JSON trace to stdout (pipe to jq or a file), human summary to stderr.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=agent-eval.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-eval.d.mts","sourceRoot":"","sources":["../../../src/eval/agent-eval.mts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
@@ -0,0 +1,273 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Agent eval runner — sends prompts to a mesh.ai.Agent API and captures
4
+ * structured traces of tool calls, results, errors, and artifacts.
5
+ *
6
+ * Usage:
7
+ * npx tsx agent-eval.mts --prompt "Build a contract onboarding workflow..."
8
+ * npx tsx agent-eval.mts --prompt-file prompts/contract-onboarding.md
9
+ * npx tsx agent-eval.mts --prompt "..." --api http://localhost:8787 --conversation conv-123
10
+ *
11
+ * Output: JSON trace to stdout (pipe to jq or a file), human summary to stderr.
12
+ */
13
+ import { parseArgs } from "node:util";
14
+ // ── CLI args ─────────────────────────────────────────────────────────────────
15
+ const { values: args } = parseArgs({
16
+ options: {
17
+ prompt: { type: "string", short: "p" },
18
+ "prompt-file": { type: "string", short: "f" },
19
+ api: { type: "string", default: "http://localhost:8787" },
20
+ conversation: { type: "string", short: "c" },
21
+ timeout: { type: "string", default: "300" },
22
+ verbose: { type: "boolean", short: "v", default: false },
23
+ },
24
+ strict: true,
25
+ });
26
+ const apiUrl = (args.api ?? "http://localhost:8787").replace(/\/+$/, "");
27
+ const timeoutMs = parseInt(args.timeout ?? "300", 10) * 1000;
28
+ let prompt;
29
+ if (args.prompt) {
30
+ prompt = args.prompt;
31
+ }
32
+ else if (args["prompt-file"]) {
33
+ const fs = await import("node:fs");
34
+ prompt = fs.readFileSync(args["prompt-file"], "utf-8").trim();
35
+ }
36
+ else {
37
+ console.error("Usage: agent-eval.mts --prompt '...' or --prompt-file <path>");
38
+ process.exit(1);
39
+ }
40
+ // ── SSE stream reader ────────────────────────────────────────────────────────
41
+ async function* readSSE(response) {
42
+ const reader = response.body.getReader();
43
+ const decoder = new TextDecoder();
44
+ let buffer = "";
45
+ while (true) {
46
+ const { done, value } = await reader.read();
47
+ if (done)
48
+ break;
49
+ buffer += decoder.decode(value, { stream: true });
50
+ const lines = buffer.split("\n");
51
+ buffer = lines.pop() ?? "";
52
+ for (const line of lines) {
53
+ const trimmed = line.trim();
54
+ if (!trimmed || !trimmed.startsWith("data: "))
55
+ continue;
56
+ const data = trimmed.slice(6);
57
+ if (data === "[DONE]")
58
+ return;
59
+ try {
60
+ yield JSON.parse(data);
61
+ }
62
+ catch {
63
+ // Skip malformed events
64
+ }
65
+ }
66
+ }
67
+ }
68
+ // ── Main ─────────────────────────────────────────────────────────────────────
69
+ const log = (msg) => process.stderr.write(msg + "\n");
70
+ const vlog = (msg) => { if (args.verbose)
71
+ log(` ${msg}`); };
72
+ log(`\n--- Agent Eval ---`);
73
+ log(`API: ${apiUrl}`);
74
+ log(`Prompt: ${prompt.slice(0, 100)}${prompt.length > 100 ? "..." : ""}`);
75
+ log("");
76
+ const startTime = Date.now();
77
+ const controller = new AbortController();
78
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
79
+ const trace = {
80
+ conversationId: args.conversation ?? null,
81
+ prompt,
82
+ apiUrl,
83
+ startedAt: new Date().toISOString(),
84
+ durationMs: 0,
85
+ toolCalls: [],
86
+ textSegments: [],
87
+ artifacts: [],
88
+ title: null,
89
+ finishReason: null,
90
+ usage: null,
91
+ errors: [],
92
+ warnings: [],
93
+ };
94
+ const pendingTools = new Map();
95
+ let currentText = "";
96
+ try {
97
+ const response = await fetch(`${apiUrl}/v1/conversations/messages`, {
98
+ method: "POST",
99
+ headers: {
100
+ "Content-Type": "application/json",
101
+ "X-Forwarded-User": "eval-runner",
102
+ "X-Forwarded-Email": "eval@localhost",
103
+ },
104
+ body: JSON.stringify({
105
+ conversationId: trace.conversationId,
106
+ messages: [{ role: "user", content: prompt }],
107
+ stream: true,
108
+ }),
109
+ signal: controller.signal,
110
+ });
111
+ if (!response.ok) {
112
+ const body = await response.text();
113
+ log(`ERROR: API returned ${response.status}: ${body}`);
114
+ process.exit(1);
115
+ }
116
+ for await (const event of readSSE(response)) {
117
+ const type = event.type;
118
+ switch (type) {
119
+ case "conversation-started":
120
+ trace.conversationId = event.conversationId;
121
+ log(`Conversation: ${trace.conversationId}`);
122
+ break;
123
+ case "title-updated":
124
+ trace.title = event.title;
125
+ vlog(`Title: ${trace.title}`);
126
+ break;
127
+ case "text-start":
128
+ currentText = "";
129
+ break;
130
+ case "text-delta":
131
+ currentText += event.delta;
132
+ break;
133
+ case "text-end":
134
+ if (currentText) {
135
+ trace.textSegments.push(currentText);
136
+ vlog(`Text: ${currentText.slice(0, 80)}${currentText.length > 80 ? "..." : ""}`);
137
+ }
138
+ currentText = "";
139
+ break;
140
+ case "tool-call-start": {
141
+ const tc = {
142
+ toolId: event.toolId,
143
+ toolName: event.toolName,
144
+ args: event.args,
145
+ startedAt: Date.now(),
146
+ };
147
+ pendingTools.set(tc.toolId, tc);
148
+ trace.toolCalls.push(tc);
149
+ log(` -> ${tc.toolName}${args.verbose ? ` (${JSON.stringify(tc.args).slice(0, 120)})` : ""}`);
150
+ break;
151
+ }
152
+ case "tool-call-result": {
153
+ const tc = pendingTools.get(event.toolId);
154
+ if (tc) {
155
+ tc.result = event.result;
156
+ tc.durationMs = Date.now() - tc.startedAt;
157
+ pendingTools.delete(tc.toolId);
158
+ // Check for success: false in result
159
+ const r = event.result;
160
+ if (r && r.success === false) {
161
+ const errMsg = r.error ?? "success: false";
162
+ trace.errors.push(`${tc.toolName}: ${errMsg}`);
163
+ log(` <- ${tc.toolName} FAILED: ${errMsg.slice(0, 100)}`);
164
+ }
165
+ else {
166
+ vlog(` <- ${tc.toolName} OK (${tc.durationMs}ms)`);
167
+ }
168
+ // Check for warnings
169
+ if (r && Array.isArray(r.warnings)) {
170
+ for (const w of r.warnings) {
171
+ trace.warnings.push(`${tc.toolName}: ${w}`);
172
+ }
173
+ }
174
+ if (r && r.action_required) {
175
+ trace.warnings.push(`${tc.toolName} ACTION REQUIRED: ${r.action_required}`);
176
+ }
177
+ if (r && Array.isArray(r.missing_specs)) {
178
+ for (const w of r.missing_specs) {
179
+ trace.warnings.push(`${tc.toolName} MISSING SPEC: ${w}`);
180
+ }
181
+ }
182
+ }
183
+ break;
184
+ }
185
+ case "tool-call-error": {
186
+ const tc = pendingTools.get(event.toolId);
187
+ if (tc) {
188
+ tc.error = event.error;
189
+ tc.durationMs = Date.now() - tc.startedAt;
190
+ pendingTools.delete(tc.toolId);
191
+ trace.errors.push(`${tc.toolName}: ${tc.error}`);
192
+ log(` <- ${tc.toolName} ERROR: ${tc.error.slice(0, 100)}`);
193
+ }
194
+ break;
195
+ }
196
+ case "artifact-update": {
197
+ const a = event.artifact;
198
+ const entry = { id: a.id, type: a.type, title: a.title };
199
+ // Update or add
200
+ const idx = trace.artifacts.findIndex((x) => x.id === entry.id);
201
+ if (idx >= 0)
202
+ trace.artifacts[idx] = entry;
203
+ else
204
+ trace.artifacts.push(entry);
205
+ vlog(`Artifact: ${entry.id} (${entry.type}): ${entry.title}`);
206
+ break;
207
+ }
208
+ case "error":
209
+ trace.errors.push(event.error);
210
+ log(` ERROR: ${event.error}`);
211
+ break;
212
+ case "finish":
213
+ trace.finishReason = event.finishReason;
214
+ trace.usage = event.usage ?? null;
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ catch (err) {
220
+ if (err.name === "AbortError") {
221
+ trace.errors.push(`Timeout after ${timeoutMs / 1000}s`);
222
+ log(`\nTIMEOUT after ${timeoutMs / 1000}s`);
223
+ }
224
+ else {
225
+ trace.errors.push(err.message);
226
+ log(`\nERROR: ${err.message}`);
227
+ }
228
+ }
229
+ finally {
230
+ clearTimeout(timer);
231
+ }
232
+ trace.durationMs = Date.now() - startTime;
233
+ // ── Summary ──────────────────────────────────────────────────────────────────
234
+ log("\n--- Summary ---");
235
+ log(`Duration: ${(trace.durationMs / 1000).toFixed(1)}s`);
236
+ log(`Tool calls: ${trace.toolCalls.length}`);
237
+ log(`Text segments: ${trace.textSegments.length}`);
238
+ log(`Artifacts: ${trace.artifacts.length}`);
239
+ log(`Errors: ${trace.errors.length}`);
240
+ log(`Warnings: ${trace.warnings.length}`);
241
+ log(`Finish: ${trace.finishReason ?? "unknown"}`);
242
+ if (trace.usage) {
243
+ log(`Tokens: ${trace.usage.inputTokens} in / ${trace.usage.outputTokens} out`);
244
+ }
245
+ if (trace.errors.length > 0) {
246
+ log("\nErrors:");
247
+ for (const e of trace.errors)
248
+ log(` - ${e}`);
249
+ }
250
+ if (trace.warnings.length > 0) {
251
+ log("\nWarnings:");
252
+ for (const w of trace.warnings)
253
+ log(` - ${w}`);
254
+ }
255
+ // Tool call breakdown
256
+ const toolCounts = new Map();
257
+ for (const tc of trace.toolCalls) {
258
+ const entry = toolCounts.get(tc.toolName) ?? { count: 0, failed: 0 };
259
+ entry.count++;
260
+ if (tc.error || tc.result?.success === false)
261
+ entry.failed++;
262
+ toolCounts.set(tc.toolName, entry);
263
+ }
264
+ if (toolCounts.size > 0) {
265
+ log("\nTool breakdown:");
266
+ for (const [name, { count, failed }] of toolCounts) {
267
+ log(` ${name}: ${count} call${count > 1 ? "s" : ""}${failed > 0 ? ` (${failed} failed)` : ""}`);
268
+ }
269
+ }
270
+ log("");
271
+ // ── JSON trace to stdout ─────────────────────────────────────────────────────
272
+ console.log(JSON.stringify(trace, null, 2));
273
+ //# sourceMappingURL=agent-eval.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-eval.mjs","sourceRoot":"","sources":["../../../src/eval/agent-eval.mts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,gFAAgF;AAEhF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE;QACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QACtC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QAC7C,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,EAAE;QACzD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;KACzD;IACD,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AAE7D,IAAI,MAAc,CAAC;AACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC;KAAM,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AA8BD,gFAAgF;AAEhF,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,QAAkB;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAK,CAAC,SAAS,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACxD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAE9B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAC9D,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO;IAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC5B,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;AACzB,GAAG,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,GAAG,CAAC,EAAE,CAAC,CAAC;AAER,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;AAE9D,MAAM,KAAK,GAAc;IACvB,cAAc,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;IACzC,MAAM;IACN,MAAM;IACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;AACtD,IAAI,WAAW,GAAG,EAAE,CAAC;AAErB,IAAI,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,4BAA4B,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,kBAAkB,EAAE,aAAa;YACjC,mBAAmB,EAAE,gBAAgB;SACtC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,MAAM,EAAE,IAAI;SACb,CAAC;QACF,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;QAElC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,sBAAsB;gBACzB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAwB,CAAC;gBACtD,GAAG,CAAC,iBAAiB,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC7C,MAAM;YAER,KAAK,eAAe;gBAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAe,CAAC;gBACpC,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC9B,MAAM;YAER,KAAK,YAAY;gBACf,WAAW,GAAG,EAAE,CAAC;gBACjB,MAAM;YAER,KAAK,YAAY;gBACf,WAAW,IAAI,KAAK,CAAC,KAAe,CAAC;gBACrC,MAAM;YAER,KAAK,UAAU;gBACb,IAAI,WAAW,EAAE,CAAC;oBAChB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACrC,IAAI,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,WAAW,GAAG,EAAE,CAAC;gBACjB,MAAM;YAER,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,GAAkB;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAgB;oBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAkB;oBAClC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC;gBACF,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/F,MAAM;YACR,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,CAAC,CAAC;gBACpD,IAAI,EAAE,EAAE,CAAC;oBACP,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBACzB,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;oBAC1C,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAE/B,qCAAqC;oBACrC,MAAM,CAAC,GAAG,KAAK,CAAC,MAA6C,CAAC;oBAC9D,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBAC7B,MAAM,MAAM,GAAI,CAAC,CAAC,KAAgB,IAAI,gBAAgB,CAAC;wBACvD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;wBAC/C,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC7D,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC;oBACtD,CAAC;oBAED,qBAAqB;oBACrB,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAoB,EAAE,CAAC;4BACvC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;wBAC3B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,qBAAqB,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;oBAC9E,CAAC;oBACD,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;wBACxC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,aAAyB,EAAE,CAAC;4BAC5C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,kBAAkB,CAAC,EAAE,CAAC,CAAC;wBAC3D,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,CAAC,CAAC;gBACpD,IAAI,EAAE,EAAE,CAAC;oBACP,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAe,CAAC;oBACjC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;oBAC1C,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC/B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjD,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAmC,CAAC;gBACpD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAc,EAAE,KAAK,EAAE,CAAC,CAAC,KAAe,EAAE,CAAC;gBACvF,gBAAgB;gBAChB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChE,IAAI,GAAG,IAAI,CAAC;oBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;oBACtC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC9D,MAAM;YACR,CAAC;YAED,KAAK,OAAO;gBACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;gBACzC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/B,MAAM;YAER,KAAK,QAAQ;gBACX,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAsB,CAAC;gBAClD,KAAK,CAAC,KAAK,GAAI,KAAK,CAAC,KAA4B,IAAI,IAAI,CAAC;gBAC1D,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAAC,OAAO,GAAQ,EAAE,CAAC;IAClB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;QACxD,GAAG,CAAC,mBAAmB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;QAAS,CAAC;IACT,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AAE1C,gFAAgF;AAEhF,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACzB,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9D,GAAG,CAAC,iBAAiB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,GAAG,CAAC,kBAAkB,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AACnD,GAAG,CAAC,iBAAiB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,GAAG,CAAC,iBAAiB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,GAAG,CAAC,iBAAiB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,GAAG,CAAC,iBAAiB,KAAK,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC,CAAC;AACxD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,GAAG,CAAC,iBAAiB,KAAK,CAAC,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,CAAC;AACvF,CAAC;AAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC5B,GAAG,CAAC,WAAW,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC;AACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC9B,GAAG,CAAC,aAAa,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ;QAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6C,CAAC;AACxE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACrE,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,EAAE,CAAC,KAAK,IAAK,EAAE,CAAC,MAAc,EAAE,OAAO,KAAK,KAAK;QAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACtE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AACD,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnG,CAAC;AACH,CAAC;AAED,GAAG,CAAC,EAAE,CAAC,CAAC;AAER,gFAAgF;AAEhF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC"}