@voltro/cli 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +1968 -0
  2. package/bin/nodeEnvironment.d.mts +30 -0
  3. package/bin/nodeEnvironment.mjs +158 -0
  4. package/bin/voltro.mjs +69 -5
  5. package/dist/addCommand-BNeoeSxe.js +124 -0
  6. package/dist/addCommand-aXSQveak.js +2 -0
  7. package/dist/agentsMd-BTchIZku.js +2 -0
  8. package/dist/agentsMd-mhQMF1bx.js +254 -0
  9. package/dist/apiBuild-B8aoJvuw.js +2 -0
  10. package/dist/{apiBuild-h9VHtnlw.js → apiBuild-DYD_ONLD.js} +46 -46
  11. package/dist/{appGraph-gQ_6GkQQ.js → appGraph-KGDPTuTy.js} +1 -1
  12. package/dist/appGraph-zuMGKVYX.js +2 -0
  13. package/dist/appPort-B_HpJ_ck.js +48 -0
  14. package/dist/baselineCommand-C2ClWZN3.js +2 -0
  15. package/dist/baselineCommand-DIttzO8A.js +227 -0
  16. package/dist/bin.js +71 -28
  17. package/dist/build-CD8K4XOr.js +711 -0
  18. package/dist/cacheCommand-DA4OH9xt.js +42 -0
  19. package/dist/capabilitiesCommand-nq_pz5xd.js +123 -0
  20. package/dist/checkCommand-Ct9xkTrS.js +232 -0
  21. package/dist/checkCommand-DKpDLlqu.js +2 -0
  22. package/dist/{cliArgs-qdZSElM3.js → cliArgs-D4p8n7EE.js} +12 -1
  23. package/dist/cliError-BmdYnghb.js +10 -0
  24. package/dist/cliOutput-D1tSBoRM.js +15 -0
  25. package/dist/{cliRuntime-Oh517vCV.js → cliRuntime-Dh7UDinH.js} +20 -20
  26. package/dist/cloudClient-DWL-Hw_T.js +67 -0
  27. package/dist/cloudCmd-Cvv5HGaZ.js +364 -0
  28. package/dist/clusterCmd-D5wsCmA_.js +54 -0
  29. package/dist/codegen-CYM3Zqrf.js +605 -0
  30. package/dist/codegen-ChBi_hVa.js +2 -0
  31. package/dist/codegenCommand-C4YoQIc2.js +30 -0
  32. package/dist/codemodRunner-BnFq3Fgu.js +5384 -0
  33. package/dist/commandRunner-BLAEFLjp.js +47 -0
  34. package/dist/commands-BE8E7zF3.js +816 -0
  35. package/dist/connectionConfig-UFlIEiys.js +66 -0
  36. package/dist/dashboardCommand-D7SgZGaN.js +25 -0
  37. package/dist/dataCommand-BhYwDgg-.js +537 -0
  38. package/dist/dataProfile-dW-PsfLB.js +15 -0
  39. package/dist/dbCommand-DS4b97Is.js +2 -0
  40. package/dist/{dbCommand-DTLKAfbA.js → dbCommand-O8HA63s2.js} +552 -402
  41. package/dist/{dev-C_P8FLSx.js → dev-C7sFZq3m.js} +3670 -3169
  42. package/dist/dev-D2BikO7a.js +3 -0
  43. package/dist/devActivity-Dx_3nnGv.js +100 -0
  44. package/dist/devActivity.js +1 -1
  45. package/dist/dialectDriver-CgXnDfec.js +39 -0
  46. package/dist/discover-C9XKJDco.js +25 -0
  47. package/dist/doctorCommand-CM4Ch9C7.js +2 -0
  48. package/dist/{checkCommand-xGhRFFg2.js → doctorCommand-DnimF5IM.js} +523 -1278
  49. package/dist/dormancyCommand-QewYug_s.js +69 -0
  50. package/dist/e2eCmd-BRabZww-.js +147 -0
  51. package/dist/embeddingsCommand-BfiLS_QI.js +73 -0
  52. package/dist/envCommand-CCGPRQY1.js +60 -0
  53. package/dist/evalCommand-6RUfPen4.js +118 -0
  54. package/dist/evolveCommand-CHsLCtDf.js +281 -0
  55. package/dist/fileTaxonomy-CJfgOllU.js +457 -0
  56. package/dist/frameworkTableAssembly-YyVe32Cb.js +2 -0
  57. package/dist/frameworkTableAssembly-oMPBKqlE.js +511 -0
  58. package/dist/generateCommand-DbgcUpGw.js +147 -0
  59. package/dist/index.d.ts +45 -0
  60. package/dist/index.js +4 -3
  61. package/dist/infoCommand-DwOgK1t6.js +60 -0
  62. package/dist/{inspect-BUUjt773.js → inspect-CjTYzAs_.js} +113 -41
  63. package/dist/inspect-P4pxoMaV.js +2 -0
  64. package/dist/inspectCmd-EHFZ9yYu.js +224 -0
  65. package/dist/inspectFetch-EMuhTG_9.js +151 -0
  66. package/dist/inspectMetrics-CfdKLh6t.js +72 -0
  67. package/dist/loadEnv-D9nEOClM.js +44 -0
  68. package/dist/logFileSink-C_D2wRN1.js +105 -0
  69. package/dist/logsCmd-D36xK7Zu.js +260 -0
  70. package/dist/manifestBuild-COkJoyAr.js +2 -0
  71. package/dist/{manifestBuild-BLrVuSlM.js → manifestBuild-hpPLaGxV.js} +1 -1
  72. package/dist/metaCommands-7MJfZ5cf.js +196 -0
  73. package/dist/migrate-BV7I-ZHZ.js +83 -0
  74. package/dist/mssqlClusterPatch-_4cE_nun.js +44 -0
  75. package/dist/newCommand-COWOJ1_E.js +156 -0
  76. package/dist/nodeEnvironment-cGFAj1J8.js +28 -0
  77. package/dist/packageCommand-Cug_3Ogl.js +271 -0
  78. package/dist/pageConvention-cEiRxdab.js +5 -0
  79. package/dist/privacyCommand-C-Df56U_.js +146 -0
  80. package/dist/probeCommand-CZfaaUOZ.js +122 -0
  81. package/dist/projectScaffold-DmzEKHib.js +2 -0
  82. package/dist/projectScaffold-LMMtaavR.js +814 -0
  83. package/dist/renderModeScan-D7J1B7Kw.js +105 -0
  84. package/dist/renderProfile-1OWWAAtx.js +81 -0
  85. package/dist/runtimeRegistry-DMeKfTHP.js +81 -0
  86. package/dist/runtimeTrace-CH3eUiMw.js +91 -0
  87. package/dist/scheduleCmd-DQRu6BZC.js +149 -0
  88. package/dist/scheduleManifestCmd-D2x0CTTY.js +249 -0
  89. package/dist/schemaIr-UJybUUZW.js +103 -0
  90. package/dist/{sdkgen-C81QIkiL.js → sdkgen-BLkvGRfX.js} +111 -209
  91. package/dist/seedRunner-ZmLSqNe2.js +333 -0
  92. package/dist/serveCommand-CbDHU6l-.js +2 -0
  93. package/dist/serveCommand-iwlUBNS1.js +1766 -0
  94. package/dist/serveEntry.js +5 -5
  95. package/dist/serverlessCommand-CfJZy6dS.js +482 -0
  96. package/dist/start-BgN62boB.js +3 -0
  97. package/dist/start-T4VesWiM.js +1087 -0
  98. package/dist/startEntry.js +2 -2
  99. package/dist/staticCommand-Dr2M6tpU.js +304 -0
  100. package/dist/storageCommand-Co6NfLqN.js +42 -0
  101. package/dist/templates-De8IR5-c.js +102 -0
  102. package/dist/test-CI6iDsYc.js +115 -0
  103. package/dist/tracesCmd-DStmCJPi.js +232 -0
  104. package/dist/tsconfigPaths-BWXBWgcl.js +107 -0
  105. package/dist/tsxLoader-EuXmSJ1K.js +51 -0
  106. package/dist/typecheckCommand-BlsWiCNq.js +61 -0
  107. package/dist/updateCommand-BlMZhWgO.js +2 -0
  108. package/dist/updateCommand-x0pI_x-B.js +585 -0
  109. package/dist/webDev-BcykISYQ2.js +2 -0
  110. package/dist/{inspectMetrics-1xzTKAFx.js → webDev-Dybxew86.js} +988 -1560
  111. package/dist/webhookDiscovery-CrGAfhIG.js +2 -0
  112. package/dist/webhookDiscovery-D7VaeMlz.js +51 -0
  113. package/dist/webhooksCommand-DlAgS2Iw.js +267 -0
  114. package/dist/workflowsCmd-BGF-mRZ5.js +608 -0
  115. package/package.json +209 -17
  116. package/templates/AGENTS.core.md +58 -3
  117. package/templates/AGENTS.md +64 -7
  118. package/templates/agent-docs/_index.md +6 -4
  119. package/templates/agent-docs/_manifest.json +23 -6
  120. package/templates/agent-docs/ai.md +370 -0
  121. package/templates/agent-docs/authentication.md +313 -31
  122. package/templates/agent-docs/caching.md +6 -0
  123. package/templates/agent-docs/cli.md +853 -50
  124. package/templates/agent-docs/data.md +608 -12
  125. package/templates/agent-docs/database/migrations.md +223 -25
  126. package/templates/agent-docs/database/misc.md +156 -40
  127. package/templates/agent-docs/database/querying.md +19 -1
  128. package/templates/agent-docs/database/scaling.md +60 -0
  129. package/templates/agent-docs/database/schema.md +1 -0
  130. package/templates/agent-docs/database/seedsdialects.md +208 -19
  131. package/templates/agent-docs/database/transactions.md +68 -0
  132. package/templates/agent-docs/deployment.md +284 -25
  133. package/templates/agent-docs/introduction.md +88 -17
  134. package/templates/agent-docs/local-first-mobile.md +79 -4
  135. package/templates/agent-docs/multi-tenancy.md +188 -42
  136. package/templates/agent-docs/observability.md +58 -3
  137. package/templates/agent-docs/plugins/ai-flows.md +247 -2
  138. package/templates/agent-docs/plugins/analytics-postgres.md +1 -1
  139. package/templates/agent-docs/plugins/audit.md +37 -1
  140. package/templates/agent-docs/plugins/auth-social.md +143 -0
  141. package/templates/agent-docs/plugins/auth-workos.md +4 -2
  142. package/templates/agent-docs/plugins/auth.md +131 -6
  143. package/templates/agent-docs/plugins/billing.md +132 -15
  144. package/templates/agent-docs/plugins/cdc-out.md +46 -7
  145. package/templates/agent-docs/plugins/clickhouse.md +32 -1
  146. package/templates/agent-docs/plugins/duckdb.md +1 -1
  147. package/templates/agent-docs/plugins/flags.md +132 -0
  148. package/templates/agent-docs/plugins/governance.md +105 -7
  149. package/templates/agent-docs/plugins/multitenancy.md +9 -4
  150. package/templates/agent-docs/plugins/presence.md +13 -2
  151. package/templates/agent-docs/plugins/ratelimit.md +9 -0
  152. package/templates/agent-docs/plugins/search.md +162 -8
  153. package/templates/agent-docs/plugins/sso-saml.md +47 -8
  154. package/templates/agent-docs/plugins/storage.md +11 -0
  155. package/templates/agent-docs/plugins/webhooks.md +105 -0
  156. package/templates/agent-docs/plugins.md +152 -18
  157. package/templates/agent-docs/reference.md +60 -3
  158. package/templates/agent-docs/releases.md +1117 -0
  159. package/templates/agent-docs/routing.md +43 -25
  160. package/templates/agent-docs/scheduling.md +27 -0
  161. package/templates/agent-docs/schema-driven-ui.md +92 -12
  162. package/templates/agent-docs/security.md +426 -0
  163. package/templates/agent-docs/templates/apibackends.md +87 -18
  164. package/templates/agent-docs/templates/appshells.md +32 -14
  165. package/templates/agent-docs/templates/overview.md +13 -8
  166. package/templates/agent-docs/testing.md +211 -14
  167. package/templates/agent-docs/whats-new.md +98 -136
  168. package/templates/agent-docs/workflows.md +231 -14
  169. package/templates/apps/api-ai/actions/summarize.action.ts +11 -0
  170. package/templates/apps/api-ai/package.json +8 -7
  171. package/templates/apps/api-auth/actions/me.action.ts +13 -0
  172. package/templates/apps/api-auth/package.json +9 -8
  173. package/templates/apps/api-backend/mutations/notes.create.mutation.ts +9 -0
  174. package/templates/apps/api-backend/package.json +12 -8
  175. package/templates/apps/api-backend/queries/notes.query.ts +30 -8
  176. package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +14 -0
  177. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +8 -0
  178. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +10 -0
  179. package/templates/apps/api-backend-deactivation/package.json +8 -7
  180. package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +17 -0
  181. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +9 -0
  182. package/templates/apps/api-backend-mail/package.json +9 -8
  183. package/templates/apps/api-backend-mail/queries/notes.query.ts +30 -8
  184. package/templates/apps/api-backend-mariadb/.env.example +14 -0
  185. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +9 -0
  186. package/templates/apps/api-backend-mariadb/package.json +10 -9
  187. package/templates/apps/api-backend-mariadb/queries/notes.query.ts +30 -8
  188. package/templates/apps/api-backend-sqlite/.env.example +14 -0
  189. package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +9 -0
  190. package/templates/apps/api-backend-sqlite/package.json +9 -8
  191. package/templates/apps/api-backend-sqlite/queries/notes.query.ts +30 -8
  192. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +13 -0
  193. package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +12 -0
  194. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +9 -0
  195. package/templates/apps/api-backend-storage/package.json +9 -8
  196. package/templates/apps/api-backend-storage/queries/notes.query.ts +30 -8
  197. package/templates/apps/api-cms/actions/content.get.action.ts +7 -0
  198. package/templates/apps/api-cms/actions/content.types.action.ts +6 -0
  199. package/templates/apps/api-cms/actions/me.action.ts +13 -0
  200. package/templates/apps/api-cms/app.config.ts +19 -0
  201. package/templates/apps/api-cms/authz.ts +63 -0
  202. package/templates/apps/api-cms/mutations/content.publish.mutation.ts +10 -0
  203. package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +10 -0
  204. package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +5 -0
  205. package/templates/apps/api-cms/package.json +11 -10
  206. package/templates/apps/api-cms/queries/content.list.query.ts +23 -7
  207. package/templates/apps/api-cms/tests/accessDecisions.test.ts +121 -0
  208. package/templates/apps/api-cms/tests/content.descriptors.test.ts +8 -4
  209. package/templates/apps/api-collab/mutations/documents.create.mutation.ts +8 -0
  210. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +13 -0
  211. package/templates/apps/api-collab/package.json +9 -8
  212. package/templates/apps/api-collab/queries/documents.query.ts +19 -7
  213. package/templates/apps/api-data-advanced/package.json +9 -8
  214. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +12 -0
  215. package/templates/apps/api-data-advanced/queries/books.search.query.ts +9 -0
  216. package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +17 -0
  217. package/templates/apps/api-durable/mutations/orders.place.mutation.ts +9 -0
  218. package/templates/apps/api-durable/package.json +9 -8
  219. package/templates/apps/api-feature-flags/actions/notes.export.action.ts +16 -0
  220. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +12 -0
  221. package/templates/apps/api-feature-flags/package.json +10 -9
  222. package/templates/apps/api-governance/README.md +30 -8
  223. package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -1
  224. package/templates/apps/api-governance/actions/profiles.get.action.ts +29 -4
  225. package/templates/apps/api-governance/database/schema.ts +16 -4
  226. package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +12 -0
  227. package/templates/apps/api-governance/package.json +9 -8
  228. package/templates/apps/api-kv/actions/sync.pull.action.ts +15 -0
  229. package/templates/apps/api-kv/actions/sync.reset.action.ts +13 -0
  230. package/templates/apps/api-kv/actions/sync.status.action.ts +7 -0
  231. package/templates/apps/api-kv/package.json +9 -8
  232. package/templates/apps/api-kv/queries/events.list.query.ts +19 -8
  233. package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +11 -0
  234. package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +13 -0
  235. package/templates/apps/api-moderation/package.json +9 -8
  236. package/templates/apps/api-observability/mutations/notes.create.mutation.ts +8 -0
  237. package/templates/apps/api-observability/package.json +9 -8
  238. package/templates/apps/api-observability/queries/notes.list.query.ts +13 -0
  239. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +14 -0
  240. package/templates/apps/api-ratelimit/package.json +9 -8
  241. package/templates/apps/api-rbac/package.json +9 -8
  242. package/templates/apps/api-rest/package.json +8 -7
  243. package/templates/apps/api-saas/mutations/projects.create.mutation.ts +13 -0
  244. package/templates/apps/api-saas/package.json +12 -11
  245. package/templates/apps/api-saas/queries/projects.list.query.ts +11 -0
  246. package/templates/apps/api-saas-starter/actions/me.action.ts +13 -0
  247. package/templates/apps/api-saas-starter/app.config.ts +19 -0
  248. package/templates/apps/api-saas-starter/authz.ts +75 -0
  249. package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +10 -0
  250. package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +9 -0
  251. package/templates/apps/api-saas-starter/package.json +15 -11
  252. package/templates/apps/api-saas-starter/queries/invites.list.query.ts +19 -8
  253. package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -7
  254. package/templates/apps/api-saas-starter/tests/accessDecisions.test.ts +135 -0
  255. package/templates/apps/api-search/mutations/articles.create.mutation.ts +14 -0
  256. package/templates/apps/api-search/package.json +9 -8
  257. package/templates/apps/api-search/queries/articles.list.query.ts +21 -8
  258. package/templates/apps/api-status/README.md +10 -3
  259. package/templates/apps/api-status/app.config.ts +8 -3
  260. package/templates/apps/api-status/authz.ts +5 -3
  261. package/templates/apps/api-status/package.json +9 -8
  262. package/templates/apps/api-status/queries/components.list.query.ts +14 -6
  263. package/templates/apps/api-status/queries/incidents.live.query.ts +23 -10
  264. package/templates/apps/api-status/queries/updates.list.query.ts +16 -9
  265. package/templates/apps/api-status/tests/status.test.ts +9 -1
  266. package/templates/apps/api-versioning/actions/documents.asOf.action.ts +12 -0
  267. package/templates/apps/api-versioning/actions/documents.history.action.ts +13 -0
  268. package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +9 -0
  269. package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +12 -0
  270. package/templates/apps/api-versioning/package.json +9 -8
  271. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +16 -0
  272. package/templates/apps/api-webhooks/package.json +10 -9
  273. package/templates/apps/api-webhooks/queries/orders.list.query.ts +10 -0
  274. package/templates/apps/changelog/package.json +8 -6
  275. package/templates/apps/edge-functions/package.json +2 -2
  276. package/templates/apps/frontend-admin/package.json +10 -8
  277. package/templates/apps/frontend-admin/src/lib/admin.ts +20 -9
  278. package/templates/apps/frontend-admin/src/locales/de.ts +11 -1
  279. package/templates/apps/frontend-admin/src/locales/en.ts +13 -1
  280. package/templates/apps/frontend-admin/src/pages/admin/[entity]/page.tsx +65 -22
  281. package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +130 -23
  282. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +3 -2
  283. package/templates/apps/frontend-admin/src/pages/admin/page.test.tsx +19 -2
  284. package/templates/apps/frontend-admin/src/pages/admin/page.tsx +9 -4
  285. package/templates/apps/frontend-app/app.config.ts +4 -3
  286. package/templates/apps/frontend-app/package.json +11 -8
  287. package/templates/apps/frontend-app/src/lib/api.ts +25 -0
  288. package/templates/apps/frontend-app/src/pages/page.test.tsx +130 -82
  289. package/templates/apps/frontend-app/src/pages/page.tsx +14 -18
  290. package/templates/apps/frontend-auth/package.json +10 -8
  291. package/templates/apps/frontend-blank/package.json +9 -7
  292. package/templates/apps/frontend-cms/package.json +11 -9
  293. package/templates/apps/frontend-collab/package.json +12 -9
  294. package/templates/apps/frontend-collab/src/pages/page.test.tsx +122 -78
  295. package/templates/apps/frontend-contact/package.json +9 -7
  296. package/templates/apps/frontend-dashboard/package.json +9 -7
  297. package/templates/apps/frontend-docs/package.json +9 -7
  298. package/templates/apps/frontend-i18n/package.json +8 -6
  299. package/templates/apps/frontend-landing/package.json +9 -7
  300. package/templates/apps/frontend-portal/package.json +10 -8
  301. package/templates/apps/frontend-saas/app.config.ts +10 -6
  302. package/templates/apps/frontend-saas/package.json +10 -8
  303. package/templates/apps/frontend-saas/src/lib/api.ts +27 -32
  304. package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +7 -8
  305. package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +27 -3
  306. package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +4 -4
  307. package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +3 -4
  308. package/templates/apps/frontend-spa/package.json +9 -7
  309. package/templates/apps/frontend-ssr/package.json +9 -7
  310. package/templates/apps/frontend-ssr-api/package.json +10 -8
  311. package/templates/apps/frontend-static-blog/package.json +8 -6
  312. package/templates/apps/frontend-status/package.json +10 -8
  313. package/templates/apps/mobile-app/README.md +1 -0
  314. package/templates/apps/mobile-app/package.json +4 -2
  315. package/templates/apps/mobile-app/src/app/index.tsx +22 -12
  316. package/templates/apps/mobile-app/src/app/orders/[id].tsx +1 -1
  317. package/templates/apps/mobile-app/src/lib/api.ts +34 -0
  318. package/templates/apps/mobile-app/voltro.mobile.ts +4 -2
  319. package/templates/baselines/bare/.env.example +14 -0
  320. package/templates/baselines/bare/baseline.json +4 -4
  321. package/templates/baselines/compose/.env.example +14 -0
  322. package/templates/baselines/compose/README.md +1 -1
  323. package/templates/baselines/compose/baseline.json +5 -5
  324. package/templates/baselines/compose-mariadb/.env.example +14 -0
  325. package/templates/baselines/compose-mariadb/README.md +1 -1
  326. package/templates/baselines/compose-mariadb/baseline.json +5 -5
  327. package/templates/baselines/helm/.env.example +14 -0
  328. package/templates/baselines/helm/baseline.json +4 -4
  329. package/dist/apiBuild-C-x9YacA.js +0 -2
  330. package/dist/appGraph-CvQCte0z.js +0 -2
  331. package/dist/checkCommand-DRovTKza.js +0 -2
  332. package/dist/commands-CJfepbm4.js +0 -11541
  333. package/dist/dbCommand-b1gum4td.js +0 -2
  334. package/dist/dev-iiMtlkfs.js +0 -3
  335. package/dist/devActivity-BhIu6ncs.js +0 -159
  336. package/dist/frameworkTableAssembly-BwIrO5nv.js +0 -638
  337. package/dist/frameworkTableAssembly-D-EebUQX.js +0 -2
  338. package/dist/inspect-mmBuRXmy.js +0 -2
  339. package/dist/manifestBuild-Dj8Jjoto.js +0 -2
  340. package/dist/seedRunner-Bqxgp7HZ.js +0 -230
  341. package/dist/serveCommand-DdaM4Hup.js +0 -1608
  342. package/dist/start-C0koT0UO.js +0 -1084
  343. /package/templates/apps/api-ai/actions/{summarize.action.server.tsx → summarize.action.server.ts} +0 -0
