@xano/sdk 1.0.5 → 1.0.6

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 (249) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +26 -16
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-KVLR7M5Y.js → agent-file-refresh-67QIX45H.js} +14 -13
  5. package/dist/{answer-shape-XGR2DGWY.js → answer-shape-UCDUKPAN.js} +5 -5
  6. package/dist/{backend-dir-IE4RMUFH.js → backend-dir-3LIL6SCT.js} +13 -12
  7. package/dist/{backend-slot-6HBWG5FN.js → backend-slot-JREP27UD.js} +4 -4
  8. package/dist/bin.js +53 -52
  9. package/dist/{branch-T2APKPVG.js → branch-2IPHOAYS.js} +9 -9
  10. package/dist/{branch-commands-HXXTCSOO.js → branch-commands-KTKAXBAN.js} +29 -30
  11. package/dist/bundle.js +9 -39
  12. package/dist/{capture-HBXFXZEW.js → capture-GW5KNKMB.js} +3 -3
  13. package/dist/{chunk-JZWUAEMO.js → chunk-26MOFAJT.js} +2 -2
  14. package/dist/{chunk-RXCT3OCU.js → chunk-2FLIJGBZ.js} +3 -3
  15. package/dist/{chunk-UIEFE6FU.js → chunk-2WBH5HUY.js} +7 -7
  16. package/dist/{chunk-Y76ERHLK.js → chunk-3BBIDW3Y.js} +5 -5
  17. package/dist/{chunk-DGWHAVRG.js → chunk-3EDSPMXN.js} +12 -1
  18. package/dist/{chunk-JXKO6JT7.js → chunk-3II44CUJ.js} +14 -14
  19. package/dist/{chunk-7GX445AE.js → chunk-4XHAT7C5.js} +2 -2
  20. package/dist/{chunk-OKNE3TWU.js → chunk-5KJBWIDZ.js} +83 -5
  21. package/dist/{chunk-SRX6B544.js → chunk-5QMJOE2K.js} +5 -5
  22. package/dist/{chunk-UJ6ZZJDD.js → chunk-5TVFLG3C.js} +2 -2
  23. package/dist/{chunk-L3BDO2BI.js → chunk-5YQV35C2.js} +7 -7
  24. package/dist/{chunk-Z4VN347O.js → chunk-6X3MY2JP.js} +2 -2
  25. package/dist/{chunk-65SW2BA5.js → chunk-6X6BJN6Y.js} +3 -3
  26. package/dist/{chunk-M7GJ6YUF.js → chunk-763M6LX3.js} +16 -2
  27. package/dist/{chunk-XJU6UAFV.js → chunk-7FIMUFBP.js} +2 -2
  28. package/dist/{chunk-TEBS7FE6.js → chunk-7GAIJW62.js} +2 -2
  29. package/dist/{chunk-K6CB5TKM.js → chunk-7REDHC4N.js} +2 -2
  30. package/dist/chunk-7VR4IO5B.js +44 -0
  31. package/dist/chunk-A7MRZ4GF.js +78 -0
  32. package/dist/{chunk-CV54PASI.js → chunk-ATJ2W7DC.js} +70 -50
  33. package/dist/{chunk-WYS6XVZ3.js → chunk-AVS4WPPY.js} +2 -2
  34. package/dist/{chunk-5XVBT6CQ.js → chunk-BL3AZ3AP.js} +2 -2
  35. package/dist/chunk-BTVUYHWV.js +111 -0
  36. package/dist/{chunk-NGAODDLX.js → chunk-CCU5CCRX.js} +4 -4
  37. package/dist/{chunk-BBPAXOU6.js → chunk-CHINR7WD.js} +6 -6
  38. package/dist/{chunk-SQPIECXD.js → chunk-CJDPSCMX.js} +45 -5
  39. package/dist/{chunk-3HOGFGKG.js → chunk-D3KEPRRN.js} +2 -2
  40. package/dist/{chunk-XNZURZ7T.js → chunk-D7BUMOKU.js} +2 -2
  41. package/dist/{chunk-WRBKLYSJ.js → chunk-DNBP4GJN.js} +4 -3
  42. package/dist/{chunk-XMDDBEEM.js → chunk-E763QI3G.js} +2 -2
  43. package/dist/{chunk-4NEBBKOP.js → chunk-EADVVTDK.js} +7 -7
  44. package/dist/{chunk-N6BWB35H.js → chunk-ENMBEXOP.js} +3 -3
  45. package/dist/{chunk-57HMNJGB.js → chunk-EQFYOOO6.js} +69 -34
  46. package/dist/{chunk-WOGJB2F6.js → chunk-FNLTFOUD.js} +4 -9
  47. package/dist/{chunk-FV55SRQU.js → chunk-FQ53GTII.js} +9 -9
  48. package/dist/{chunk-TUEFTRC2.js → chunk-FU3VCE5A.js} +45 -26
  49. package/dist/{chunk-YSLMMR2U.js → chunk-GHQ4BVI4.js} +14 -14
  50. package/dist/{chunk-Z2BRSQ6M.js → chunk-GLY552SI.js} +84 -57
  51. package/dist/{chunk-XIABDKFQ.js → chunk-GOLFAEUV.js} +2 -2
  52. package/dist/{chunk-ZHGWR45B.js → chunk-GW5RHGOB.js} +8 -8
  53. package/dist/{chunk-3BJYQGAZ.js → chunk-GWTFI3GA.js} +2 -2
  54. package/dist/{chunk-K6PRKPFX.js → chunk-GZHLCUZ6.js} +7 -7
  55. package/dist/{chunk-LLS2WO2K.js → chunk-HCG7NDIL.js} +4 -4
  56. package/dist/{chunk-NNB7VUCH.js → chunk-I3H3HCPY.js} +47 -26
  57. package/dist/{chunk-KUU7T4ZE.js → chunk-I3VHW6XM.js} +13 -13
  58. package/dist/{chunk-ES5A66IH.js → chunk-IF4PEGVD.js} +8 -8
  59. package/dist/{chunk-Y6NO3DLQ.js → chunk-IMELQ2I6.js} +3 -3
  60. package/dist/{chunk-V4IBHDIY.js → chunk-ITC2R2OT.js} +7 -7
  61. package/dist/{chunk-KQLACS4Q.js → chunk-IXFJORNH.js} +4 -4
  62. package/dist/{chunk-SF2B7MZK.js → chunk-IYXL5NYU.js} +259 -31
  63. package/dist/{chunk-57B56I4B.js → chunk-JFBRXRJD.js} +58 -34
  64. package/dist/chunk-JI3BLXWQ.js +107 -0
  65. package/dist/{chunk-4DJTQ6W4.js → chunk-JIKGT7DO.js} +2 -1
  66. package/dist/{chunk-5D6DGF3W.js → chunk-JRVQ7M7W.js} +8 -8
  67. package/dist/{chunk-AESE434J.js → chunk-JXVJGF3Y.js} +2 -2
  68. package/dist/chunk-KPFS3RGM.js +257 -0
  69. package/dist/{chunk-SNGFEESM.js → chunk-LAOMN6QQ.js} +3 -3
  70. package/dist/{chunk-TM5LRSBB.js → chunk-LBJA7IEM.js} +370 -45
  71. package/dist/{chunk-OVV2HXJ6.js → chunk-LD6ARK3A.js} +2 -2
  72. package/dist/{chunk-F6IKWAIU.js → chunk-LL7SGTRC.js} +18 -19
  73. package/dist/{chunk-OJPZEUPH.js → chunk-M5CSVB23.js} +4 -4
  74. package/dist/{chunk-GMVW6ZZK.js → chunk-MBDFH7XB.js} +4 -4
  75. package/dist/{chunk-5YBNXNKU.js → chunk-MFWF2NZJ.js} +12 -5
  76. package/dist/{chunk-G57RYMKB.js → chunk-N5I37JFB.js} +2 -2
  77. package/dist/{chunk-QOLOQ35F.js → chunk-ND43ZOS3.js} +5 -5
  78. package/dist/chunk-NDWVJ2QZ.js +67 -0
  79. package/dist/{chunk-5RLAF6RL.js → chunk-NPODGBVJ.js} +4 -4
  80. package/dist/{chunk-JQOX6HW4.js → chunk-OIKLDDYC.js} +2 -2
  81. package/dist/{chunk-AMBEITWL.js → chunk-PFBXSVZF.js} +4 -4
  82. package/dist/{chunk-3VX7VAQT.js → chunk-PMMHSX4H.js} +26 -9
  83. package/dist/{chunk-MYLPOVX6.js → chunk-QJM5XZ4K.js} +5 -5
  84. package/dist/{chunk-U6DR6464.js → chunk-QXYMDARD.js} +4 -4
  85. package/dist/{chunk-DEVGLLNZ.js → chunk-QZEAANWP.js} +5 -5
  86. package/dist/{chunk-LZDA6SVD.js → chunk-RIN4YY34.js} +78 -65
  87. package/dist/{chunk-37FBPMNE.js → chunk-S56YBYMN.js} +5 -2
  88. package/dist/{chunk-S5TEJIGP.js → chunk-SKEG3V2V.js} +2 -2
  89. package/dist/{chunk-VZ22VUAS.js → chunk-SLGJIWCY.js} +3 -3
  90. package/dist/{chunk-4QFBEKXI.js → chunk-SPITRSOF.js} +2 -2
  91. package/dist/{chunk-QZTJ2556.js → chunk-SPKA2LV6.js} +4 -4
  92. package/dist/{chunk-YI76TURL.js → chunk-SSITMX7I.js} +8 -8
  93. package/dist/{chunk-JSEVKRVJ.js → chunk-T4LJ5UR2.js} +29 -7
  94. package/dist/{chunk-44CWK6YC.js → chunk-TECTL2NU.js} +4 -4
  95. package/dist/{chunk-AGD7F7YI.js → chunk-TTEIDD5Q.js} +3 -3
  96. package/dist/{chunk-NUU76247.js → chunk-U35MTOXQ.js} +3 -3
  97. package/dist/{chunk-4QBGE3EO.js → chunk-U6MTGB46.js} +4 -4
  98. package/dist/{chunk-3WHWOKU4.js → chunk-UD2Z7K6W.js} +4 -4
  99. package/dist/{chunk-I5VEROXW.js → chunk-UIVMR7UK.js} +2 -2
  100. package/dist/{chunk-F3557PVM.js → chunk-VDHA5SSQ.js} +2 -2
  101. package/dist/{chunk-3IYVHVM6.js → chunk-VJFMUJWZ.js} +4 -4
  102. package/dist/{chunk-4GDEEY2U.js → chunk-VW4CWVYX.js} +4 -4
  103. package/dist/chunk-WAVNUTMT.js +9 -0
  104. package/dist/{chunk-A4NNCI4O.js → chunk-WBH4KJWM.js} +3 -3
  105. package/dist/{chunk-HOOOOJJP.js → chunk-WZHLMU6T.js} +2 -2
  106. package/dist/{chunk-S5KQIFKJ.js → chunk-XFBGXB7X.js} +130 -86
  107. package/dist/{chunk-IV446ZLJ.js → chunk-Y453TW6J.js} +2 -2
  108. package/dist/{chunk-CJ76PSJT.js → chunk-YGLMRH5U.js} +8 -8
  109. package/dist/{chunk-GPI3OWRE.js → chunk-YHB34BN6.js} +2 -1
  110. package/dist/{chunk-BMCZQZMI.js → chunk-YKP4ZKVO.js} +13 -9
  111. package/dist/{chunk-HLQH3AXB.js → chunk-YR2I5HGE.js} +2 -2
  112. package/dist/{chunk-OGUMHW2X.js → chunk-YYC2DZMG.js} +7 -7
  113. package/dist/{chunk-Z3SNX45M.js → chunk-YYLUBYXM.js} +2 -2
  114. package/dist/{chunk-PIPIA7K7.js → chunk-Z4ZGTCCD.js} +7 -7
  115. package/dist/{chunk-AGSCOISO.js → chunk-ZDP6GDAB.js} +75 -75
  116. package/dist/{chunk-7DBM6XHR.js → chunk-ZJSTUD6D.js} +8 -8
  117. package/dist/cli.d.ts +17 -9
  118. package/dist/cli.js +51 -50
  119. package/dist/{codegen-command-L2OO6OTE.js → codegen-command-R5IASBFC.js} +72 -66
  120. package/dist/codegen.d.ts +2 -2
  121. package/dist/codegen.js +2 -2
  122. package/dist/{commands-2E4JB3DB.js → commands-H7CPMMHH.js} +3 -3
  123. package/dist/{completion-LPJIH5VQ.js → completion-W5ZAI6TN.js} +3 -3
  124. package/dist/{config-QDCRKEWD.js → config-MZ5KG4EP.js} +4 -4
  125. package/dist/{deploy-command-HJZNYCUY.js → deploy-command-34T2LKQ5.js} +58 -57
  126. package/dist/{deploy-source-5COWTBOC.js → deploy-source-YLQ7WMYR.js} +32 -31
  127. package/dist/{dev-env-sync-GZ4QQJGV.js → dev-env-sync-TMJTNU3U.js} +52 -51
  128. package/dist/{diagnostics-LSMGB4TY.js → diagnostics-OMN5Y2AH.js} +2 -2
  129. package/dist/{display-name-hint-AHCNH6TF.js → display-name-hint-ZJGFNJKQ.js} +11 -11
  130. package/dist/{emit-DqG6qddr.d.ts → emit-D125xxty.d.ts} +66 -20
  131. package/dist/env-example-refresh-CQP3ZMKM.js +133 -0
  132. package/dist/{env-pull-command-Z4RLVEGJ.js → env-pull-command-UTG6IC2K.js} +46 -46
  133. package/dist/{env-target-ZHQUS5BO.js → env-target-FZROWYFS.js} +12 -12
  134. package/dist/{env-var-command-FKQ4VVQ6.js → env-var-command-VYDBQJJW.js} +41 -40
  135. package/dist/{ephemeral-L4KUOGEU.js → ephemeral-BIE6FMJV.js} +9 -9
  136. package/dist/{ephemeral-command-GRPFI3TD.js → ephemeral-command-OZ26RGXF.js} +47 -47
  137. package/dist/{ephemeral-state-VLYU2BXR.js → ephemeral-state-SNZOX2YK.js} +10 -10
  138. package/dist/{generate-command-XNODJFDQ.js → generate-command-4HR7MR36.js} +80 -72
  139. package/dist/{gitignore-VWRSZX5F.js → gitignore-EWQBXNX2.js} +17 -16
  140. package/dist/{guards-OPSGB6LG.js → guards-KYEOCVHN.js} +6 -6
  141. package/dist/{impersonate-command-AEKIZHHK.js → impersonate-command-WC7OGKUM.js} +37 -36
  142. package/dist/{import-PHSSFFLA.js → import-7Z4GCCPO.js} +5 -5
  143. package/dist/index.d.ts +14 -20
  144. package/dist/index.js +13 -13
  145. package/dist/{init-command-TI3HCKXZ.js → init-command-HAO3WXH3.js} +57 -55
  146. package/dist/{init-modules-SGSX7XEY.js → init-modules-NSKD4ASY.js} +10 -9
  147. package/dist/{init-web-6HX3YLQP.js → init-web-MKFFOQUU.js} +3 -3
  148. package/dist/internal.d.ts +5 -5
  149. package/dist/internal.js +47 -20
  150. package/dist/{io-TAF4WXYQ.js → io-PGTCBSIQ.js} +6 -4
  151. package/dist/{keep-data-merge-GUGF7MVZ.js → keep-data-merge-QR2TMKEO.js} +28 -29
  152. package/dist/{lambda-config-reconcile-65U6I4KU.js → lambda-config-reconcile-7FJXXV6V.js} +3 -3
  153. package/dist/{landed-QA6PRTV2.js → landed-F7PCHGCK.js} +3 -3
  154. package/dist/{landing-record-FCAWLCZU.js → landing-record-MWXFIRCP.js} +22 -21
  155. package/dist/{live-diff-IM4W3ELT.js → live-diff-5E2BQWQ7.js} +9 -8
  156. package/dist/{local-engine-choice-FPJAZSSD.js → local-engine-choice-VD5LNXJU.js} +35 -34
  157. package/dist/{local-engine-command-73NHWD6V.js → local-engine-command-RYLGMQ2O.js} +40 -39
  158. package/dist/{local-engine-deploy-Y4OAWL7K.js → local-engine-deploy-6O7NKZCA.js} +12 -12
  159. package/dist/{local-engine-process-6YPJHKYM.js → local-engine-process-ZLLZEIRF.js} +7 -7
  160. package/dist/{local-engine-update-check-X7TZGRFL.js → local-engine-update-check-LVX4HBBI.js} +5 -5
  161. package/dist/{lock-WXXC3QHL.js → lock-HDCHD2ON.js} +4 -2
  162. package/dist/{lock-commands-PKDBNRSD.js → lock-commands-X2OECR4R.js} +56 -55
  163. package/dist/{login-command-V4U4FA5G.js → login-command-RLLKD565.js} +27 -26
  164. package/dist/{logout-command-TV3P545Z.js → logout-command-XDMSXCDO.js} +15 -15
  165. package/dist/{loop-VKHGQ6MP.js → loop-SUB6C2LK.js} +8 -9
  166. package/dist/{marketplace-command-LEFOAEAV.js → marketplace-command-2NHHY2X3.js} +86 -50
  167. package/dist/{marketplace-resolve-ME7O7JBJ.js → marketplace-resolve-OTZYT4FG.js} +7 -6
  168. package/dist/{meta-client-TEEECA5W.js → meta-client-TMHVBZFY.js} +13 -13
  169. package/dist/{module-manifest-7YLGIRCY.js → module-manifest-FNMW23IX.js} +7 -4
  170. package/dist/node.d.ts +5 -5
  171. package/dist/node.js +57 -57
  172. package/dist/{operation-outcome-GNDD35WL.js → operation-outcome-RN62735X.js} +22 -22
  173. package/dist/{output-target-5FWX3NGZ.js → output-target-MOLCTPBP.js} +18 -17
  174. package/dist/{package-manager-PRAHUSCN.js → package-manager-K762W7XT.js} +2 -2
  175. package/dist/{plan-disclosure-QGL5UYQR.js → plan-disclosure-CY7AF6KP.js} +19 -20
  176. package/dist/{plugin-contributions-GNFTWDEB.js → plugin-contributions-WR26U7NT.js} +6 -6
  177. package/dist/{plugin-prompt-VEQGMZ4T.js → plugin-prompt-ZUYQQIX4.js} +5 -5
  178. package/dist/{plugin-questions-BGRL23GO.js → plugin-questions-HAZOQ67R.js} +4 -4
  179. package/dist/plugin.d.ts +254 -10
  180. package/dist/{preflight-command-VKJKXRRI.js → preflight-command-OHJXYND3.js} +64 -64
  181. package/dist/{profile-command-P7A3BH26.js → profile-command-6JWT2BTL.js} +28 -27
  182. package/dist/{profile-pointer-HG7IXE4I.js → profile-pointer-PDA5XBIB.js} +4 -4
  183. package/dist/{project-dependency-Z4CKOCJI.js → project-dependency-GZWWGWEW.js} +11 -8
  184. package/dist/{project-sdk-JWZWGXXR.js → project-sdk-3W72H5QO.js} +4 -4
  185. package/dist/promote-command-UYAMUXKB.js +146 -0
  186. package/dist/{prompt-SURZOUUW.js → prompt-U37K5RPQ.js} +4 -4
  187. package/dist/{publish-command-HGAB3H4A.js → publish-command-BUS27HGB.js} +61 -60
  188. package/dist/{pull-command-EUEWBRXZ.js → pull-command-ZGUNP27P.js} +75 -69
  189. package/dist/{pull-superseded-TOT5S4QU.js → pull-superseded-EZBGYRZF.js} +4 -4
  190. package/dist/{raw-where-EoWl5fqY.d.ts → raw-where-ZMLND6AG.d.ts} +20 -3
  191. package/dist/{release-command-WOVQAMUY.js → release-command-BQ6OHS3P.js} +69 -66
  192. package/dist/{release-ns-command-WOQE2BDQ.js → release-ns-command-ATGVBVIU.js} +85 -85
  193. package/dist/{retry-command-JRGMZZAC.js → retry-command-QJ57WVW7.js} +8 -8
  194. package/dist/{routes-manifest-URFMAWJE.js → routes-manifest-YR4ZIMLM.js} +15 -7
  195. package/dist/routes-manifest-file-UALYSZLY.js +41 -0
  196. package/dist/scaffold.js +2 -2
  197. package/dist/{secrets-file-YWZWVJ52.js → secrets-file-LMS7KX3E.js} +17 -16
  198. package/dist/{secrets-fill-command-HIHK3VH2.js → secrets-fill-command-QNBDGCGM.js} +55 -54
  199. package/dist/{seed-24DTEY5S.js → seed-SZ6OS5DQ.js} +8 -8
  200. package/dist/{source-resolve-OWD3MIEO.js → source-resolve-MKLNYFWG.js} +20 -20
  201. package/dist/{static-host-UIR2OLPQ.js → static-host-ONEHA4LI.js} +5 -5
  202. package/dist/{status-command-JKTHH5QE.js → status-command-XKIFKBGM.js} +38 -37
  203. package/dist/{store-zxw2go0f.d.ts → store-Bg4Na6Sm.d.ts} +2 -2
  204. package/dist/{store-5YAQS6KU.js → store-X6ZH7EC3.js} +6 -6
  205. package/dist/sync-baseline-DOV5AGIO.js +36 -0
  206. package/dist/{sync-contributions-RBB6JVOL.js → sync-contributions-HNVHDIQW.js} +20 -12
  207. package/dist/sync-record-PRXHLK4S.js +42 -0
  208. package/dist/{table-MQFVYA4K.js → table-DC36QA4Y.js} +8 -8
  209. package/dist/{tables-command-5Q4BSUNO.js → tables-command-UQLKTELN.js} +38 -37
  210. package/dist/{tenant-Q3LPVSSM.js → tenant-EKNQGG5A.js} +10 -10
  211. package/dist/{tenant-command-BFVU2PEX.js → tenant-command-2LWP2MPB.js} +99 -94
  212. package/dist/{test-command-F4VUU4QR.js → test-command-IU5MBBXY.js} +36 -35
  213. package/dist/{tests-5ZSDFVIJ.js → tests-RG2Y5EQ4.js} +6 -6
  214. package/dist/{token-TERSTNU4.js → token-7AWSJLKO.js} +11 -11
  215. package/dist/toolchain-hooks-4ZMQLBPQ.js +46 -0
  216. package/dist/{toolchain-modules-FD5ANV2U.js → toolchain-modules-VU7SURVJ.js} +8 -5
  217. package/dist/toolchain-peers-CIDNEEQV.js +28 -0
  218. package/dist/{tracked-backend-B4HTME4S.js → tracked-backend-4BHSV7NC.js} +34 -33
  219. package/dist/{update-check-O4C2LCZH.js → update-check-A7FXIINW.js} +54 -53
  220. package/dist/{upgrade-command-NVFWLMTA.js → upgrade-command-C5KBITFI.js} +58 -57
  221. package/dist/{whoami-command-YKNTISIV.js → whoami-command-7WQII2H4.js} +14 -14
  222. package/dist/{workspace-GGVGE2S5.js → workspace-Z46PUZNI.js} +5 -5
  223. package/dist/{workspace-binding-OS4ZOX4S.js → workspace-binding-JE6YNDZJ.js} +13 -13
  224. package/dist/{workspace-command-GTUNVN7K.js → workspace-command-FC4IMLAE.js} +113 -82
  225. package/dist/{workspace-env-467C5KHM.js → workspace-env-N4ZPFT6A.js} +14 -13
  226. package/dist/{workspace-export-3XTVGQVM.js → workspace-export-3A5BZTPS.js} +5 -5
  227. package/dist/{writable-7SSWUQJ3.js → writable-D7KCZI5N.js} +4 -4
  228. package/dist/{xano-6RS5XQZE.js → xano-LCI7VWPS.js} +8 -8
  229. package/dist/{xanosdk-import-E3WSIYUE.js → xanosdk-import-P2A2KSXM.js} +8 -8
  230. package/dist/{xanosdk-project-KH5TZ2KI.js → xanosdk-project-6AGMW2SL.js} +15 -14
  231. package/guides/cli.md +4 -4
  232. package/guides/codes.md +7 -2
  233. package/guides/deploying.md +52 -0
  234. package/guides/marketplace.md +21 -0
  235. package/guides/module-contract.md +80 -4
  236. package/guides/typed-frontend.md +37 -0
  237. package/llms/client.md +11 -1
  238. package/llms/filters.md +4 -0
  239. package/llms/kinds-core.md +1 -1
  240. package/llms/statements-data.md +3 -2
  241. package/llms/toolchain.md +12 -0
  242. package/llms-full.txt +34 -7
  243. package/llms.txt +3 -3
  244. package/manifest.json +1 -1
  245. package/package.json +1 -1
  246. package/dist/chunk-MEIJDRHU.js +0 -243
  247. package/dist/env-example-refresh-DWQIOQYR.js +0 -127
  248. package/dist/promote-command-KHTIK44I.js +0 -141
  249. package/dist/toolchain-hooks-QVUZ6HZ4.js +0 -96