@@ -1,161 +1,63 @@
1
- import { t as e } from "./cliRuntime-Oh517vCV.js";
2
- import { dirname as t, isAbsolute as n, join as r } from "node:path";
3
- import { Effect as i } from "effect";
4
- import { createLogger as a } from "@voltro/logger";
5
- import { promises as o } from "node:fs";
6
- //#region src/sdkgen/schemaIr.ts
7
- var s = () => ({
8
- models: /* @__PURE__ */ new Map(),
9
- enums: /* @__PURE__ */ new Map(),
10
- inProgress: /* @__PURE__ */ new Set()
11
- }), c = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(/[^A-Za-z0-9]+/).filter((e) => e.length > 0), l = (e) => {
12
- let t = c(e);
13
- if (t.length === 0) return "Value";
14
- let n = t.map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("");
15
- return /^[0-9]/.test(n) ? `T${n}` : n;
16
- }, u = (e) => {
17
- let t = l(e);
18
- return t.charAt(0).toLowerCase() + t.slice(1);
19
- }, d = (e) => {
20
- let t = c(e);
21
- if (t.length === 0) return "VALUE";
22
- let n = t.map((e) => e.toUpperCase()).join("_");
23
- return /^[0-9]/.test(n) ? `V_${n}` : n;
24
- }, f = (e) => typeof e == "object" && !!e && e.type === "null", p = (e) => l(e.split("/").pop() ?? e), m = (e) => e.every((e) => typeof e == "string"), h = (e, t, n) => (e.enums.has(t) || e.enums.set(t, {
25
- name: t,
26
- values: n
27
- }), {
28
- kind: "ref",
29
- name: t
30
- }), g = (e, t, n, r) => {
31
- let i = e.$ref;
32
- if (typeof i == "string") {
33
- let e = p(i);
34
- if (r.models.has(e) || r.enums.has(e) || r.inProgress.has(e)) return {
35
- kind: "ref",
36
- name: e
37
- };
38
- let t = n[i.split("/").pop() ?? ""];
39
- if (t === void 0) return { kind: "unknown" };
40
- r.inProgress.add(e);
41
- let a = g(t, e, n, r);
42
- return r.inProgress.delete(e), a;
43
- }
44
- let a = e.type;
45
- if (Array.isArray(a)) {
46
- let i = a.filter((e) => e !== "null"), o = a.includes("null"), s = g({
47
- ...e,
48
- ...i.length === 1 ? { type: i[0] } : { type: void 0 }
49
- }, t, n, r);
50
- return o ? {
51
- kind: "optional",
52
- inner: s
53
- } : s;
54
- }
55
- let o = e.anyOf ?? e.oneOf;
56
- if (Array.isArray(o)) {
57
- let e = o.filter(f), i = o.filter((e) => !f(e));
58
- if (i.length === 1 && i[0] !== void 0) {
59
- let a = g(i[0], t, n, r);
60
- return e.length > 0 ? {
61
- kind: "optional",
62
- inner: a
63
- } : a;
64
- }
65
- return { kind: "unknown" };
66
- }
67
- let s = e.enum;
68
- if (Array.isArray(s) && s.length > 0 && m(s)) return h(r, t, [...s]);
69
- switch (a) {
70
- case "string": return { kind: "string" };
71
- case "integer": return { kind: "integer" };
72
- case "number": return { kind: "number" };
73
- case "boolean": return { kind: "boolean" };
74
- case "array": {
75
- let i = e.items;
76
- return {
77
- kind: "array",
78
- element: i !== void 0 && typeof i == "object" && !Array.isArray(i) ? g(i, `${t}Item`, n, r) : { kind: "unknown" }
79
- };
80
- }
81
- case "object": {
82
- let i = e.properties;
83
- if (i === void 0 || Object.keys(i).length === 0) return { kind: "unknown" };
84
- let a = new Set(Array.isArray(e.required) ? e.required : []);
85
- r.inProgress.add(t);
86
- let o = Object.entries(i).map(([e, i]) => {
87
- let o = g(i, `${t}${l(e)}`, n, r);
88
- return {
89
- jsonName: e,
90
- type: !a.has(e) && o.kind !== "optional" ? {
91
- kind: "optional",
92
- inner: o
93
- } : o
94
- };
95
- });
96
- return r.inProgress.delete(t), r.models.set(t, {
97
- name: t,
98
- fields: o
99
- }), {
100
- kind: "ref",
101
- name: t
102
- };
103
- }
104
- default: return { kind: "unknown" };
105
- }
106
- }, _ = (e, t, n) => e === void 0 ? void 0 : g(e, t, e.$defs ?? e.definitions ?? {}, n), v = (e, t) => e.name.localeCompare(t.name), y = (e) => {
107
- let t = s();
1
+ import { t as e } from "./cliRuntime-Dh7UDinH.js";
2
+ import { a as t, i as n, n as r, r as i, t as a } from "./schemaIr-UJybUUZW.js";
3
+ import { dirname as o, isAbsolute as s, join as c } from "node:path";
4
+ import { promises as l } from "node:fs";
5
+ import { createLogger as u } from "@voltro/logger";
6
+ import { Effect as d } from "effect";
7
+ //#region src/sdkgen/manifestModel.ts
8
+ var f = (e, t) => e.name.localeCompare(t.name), p = (e) => {
9
+ let t = r();
108
10
  return {
109
11
  procedures: [...e.procedures].sort((e, t) => e.tag.localeCompare(t.tag)).map((e) => {
110
- let n = l(e.tag);
12
+ let r = i(e.tag);
111
13
  return {
112
14
  tag: e.tag,
113
15
  kind: e.kind,
114
- methodName: u(e.tag),
115
- input: _(e.input, `${n}Input`, t),
116
- output: _(e.output, `${n}Output`, t)
16
+ methodName: a(e.tag),
17
+ input: n(e.input, `${r}Input`, t),
18
+ output: n(e.output, `${r}Output`, t)
117
19
  };
118
20
  }),
119
- models: [...t.models.values()].sort(v),
120
- enums: [...t.enums.values()].sort(v)
21
+ models: [...t.models.values()].sort(f),
22
+ enums: [...t.enums.values()].sort(f)
121
23
  };
122
- }, b = /^[A-Za-z_][A-Za-z0-9_]*$/, x = /* @__PURE__ */ new Set(/* @__PURE__ */ "associatedtype.class.deinit.enum.extension.fileprivate.func.import.init.inout.internal.let.open.operator.private.protocol.public.rethrows.static.struct.subscript.typealias.var.break.case.continue.default.defer.do.else.fallthrough.for.guard.if.in.repeat.return.switch.where.while.as.catch.false.is.nil.super.self.Self.throw.throws.true.try.Type.Protocol".split(".")), S = /* @__PURE__ */ new Set(/* @__PURE__ */ "as.break.class.continue.do.else.false.for.fun.if.in.interface.is.null.object.package.return.super.this.throw.true.try.typealias.typeof.val.var.when.while".split(".")), C = (e, t) => {
123
- if (b.test(e)) return t.has(e) ? {
24
+ }, m = /^[A-Za-z_][A-Za-z0-9_]*$/, h = /* @__PURE__ */ new Set(/* @__PURE__ */ "associatedtype.class.deinit.enum.extension.fileprivate.func.import.init.inout.internal.let.open.operator.private.protocol.public.rethrows.static.struct.subscript.typealias.var.break.case.continue.default.defer.do.else.fallthrough.for.guard.if.in.repeat.return.switch.where.while.as.catch.false.is.nil.super.self.Self.throw.throws.true.try.Type.Protocol".split(".")), g = /* @__PURE__ */ new Set(/* @__PURE__ */ "as.break.class.continue.do.else.false.for.fun.if.in.interface.is.null.object.package.return.super.this.throw.true.try.typealias.typeof.val.var.when.while".split(".")), _ = (e, t) => {
25
+ if (m.test(e)) return t.has(e) ? {
124
26
  ident: `\`${e}\``,
125
27
  needsAlias: !1
126
28
  } : {
127
29
  ident: e,
128
30
  needsAlias: !1
129
31
  };
130
- let n = u(e);
32
+ let n = a(e);
131
33
  return {
132
- ident: b.test(n) ? n : `field_${n.replace(/[^A-Za-z0-9_]/g, "")}`,
34
+ ident: m.test(n) ? n : `field_${n.replace(/[^A-Za-z0-9_]/g, "")}`,
133
35
  needsAlias: !0
134
36
  };
135
- }, w = (e) => C(e, x), ee = (e) => C(e, S), T = "// Generated by `voltro build api --target kotlin`. Do not edit by hand.", E = (e) => {
37
+ }, v = (e) => _(e, h), y = (e) => _(e, g), b = "// Generated by `voltro build api --target kotlin`. Do not edit by hand.", x = (e) => {
136
38
  switch (e.kind) {
137
39
  case "string": return "String";
138
40
  case "integer": return "Int";
139
41
  case "number": return "Double";
140
42
  case "boolean": return "Boolean";
141
43
  case "unknown": return "JsonElement";
142
- case "array": return `List<${E(e.element)}>`;
143
- case "optional": return `${E(e.inner)}?`;
44
+ case "array": return `List<${x(e.element)}>`;
45
+ case "optional": return `${x(e.inner)}?`;
144
46
  case "ref": return e.name;
145
47
  }
146
- }, D = (e) => e.kind === "optional", O = (e) => {
48
+ }, S = (e) => e.kind === "optional", C = (e) => {
147
49
  if (e.fields.length === 0) return `@Serializable\npublic class ${e.name}`;
148
50
  let t = ["@Serializable", `public data class ${e.name}(`];
149
51
  for (let n of e.fields) {
150
- let e = ee(n.jsonName), r = e.needsAlias ? `@SerialName(${JSON.stringify(n.jsonName)}) ` : "", i = D(n.type) ? " = null" : "";
151
- t.push(` ${r}val ${e.ident}: ${E(n.type)}${i},`);
52
+ let e = y(n.jsonName), r = e.needsAlias ? `@SerialName(${JSON.stringify(n.jsonName)}) ` : "", i = S(n.type) ? " = null" : "";
53
+ t.push(` ${r}val ${e.ident}: ${x(n.type)}${i},`);
152
54
  }
153
55
  return t.push(")"), t.join("\n");
154
- }, k = (e) => {
155
- let t = ["@Serializable", `public enum class ${e.name} {`];
156
- for (let n of e.values) t.push(` @SerialName(${JSON.stringify(n)}) ${d(n)},`);
157
- return t.push("}"), t.join("\n");
158
- }, A = (e) => e.output ? E(e.output) : "JsonElement", j = (e, t) => {
56
+ }, w = (e) => {
57
+ let n = ["@Serializable", `public enum class ${e.name} {`];
58
+ for (let r of e.values) n.push(` @SerialName(${JSON.stringify(r)}) ${t(r)},`);
59
+ return n.push("}"), n.join("\n");
60
+ }, T = (e) => e.output ? x(e.output) : "JsonElement", E = (e, t) => {
159
61
  let n = t.filter((e) => e.kind !== "stream"), r = [
160
62
  "/** One-shot RPC client (query / mutation / action) over HTTP. */",
161
63
  `public class ${e}(`,
@@ -165,11 +67,11 @@ var s = () => ({
165
67
  ") {"
166
68
  ];
167
69
  for (let e of n) {
168
- let t = A(e);
169
- e.input === void 0 ? r.push("", ` /** \`${e.tag}\` (${e.kind}) */`, ` public suspend fun ${e.methodName}(): ${t} =`, ` transport.call(baseUrl, auth, ${JSON.stringify(e.tag)}, EmptyPayload)`) : r.push("", ` /** \`${e.tag}\` (${e.kind}) */`, ` public suspend fun ${e.methodName}(input: ${E(e.input)}): ${t} =`, ` transport.call(baseUrl, auth, ${JSON.stringify(e.tag)}, input)`);
70
+ let t = T(e);
71
+ e.input === void 0 ? r.push("", ` /** \`${e.tag}\` (${e.kind}) */`, ` public suspend fun ${e.methodName}(): ${t} =`, ` transport.call(baseUrl, auth, ${JSON.stringify(e.tag)}, EmptyPayload)`) : r.push("", ` /** \`${e.tag}\` (${e.kind}) */`, ` public suspend fun ${e.methodName}(input: ${x(e.input)}): ${t} =`, ` transport.call(baseUrl, auth, ${JSON.stringify(e.tag)}, input)`);
170
72
  }
171
73
  return r.push("}"), r.join("\n");
172
- }, M = (e, t) => {
74
+ }, D = (e, t) => {
173
75
  let n = t.filter((e) => e.kind === "stream"), r = [
174
76
  "/** Reactive subscription client over WebSocket — one Flow per server-push procedure. */",
175
77
  `public class ${e}(`,
@@ -179,11 +81,11 @@ var s = () => ({
179
81
  ") {"
180
82
  ];
181
83
  for (let e of n) {
182
- let t = A(e);
183
- e.input === void 0 ? r.push("", ` /** \`${e.tag}\` (stream) */`, ` public fun ${e.methodName}(): Flow<${t}> =`, ` transport.subscribe(socketUrl, auth, ${JSON.stringify(e.tag)}, EmptyPayload)`) : r.push("", ` /** \`${e.tag}\` (stream) */`, ` public fun ${e.methodName}(input: ${E(e.input)}): Flow<${t}> =`, ` transport.subscribe(socketUrl, auth, ${JSON.stringify(e.tag)}, input)`);
84
+ let t = T(e);
85
+ e.input === void 0 ? r.push("", ` /** \`${e.tag}\` (stream) */`, ` public fun ${e.methodName}(): Flow<${t}> =`, ` transport.subscribe(socketUrl, auth, ${JSON.stringify(e.tag)}, EmptyPayload)`) : r.push("", ` /** \`${e.tag}\` (stream) */`, ` public fun ${e.methodName}(input: ${x(e.input)}): Flow<${t}> =`, ` transport.subscribe(socketUrl, auth, ${JSON.stringify(e.tag)}, input)`);
184
86
  }
185
87
  return r.push("}"), r.join("\n");
186
- }, N = (e) => `${T}
88
+ }, O = (e) => `${b}
187
89
  package ${e}
188
90
 
189
91
  /**
@@ -200,7 +102,7 @@ public data class AuthContext(
200
102
  tenant?.let { add("x-tenant" to it) }
201
103
  }
202
104
  }
203
- `, P = (e) => `${T}
105
+ `, k = (e) => `${b}
204
106
  package ${e}
205
107
 
206
108
  import kotlinx.serialization.SerialName
@@ -221,7 +123,7 @@ public data class PushRegistration(
221
123
  val locale: String? = null,
222
124
  val timezone: String? = null,
223
125
  )
224
- `, F = (e) => `${T}
126
+ `, A = (e) => `${b}
225
127
  package ${e}
226
128
 
227
129
  import io.ktor.client.HttpClient
@@ -320,7 +222,7 @@ internal expect fun randomId(): String
320
222
 
321
223
  /** A raw JSON value, for schemas with no faithful static type. */
322
224
  public typealias AnyJson = JsonElement
323
- `, I = (e) => `// ${T.replace("// ", "")}
225
+ `, j = (e) => `// ${b.replace("// ", "")}
324
226
  plugins {
325
227
  kotlin("multiplatform") version "2.0.20"
326
228
  kotlin("plugin.serialization") version "2.0.20"
@@ -349,85 +251,85 @@ kotlin {
349
251
  }
350
252
 
351
253
  // Generated Kotlin Multiplatform module: ${e}
352
- `, L = (e, t, n) => {
353
- let r = `src/commonMain/kotlin/${n.replace(/\./g, "/")}`, i = [...e.enums.map(k), ...e.models.map(O)].join("\n\n");
254
+ `, M = (e, t, n) => {
255
+ let r = `src/commonMain/kotlin/${n.replace(/\./g, "/")}`, i = [...e.enums.map(w), ...e.models.map(C)].join("\n\n");
354
256
  return [
355
257
  {
356
258
  path: "build.gradle.kts",
357
- content: I(t)
259
+ content: j(t)
358
260
  },
359
261
  {
360
262
  path: `${r}/Models.kt`,
361
- content: `${T}\npackage ${n}\n\nimport kotlinx.serialization.SerialName
263
+ content: `${b}\npackage ${n}\n\nimport kotlinx.serialization.SerialName
362
264
  import kotlinx.serialization.Serializable
363
265
  import kotlinx.serialization.json.JsonElement\n\n${i}${i ? "\n" : ""}`
364
266
  },
365
267
  {
366
268
  path: `${r}/Client.kt`,
367
- content: `${T}\npackage ${n}\n\nimport kotlinx.serialization.json.JsonElement\n\n${j(`${t}Client`, e.procedures)}\n`
269
+ content: `${b}\npackage ${n}\n\nimport kotlinx.serialization.json.JsonElement\n\n${E(`${t}Client`, e.procedures)}\n`
368
270
  },
369
271
  {
370
272
  path: `${r}/Subscriptions.kt`,
371
- content: `${T}\npackage ${n}\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.serialization.json.JsonElement\n\n${M(`${t}Subscriptions`, e.procedures)}\n`
273
+ content: `${b}\npackage ${n}\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.serialization.json.JsonElement\n\n${D(`${t}Subscriptions`, e.procedures)}\n`
372
274
  },
373
275
  {
374
276
  path: `${r}/Auth.kt`,
375
- content: N(n)
277
+ content: O(n)
376
278
  },
377
279
  {
378
280
  path: `${r}/Push.kt`,
379
- content: P(n)
281
+ content: k(n)
380
282
  },
381
283
  {
382
284
  path: `${r}/RpcTransport.kt`,
383
- content: F(n)
285
+ content: A(n)
384
286
  }
385
287
  ];
386
- }, R = (e) => {
288
+ }, N = (e) => {
387
289
  switch (e.kind) {
388
290
  case "string": return "String";
389
291
  case "integer": return "Int";
390
292
  case "number": return "Double";
391
293
  case "boolean": return "Bool";
392
294
  case "unknown": return "AnyCodable";
393
- case "array": return `[${R(e.element)}]`;
394
- case "optional": return `${R(e.inner)}?`;
295
+ case "array": return `[${N(e.element)}]`;
296
+ case "optional": return `${N(e.inner)}?`;
395
297
  case "ref": return e.name;
396
298
  }
397
- }, z = (e) => e.kind === "optional", B = (e) => {
299
+ }, P = (e) => e.kind === "optional", F = (e) => {
398
300
  let t = [`public struct ${e.name}: Codable, Equatable, Sendable {`], n = e.fields.map((e) => ({
399
301
  field: e,
400
- id: w(e.jsonName)
302
+ id: v(e.jsonName)
401
303
  }));
402
- for (let { field: e, id: r } of n) t.push(` public var ${r.ident}: ${R(e.type)}`);
304
+ for (let { field: e, id: r } of n) t.push(` public var ${r.ident}: ${N(e.type)}`);
403
305
  if (n.some(({ id: e }) => e.needsAlias)) {
404
306
  t.push("", " enum CodingKeys: String, CodingKey {");
405
307
  for (let { field: e, id: r } of n) t.push(r.needsAlias ? ` case ${r.ident} = ${JSON.stringify(e.jsonName)}` : ` case ${r.ident}`);
406
308
  t.push(" }");
407
309
  }
408
- let r = n.map(({ field: e, id: t }) => z(e.type) ? `${t.ident}: ${R(e.type)} = nil` : `${t.ident}: ${R(e.type)}`);
310
+ let r = n.map(({ field: e, id: t }) => P(e.type) ? `${t.ident}: ${N(e.type)} = nil` : `${t.ident}: ${N(e.type)}`);
409
311
  t.push("", ` public init(${r.join(", ")}) {`);
410
312
  for (let { id: e } of n) t.push(` self.${e.ident} = ${e.ident}`);
411
313
  return t.push(" }", "}"), t.join("\n");
412
- }, te = (e) => {
314
+ }, I = (e) => {
413
315
  let t = [`public enum ${e.name}: String, Codable, Sendable {`];
414
316
  for (let n of e.values) {
415
- let e = w(n).ident;
317
+ let e = v(n).ident;
416
318
  t.push(e === n ? ` case ${e}` : ` case ${e} = ${JSON.stringify(n)}`);
417
319
  }
418
320
  return t.push("}"), t.join("\n");
419
- }, V = (e) => {
420
- let t = e.output ? R(e.output) : "AnyCodable";
321
+ }, L = (e) => {
322
+ let t = e.output ? N(e.output) : "AnyCodable";
421
323
  return e.input === void 0 ? {
422
324
  signature: "()",
423
325
  payload: "EmptyPayload()",
424
326
  returns: t
425
327
  } : {
426
- signature: `(_ input: ${R(e.input)})`,
328
+ signature: `(_ input: ${N(e.input)})`,
427
329
  payload: "input",
428
330
  returns: t
429
331
  };
430
- }, H = (e, t) => {
332
+ }, R = (e, t) => {
431
333
  let n = t.filter((e) => e.kind !== "stream"), r = [
432
334
  "/// One-shot RPC client (query / mutation / action) over HTTP.",
433
335
  `public struct ${e}: Sendable {`,
@@ -442,11 +344,11 @@ import kotlinx.serialization.json.JsonElement\n\n${i}${i ? "\n" : ""}`
442
344
  " }"
443
345
  ];
444
346
  for (let e of n) {
445
- let { signature: t, payload: n, returns: i } = V(e);
347
+ let { signature: t, payload: n, returns: i } = L(e);
446
348
  r.push("", ` /// \`${e.tag}\` (${e.kind})`, ` public func ${e.methodName}${t} async throws -> ${i} {`, ` try await transport.call(baseURL: baseURL, auth: auth, tag: ${JSON.stringify(e.tag)}, payload: ${n})`, " }");
447
349
  }
448
350
  return r.push("}"), r.join("\n");
449
- }, U = (e, t) => {
351
+ }, ee = (e, t) => {
450
352
  let n = t.filter((e) => e.kind === "stream"), r = [
451
353
  "/// Reactive subscription client over WebSocket. Each method opens a stream",
452
354
  "/// for one server-push procedure and yields decoded values as they arrive.",
@@ -462,11 +364,11 @@ import kotlinx.serialization.json.JsonElement\n\n${i}${i ? "\n" : ""}`
462
364
  " }"
463
365
  ];
464
366
  for (let e of n) {
465
- let t = e.output ? R(e.output) : "AnyCodable", { signature: n, payload: i } = V(e);
367
+ let t = e.output ? N(e.output) : "AnyCodable", { signature: n, payload: i } = L(e);
466
368
  r.push("", ` /// \`${e.tag}\` (stream)`, ` public func ${e.methodName}${n} -> AsyncThrowingStream<${t}, Error> {`, ` transport.subscribe(socketURL: socketURL, auth: auth, tag: ${JSON.stringify(e.tag)}, payload: ${i})`, " }");
467
369
  }
468
370
  return r.push("}"), r.join("\n");
469
- }, W = "import Foundation\n\n/// Authentication + tenant context carried on every request. The bearer token\n/// and tenant id are injected as request headers by the transport.\npublic struct AuthContext: Sendable {\n public var token: String?\n public var tenant: String?\n\n public init(token: String? = nil, tenant: String? = nil) {\n self.token = token\n self.tenant = tenant\n }\n\n /// The header pairs this context contributes. Empty when unauthenticated.\n public func headers() -> [(String, String)] {\n var out: [(String, String)] = []\n if let token = token { out.append((\"authorization\", \"Bearer \\(token)\")) }\n if let tenant = tenant { out.append((\"x-tenant\", tenant)) }\n return out\n }\n}\n", G = "import Foundation\n\n/// Device registration for push notifications.\n///\n/// STUB — this registers the device TOKEN with the app's `registerDevice`\n/// procedure (the storage side). The SENDER (APNs / FCM) is deliberately NOT\n/// part of the generated SDK: it needs per-tenant Apple Developer / Firebase\n/// credentials managed by provider provisioning, which is server infrastructure,\n/// not client code. Wire this to your app's registerDevice mutation.\npublic struct PushRegistration: Codable, Equatable, Sendable {\n public var deviceToken: String\n public var platform: String\n public var locale: String?\n public var timezone: String?\n\n public init(deviceToken: String, platform: String = \"ios\", locale: String? = nil, timezone: String? = nil) {\n self.deviceToken = deviceToken\n self.platform = platform\n self.locale = locale\n self.timezone = timezone\n }\n}\n\npublic extension AuthContext {\n /// Convenience: build a registration payload after the OS issues a token.\n static func pushRegistration(deviceToken: String, platform: String = \"ios\") -> PushRegistration {\n PushRegistration(deviceToken: deviceToken, platform: platform)\n }\n}\n", K = "import Foundation\n\n/// The RPC request envelope sent to the api's `/rpc` endpoint. Mirrors the\n/// wire shape `{ _tag: \"Request\", id, tag, payload, headers }`.\nstruct RpcRequest<Payload: Encodable>: Encodable {\n let _tag = \"Request\"\n let id: String\n let tag: String\n let payload: Payload\n let headers: [String: String]\n}\n\n/// An empty payload for no-argument procedures.\nstruct EmptyPayload: Encodable {}\n\n/// A dynamic JSON value for schemas with no faithful static type.\npublic struct AnyCodable: Codable, Equatable, Sendable {\n public let value: Data\n public init(from decoder: Decoder) throws {\n let container = try decoder.singleValueContainer()\n if let raw = try? container.decode(AnyCodableRaw.self) {\n self.value = raw.data\n } else {\n self.value = Data()\n }\n }\n public func encode(to encoder: Encoder) throws {\n var container = encoder.singleValueContainer()\n try container.encode(AnyCodableRaw(data: value))\n }\n}\n\nstruct AnyCodableRaw: Codable {\n let data: Data\n init(data: Data) { self.data = data }\n init(from decoder: Decoder) throws {\n let container = try decoder.singleValueContainer()\n let json = try container.decode(JSONValue.self)\n self.data = try JSONEncoder().encode(json)\n }\n func encode(to encoder: Encoder) throws {\n var container = encoder.singleValueContainer()\n try container.encode(try JSONDecoder().decode(JSONValue.self, from: data))\n }\n}\n\nindirect enum JSONValue: Codable {\n case null\n case bool(Bool)\n case number(Double)\n case string(String)\n case array([JSONValue])\n case object([String: JSONValue])\n init(from decoder: Decoder) throws {\n let c = try decoder.singleValueContainer()\n if c.decodeNil() { self = .null }\n else if let b = try? c.decode(Bool.self) { self = .bool(b) }\n else if let n = try? c.decode(Double.self) { self = .number(n) }\n else if let s = try? c.decode(String.self) { self = .string(s) }\n else if let a = try? c.decode([JSONValue].self) { self = .array(a) }\n else if let o = try? c.decode([String: JSONValue].self) { self = .object(o) }\n else { self = .null }\n }\n func encode(to encoder: Encoder) throws {\n var c = encoder.singleValueContainer()\n switch self {\n case .null: try c.encodeNil()\n case .bool(let b): try c.encode(b)\n case .number(let n): try c.encode(n)\n case .string(let s): try c.encode(s)\n case .array(let a): try c.encode(a)\n case .object(let o): try c.encode(o)\n }\n }\n}\n\npublic enum RpcError: Error {\n case http(status: Int, body: Data)\n case decoding(Error)\n case transport(Error)\n}\n\n/// HTTP transport for one-shot calls.\n///\n/// NOTE — the exact @effect/rpc response FRAMING (success/failure envelope over\n/// HTTP) is the one seam that must be validated against a live server; this\n/// decodes the success value from the response body and surfaces non-2xx as\n/// `RpcError.http`. Correct type mapping + one method per procedure is what the\n/// generator guarantees; the wire framing is the cross-language integration step.\nstruct RpcTransport: Sendable {\n let session: URLSession\n\n func call<Payload: Encodable, Result: Decodable>(\n baseURL: URL, auth: AuthContext, tag: String, payload: Payload\n ) async throws -> Result {\n var request = URLRequest(url: baseURL.appendingPathComponent(\"rpc\"))\n request.httpMethod = \"POST\"\n request.setValue(\"application/json\", forHTTPHeaderField: \"content-type\")\n for (k, v) in auth.headers() { request.setValue(v, forHTTPHeaderField: k) }\n let envelope = RpcRequest(id: UUID().uuidString, tag: tag, payload: payload, headers: [:])\n request.httpBody = try JSONEncoder().encode(envelope)\n let (data, response): (Data, URLResponse)\n do { (data, response) = try await session.data(for: request) }\n catch { throw RpcError.transport(error) }\n if let http = response as? HTTPURLResponse, !(200...299).contains(http.statusCode) {\n throw RpcError.http(status: http.statusCode, body: data)\n }\n do { return try JSONDecoder().decode(Result.self, from: data) }\n catch { throw RpcError.decoding(error) }\n }\n}\n\n/// WebSocket transport for reactive subscriptions.\nstruct SocketTransport: Sendable {\n let session: URLSession\n\n func subscribe<Payload: Encodable, Value: Decodable>(\n socketURL: URL, auth: AuthContext, tag: String, payload: Payload\n ) -> AsyncThrowingStream<Value, Error> {\n AsyncThrowingStream { continuation in\n let task = session.webSocketTask(with: socketURL)\n task.resume()\n let envelope = RpcRequest(id: UUID().uuidString, tag: tag, payload: payload, headers: [:])\n if let frame = try? JSONEncoder().encode(envelope), let text = String(data: frame, encoding: .utf8) {\n task.send(.string(text)) { _ in }\n }\n func receive() {\n task.receive { result in\n switch result {\n case .failure(let error):\n continuation.finish(throwing: error)\n case .success(let message):\n let data: Data?\n switch message {\n case .string(let s): data = s.data(using: .utf8)\n case .data(let d): data = d\n @unknown default: data = nil\n }\n if let data = data, let value = try? JSONDecoder().decode(Value.self, from: data) {\n continuation.yield(value)\n }\n receive()\n }\n }\n }\n receive()\n continuation.onTermination = { _ in task.cancel(with: .goingAway, reason: nil) }\n }\n }\n}\n", q = (e) => `// swift-tools-version:5.9
371
+ }, z = "import Foundation\n\n/// Authentication + tenant context carried on every request. The bearer token\n/// and tenant id are injected as request headers by the transport.\npublic struct AuthContext: Sendable {\n public var token: String?\n public var tenant: String?\n\n public init(token: String? = nil, tenant: String? = nil) {\n self.token = token\n self.tenant = tenant\n }\n\n /// The header pairs this context contributes. Empty when unauthenticated.\n public func headers() -> [(String, String)] {\n var out: [(String, String)] = []\n if let token = token { out.append((\"authorization\", \"Bearer \\(token)\")) }\n if let tenant = tenant { out.append((\"x-tenant\", tenant)) }\n return out\n }\n}\n", B = "import Foundation\n\n/// Device registration for push notifications.\n///\n/// STUB — this registers the device TOKEN with the app's `registerDevice`\n/// procedure (the storage side). The SENDER (APNs / FCM) is deliberately NOT\n/// part of the generated SDK: it needs per-tenant Apple Developer / Firebase\n/// credentials managed by provider provisioning, which is server infrastructure,\n/// not client code. Wire this to your app's registerDevice mutation.\npublic struct PushRegistration: Codable, Equatable, Sendable {\n public var deviceToken: String\n public var platform: String\n public var locale: String?\n public var timezone: String?\n\n public init(deviceToken: String, platform: String = \"ios\", locale: String? = nil, timezone: String? = nil) {\n self.deviceToken = deviceToken\n self.platform = platform\n self.locale = locale\n self.timezone = timezone\n }\n}\n\npublic extension AuthContext {\n /// Convenience: build a registration payload after the OS issues a token.\n static func pushRegistration(deviceToken: String, platform: String = \"ios\") -> PushRegistration {\n PushRegistration(deviceToken: deviceToken, platform: platform)\n }\n}\n", V = "import Foundation\n\n/// The RPC request envelope sent to the api's `/rpc` endpoint. Mirrors the\n/// wire shape `{ _tag: \"Request\", id, tag, payload, headers }`.\nstruct RpcRequest<Payload: Encodable>: Encodable {\n let _tag = \"Request\"\n let id: String\n let tag: String\n let payload: Payload\n let headers: [String: String]\n}\n\n/// An empty payload for no-argument procedures.\nstruct EmptyPayload: Encodable {}\n\n/// A dynamic JSON value for schemas with no faithful static type.\npublic struct AnyCodable: Codable, Equatable, Sendable {\n public let value: Data\n public init(from decoder: Decoder) throws {\n let container = try decoder.singleValueContainer()\n if let raw = try? container.decode(AnyCodableRaw.self) {\n self.value = raw.data\n } else {\n self.value = Data()\n }\n }\n public func encode(to encoder: Encoder) throws {\n var container = encoder.singleValueContainer()\n try container.encode(AnyCodableRaw(data: value))\n }\n}\n\nstruct AnyCodableRaw: Codable {\n let data: Data\n init(data: Data) { self.data = data }\n init(from decoder: Decoder) throws {\n let container = try decoder.singleValueContainer()\n let json = try container.decode(JSONValue.self)\n self.data = try JSONEncoder().encode(json)\n }\n func encode(to encoder: Encoder) throws {\n var container = encoder.singleValueContainer()\n try container.encode(try JSONDecoder().decode(JSONValue.self, from: data))\n }\n}\n\nindirect enum JSONValue: Codable {\n case null\n case bool(Bool)\n case number(Double)\n case string(String)\n case array([JSONValue])\n case object([String: JSONValue])\n init(from decoder: Decoder) throws {\n let c = try decoder.singleValueContainer()\n if c.decodeNil() { self = .null }\n else if let b = try? c.decode(Bool.self) { self = .bool(b) }\n else if let n = try? c.decode(Double.self) { self = .number(n) }\n else if let s = try? c.decode(String.self) { self = .string(s) }\n else if let a = try? c.decode([JSONValue].self) { self = .array(a) }\n else if let o = try? c.decode([String: JSONValue].self) { self = .object(o) }\n else { self = .null }\n }\n func encode(to encoder: Encoder) throws {\n var c = encoder.singleValueContainer()\n switch self {\n case .null: try c.encodeNil()\n case .bool(let b): try c.encode(b)\n case .number(let n): try c.encode(n)\n case .string(let s): try c.encode(s)\n case .array(let a): try c.encode(a)\n case .object(let o): try c.encode(o)\n }\n }\n}\n\npublic enum RpcError: Error {\n case http(status: Int, body: Data)\n case decoding(Error)\n case transport(Error)\n}\n\n/// HTTP transport for one-shot calls.\n///\n/// NOTE — the exact @effect/rpc response FRAMING (success/failure envelope over\n/// HTTP) is the one seam that must be validated against a live server; this\n/// decodes the success value from the response body and surfaces non-2xx as\n/// `RpcError.http`. Correct type mapping + one method per procedure is what the\n/// generator guarantees; the wire framing is the cross-language integration step.\nstruct RpcTransport: Sendable {\n let session: URLSession\n\n func call<Payload: Encodable, Result: Decodable>(\n baseURL: URL, auth: AuthContext, tag: String, payload: Payload\n ) async throws -> Result {\n var request = URLRequest(url: baseURL.appendingPathComponent(\"rpc\"))\n request.httpMethod = \"POST\"\n request.setValue(\"application/json\", forHTTPHeaderField: \"content-type\")\n for (k, v) in auth.headers() { request.setValue(v, forHTTPHeaderField: k) }\n let envelope = RpcRequest(id: UUID().uuidString, tag: tag, payload: payload, headers: [:])\n request.httpBody = try JSONEncoder().encode(envelope)\n let (data, response): (Data, URLResponse)\n do { (data, response) = try await session.data(for: request) }\n catch { throw RpcError.transport(error) }\n if let http = response as? HTTPURLResponse, !(200...299).contains(http.statusCode) {\n throw RpcError.http(status: http.statusCode, body: data)\n }\n do { return try JSONDecoder().decode(Result.self, from: data) }\n catch { throw RpcError.decoding(error) }\n }\n}\n\n/// WebSocket transport for reactive subscriptions.\nstruct SocketTransport: Sendable {\n let session: URLSession\n\n func subscribe<Payload: Encodable, Value: Decodable>(\n socketURL: URL, auth: AuthContext, tag: String, payload: Payload\n ) -> AsyncThrowingStream<Value, Error> {\n AsyncThrowingStream { continuation in\n let task = session.webSocketTask(with: socketURL)\n task.resume()\n let envelope = RpcRequest(id: UUID().uuidString, tag: tag, payload: payload, headers: [:])\n if let frame = try? JSONEncoder().encode(envelope), let text = String(data: frame, encoding: .utf8) {\n task.send(.string(text)) { _ in }\n }\n func receive() {\n task.receive { result in\n switch result {\n case .failure(let error):\n continuation.finish(throwing: error)\n case .success(let message):\n let data: Data?\n switch message {\n case .string(let s): data = s.data(using: .utf8)\n case .data(let d): data = d\n @unknown default: data = nil\n }\n if let data = data, let value = try? JSONDecoder().decode(Value.self, from: data) {\n continuation.yield(value)\n }\n receive()\n }\n }\n }\n receive()\n continuation.onTermination = { _ in task.cancel(with: .goingAway, reason: nil) }\n }\n }\n}\n", H = (e) => `// swift-tools-version:5.9
470
372
  import PackageDescription
471
373
 
472
374
  let package = Package(
@@ -479,104 +381,104 @@ let package = Package(
479
381
  .target(name: ${JSON.stringify(e)}, path: "Sources/${e}"),
480
382
  ]
481
383
  )
482
- `, J = "// Generated by `voltro build api --target swift`. Do not edit by hand.", Y = (e, t) => {
483
- let n = `Sources/${t}`, r = [...e.enums.map(te), ...e.models.map(B)].join("\n\n");
384
+ `, U = "// Generated by `voltro build api --target swift`. Do not edit by hand.", W = (e, t) => {
385
+ let n = `Sources/${t}`, r = [...e.enums.map(I), ...e.models.map(F)].join("\n\n");
484
386
  return [
485
387
  {
486
388
  path: "Package.swift",
487
- content: q(t)
389
+ content: H(t)
488
390
  },
489
391
  {
490
392
  path: `${n}/Models.swift`,
491
- content: `${J}\nimport Foundation\n\n${r}${r ? "\n" : ""}`
393
+ content: `${U}\nimport Foundation\n\n${r}${r ? "\n" : ""}`
492
394
  },
493
395
  {
494
396
  path: `${n}/Client.swift`,
495
- content: `${J}\nimport Foundation\n\n${H(`${t}Client`, e.procedures)}\n`
397
+ content: `${U}\nimport Foundation\n\n${R(`${t}Client`, e.procedures)}\n`
496
398
  },
497
399
  {
498
400
  path: `${n}/Subscriptions.swift`,
499
- content: `${J}\nimport Foundation\n\n${U(`${t}Subscriptions`, e.procedures)}\n`
401
+ content: `${U}\nimport Foundation\n\n${ee(`${t}Subscriptions`, e.procedures)}\n`
500
402
  },
501
403
  {
502
404
  path: `${n}/Auth.swift`,
503
- content: `${J}\n${W}`
405
+ content: `${U}\n${z}`
504
406
  },
505
407
  {
506
408
  path: `${n}/Push.swift`,
507
- content: `${J}\n${G}`
409
+ content: `${U}\n${B}`
508
410
  },
509
411
  {
510
412
  path: `${n}/RpcTransport.swift`,
511
- content: `${J}\n${K}`
413
+ content: `${U}\n${V}`
512
414
  }
513
415
  ];
514
- }, X = a({ scope: "voltro:sdk" }), Z = "VoltroClient", Q = "com.voltro.client", ne = (e, t) => {
515
- let n = y(e), r = t.packageName ?? Z;
516
- return t.target === "swift" ? Y(n, r) : L(n, r, t.kotlinPackage ?? Q);
517
- }, re = async (e, n) => {
518
- for (let i of e) {
519
- let e = r(n, i.path);
520
- await o.mkdir(t(e), { recursive: !0 }), await o.writeFile(e, i.content, "utf8");
416
+ }, G = u({ scope: "voltro:sdk" }), K = "VoltroClient", q = "com.voltro.client", J = (e, t) => {
417
+ let n = p(e), r = t.packageName ?? K;
418
+ return t.target === "swift" ? W(n, r) : M(n, r, t.kotlinPackage ?? q);
419
+ }, Y = async (e, t) => {
420
+ for (let n of e) {
421
+ let e = c(t, n.path);
422
+ await l.mkdir(o(e), { recursive: !0 }), await l.writeFile(e, n.content, "utf8");
521
423
  }
522
- }, ie = async (e) => {
523
- let { offlineManifest: t } = await import("./checkCommand-DRovTKza.js"), { manifest: n } = await t(e);
424
+ }, X = async (e) => {
425
+ let { offlineManifest: t } = await import("./checkCommand-DKpDLlqu.js"), { manifest: n } = await t(e);
524
426
  return n;
525
- }, ae = async (e) => {
526
- let t = ne(await (e.manifestProvider ?? ie)(e.root), {
427
+ }, Z = async (e) => {
428
+ let t = J(await (e.manifestProvider ?? X)(e.root), {
527
429
  target: e.target,
528
430
  ...e.packageName === void 0 ? {} : { packageName: e.packageName },
529
431
  ...e.kotlinPackage === void 0 ? {} : { kotlinPackage: e.kotlinPackage }
530
432
  });
531
- return await re(t, e.outDir), {
433
+ return await Y(t, e.outDir), {
532
434
  files: t,
533
435
  outDir: e.outDir
534
436
  };
535
- }, $ = (e, t) => {
437
+ }, Q = (e, t) => {
536
438
  let n = e.indexOf(t);
537
439
  return n !== -1 && n + 1 < e.length ? e[n + 1] : void 0;
538
- }, oe = (e, t) => {
539
- let i = $(e, "--target");
540
- if (i !== "swift" && i !== "kotlin") return { error: `--target must be "swift" or "kotlin" (got ${i === void 0 ? "<none>" : JSON.stringify(i)})` };
541
- let a = $(e, "--out"), o = $(e, "--name"), s = $(e, "--kotlin-package"), c = new Set([
440
+ }, $ = (e, t) => {
441
+ let n = Q(e, "--target");
442
+ if (n !== "swift" && n !== "kotlin") return { error: `--target must be "swift" or "kotlin" (got ${n === void 0 ? "<none>" : JSON.stringify(n)})` };
443
+ let r = Q(e, "--out"), i = Q(e, "--name"), a = Q(e, "--kotlin-package"), o = new Set([
444
+ n,
445
+ r,
542
446
  i,
543
- a,
544
- o,
545
- s
447
+ a
546
448
  ].filter((e) => e !== void 0)), l = /* @__PURE__ */ new Set([
547
449
  "--target",
548
450
  "--out",
549
451
  "--name",
550
452
  "--kotlin-package"
551
- ]), u = e.find((e) => !e.startsWith("-") && e !== "api" && !l.has(e) && !c.has(e));
453
+ ]), u = e.find((e) => !e.startsWith("-") && e !== "api" && !l.has(e) && !o.has(e));
552
454
  return {
553
- target: i,
554
- root: u ? n(u) ? u : r(t, u) : t,
555
- ...a === void 0 ? {} : { outDir: a },
556
- ...o === void 0 ? {} : { packageName: o },
557
- ...s === void 0 ? {} : { kotlinPackage: s }
455
+ target: n,
456
+ root: u ? s(u) ? u : c(t, u) : t,
457
+ ...r === void 0 ? {} : { outDir: r },
458
+ ...i === void 0 ? {} : { packageName: i },
459
+ ...a === void 0 ? {} : { kotlinPackage: a }
558
460
  };
559
- }, se = (e, t) => r(e, "sdk", t), ce = async (t, n = process.cwd()) => {
560
- let r = oe(t, n);
461
+ }, te = (e, t) => c(e, "sdk", t), ne = async (t, n = process.cwd()) => {
462
+ let r = $(t, n);
561
463
  if ("error" in r) return console.error(`voltro build --target: ${r.error}`), 1;
562
- let a = r.outDir ?? se(r.root, r.target);
563
- return e(i.gen(function* () {
564
- let e = yield* i.tryPromise({
565
- try: () => ae({
464
+ let i = r.outDir ?? te(r.root, r.target);
465
+ return e(d.gen(function* () {
466
+ let e = yield* d.tryPromise({
467
+ try: () => Z({
566
468
  root: r.root,
567
469
  target: r.target,
568
- outDir: a,
470
+ outDir: i,
569
471
  ...r.packageName === void 0 ? {} : { packageName: r.packageName },
570
472
  ...r.kotlinPackage === void 0 ? {} : { kotlinPackage: r.kotlinPackage }
571
473
  }),
572
474
  catch: (e) => e
573
- }).pipe(i.orDie);
574
- return yield* i.sync(() => X.info("SDK generated", {
475
+ }).pipe(d.orDie);
476
+ return yield* d.sync(() => G.info("SDK generated", {
575
477
  target: r.target,
576
478
  files: e.files.length,
577
- out: a
479
+ out: i
578
480
  })), 0;
579
481
  }), { scope: "voltro:sdk" });
580
482
  };
581
483
  //#endregion
582
- export { ce as runSdkBuildCommand };
484
+ export { ne as runSdkBuildCommand };