@@ -1,7 +1,285 @@
1
+ import {
2
+ byCodeUnit
3
+ } from "./chunk-WAVNUTMT.js";
1
4
  import {
2
5
  parsePathParams,
3
6
  pathSegment
4
- } from "./chunk-3IYVHVM6.js";
7
+ } from "./chunk-VJFMUJWZ.js";
8
+ import {
9
+ linkedTableOf,
10
+ tableRefOf
11
+ } from "./chunk-EHP3WPEG.js";
12
+ import {
13
+ COLUMN_NULLABLE_TYPES,
14
+ INPUT_NULLABLE_TYPES,
15
+ isListColumn
16
+ } from "./chunk-JIKGT7DO.js";
17
+
18
+ // src/emit/route-inputs.ts
19
+ var SCALAR_TYPES = /* @__PURE__ */ new Set([
20
+ "text",
21
+ "int",
22
+ "decimal",
23
+ "bool",
24
+ "email",
25
+ "password",
26
+ "uuid",
27
+ "date",
28
+ "epochms",
29
+ "json",
30
+ "file",
31
+ "blob",
32
+ "blob_img",
33
+ "blob_video",
34
+ "blob_audio",
35
+ "geo_point",
36
+ "geo_multipoint",
37
+ "geo_linestring",
38
+ "geo_multilinestring",
39
+ "geo_polygon",
40
+ "geo_multipolygon"
41
+ ]);
42
+ var INPUT_NULLABLE = new Set(INPUT_NULLABLE_TYPES);
43
+ var COLUMN_NULLABLE = new Set(COLUMN_NULLABLE_TYPES);
44
+ function isRow(v) {
45
+ return v !== null && typeof v === "object" && !Array.isArray(v);
46
+ }
47
+ function rows(v) {
48
+ return Array.isArray(v) ? v.filter(isRow) : [];
49
+ }
50
+ function tableColumns(payload) {
51
+ const out = /* @__PURE__ */ new Map();
52
+ for (const table of rows(payload.dbo)) {
53
+ if (typeof table.guid === "string" && table.guid !== "" && Array.isArray(table.schema)) {
54
+ out.set(table.guid, table.schema);
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+ function describeInputs(input, tables) {
60
+ return rows(input).map((row) => describeField(row, INPUT_NULLABLE, tables));
61
+ }
62
+ function bound(v) {
63
+ const n = typeof v === "number" ? Math.trunc(v) : typeof v === "string" ? Number.parseInt(v, 10) : Number.NaN;
64
+ return Number.isFinite(n) && n > 0 ? n : void 0;
65
+ }
66
+ function listOf(row) {
67
+ if (!isListColumn({ style: isRow(row.style) ? row.style : void 0 })) return false;
68
+ const stored = isRow(row.list) ? row.list : {};
69
+ const min = bound(stored.min);
70
+ const max = bound(stored.max);
71
+ return { ...min !== void 0 ? { min } : {}, ...max !== void 0 ? { max } : {} };
72
+ }
73
+ function methodArg(v) {
74
+ return typeof v === "string" ? v : typeof v === "number" || typeof v === "boolean" ? String(v) : JSON.stringify(v);
75
+ }
76
+ function methodsOf(stored, honorDisabled = true) {
77
+ return rows(stored).flatMap((m) => {
78
+ if (typeof m.name !== "string" || m.name === "@") return [];
79
+ if (honorDisabled && m.disabled === true) return [];
80
+ return [{ name: m.name, args: Array.isArray(m.arg) ? m.arg.map(methodArg) : [] }];
81
+ });
82
+ }
83
+ function baseOf(row, type, nullableByDefault) {
84
+ return {
85
+ name: typeof row.name === "string" ? row.name : "",
86
+ required: row.required === true,
87
+ // The engine binds every `json` input nullable, whatever was stored.
88
+ nullable: type === "json" ? true : typeof row.nullable === "boolean" ? row.nullable : nullableByDefault.has(type),
89
+ list: listOf(row),
90
+ // The engine renders an enum, a vector and an object without their
91
+ // methods, so none of them applies one.
92
+ methods: type === "enum" || type === "vector" || type === "obj" ? [] : methodsOf(row.methods)
93
+ };
94
+ }
95
+ function describeField(row, nullableByDefault, tables) {
96
+ const type = typeof row.type === "string" ? row.type : "";
97
+ const field = row;
98
+ const linked = linkedTableOf(field);
99
+ if (linked !== null) return expandDbLink(row, linked, tables);
100
+ const base = baseOf(row, type, nullableByDefault);
101
+ const table = tableRefOf(field);
102
+ if (table !== null) return { ...base, type: "tableRef", keyType: type === "uuid" ? "uuid" : "int", table };
103
+ if (type === "enum") {
104
+ const values = Array.isArray(row.values) ? row.values : [];
105
+ return { ...base, type, values: values.map((v) => typeof v === "number" ? v : methodArg(v)) };
106
+ }
107
+ if (type === "vector") {
108
+ const size = isRow(row.vector) ? Number(row.vector.size) : Number.NaN;
109
+ return { ...base, type, size: Number.isFinite(size) ? size : 0 };
110
+ }
111
+ if (type === "obj") {
112
+ return { ...base, type, children: rows(row.children).map((child) => describeField(child, nullableByDefault, tables)) };
113
+ }
114
+ if (SCALAR_TYPES.has(type)) return { ...base, type };
115
+ return { ...base, type: "unknown", storedType: type };
116
+ }
117
+ function customizeMap(v) {
118
+ return isRow(v) ? v : {};
119
+ }
120
+ function expandDbLink(row, table, tables) {
121
+ const name = typeof row.name === "string" ? row.name : "";
122
+ const schema = tables.get(table);
123
+ if (schema === void 0) return { name, type: "dbLink", table, columns: void 0 };
124
+ const hidden = new Set(Array.isArray(row.hidden) ? row.hidden.filter((h) => typeof h === "string") : []);
125
+ const columns = rows(schema).filter((column) => column.name !== "id" && !hidden.has(String(column.name)));
126
+ return { name, type: "dbLink", table, columns: customizeColumns(columns, customizeMap(row.customize), tables) };
127
+ }
128
+ function customizeColumns(columns, customize, tables) {
129
+ return columns.flatMap((column) => {
130
+ const name = String(column.name);
131
+ const node = Object.hasOwn(customize, name) ? customize[name] : void 0;
132
+ if (node === void 0) {
133
+ if (column.access === "private" || column.access === "internal") return [];
134
+ return [describeField(column, COLUMN_NULLABLE, tables)];
135
+ }
136
+ const settings = isRow(node) ? node : {};
137
+ if (settings.hidden === true) return [];
138
+ const described = describeField(column, COLUMN_NULLABLE, tables);
139
+ const nested = customizeMap(settings.customize);
140
+ if (Object.keys(nested).length > 0) {
141
+ if (described.type !== "obj") return [described];
142
+ return [{ ...described, children: customizeColumns(rows(column.children), nested, tables) }];
143
+ }
144
+ if (described.type === "dbLink") return [described];
145
+ const methods = described.type === "obj" ? [] : methodsOf(settings.methods, false);
146
+ return [{ ...described, required: settings.required === true, methods }];
147
+ });
148
+ }
149
+
150
+ // src/emit/route-input-types.ts
151
+ var NO_ROUTE_INPUTS = { routes: [], channels: [], messages: [] };
152
+ var OBJECT_MEMBERS = /* @__PURE__ */ new Set([
153
+ "constructor",
154
+ "toString",
155
+ "toLocaleString",
156
+ "valueOf",
157
+ "hasOwnProperty",
158
+ "isPrototypeOf",
159
+ "propertyIsEnumerable"
160
+ ]);
161
+ var FILE_REF = "{ path?: string; name?: string; type?: string; size?: number; access?: string; meta?: unknown; url?: string }";
162
+ var FILE_UPLOAD = "{ readonly __fileUpload?: never }";
163
+ var POSITION = "{ lng: number; lat: number }";
164
+ var GEO = {
165
+ geo_point: `{ type: "point"; data: ${POSITION} }`,
166
+ geo_multipoint: `{ type: "points"; data: ${POSITION}[] }`,
167
+ geo_linestring: `{ type: "path"; data: ${POSITION}[] }`,
168
+ geo_multilinestring: `{ type: "paths"; data: ${POSITION}[][] }`,
169
+ geo_polygon: `{ type: "poly"; data: ${POSITION}[] }`,
170
+ geo_multipolygon: `{ type: "polys"; data: ${POSITION}[][] }`
171
+ };
172
+ var SCALAR = {
173
+ text: "string",
174
+ email: "string",
175
+ password: "string",
176
+ uuid: "string",
177
+ date: "string",
178
+ int: "number",
179
+ decimal: "number",
180
+ epochms: "number",
181
+ bool: "boolean",
182
+ json: "unknown",
183
+ file: FILE_UPLOAD,
184
+ blob: FILE_REF,
185
+ blob_img: FILE_REF,
186
+ blob_video: FILE_REF,
187
+ blob_audio: FILE_REF,
188
+ ...GEO
189
+ };
190
+ function propertyName(name) {
191
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name);
192
+ }
193
+ function baseType(d, indent) {
194
+ switch (d.type) {
195
+ case "enum":
196
+ return d.values.length === 0 ? "never" : d.values.map((v) => typeof v === "number" ? String(v) : JSON.stringify(v)).join(" | ");
197
+ case "vector":
198
+ return "number[]";
199
+ case "tableRef":
200
+ return d.keyType === "uuid" ? "string" : "number";
201
+ case "obj":
202
+ return objectType(d.children, indent);
203
+ case "unknown":
204
+ return "unknown";
205
+ default:
206
+ return SCALAR[d.type] ?? "unknown";
207
+ }
208
+ }
209
+ function valueType(d, indent) {
210
+ let type = baseType(d, indent);
211
+ if (d.list !== false) type = d.type === "enum" ? `(${type})[]` : `${type}[]`;
212
+ if (d.nullable && type !== "unknown") type = `${type} | null`;
213
+ return type;
214
+ }
215
+ function objectType(inputs, indent) {
216
+ const keys = /* @__PURE__ */ new Map();
217
+ let open = false;
218
+ const inner = `${indent} `;
219
+ const visit = (list) => {
220
+ for (const d of list) {
221
+ if (d.type === "dbLink") {
222
+ if (d.columns === void 0) open = true;
223
+ else visit(d.columns);
224
+ continue;
225
+ }
226
+ const type = valueType(d, inner);
227
+ const seen = keys.get(d.name);
228
+ if (seen === void 0) {
229
+ keys.set(d.name, { types: [type], required: d.required });
230
+ } else {
231
+ if (!seen.types.includes(type)) seen.types.push(type);
232
+ seen.required &&= d.required;
233
+ }
234
+ }
235
+ };
236
+ visit(inputs);
237
+ const rows2 = [...keys].map(([name, { types, required }]) => {
238
+ const widened = !required && OBJECT_MEMBERS.has(name) ? [...types, `Object[${JSON.stringify(name)}]`] : types;
239
+ return `${inner}${propertyName(name)}${required ? "" : "?"}: ${widened.join(" | ")};`;
240
+ });
241
+ if (open) rows2.push(`${inner}[column: string]: unknown;`);
242
+ return rows2.length === 0 ? "{}" : `{
243
+ ${rows2.join("\n")}
244
+ ${indent}}`;
245
+ }
246
+ function inputMap(name, doc, sets) {
247
+ const rows2 = sets.map((set) => ` ${JSON.stringify(set.key)}: ${objectType(set.inputs, " ")};`);
248
+ return `${doc}
249
+ export type ${name} = ${rows2.length === 0 ? "{}" : `{
250
+ ${rows2.join("\n")}
251
+ }`};
252
+ `;
253
+ }
254
+ function renderRouteInputTypes(inputs) {
255
+ return `
256
+ ${inputMap(
257
+ "RouteInputs",
258
+ `/**
259
+ * The request body/query inputs of every endpoint, keyed exactly like ROUTES.
260
+ * Path params are inputs too, so they appear here as well as in routePath().
261
+ * Matches InferInput<typeof def>, except that a database-link input appears as
262
+ * the linked table's columns, which is what the server accepts.
263
+ */`,
264
+ inputs.routes
265
+ )}
266
+ ${inputMap(
267
+ "ChannelInputs",
268
+ "/** The path params of every realtime channel, keyed exactly like CHANNELS. */",
269
+ inputs.channels
270
+ )}
271
+ ${inputMap(
272
+ "MessageInputs",
273
+ `/**
274
+ * The payload of every realtime message, keyed "<channel key> <message name>"
275
+ * (e.g. "rooms/{room_id} send").
276
+ */`,
277
+ inputs.messages
278
+ )}
279
+ /** Every realtime message in this workspace, keyed "<channel key> <message name>". */
280
+ export type MessageName = keyof MessageInputs;
281
+ `;
282
+ }
5
283
 
6
284
  // src/emit/routes-manifest.ts
7
285
  var RouteManifestError = class extends Error {
@@ -12,16 +290,36 @@ function routeKey(route) {
12
290
  function qualifiedRouteKey(route) {
13
291
  return `${route.group}:${routeKey(route)}`;
14
292
  }
293
+ function keyRoutes(routes) {
294
+ const sorted = [...routes].sort(
295
+ (a, b) => a.canonical.localeCompare(b.canonical) || a.name.localeCompare(b.name) || a.verb.localeCompare(b.verb)
296
+ );
297
+ const holders = /* @__PURE__ */ new Map();
298
+ for (const route of sorted) holders.set(routeKey(route), (holders.get(routeKey(route)) ?? 0) + 1);
299
+ return sorted.map((route) => {
300
+ const short = routeKey(route);
301
+ const group = route.group ?? route.canonical;
302
+ return { route, key: holders.get(short) > 1 ? qualifiedRouteKey({ ...route, group }) : short, short, group };
303
+ });
304
+ }
305
+ function keyChannels(channels) {
306
+ const holders = /* @__PURE__ */ new Map();
307
+ for (const channel of channels) holders.set(channel.name, (holders.get(channel.name) ?? 0) + 1);
308
+ return [...channels].sort((a, b) => a.name.localeCompare(b.name) || a.server.localeCompare(b.server)).map((channel) => ({
309
+ channel,
310
+ key: holders.get(channel.name) > 1 ? `${channel.server}:${channel.name}` : channel.name
311
+ }));
312
+ }
15
313
  function literal(value) {
16
314
  return JSON.stringify(value);
17
315
  }
18
- function objectLiteral(rows) {
19
- return rows.length === 0 ? "{}" : `{
20
- ${rows.join("\n")}
316
+ function objectLiteral(rows2) {
317
+ return rows2.length === 0 ? "{}" : `{
318
+ ${rows2.join("\n")}
21
319
  }`;
22
320
  }
23
- function overloadsFor(fn, rows) {
24
- return rows.map(
321
+ function overloadsFor(fn, rows2) {
322
+ return rows2.map(
25
323
  (r) => r.params.length === 0 ? `export function ${fn}(name: ${literal(r.name)}): string;` : `export function ${fn}(name: ${literal(r.name)}, params: { ${r.params.map((p) => `${literal(p)}: string | number`).join("; ")} }): string;`
26
324
  ).join("\n");
27
325
  }
@@ -37,17 +335,14 @@ function renderRealtime(realtime) {
37
335
  }
38
336
  seenServer.add(server.name);
39
337
  }
40
- const holders = /* @__PURE__ */ new Map();
41
- for (const channel of realtime.channels) holders.set(channel.name, (holders.get(channel.name) ?? 0) + 1);
42
338
  const ambiguous = /* @__PURE__ */ new Map();
43
339
  const seenChannel = /* @__PURE__ */ new Set();
44
- const channels = [...realtime.channels].sort((a, b) => a.name.localeCompare(b.name) || a.server.localeCompare(b.server)).map((channel) => {
340
+ const channels = keyChannels(realtime.channels).map(({ channel, key }) => {
45
341
  if (!known.has(channel.server)) {
46
342
  throw new RouteManifestError(
47
343
  `The channel "${channel.name}" names the realtime server "${channel.server}", which is not in this workspace. A channel's socket URL comes from its server's canonical, so the server must be registered too.`
48
344
  );
49
345
  }
50
- const key = holders.get(channel.name) > 1 ? `${channel.server}:${channel.name}` : channel.name;
51
346
  if (seenChannel.has(key)) {
52
347
  throw new RouteManifestError(
53
348
  `The realtime server "${channel.server}" has two channels both named "${channel.name}". Rename one.`
@@ -91,18 +386,10 @@ export type ChannelName = keyof typeof CHANNELS;
91
386
  ${ambiguousOverloads}${overloadsFor("channelPath", channels.map((c) => ({ name: c.key, params: c.params })))}
92
387
  ${realtimeImplementation(ambiguousKeys.length > 0)}`;
93
388
  }
94
- function renderRouteManifest(routes, realtime) {
95
- const sorted = [...routes].sort(
96
- (a, b) => a.canonical.localeCompare(b.canonical) || a.name.localeCompare(b.name) || a.verb.localeCompare(b.verb)
97
- );
98
- const holders = /* @__PURE__ */ new Map();
99
- for (const route of sorted) holders.set(routeKey(route), (holders.get(routeKey(route)) ?? 0) + 1);
389
+ function renderRouteManifest(routes, realtime, inputs = NO_ROUTE_INPUTS) {
100
390
  const ambiguous = /* @__PURE__ */ new Map();
101
391
  const seen = /* @__PURE__ */ new Map();
102
- const rows = sorted.map((route) => {
103
- const short = routeKey(route);
104
- const group = route.group ?? route.canonical;
105
- const key = holders.get(short) > 1 ? qualifiedRouteKey({ ...route, group }) : short;
392
+ const rows2 = keyRoutes(routes).map(({ route, key, short, group }) => {
106
393
  const clash = seen.get(key);
107
394
  if (clash !== void 0) {
108
395
  throw new RouteManifestError(
@@ -115,7 +402,7 @@ function renderRouteManifest(routes, realtime) {
115
402
  const path = `/api:${route.canonical}/${route.name.replace(/^\/+/, "")}`;
116
403
  return { ...route, key, params, path };
117
404
  });
118
- const entries = rows.map(
405
+ const entries = rows2.map(
119
406
  (r) => ` ${literal(r.key)}: { verb: ${literal(r.verb)}, path: ${literal(r.path)} },`
120
407
  );
121
408
  const ambiguousKeys = [...ambiguous.keys()].sort();
@@ -133,7 +420,7 @@ const AMBIGUOUS: Record<string, readonly string[]> = ${objectLiteral(
133
420
  )};
134
421
  `;
135
422
  const realtimeSection = realtime && (realtime.servers.length > 0 || realtime.channels.length > 0) ? renderRealtime(realtime) : "";
136
- return `${HEADER}${FILL_PARAMS}${ambiguousSection}
423
+ return `${MANIFEST_HEADER}${FILL_PARAMS}${ambiguousSection}
137
424
  export const ROUTES = ${objectLiteral(entries)} as const;
138
425
 
139
426
  /**
@@ -141,10 +428,10 @@ export const ROUTES = ${objectLiteral(entries)} as const;
141
428
  * or \`"<group>:<VERB> <name>"\` when that pair is in more than one api group.
142
429
  */
143
430
  export type RouteName = keyof typeof ROUTES;
144
- ${rows.length > 1 ? MANY_ROUTES : ""}
145
- ${rows.length > 1 ? UNION_OVERLOAD : ""}${ambiguousOverloads ? `${ambiguousOverloads}
146
- ` : ""}${overloadsFor("routePath", rows.map((r) => ({ name: r.key, params: r.params })))}
147
- ${implementation(ambiguousKeys.length > 0)}${realtimeSection}`;
431
+ ${rows2.length > 1 ? MANY_ROUTES : ""}
432
+ ${rows2.length > 1 ? UNION_OVERLOAD : ""}${ambiguousOverloads ? `${ambiguousOverloads}
433
+ ` : ""}${overloadsFor("routePath", rows2.map((r) => ({ name: r.key, params: r.params })))}
434
+ ${implementation(ambiguousKeys.length > 0)}${realtimeSection}${renderRouteInputTypes(inputs)}`;
148
435
  }
149
436
  var UNION_OVERLOAD = `/** A union of route names (e.g. a \`key: RouteName\` parameter): params checked at runtime. */
150
437
  export function routePath<N extends RouteName>(name: ManyRoutes<N>, params?: Record<string, string | number>): string;
@@ -153,13 +440,16 @@ var MANY_ROUTES = `
153
440
  /** \`N\` when it is a union of two or more route names, else \`never\`. */
154
441
  type ManyRoutes<N> = [(N extends unknown ? (x: N) => void : never) extends (x: infer I) => void ? I : never] extends [never] ? N : never;
155
442
  `;
156
- var HEADER = `/**
443
+ var MANIFEST_HEADER = `/**
157
444
  * GENERATED by \`xanosdk routes --emit\`. Do not edit.
158
445
  *
159
- * Plain data plus one interpolator \u2014 this file imports nothing, so a frontend
160
- * gets the typed path/verb (and socket) contract without pulling the SDK runtime
161
- * into its bundle. Regenerate after changing an endpoint's name, verb, or api
162
- * group, or a realtime server's or channel's name.
446
+ * Plain data plus one interpolator, and the request input types of every
447
+ * endpoint, channel and message. The core sections import nothing; the only
448
+ * imports are the packages an installed module's block declares, never the
449
+ * SDK itself. So a frontend gets the typed path/verb (and socket) contract
450
+ * without pulling the SDK runtime into its bundle. Regenerate after changing an
451
+ * endpoint's name, verb, api group or inputs, or a realtime server's, channel's
452
+ * or message's name or inputs.
163
453
  */
164
454
  `;
165
455
  var FILL_PARAMS = `
@@ -376,12 +666,13 @@ function planRouteManifest(payload, locked = () => void 0) {
376
666
  if (guid === void 0) continue;
377
667
  const name = text(a.name);
378
668
  if (name !== void 0) groupByGuid.set(guid, name);
379
- const resolved = text(a.canonical) ?? (name !== void 0 ? locked("app", name) : void 0);
380
- if (resolved) canonicalByGuid.set(guid, resolved);
669
+ const resolved2 = text(a.canonical) ?? (name !== void 0 ? locked("app", name) : void 0);
670
+ if (resolved2) canonicalByGuid.set(guid, resolved2);
381
671
  }
382
- const rows = list("query").map((q) => {
672
+ const storedInputs = /* @__PURE__ */ new Map();
673
+ const rows2 = list("query").map((q) => {
383
674
  const group = ref(q.app);
384
- return {
675
+ const row = {
385
676
  verb: q.verb,
386
677
  // already an uppercase HttpVerb in the bundle
387
678
  // Match getPath(): the path segment drops any leading slash on the name.
@@ -389,8 +680,10 @@ function planRouteManifest(payload, locked = () => void 0) {
389
680
  canonical: group !== void 0 ? canonicalByGuid.get(group) : void 0,
390
681
  ...group !== void 0 && groupByGuid.has(group) ? { group: groupByGuid.get(group) } : {}
391
682
  };
683
+ storedInputs.set(row, q.input);
684
+ return row;
392
685
  });
393
- rows.sort((a, b) => (a.canonical ?? "").localeCompare(b.canonical ?? "") || a.name.localeCompare(b.name));
686
+ rows2.sort((a, b) => (a.canonical ?? "").localeCompare(b.canonical ?? "") || a.name.localeCompare(b.name));
394
687
  const serverNameByGuid = /* @__PURE__ */ new Map();
395
688
  const serverRows = list("realtime_server").flatMap((s) => {
396
689
  const name = text(s.name);
@@ -401,23 +694,51 @@ function planRouteManifest(payload, locked = () => void 0) {
401
694
  });
402
695
  const servers = serverRows.flatMap((s) => s.canonical ? [{ name: s.name, canonical: s.canonical }] : []);
403
696
  const describable = new Set(servers.map((s) => s.name));
697
+ const channelGuids = /* @__PURE__ */ new Map();
404
698
  const channels = list("channel").flatMap((c) => {
405
699
  const name = text(c.name);
406
700
  if (name === void 0) return [];
407
701
  const serverGuid = ref(c.server);
408
702
  const server = serverGuid !== void 0 ? serverNameByGuid.get(serverGuid) : void 0;
409
703
  if (server === void 0 || !describable.has(server)) return [];
410
- return [{ name, server }];
704
+ const channel = { name, server };
705
+ channelGuids.set(channel, text(c.guid));
706
+ storedInputs.set(channel, c.input);
707
+ return [channel];
708
+ });
709
+ const resolved = rows2.flatMap((r) => {
710
+ if (!r.canonical) return [];
711
+ const entry = { name: r.name, verb: r.verb, canonical: r.canonical, ...r.group !== void 0 ? { group: r.group } : {} };
712
+ storedInputs.set(entry, storedInputs.get(r));
713
+ return [entry];
714
+ });
715
+ const tables = tableColumns(payload);
716
+ const routeInputs = keyRoutes(resolved).map(({ route, key }) => ({
717
+ key,
718
+ inputs: describeInputs(storedInputs.get(route), tables)
719
+ }));
720
+ const channelKeyByGuid = /* @__PURE__ */ new Map();
721
+ const channelInputs = keyChannels(channels).map(({ channel, key }) => {
722
+ const guid = channelGuids.get(channel);
723
+ if (guid !== void 0) channelKeyByGuid.set(guid, key);
724
+ return { key, inputs: describeInputs(storedInputs.get(channel), tables) };
725
+ });
726
+ const messageInputs = list("message").flatMap((m) => {
727
+ const name = text(m.name);
728
+ const guid = ref(m.channel);
729
+ const channel = guid !== void 0 ? channelKeyByGuid.get(guid) : void 0;
730
+ if (name === void 0 || channel === void 0) return [];
731
+ return [{ key: `${channel} ${name}`, channel, name, inputs: describeInputs(m.input, tables) }];
411
732
  });
733
+ messageInputs.sort((a, b) => byCodeUnit(a.key, b.key));
412
734
  return {
413
- rows,
414
- resolved: rows.flatMap(
415
- (r) => r.canonical ? [{ name: r.name, verb: r.verb, canonical: r.canonical, ...r.group !== void 0 ? { group: r.group } : {} }] : []
416
- ),
417
- unresolved: rows.filter((r) => !r.canonical),
735
+ rows: rows2,
736
+ resolved,
737
+ unresolved: rows2.filter((r) => !r.canonical),
418
738
  servers,
419
739
  unresolvedServers: serverRows.filter((s) => !s.canonical).map((s) => s.name),
420
- channels
740
+ channels,
741
+ inputs: { routes: routeInputs, channels: channelInputs, messages: messageInputs }
421
742
  };
422
743
  }
423
744
  function unresolvedCanonicalMessage(unresolved, entry) {
@@ -430,7 +751,8 @@ function renderPlannedManifest(plan, entry = "<entry>") {
430
751
  if (plan.resolved.length === 0 && plan.servers.length === 0) return void 0;
431
752
  return renderRouteManifest(
432
753
  plan.resolved,
433
- plan.servers.length > 0 ? { servers: plan.servers, channels: plan.channels } : void 0
754
+ plan.servers.length > 0 ? { servers: plan.servers, channels: plan.channels } : void 0,
755
+ plan.inputs
434
756
  );
435
757
  }
436
758
 
@@ -438,10 +760,13 @@ export {
438
760
  RouteManifestError,
439
761
  routeKey,
440
762
  qualifiedRouteKey,
763
+ keyRoutes,
764
+ keyChannels,
441
765
  renderRouteManifest,
766
+ MANIFEST_HEADER,
442
767
  ROUTES_MANIFEST_BASENAME,
443
768
  planRouteManifest,
444
769
  unresolvedCanonicalMessage,
445
770
  renderPlannedManifest
446
771
  };
447
- //# sourceMappingURL=chunk-TM5LRSBB.js.map
772
+ //# sourceMappingURL=chunk-LBJA7IEM.js.map
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  installedCliAt,
10
10
  pathsShownFrom
11
- } from "./chunk-XNZURZ7T.js";
11
+ } from "./chunk-D7BUMOKU.js";
12
12
 
13
13
  // src/emit/project-sdk.ts
14
14
  import { existsSync, readFileSync, realpathSync } from "fs";
@@ -87,4 +87,4 @@ export {
87
87
  installedCliCommand,
88
88
  skewNote
89
89
  };
90
- //# sourceMappingURL=chunk-OVV2HXJ6.js.map
90
+ //# sourceMappingURL=chunk-LD6ARK3A.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  classifyNpmFailure
3
- } from "./chunk-OGUMHW2X.js";
3
+ } from "./chunk-YYC2DZMG.js";
4
4
  import {
5
5
  condenseNpmError,
6
6
  runNpmQuiet,
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-ZFDZKNGG.js";
9
9
  import {
10
10
  detectInstallRoot
11
- } from "./chunk-WRBKLYSJ.js";
11
+ } from "./chunk-DNBP4GJN.js";
12
12
  import {
13
13
  decodeDigest,
14
14
  reactPreset
@@ -17,8 +17,9 @@ import {
17
17
  blockVersion,
18
18
  composeBlock,
19
19
  findBlock,
20
+ htmlDialect,
20
21
  upsertBlock
21
- } from "./chunk-DGWHAVRG.js";
22
+ } from "./chunk-3EDSPMXN.js";
22
23
  import {
23
24
  detail,
24
25
  projectFileCli,
@@ -28,7 +29,7 @@ import {
28
29
  success,
29
30
  warn,
30
31
  withSpinner
31
- } from "./chunk-XNZURZ7T.js";
32
+ } from "./chunk-D7BUMOKU.js";
32
33
  import {
33
34
  defaultThemeChoice,
34
35
  themeGuidanceSection
@@ -58,6 +59,8 @@ The published types and JSDoc (\`node_modules/@xano/sdk/**/*.d.ts\`) are that
58
59
  same surface with the compiler attached. Author against those signatures. Do
59
60
  **not** invent an API that isn't there \u2014 if the types don't offer something,
60
61
  make your best typed guess from the exported signatures and note the gap.`;
62
+ var README_GUIDANCE = `- \`README.md\` \u2014 for a visitor to the repository: what the app does, how to run it, and
63
+ what it is built on. Its \`## Built with\` footer is a managed block this SDK refreshes.`;
61
64
  var LOCK_GUIDANCE = `Object identity derives from \`(type, name)\`, so a rename
62
65
  changes an object's guid and the engine DELETES and recreates it rather than
63
66
  renaming in place. \`xano/xano.lock\` freezes each guid and each API group's
@@ -149,9 +152,10 @@ ${LEARN_FROM_THE_LIBRARY}
149
152
 
150
153
  \`frontend/src/lib/api.ts\` takes request paths from \`xano/routes.gen.ts\`
151
154
  (\`routePath("GET notes/{id}", { id })\`), generated from the query defs by
152
- \`npm run xano:routes\` and regenerated by dev, build and typecheck, and takes
153
- request/response types from the defs with \`import type\` (\`InferInput\` /
154
- \`InferResponse\`). Never hand-type a URL or a request body, and never import a
155
+ \`npm run xano:routes\` and regenerated by dev, build and typecheck. Request types
156
+ come from the same file (\`RouteInputs["POST create_note"]\`, \`MessageInputs\` for
157
+ realtime); response types from the defs with \`import type\` (\`InferResponse\`).
158
+ Never hand-type a URL or a request body, and never import a
155
159
  def as a value in the frontend: its \`getPath()\` drags the backend into the bundle.
156
160
 
157
161
  ### Layout
@@ -160,6 +164,7 @@ def as a value in the frontend: its \`getPath()\` drags the backend into the bun
160
164
  groups, and endpoints. Pin each API group's canonical slug so public paths are
161
165
  stable and \`xano:routes\` resolves without a lock file.
162
166
  - \`xano/EXAMPLE.md\` \u2014 the walkthrough for adding your first table + endpoint.
167
+ ${README_GUIDANCE}
163
168
  ${frontendSection(frontend)}
164
169
 
165
170
  ### Workflow
@@ -264,8 +269,9 @@ ${LEARN_FROM_THE_LIBRARY}
264
269
 
265
270
  \`frontend/src/lib/api.ts\` takes request paths from \`xano/routes.gen.ts\`
266
271
  (\`routePath("GET notes/{id}", { id })\`), generated from the query defs in
267
- \`xano/\` by \`npm run xano:routes\`, and request/response types from the defs with
268
- \`import type\` (\`InferInput\` / \`InferResponse\`). Never hand-type a URL or a
272
+ \`xano/\` by \`npm run xano:routes\`. Request types come from the same file
273
+ (\`RouteInputs["<VERB> <name>"]\`, \`MessageInputs\` for realtime); response types
274
+ from the defs with \`import type\` (\`InferResponse\`). Never hand-type a URL or a
269
275
  request body, and never import a def as a value in the frontend.
270
276
 
271
277
  ### Layout
@@ -273,6 +279,7 @@ request body, and never import a def as a value in the frontend.
273
279
  - \`xano/index.ts\` \u2014 the barrel: default-exports the \`workspace()\` with every pulled object registered.
274
280
  - \`xano/<kind>/<name>.ts\` \u2014 one file per object (tables in \`xano/table/\`); \`xano/_shared.ts\` \u2014 anything else referenced from more than one file.
275
281
  - \`xano/README.md\` \u2014 the decode report for this pull.
282
+ ${README_GUIDANCE}
276
283
  ${frontendSection(frontend)}
277
284
 
278
285
  ### Workflow
@@ -306,15 +313,7 @@ Other \`@xano-sdk/*\` packages register onto the same workspace \u2014 but a
306
313
  composing them from a module outside \`xano/\`.
307
314
  `;
308
315
  }
309
- var BLOCK_BEGIN = "<!-- BEGIN:xanosdk-agent-rules -->";
310
- var BLOCK_END = "<!-- END:xanosdk-agent-rules -->";
311
- var AGENT_DIALECT = {
312
- begin: () => BLOCK_BEGIN,
313
- end: () => BLOCK_END,
314
- stamp: (version) => `<!-- xanosdk ${version} \u2014 generated; edits inside this block are overwritten -->`,
315
- parseStamp: (block) => /<!-- xanosdk ([^\s]+) — generated/.exec(block)?.[1] ?? null
316
- };
317
- var AGENT_BLOCK = { dialect: AGENT_DIALECT, pkg: "xanosdk-agent-rules" };
316
+ var AGENT_BLOCK = { dialect: htmlDialect("xanosdk-agent-rules"), pkg: "xanosdk-agent-rules" };
318
317
  function managedBlock(body, version) {
319
318
  return composeBlock(AGENT_BLOCK, [body], version);
320
319
  }
@@ -661,4 +660,4 @@ export {
661
660
  changedOnDisk,
662
661
  scaffoldProject
663
662
  };
664
- //# sourceMappingURL=chunk-F6IKWAIU.js.map
663
+ //# sourceMappingURL=chunk-LL7SGTRC.js.map