@xano/sdk 1.0.11 → 1.0.13

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 (204) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +13 -12
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-CKLYJRIS.js → agent-file-refresh-DAFGNMQX.js} +9 -9
  5. package/dist/{agent-skill-command-QKQG5NIZ.js → agent-skill-command-6M46ZGOL.js} +34 -34
  6. package/dist/{answer-shape-UMQRXMCX.js → answer-shape-CBUQRSXI.js} +4 -4
  7. package/dist/{backend-dir-V2FELHYM.js → backend-dir-J2J7JNS6.js} +9 -9
  8. package/dist/{backend-slot-TTRNOQF5.js → backend-slot-X5AUX2TT.js} +3 -3
  9. package/dist/bin.js +35 -35
  10. package/dist/{branch-Q7CDJRU6.js → branch-YS2K3VOB.js} +8 -8
  11. package/dist/{branch-commands-ZY2W3ICB.js → branch-commands-BUKVE637.js} +20 -20
  12. package/dist/{chunk-4JKXGPXB.js → chunk-2BHYGUTI.js} +2 -2
  13. package/dist/{chunk-VHV25AAO.js → chunk-373AVIL2.js} +7 -7
  14. package/dist/{chunk-YP76ZCQ5.js → chunk-3RZ4UJWV.js} +3 -3
  15. package/dist/{chunk-TG65NWUR.js → chunk-3ZVSOZZC.js} +2 -2
  16. package/dist/{chunk-76UAME77.js → chunk-4CS4DKQC.js} +2 -2
  17. package/dist/{chunk-KYTQW3YT.js → chunk-5ONWBQ2C.js} +7 -7
  18. package/dist/{chunk-NPW6DSZB.js → chunk-5SMUND4J.js} +6 -6
  19. package/dist/{chunk-B7JRCM2S.js → chunk-5XDKKE5Y.js} +4 -4
  20. package/dist/{chunk-WM7Y3MDE.js → chunk-6HTXQAMG.js} +14 -14
  21. package/dist/{chunk-NHXBKFHG.js → chunk-6OOZJQJK.js} +67 -67
  22. package/dist/{chunk-VJTTTIIB.js → chunk-6QJORUHC.js} +2 -2
  23. package/dist/{chunk-YE7MHW45.js → chunk-7NNLRNXE.js} +4 -4
  24. package/dist/{chunk-6S263KTM.js → chunk-A3CT26GX.js} +2 -2
  25. package/dist/{chunk-ULUUOUQX.js → chunk-AUYXBKGR.js} +2 -2
  26. package/dist/{chunk-4WBZ6T76.js → chunk-BXVNRUDB.js} +3 -3
  27. package/dist/{chunk-6PTITS3M.js → chunk-C4TZP5PQ.js} +5 -5
  28. package/dist/{chunk-3Q43PZGI.js → chunk-CGZSF756.js} +24 -24
  29. package/dist/{chunk-HFOGQIII.js → chunk-CTUIMNEM.js} +2 -2
  30. package/dist/{chunk-C6KBZH7M.js → chunk-D4VKPOD4.js} +2 -2
  31. package/dist/{chunk-HVPSDQJB.js → chunk-DB7P2SSK.js} +3 -3
  32. package/dist/{chunk-GN5SQMIQ.js → chunk-DFCYAEBE.js} +2 -2
  33. package/dist/{chunk-TR7EOUQE.js → chunk-DILYWJVP.js} +2 -2
  34. package/dist/{chunk-HXRXQAZE.js → chunk-DPSR5GRE.js} +43 -43
  35. package/dist/{chunk-ZO3QWFNV.js → chunk-DYGRTWAI.js} +3 -3
  36. package/dist/{chunk-VD7YTLWL.js → chunk-DZUNF7IH.js} +2 -2
  37. package/dist/{chunk-DY3EJWWH.js → chunk-EGEANMMK.js} +2 -2
  38. package/dist/{chunk-HW2JPR5W.js → chunk-EKS7SAZS.js} +40 -40
  39. package/dist/{chunk-ZS7VI7RK.js → chunk-ENAUSLMP.js} +3 -3
  40. package/dist/{chunk-QAY4RW2E.js → chunk-ENBGJJJH.js} +4 -4
  41. package/dist/{chunk-J746QNTP.js → chunk-FBWMKHLO.js} +3 -3
  42. package/dist/{chunk-QXOBZSQD.js → chunk-FLDFKG24.js} +4 -4
  43. package/dist/{chunk-D5NAWB4P.js → chunk-GRWYO2MS.js} +3 -3
  44. package/dist/{chunk-QL3ZJWGG.js → chunk-H5FAYLCR.js} +2 -2
  45. package/dist/{chunk-KSBUHLNF.js → chunk-H6VVSGKN.js} +7 -7
  46. package/dist/{chunk-7JKNWDYN.js → chunk-H7GMGZHI.js} +2 -2
  47. package/dist/{chunk-FGNDJBT4.js → chunk-HDANNK4A.js} +6 -6
  48. package/dist/{chunk-KI6U2GD2.js → chunk-HEMWBHQS.js} +13 -13
  49. package/dist/{chunk-5QOV52V4.js → chunk-I2AVVARA.js} +2 -2
  50. package/dist/{chunk-B3NH5UBI.js → chunk-JKGRQW6D.js} +4 -4
  51. package/dist/{chunk-XQO4A4Q4.js → chunk-K6BQPFRS.js} +3 -3
  52. package/dist/{chunk-NFSUGVDY.js → chunk-M7DIIJPW.js} +4 -4
  53. package/dist/{chunk-4BR5TEXI.js → chunk-MLKJUEG3.js} +21 -21
  54. package/dist/{chunk-C2GHFADU.js → chunk-N3XSXGAL.js} +2 -2
  55. package/dist/{chunk-U4LRDTIM.js → chunk-NMHTB346.js} +8 -8
  56. package/dist/{chunk-4ZTXYT3T.js → chunk-O6PWEJUV.js} +8 -8
  57. package/dist/{chunk-S42TFTM5.js → chunk-OBRMA2VK.js} +3 -3
  58. package/dist/{chunk-3UZQ5TMG.js → chunk-OCNTMJSY.js} +3 -3
  59. package/dist/{chunk-IB6SKACE.js → chunk-P5JF3U65.js} +4 -4
  60. package/dist/{chunk-AM5T76NQ.js → chunk-P6HXDOFG.js} +13 -13
  61. package/dist/{chunk-75MKIQON.js → chunk-PCHIHVX6.js} +4 -4
  62. package/dist/{chunk-PBK257CI.js → chunk-POZ6V4MU.js} +2 -2
  63. package/dist/{chunk-VTZF3ZNR.js → chunk-QWWQM4XZ.js} +7 -7
  64. package/dist/{chunk-QC3MKMDK.js → chunk-R7XZW4SB.js} +2 -2
  65. package/dist/{chunk-KDPXO5PO.js → chunk-RAGFXELQ.js} +5 -5
  66. package/dist/{chunk-DRWUMFSP.js → chunk-RQHXYL77.js} +3 -3
  67. package/dist/{chunk-OBJ7FQDX.js → chunk-RZABQ4YH.js} +2 -2
  68. package/dist/{chunk-KCCZCIDJ.js → chunk-SBS2IYTN.js} +3 -3
  69. package/dist/{chunk-LYN3XNDE.js → chunk-TANWE2ZY.js} +102 -122
  70. package/dist/{chunk-NU7EME32.js → chunk-U4BGBU3R.js} +27 -27
  71. package/dist/{chunk-SFOUFU4C.js → chunk-U4DSFCH5.js} +55 -5
  72. package/dist/{chunk-UUYKEIHP.js → chunk-UDCKYLBW.js} +4 -4
  73. package/dist/{chunk-D2PSNKZD.js → chunk-UECNKDDA.js} +8 -8
  74. package/dist/{chunk-R4NOZBOY.js → chunk-UFFIU57H.js} +4 -4
  75. package/dist/{chunk-RNKP5TA2.js → chunk-UKC65HBQ.js} +4 -4
  76. package/dist/{chunk-R3LANPQZ.js → chunk-VA4JK4TW.js} +3 -3
  77. package/dist/{chunk-I5XSXMJQ.js → chunk-VFRL4G72.js} +3 -3
  78. package/dist/{chunk-3BI62SPQ.js → chunk-W5MKVFBQ.js} +4 -4
  79. package/dist/{chunk-YKCDUHBR.js → chunk-WQZCFVAD.js} +5 -5
  80. package/dist/{chunk-HQPL34O6.js → chunk-XFQAA2SU.js} +2 -2
  81. package/dist/{chunk-SNKABK5L.js → chunk-XL7EA62X.js} +5 -5
  82. package/dist/{chunk-H3ZBAR2L.js → chunk-XM56DAM7.js} +8 -8
  83. package/dist/{chunk-PFW7WFAT.js → chunk-XVOODRNK.js} +4 -4
  84. package/dist/{chunk-FDPW2M3S.js → chunk-XYVPF63S.js} +8 -8
  85. package/dist/{chunk-7MPI7NIW.js → chunk-YJK4NPXC.js} +3 -3
  86. package/dist/{chunk-64ODZADR.js → chunk-ZACMAKZE.js} +13 -13
  87. package/dist/{chunk-7FPFYYCW.js → chunk-ZGNWMGN3.js} +7 -7
  88. package/dist/{chunk-7YSZSEZL.js → chunk-ZISPEBNM.js} +6 -3
  89. package/dist/{chunk-FNA5CUVN.js → chunk-ZSMHS7BU.js} +4 -4
  90. package/dist/cli.js +33 -33
  91. package/dist/{codegen-command-6AB3REIV.js → codegen-command-BAFON45M.js} +47 -47
  92. package/dist/{commands-FOHIPDKZ.js → commands-IFRAGWGK.js} +2 -2
  93. package/dist/{completion-XUBGMKGV.js → completion-RTXCODHS.js} +2 -2
  94. package/dist/{config-544VCRKP.js → config-EHFXNFSP.js} +3 -3
  95. package/dist/{deploy-command-LRJBO4LX.js → deploy-command-JW7R3BPW.js} +40 -40
  96. package/dist/{deploy-source-JTPMMO3B.js → deploy-source-ZUPLAL7L.js} +25 -25
  97. package/dist/{dev-env-sync-ODJYGSWT.js → dev-env-sync-W7OTV7OD.js} +34 -34
  98. package/dist/{display-name-hint-EZQK2PDU.js → display-name-hint-BKPMISQU.js} +10 -10
  99. package/dist/{env-example-refresh-DR44A6YZ.js → env-example-refresh-TS7WBVZQ.js} +48 -48
  100. package/dist/{env-pull-command-47XQO5J2.js → env-pull-command-5IYXQ2WK.js} +35 -35
  101. package/dist/{env-target-HBY2LQUA.js → env-target-TQBPLU2S.js} +9 -9
  102. package/dist/{env-var-command-HTKKTBOC.js → env-var-command-AKCWYZPB.js} +35 -35
  103. package/dist/{ephemeral-H24NF6WP.js → ephemeral-CART6DIR.js} +8 -8
  104. package/dist/{ephemeral-command-T5EFYCEY.js → ephemeral-command-SJYH6XRS.js} +36 -36
  105. package/dist/{ephemeral-state-YLZQIOBF.js → ephemeral-state-HPKSKC4Y.js} +7 -7
  106. package/dist/{generate-command-36OWZF23.js → generate-command-FSCFZPOJ.js} +52 -52
  107. package/dist/{gitignore-NLLQURLD.js → gitignore-6IJ66XME.js} +13 -13
  108. package/dist/{impersonate-command-HJYBQV6X.js → impersonate-command-IH4HMSS3.js} +31 -31
  109. package/dist/{import-TXYVFYJS.js → import-RUBCGLCA.js} +4 -4
  110. package/dist/{init-command-54M3AA27.js → init-command-STB4YSAK.js} +38 -38
  111. package/dist/{init-modules-MVULNRKR.js → init-modules-YIZYPCMM.js} +7 -7
  112. package/dist/{init-web-MSXDARRF.js → init-web-OGKACAOC.js} +2 -2
  113. package/dist/internal.js +5 -5
  114. package/dist/{keep-data-merge-Y6PYJOPW.js → keep-data-merge-VRKS64JK.js} +18 -18
  115. package/dist/{landing-record-LBJMKORB.js → landing-record-5EFK7RI6.js} +15 -15
  116. package/dist/{local-engine-choice-SXSWNCZT.js → local-engine-choice-TRTEJVMV.js} +28 -28
  117. package/dist/{local-engine-command-3GICPJPL.js → local-engine-command-2FK2PE2P.js} +33 -33
  118. package/dist/{local-engine-deploy-ID4JJXB5.js → local-engine-deploy-ZZVHBI2X.js} +11 -11
  119. package/dist/{local-engine-lookup-IC7BKAYP.js → local-engine-lookup-QFRKO35F.js} +2 -2
  120. package/dist/{local-engine-mcp-bridge-3SOJMZ5T.js → local-engine-mcp-bridge-T2EFRRAF.js} +4 -4
  121. package/dist/{local-engine-mcp-command-ZUS7LQ7F.js → local-engine-mcp-command-FB7EOGG6.js} +35 -35
  122. package/dist/{local-engine-process-HG5BGG3F.js → local-engine-process-XH35DURU.js} +6 -6
  123. package/dist/{local-engine-update-check-SKZR7YSC.js → local-engine-update-check-HAXE7BVG.js} +4 -4
  124. package/dist/{lock-commands-PTBKQE72.js → lock-commands-7PBZIRWR.js} +38 -38
  125. package/dist/{login-command-HH4FA65C.js → login-command-2O6GRMTH.js} +21 -21
  126. package/dist/{logout-command-WPUWLZSW.js → logout-command-RZXGW3O2.js} +12 -12
  127. package/dist/{marketplace-command-ISG2U5NA.js → marketplace-command-NCMLGIMS.js} +28 -28
  128. package/dist/{marketplace-resolve-PWEYJ2XS.js → marketplace-resolve-HPCRNV5O.js} +5 -5
  129. package/dist/{meta-client-P7E6PCB7.js → meta-client-DYYM5F5G.js} +10 -10
  130. package/dist/{module-manifest-KY7J63HG.js → module-manifest-EFE6JBZW.js} +3 -3
  131. package/dist/node.js +35 -35
  132. package/dist/{operation-outcome-2Z6II4HB.js → operation-outcome-SHNROAFA.js} +19 -19
  133. package/dist/{output-target-MWYZ5HYN.js → output-target-PSSR3E4N.js} +14 -14
  134. package/dist/{plan-disclosure-PQAXSAUH.js → plan-disclosure-WEMB5ZJ2.js} +11 -11
  135. package/dist/{plugin-contributions-PAGG6SUP.js → plugin-contributions-U5PAZKBE.js} +4 -4
  136. package/dist/{plugin-prompt-2MX6LF6X.js → plugin-prompt-O5PAMV5B.js} +4 -4
  137. package/dist/{plugin-questions-AP6VUTOB.js → plugin-questions-ZVYNKDRB.js} +3 -3
  138. package/dist/plugin.d.ts +2 -1
  139. package/dist/{preflight-command-6LCPYVTV.js → preflight-command-6F7JF3YQ.js} +42 -42
  140. package/dist/{profile-command-74AR3FB7.js → profile-command-5AOGD6GV.js} +22 -22
  141. package/dist/{profile-pointer-4HJQH5ZR.js → profile-pointer-VTOZDBHM.js} +3 -3
  142. package/dist/{project-dependency-ORX45I74.js → project-dependency-EZNTHMWI.js} +6 -6
  143. package/dist/{project-sdk-IYMFVQRC.js → project-sdk-ZGJM4WYQ.js} +3 -3
  144. package/dist/{promote-command-YD3YQWJG.js → promote-command-O2NRRFLK.js} +57 -57
  145. package/dist/{prompt-ZZUYWFQX.js → prompt-F7UVH4GP.js} +3 -3
  146. package/dist/{publish-command-7VKTBVVP.js → publish-command-6VVSJPLI.js} +43 -43
  147. package/dist/{pull-command-XIYO7WTF.js → pull-command-GE2WUEUF.js} +50 -50
  148. package/dist/{pull-superseded-UZ3MB53B.js → pull-superseded-77UZ7CHH.js} +3 -3
  149. package/dist/{release-command-NADSTRM2.js → release-command-55RTR674.js} +46 -46
  150. package/dist/{release-ns-command-2VUTJ4A6.js → release-ns-command-5XPZ2B6N.js} +65 -65
  151. package/dist/{retry-command-VZYLYDVX.js → retry-command-S5QALD5Z.js} +7 -7
  152. package/dist/{routes-manifest-Z7I4TZIL.js → routes-manifest-ET2TTSCL.js} +12 -2
  153. package/dist/{routes-manifest-file-BDJ6XQXF.js → routes-manifest-file-42FTJHRY.js} +5 -5
  154. package/dist/{secrets-file-KBMEY2SS.js → secrets-file-N5IF265R.js} +13 -13
  155. package/dist/{secrets-fill-command-YUAJSOZW.js → secrets-fill-command-35WKBURT.js} +37 -37
  156. package/dist/{seed-KEPIS7UZ.js → seed-5YLQRT2D.js} +3 -3
  157. package/dist/{source-resolve-KB7NWL3I.js → source-resolve-JXGOVJD3.js} +17 -17
  158. package/dist/{static-host-JAOT3N3E.js → static-host-TQP3FXPI.js} +4 -4
  159. package/dist/{status-command-YRIB6UJP.js → status-command-G3DFRMU7.js} +32 -32
  160. package/dist/{store-YFNDD6GZ.js → store-ZE5BXCOW.js} +5 -5
  161. package/dist/{sync-contributions-LMLYV7VL.js → sync-contributions-7T4CSPVQ.js} +8 -8
  162. package/dist/{sync-record-U65BCPSP.js → sync-record-ILWS44DG.js} +9 -9
  163. package/dist/{table-E5YTK7QX.js → table-V3LTQUY6.js} +5 -5
  164. package/dist/{tables-command-IONX4ZF2.js → tables-command-7NUOZBHX.js} +30 -30
  165. package/dist/{tenant-DAXJ4P4D.js → tenant-7WUS7Q6V.js} +9 -9
  166. package/dist/{tenant-command-635Y2YCR.js → tenant-command-JGEHRKN7.js} +67 -67
  167. package/dist/{test-command-CN76VVUK.js → test-command-2LNEA6GK.js} +30 -30
  168. package/dist/{tests-CLDZWLKF.js → tests-ENFUACKD.js} +5 -5
  169. package/dist/{token-WL7SSK64.js → token-DWNH44NW.js} +8 -8
  170. package/dist/{toolchain-hooks-VI2WOPST.js → toolchain-hooks-QIFGPGH2.js} +4 -4
  171. package/dist/{toolchain-modules-OXUU342N.js → toolchain-modules-F4DUMWTO.js} +4 -4
  172. package/dist/{toolchain-peers-AIKWKJH7.js → toolchain-peers-K44IINPG.js} +7 -7
  173. package/dist/{tracked-backend-ON5V2RBJ.js → tracked-backend-ZFXVLBBJ.js} +28 -28
  174. package/dist/{update-check-I75SHTAD.js → update-check-KBHT63GJ.js} +36 -36
  175. package/dist/{upgrade-command-2J7P5NSX.js → upgrade-command-CI543AZP.js} +38 -38
  176. package/dist/{whoami-command-HJJK2QJS.js → whoami-command-77DXENWD.js} +11 -11
  177. package/dist/{workspace-7QVUA7HI.js → workspace-RI5C77BZ.js} +4 -4
  178. package/dist/{workspace-binding-D7HZTF7N.js → workspace-binding-PR57NBGH.js} +10 -10
  179. package/dist/{workspace-command-KXTR5SOE.js → workspace-command-6HHVFQKW.js} +61 -61
  180. package/dist/{workspace-env-RASIOYSN.js → workspace-env-2APJEASO.js} +10 -10
  181. package/dist/{workspace-export-UHY22VBI.js → workspace-export-GHMUSX2P.js} +4 -4
  182. package/dist/{writable-2A6MBSFD.js → writable-Y6CE2CGK.js} +3 -3
  183. package/dist/{xanosdk-import-767BQ2HP.js → xanosdk-import-HBQH3ZBS.js} +5 -5
  184. package/dist/{xanosdk-project-PETOFVUQ.js → xanosdk-project-W45IR3Q7.js} +11 -11
  185. package/guides/authoring.md +13 -7
  186. package/guides/bundle.md +1 -1
  187. package/guides/cli.md +29 -19
  188. package/guides/codegen.md +3 -2
  189. package/guides/codes.md +2 -2
  190. package/guides/coverage.md +4 -3
  191. package/guides/deploying.md +17 -10
  192. package/guides/environment.md +12 -12
  193. package/guides/marketplace.md +12 -6
  194. package/guides/module-contract.md +11 -6
  195. package/guides/object-kinds.md +8 -5
  196. package/guides/scaffold.md +24 -12
  197. package/guides/typed-frontend.md +20 -5
  198. package/llms/kinds-knowledge.md +2 -2
  199. package/llms/object-kinds.md +2 -2
  200. package/llms-full.txt +6 -6
  201. package/llms.txt +2 -2
  202. package/manifest.json +3 -3
  203. package/package.json +1 -1
  204. package/skills/xano-backend/SKILL.md +2 -2
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  assertBranchReadSupported,
3
3
  exportWorkspaceBundle
4
- } from "./chunk-QC3MKMDK.js";
4
+ } from "./chunk-R7XZW4SB.js";
5
5
  import "./chunk-3DRXWLJ5.js";
6
6
  import "./chunk-X4DVXBFY.js";
7
- import "./chunk-TR7EOUQE.js";
7
+ import "./chunk-DILYWJVP.js";
8
8
  import "./chunk-MF4W6FHU.js";
9
9
  import "./chunk-X2NL4KUO.js";
10
- import "./chunk-C6KBZH7M.js";
10
+ import "./chunk-D4VKPOD4.js";
11
11
  import "./chunk-YEH5OIPF.js";
12
12
  import "./chunk-UTI5G6OJ.js";
13
13
  import "./chunk-5ZSO4T2G.js";
@@ -18,4 +18,4 @@ export {
18
18
  assertBranchReadSupported,
19
19
  exportWorkspaceBundle
20
20
  };
21
- //# sourceMappingURL=workspace-export-UHY22VBI.js.map
21
+ //# sourceMappingURL=workspace-export-GHMUSX2P.js.map
@@ -5,9 +5,9 @@ import {
5
5
  unreadableError,
6
6
  unwritableBlocker,
7
7
  unwritableError
8
- } from "./chunk-ULUUOUQX.js";
8
+ } from "./chunk-AUYXBKGR.js";
9
9
  import "./chunk-FWD7AL6N.js";
10
- import "./chunk-C6KBZH7M.js";
10
+ import "./chunk-D4VKPOD4.js";
11
11
  import "./chunk-YEH5OIPF.js";
12
12
  import "./chunk-UTI5G6OJ.js";
13
13
  import "./chunk-5ZSO4T2G.js";
@@ -22,4 +22,4 @@ export {
22
22
  unwritableBlocker,
23
23
  unwritableError
24
24
  };
25
- //# sourceMappingURL=writable-2A6MBSFD.js.map
25
+ //# sourceMappingURL=writable-Y6CE2CGK.js.map
@@ -13,15 +13,15 @@ import {
13
13
  resetXanoSdkImportDetection,
14
14
  withDefaultBranchPointer,
15
15
  xanosdkImport
16
- } from "./chunk-B7JRCM2S.js";
16
+ } from "./chunk-5XDKKE5Y.js";
17
17
  import "./chunk-3DRXWLJ5.js";
18
18
  import "./chunk-X4DVXBFY.js";
19
- import "./chunk-VJTTTIIB.js";
20
- import "./chunk-TR7EOUQE.js";
19
+ import "./chunk-6QJORUHC.js";
20
+ import "./chunk-DILYWJVP.js";
21
21
  import "./chunk-4KHEMC32.js";
22
22
  import "./chunk-MF4W6FHU.js";
23
23
  import "./chunk-X2NL4KUO.js";
24
- import "./chunk-C6KBZH7M.js";
24
+ import "./chunk-D4VKPOD4.js";
25
25
  import "./chunk-7FIMUFBP.js";
26
26
  import "./chunk-H2V3N23D.js";
27
27
  import "./chunk-3JDU4VRL.js";
@@ -53,4 +53,4 @@ export {
53
53
  withDefaultBranchPointer,
54
54
  xanosdkImport
55
55
  };
56
- //# sourceMappingURL=xanosdk-import-767BQ2HP.js.map
56
+ //# sourceMappingURL=xanosdk-import-HBQH3ZBS.js.map
@@ -3,29 +3,29 @@ import {
3
3
  enterProjectRoot,
4
4
  isProjectDir,
5
5
  projectDirFrom
6
- } from "./chunk-RNKP5TA2.js";
6
+ } from "./chunk-UKC65HBQ.js";
7
7
  import "./chunk-EUUUMY7J.js";
8
- import "./chunk-D5NAWB4P.js";
9
- import "./chunk-7YSZSEZL.js";
10
- import "./chunk-FGNDJBT4.js";
11
- import "./chunk-B3NH5UBI.js";
8
+ import "./chunk-GRWYO2MS.js";
9
+ import "./chunk-ZISPEBNM.js";
10
+ import "./chunk-HDANNK4A.js";
11
+ import "./chunk-JKGRQW6D.js";
12
12
  import "./chunk-ZFDZKNGG.js";
13
13
  import "./chunk-FWD7AL6N.js";
14
- import "./chunk-6PTITS3M.js";
14
+ import "./chunk-C4TZP5PQ.js";
15
15
  import "./chunk-DXUICABI.js";
16
- import "./chunk-TR7EOUQE.js";
16
+ import "./chunk-DILYWJVP.js";
17
17
  import "./chunk-4KHEMC32.js";
18
18
  import "./chunk-DNBP4GJN.js";
19
- import "./chunk-QL3ZJWGG.js";
19
+ import "./chunk-H5FAYLCR.js";
20
20
  import "./chunk-WAVNUTMT.js";
21
- import "./chunk-5QOV52V4.js";
21
+ import "./chunk-I2AVVARA.js";
22
22
  import "./chunk-LLNZGEFK.js";
23
23
  import "./chunk-HU7F56VF.js";
24
24
  import "./chunk-MF4W6FHU.js";
25
25
  import "./chunk-X2NL4KUO.js";
26
26
  import "./chunk-IZI3SYXH.js";
27
27
  import "./chunk-LJM5CIY4.js";
28
- import "./chunk-C6KBZH7M.js";
28
+ import "./chunk-D4VKPOD4.js";
29
29
  import "./chunk-YEH5OIPF.js";
30
30
  import "./chunk-UTI5G6OJ.js";
31
31
  import "./chunk-5ZSO4T2G.js";
@@ -39,4 +39,4 @@ export {
39
39
  isProjectDir,
40
40
  projectDirFrom
41
41
  };
42
- //# sourceMappingURL=xanosdk-project-PETOFVUQ.js.map
42
+ //# sourceMappingURL=xanosdk-project-W45IR3Q7.js.map
@@ -553,9 +553,11 @@ query({
553
553
  happened by the time the override lands.
554
554
  - A `resultStrategy: "replace"` middleware attached `post` rewrites the response at runtime,
555
555
  which `InferResponse` can't see — declare `responseShape` on the endpoint.
556
- - `workspaceConfig` also carries `realtime`, `documentation`, and `swagger`, which are
557
- server-shaped and carried verbatim rather than authored. `realtime` there is the **legacy**
558
- workspace-level block, not the realtime primitives you author.
556
+ - `workspaceConfig` also carries `realtime`, `documentation`, and `swagger`. `realtime` is
557
+ server-shaped and carried verbatim rather than authored — it is the **legacy**
558
+ workspace-level block, not the realtime primitives you author. `documentation` is the
559
+ authored gate on the hosted docs (omit it to leave the target's alone), and `swagger` is a
560
+ boolean (default `false`).
559
561
 
560
562
  **The canonical rate-limit middleware.** Build the per-user key with the filter chain
561
563
  (`"prefix" + auth("id")` doesn't exist):
@@ -651,7 +653,8 @@ workspaceConfig({ name: "my-app", env: { STRIPE_KEY: "" } });
651
653
 
652
654
  ```bash
653
655
  # xano/.env — gitignored, preserved across a pull, and read with no flag by every
654
- # command that compiles a bundle (deploy, export, preflight).
656
+ # command that compiles a bundle (deploy, export, preflight, workspace diff,
657
+ # workspace reset-tables, and release create's comparison).
655
658
  STRIPE_KEY=sk_live_...
656
659
  ```
657
660
 
@@ -886,9 +889,12 @@ with `allRows: true`, which wipes the table and returns the deleted count — th
886
889
  longer be reached by forgetting an argument. Reach for `s.db.truncate({ table, reset: true })`
887
890
  when the id sequence should restart too.
888
891
 
889
- Deploy is a full replace, so re-deploying re-seeds cleanly — no duplicate rows. Seed
890
- data travels only in the deploy package (resolved at deploy time); it never enters the
891
- compiled workspace bundle.
892
+ A deploy without `--keep-data` is a full replace, so it re-seeds cleanly — no duplicate
893
+ rows. The scaffolded `xano:deploy` passes `--keep-data`, which merges and leaves table rows
894
+ alone (`--reset` forces the replace and re-seed). A `--to` merge writes seed rows only with
895
+ `--seed`, and `workspace reset-tables` puts named tables back to their seeds. Seed data
896
+ travels only in the deploy package (resolved at deploy time); it never enters the compiled
897
+ workspace bundle.
892
898
 
893
899
  For data in a file, use `seedFile`:
894
900
 
package/guides/bundle.md CHANGED
@@ -8,7 +8,7 @@ engine grows a new one.
8
8
  A bundle is what `export` writes:
9
9
 
10
10
  ```bash
11
- npx xanosdk export ./xano/index.ts --out workspace.json
11
+ npx xanosdk export ./xano/index.ts --out bundle.json
12
12
  ```
13
13
 
14
14
  ```ts
package/guides/cli.md CHANGED
@@ -26,7 +26,7 @@ xanosdk marketplace remove <toolchain-package> # uninstall it and drop what
26
26
  xanosdk export ./xano/index.ts # bundle to stdout
27
27
  xanosdk export ./xano/index.ts --out ws.json
28
28
  xanosdk compile ./xano/functions/get-user.ts # a single function's JSON
29
- xanosdk routes ./xano/index.ts # each query's verb + resolved api:<canonical>/<name> (`paths` is an alias)
29
+ xanosdk routes ./xano/index.ts # every route, realtime socket/channel and MCP server address (`paths` is an alias)
30
30
 
31
31
  xanosdk export ./xano/index.ts --strict # CI: fail the build on any warning, don't just print it
32
32
  xanosdk export ./xano/index.ts --no-lock # build with no xano.lock (one is written by default; refused once one exists)
@@ -53,8 +53,10 @@ xanosdk deploy ./xano/index.ts --ephemeral --expires-hours 8 # the ephemeral's
53
53
  xanosdk deploy ./xano/index.ts --ephemeral --keep-data --static ./frontend/dist --static-host docs # publish to a named static host — merge only: a replace deletes it, and a deploy creates only `default` (create `docs` in the dashboard first)
54
54
  xanosdk deploy ./xano/index.ts --ephemeral --static ./frontend/dist --static-routing spa # override URL resolution, spa|multipage (inferred from the bundle; rarely needed)
55
55
  xanosdk deploy ./xano/index.ts --keep-data # redeploy but keep table rows (merge instead of replace; seeds aren't re-written)
56
+ xanosdk env pull --from workspace # fill xano/.env from a running backend (default: last deployed); lists what changes and confirms over an existing file (--yes off a terminal)
56
57
  xanosdk env set STRIPE_KEY --to workspace --yes # set ONE env var on a running backend, value piped on stdin (no deploy; never printed)
57
58
  xanosdk env unset STRIPE_KEY --to local # clear one (--to workspace|ephemeral[:<name>]|local[:<name>]|tenant:<name>, default: last deployed)
59
+ xanosdk secrets fill # mint a token in xano/.secrets.json for every documentation gate that has none (never replaces one)
58
60
  xanosdk publish ./frontend/dist # publish a built frontend alone — no compile, no backend import (default: last deployed)
59
61
  xanosdk publish ./frontend/dist --to ephemeral # …or onto an ephemeral instead (after a local deploy, bare publish goes to the engine)
60
62
  xanosdk deploy ./xano/index.ts --static ./frontend/dist # on the Xano Engine, the engine serves the build at http://<prefix>.localhost:<port>
@@ -117,6 +119,7 @@ xanosdk ephemeral export <name> --format multidoc --path - # …stream
117
119
  xanosdk workspace details # which workspace your token is scoped to (instance, id, name)
118
120
  xanosdk workspace export --path ws.json # your REAL workspace as a JSON bundle (`--path -` streams to stdout)
119
121
  xanosdk workspace diff ./xano/index.ts --branch staging # did my release land? which objects on the branch differ from your compile, are missing, or are unexpected (default: live), and which side changed each since the last sync (`changedThere`/`changedHere`/`changedBoth`); exits 2 when anything declared differs or is missing
122
+ xanosdk workspace reset-tables ./xano/index.ts --table <guid> --write # put named tables back to the seed rows your project compiles (a dry run without --write; every other table is left alone)
120
123
  xanosdk workspace branch list # its branches, and which one is live
121
124
  xanosdk workspace branch set-live staging # promote a branch (also the way back after --backup-branch)
122
125
  xanosdk workspace branch delete staging --yes # remove a non-live branch (a label padded with spaces is found by the trimmed one; one not there exits 0, alreadyGone; the live branch exits 2, SDK_BRANCH_LIVE)
@@ -193,28 +196,31 @@ or needs `--yes` off a terminal; an ephemeral or Xano Engine never asks.
193
196
 
194
197
  ## Bundle key names vs. the names everything else uses
195
198
 
196
- A bundle's `payload` arrays are keyed by the engine's **storage** name, which for five kinds
197
- is not the name the SDK, the CLI, or a release plan uses for the same thing. Scripting against
198
- a bundle means translating:
199
+ A bundle's `payload` arrays are keyed by the engine's **storage** name, which for eight kinds
200
+ is not the name you author it with or the name the CLI prints for it. Scripting against a
201
+ bundle means translating:
199
202
 
200
- | You author / the plan reports | `payload` array |
203
+ | You author / the CLI prints | `payload` array |
201
204
  |---|---|
202
205
  | `table` | `payload.dbo` |
203
- | `api_group` | `payload.app` |
206
+ | `apiGroup` | `payload.app` |
207
+ | `workflowTest` | `payload.workflow_test` |
208
+ | `realtimeServer` | `payload.realtime_server` |
209
+ | `realtimeChannel` | `payload.channel` |
210
+ | `realtimeMessage` | `payload.message` |
204
211
  | `agent` | `payload.toolset` |
205
- | `mcp_server` | `payload.toolset` |
206
- | `toolset` | `payload.tool` |
207
- | `realtime_channel` | `payload.channel` |
208
- | `realtime_message` | `payload.message` |
212
+ | `mcpServer` | `payload.toolset` |
209
213
 
210
- Everything else (`query`, `function`, `task`, `trigger`, `middleware`, `microservice`,
211
- `addon`, `workflow_test`, `workspace`) is keyed the same on both sides.
214
+ A trigger is printed as the factory that authored it (`tableTrigger`, `realtimeTrigger`, …)
215
+ and stored in `payload.trigger`; `workspaceConfig` is stored in `payload.workspace`.
216
+ Everything else (`query`, `function`, `task`, `middleware`, `microservice`, `addon`, `tool`,
217
+ `knowledge`, `prompt`, `resource`) is keyed the same on both sides. CLI input accepts either
218
+ spelling.
212
219
 
213
- Two traps worth naming. A release plan reports operations as `{"type": "table", …}` while the
214
- bundle it came from stores that object under `payload.dbo` — so a table that released
215
- correctly looks *missing* if you go looking for `payload.table`. And `agent` and `mcp_server`
216
- both land in `payload.toolset`, while the kind actually named `toolset` lands in
217
- `payload.tool`; matching on the word alone will pick the wrong array.
220
+ The trap worth naming: `agent` and `mcpServer` both land in `payload.toolset`, told apart
221
+ only by each row's `type`, while a `tool` lands in `payload.tool`; matching on the word
222
+ "toolset" alone picks the wrong array. A file format keeps the stored spelling too, so a
223
+ `xano.lock` key is `dbo:users`, not `table:users`.
218
224
 
219
225
  This is also the format `xanosdk lock import` reads, so both directions are user-facing.
220
226
 
@@ -461,9 +467,13 @@ import { emitBundle } from "@xano/sdk"; // pure string — browser-safe
461
467
  import { writeBundle } from "@xano/sdk/node"; // writes a file — Node only
462
468
  ```
463
469
 
464
- **Four entry points, and only the first is the authoring API.** `@xano/sdk` is what you
470
+ **Several entry points, and only the first is the authoring API.** `@xano/sdk` is what you
465
471
  define a workspace with; `@xano/sdk/node` adds the filesystem half; `@xano/sdk/codegen`
466
- is what a generated tree imports; and `@xano/sdk/internal` holds the compiler machinery —
472
+ is what a generated tree imports; `@xano/sdk/bundle` reads a compiled bundle back
473
+ ([Reading a compiled bundle](bundle.md)); `@xano/sdk/scaffold` is the theme and framework choices
474
+ `init` accepts, as data; `@xano/sdk/plugin` is the contract a toolchain module compiles against; `@xano/sdk/sveltekit` is the SvelteKit adapter;
475
+ `@xano/sdk/lambda-globals` types the globals a lambda body sees; and `@xano/sdk/internal`
476
+ holds the compiler machinery —
467
477
  the per-kind encoders, the kind and statement registries, the bundle serializer, the
468
478
  `xano.lock` model. Nothing on `/internal` is needed to author anything, and it is kept off
469
479
  the root so an agent scanning the package's exports sees the surface rather than the guts.
package/guides/codegen.md CHANGED
@@ -20,8 +20,9 @@ or a bundle path. Unlike most commands it has no default: a pull names its sourc
20
20
 
21
21
  Everything else about the project is unchanged: `--framework` (`react`, `svelte` or `none`), the
22
22
  theme flags, `--no-agents-md` and `--web` mean the same thing here as they do without `--from`.
23
- The three flags that describe the pull itself — `--report`, `--skip-roundtrip` and `--branch` —
24
- are refused without it rather than silently ignored.
23
+ The flags that describe the pull itself — `--report`, `--skip-roundtrip`, `--branch`,
24
+ `--no-secrets` and `--origin` — are refused without it rather than silently ignored, as is
25
+ `--yes` without `--from` or `--force`.
25
26
 
26
27
  The target directory decides what is written around `xano/`, as it does for a plain
27
28
  [`init`](scaffold.md#no-frontend-and-existing-apps):
package/guides/codes.md CHANGED
@@ -229,10 +229,10 @@ Printed as `! …` on stderr, and as `{ code, message }` in a `--json` document'
229
229
  | `release.seed-rows-not-decoded` | … carries seed rows for …, and a decoded tree carries no rows — they are not in …/. |
230
230
  | `release.transfer-cancelled` | Transfer cancelled — nothing was imported. |
231
231
  | `routes.cli-skew` | This CLI is another version than the project's installed SDK, so it left the route table for the installed CLI to render. |
232
- | `routes.mcp-unresolved` | …: leaving out … — … — whose canonical URL token resolves nowhere. |
232
+ | `routes.mcp-unresolved` | An MCP server whose canonical URL token resolves nowhere is left out of the route table (or listing). |
233
233
  | `routes.module-failed` | A toolchain module could not generate its section of `routes.gen.ts`; the rest was refreshed and its previous block, if any, was kept. |
234
234
  | `routes.not-written` | The route table (`routes.gen.ts`) was not written this run; the line says why and what writes it. |
235
- | `routes.realtime-unresolved` | …: leaving out … — … — whose canonical URL token resolves nowhere, along with their channels. |
235
+ | `routes.realtime-unresolved` | A realtime server whose canonical URL token resolves nowhere is left out of the route table (or listing), along with its channels. |
236
236
  | `secrets.cleartext-export` | … carries … in cleartext — written owner-only (0600); do not commit it. |
237
237
  | `secrets.cleartext-stdout` | The export carries … in cleartext — written to stdout, where no file permission protects it; do not commit or log it. |
238
238
  | `secrets.doc-token-written` | Documentation tokens: wrote … to `…` — …. |
@@ -40,7 +40,7 @@ runtime (Xano SDK only compiles), and generating engine-side numeric ids/timesta
40
40
 
41
41
  **Deferred (by design)** — folder auto-discovery, and the `service` / `vault` / `branch`
42
42
  payload sections. (Round-trip decompile is no longer deferred: that is
43
- `xanosdk init --from`, in the [CLI guide](cli.md); nor is `workflow_test` — it is a
43
+ `xanosdk init --from`, in [Pulling an existing workspace](codegen.md); nor is `workflow_test` — it is a
44
44
  first-class kind, see `workflowTest` in [Object kinds](object-kinds.md).) `InferResponse`
45
45
  auto-derivation covers the object-literal and single-`db`-variable cases (matching the engine's
46
46
  static walk), and follows a CALL into the object it invokes (`s.function.call`/`.run`,
@@ -59,8 +59,9 @@ can learn the SDK without reading source:
59
59
  --help` and the `cli` array in `manifest.json` do, from the same registry that generates
60
60
  the shell completions. The written version is the [CLI guide](cli.md).
61
61
  - **`llms/*.md`** — one file per surface (object def shapes, statements, values, fields,
62
- filters, lambda bodies, what a client pays to import a def, an index of exact error
63
- strings, and the legacy names a pulled workspace carries), read only when that surface
62
+ filters, lambda bodies, triggers, saved tests, the lock file, toolchain modules, what a
63
+ client pays to import a def, an index of exact error strings, and the legacy names a
64
+ pulled workspace carries), read only when that surface
64
65
  is in play. **`llms-full.txt`** is all
65
66
  of them concatenated, for a reader that wants one file rather than two.
66
67
  - **`manifest.json`** — the exhaustive reference tier, reached by targeted lookup (grep or
@@ -127,7 +127,7 @@ as JSON, while the human-readable progress (and the live URLs) echoes to stderr:
127
127
  }
128
128
  ```
129
129
 
130
- Present only when they apply: `localEngine` (in place of `ephemeral`), `keepDataSkipped` and the
130
+ Present only when they apply: `engine` (in place of `ephemeral`), `keepDataSkipped` and the
131
131
  merge lists (see [Keeping your data between deploys](#keeping-your-data-between-deploys)),
132
132
  `static` (`url`; `canonical`, the build's identity, and `verified` when the frontend was
133
133
  confirmed live serving it; `staticEnv` — `{ injected, keys, documents, skipped?, reason? }` — when config was
@@ -529,7 +529,6 @@ and `omittedInsertsFail` / `setInsertsFail` when inserts fail; see below),
529
529
  `notNullKept`, `pairedColumns` (`{ table, dropped, added }`: a drop beside an add, not a rename),
530
530
  `narrowedEnums` (`{ table, column, removed }`), `retargetedRefs` (`{ table, column, from, to }`),
531
531
  `indexChanges` (`{ table, index, action, unique }`), `notNullTightened` (`{ table, column, type }`),
532
- `storageChanges` (`{ table, from, to }`: the table's `useXdo` before and after),
533
532
  `removed`, `unseededTables` (new tables whose seed rows the merge did not
534
533
  write), `renamedTables` (each `{ from, to }`: renamed through `xanosdk lock rename`, rows kept),
535
534
  `unchangedEnv` and `canonicalChanges` (each `{ kind, name, from, to }`: a public URL slug a
@@ -599,9 +598,12 @@ the environment keeps its data. Each refusal is exit 2 and names its remedy:
599
598
  refused for every table, empty or seeded — the instance cannot convert a table back to JSON
600
599
  storage, and nothing is sent. A `deploy --replace` rebuilds the tables, so it switches either way.
601
600
 
602
- A keep-data refusal's `details` carries `refused` (the reason, a string), `conflicts`, `renames`
601
+ A keep-data refusal's `details` carries `refused` (the reason, a string). For `identityConflict`,
602
+ `renamePending`, `pruneOutOfScope` and `uniqueViolation` it also carries `conflicts`, `renames`
603
603
  and `outOfScope` (each a list, empty when it does not apply), `serverCode` when the environment
604
- itself refused, and `warnings` when the run had some. A `--keep-data` deploy never falls back to a replace.
604
+ itself refused, and `warnings` when the run had some. The others carry `landed: false` and their
605
+ own list: `tableTrigger` names `triggers`, `storageModeChange` names `tables`, and
606
+ `importInProgress` carries `serverCode` and, when there is one, `rerun`. A `--keep-data` deploy never falls back to a replace.
605
607
 
606
608
  Another import already running on the instance is not a refusal of the project: any deploy
607
609
  (`--keep-data`, a replace, `--to`) exits 8 with `SDK_IMPORT_REFUSED`, `details.refused:
@@ -664,7 +666,8 @@ answering its result and logs. It never changes a primitive: tables, endpoints,
664
666
  every other object change in `xano/` and ship with `xanosdk deploy`.
665
667
 
666
668
  `xanosdk init` connects Claude Code (`.mcp.json`) and Cursor (`.cursor/mcp.json`) to it with one
667
- server, `xano-local`, that launches a bridge:
669
+ server, `xano-local`, that launches a bridge. This is the Claude Code `.mcp.json` entry; Cursor's
670
+ appends `--project ${workspaceFolder}`, since Cursor does not promise to launch it inside the project:
668
671
 
669
672
  ```json
670
673
  { "mcpServers": { "xano-local": { "command": "npx", "args": ["--yes", "--package", "@xano/sdk", "xanosdk", "local", "mcp", "--stdio"] } } }
@@ -777,7 +780,7 @@ pin for your own runs instead of editing `package.json`:
777
780
 
778
781
  - `--local=<value>` for one deploy;
779
782
  - `XANOSDK_ENGINE_OVERRIDE=<value>` for every deploy in this shell, including
780
- `npm run xano:deploy`, which passes a bare flag.
783
+ `npm run xano:deploy`, which names no engine.
781
784
 
782
785
  Both take a **version** (`v0.1.8`, or `0.1.8`: that release from the release manager), an
783
786
  **`https` URL** to an engine archive, or the **path** to an engine archive on this machine. A
@@ -1148,6 +1151,7 @@ publishes beside the merge, but not under `--dry-run`; `--skip-liveness` needs `
1148
1151
  | `--backup-branch[=<label>]` | Snapshot the live branch's logic first. Switching back restores logic only — see below. |
1149
1152
  | `--allow-shared-schema-changes` | Proceed even though table and microservice changes reach every branch. |
1150
1153
  | `--allow-branch-deletion` | Proceed even though `--replace` permanently deletes the workspace's other branches. |
1154
+ | `--overwrite` | Deploy over objects changed in Xano since the last deploy or pull, instead of refusing with `SDK_WORKSPACE_CHANGED`. See below. |
1151
1155
 
1152
1156
  #### `--replace` clears by workspace, not by branch
1153
1157
 
@@ -1359,7 +1363,7 @@ xanosdk workspace branch set-live staging # promote when you are happy
1359
1363
  ```
1360
1364
 
1361
1365
  A promote **always** lands on a branch, named or not: without `--branch` the label is derived
1362
- from the release and the moment (`v1-20260910T200511Z`), and the run prints it. There is no
1366
+ from the release and the moment (`v1-20260910T200511Z-3f2a`, four random hex digits last), and the run prints it. There is no
1363
1367
  unnamed landing — a branch the engine leaves unlabelled cannot be selected, promoted or
1364
1368
  deleted afterwards, so the CLI names it rather than letting that happen.
1365
1369
 
@@ -1445,10 +1449,13 @@ either way, and `dryRun` says which it was:
1445
1449
  | `renamedTables`, `droppedColumns`, `retypedColumns`, `narrowedEnums`, `retargetedRefs`, `indexChanges`, `notNullKept`, `notNullTightened`, `storageChanges` | the table effects (see [What a landing does to tables](#what-a-landing-does-to-tables)); `tenant deploy` and `promote` carry the same keys, plus `droppedTables` (`{ table, rows }`), under `tableEffects`. |
1446
1450
  | `unchangedEnv`, `droppedEnv`, `unappliedDocumentation`, `workspaceRename` | the rest of what the plan cannot say. |
1447
1451
  | `workspaceSettingsNotApplied` | workspace settings a `--branch` landing held back (`[]` otherwise). |
1452
+ | `syncBaseline` | always present: the sync baseline recorded for the branch it landed on — `null` on a dry run, for a tenant or ephemeral, and when there is no `xano.lock`. |
1448
1453
 
1449
- Present only when they apply: `branchDeletion`, `unnamedPublicUrls`, `staticRemoved`, and on a
1450
- real run `setLive` and `sharedSchemaChanges` (with `--branch`), `backupBranch`, `liveRestored`
1451
- and `static`.
1454
+ Present only when they apply: `branchDeletion`, `unnamedPublicUrls`, `staticRemoved`,
1455
+ `sharedSchemaChanges` (with `--branch`), on a dry run `seedRows` (under `--seed`: each table's
1456
+ seed rows and how many overwrite a live row) and `changedInXano` (objects changed in Xano that the
1457
+ real run would refuse to overwrite without `--overwrite`), and on a real run `setLive` (with
1458
+ `--branch`), `backupBranch`, `liveRestored` and `static`.
1452
1459
 
1453
1460
  The comparison is deliberately one-sided: a false "changed" costs one import that was
1454
1461
  happening anyway, while a false "unchanged" would silently skip a real release. So anything
@@ -23,13 +23,13 @@ are what you get when the variable is unset.
23
23
  | `XANO_ORIGIN` | OAuth host to sign in against, instead of the default — the same thing `--origin` does. An origin only (`https://host`): a path, query or fragment is refused. |
24
24
  | `XANO_NO_BROWSER` | Set to anything non-empty and `xanosdk login` will **not** launch a browser; it prints the authorize URL to stderr for you to open yourself. The loopback server still runs and still waits for the redirect, so the flow completes only if the browser you open it in can reach this machine's `127.0.0.1`. For a machine that has no browser to launch. When the browser is on a **different** machine, that redirect cannot arrive — use `xanosdk login --paste` instead. |
25
25
 
26
- **`xanosdk preflight`** — its own target, deliberately separate from the deploy login
26
+ **`xanosdk preflight`** — an optional override target. With none of these set, `preflight` uses the stored login credential and creates its ephemeral under the workspace that credential pins
27
27
 
28
28
  | Variable | What it does |
29
29
  |---|---|
30
- | `XANO_VALIDATE_INSTANCE` | Base URL of the instance to validate against (`https://your-instance.xano.io`, or `http://localhost:8080` for local Docker). Required; `--instance <url>` overrides it. |
31
- | `XANO_VALIDATE_TOKEN` | Meta API bearer token for that instance. Required. |
32
- | `XANO_VALIDATE_WORKSPACE_ID` | Parent workspace the run's throwaway environment is created under. Defaults to `1`. |
30
+ | `XANO_VALIDATE_INSTANCE` | Base URL of the instance to validate against (`https://your-instance.xano.io`, or `http://localhost:8080` for local Docker). Optional; when any `XANO_VALIDATE_*` is set (or `--instance <url>`, which overrides it) the pair takes over from the login, and both must then be present. |
31
+ | `XANO_VALIDATE_TOKEN` | Meta API bearer token for that instance. Required once the override is in use. |
32
+ | `XANO_VALIDATE_WORKSPACE_ID` | Parent workspace the run's throwaway environment is created under, when the override is in use. Defaults to `1`. |
33
33
 
34
34
  **Output & diagnostics**
35
35
 
@@ -95,7 +95,7 @@ checked-out project never holds a secret it did not fetch on purpose.
95
95
 
96
96
  | Path | What it is |
97
97
  |---|---|
98
- | `xano/.env` | Where the values live. Gitignored by the scaffold, and preserved across a `xanosdk pull` rather than rewritten. Read with no flag by the commands that compile a bundle: `deploy`, `export`, `preflight`, and `release create` when its optional `--bundle` comparison compiles one. |
98
+ | `xano/.env` | Where the values live. Gitignored by the scaffold, and preserved across a `xanosdk pull` rather than rewritten. Read with no flag by the commands that compile a bundle: `deploy`, `export`, `preflight`, and `release create`, whose convergence comparison compiles the entry unless `--bundle` names one. |
99
99
  | `xano/.env.example` | Generated beside it, listing the declared names as commented lines. Committed. Copy it to `xano/.env` on a fresh clone and fill in the values. The lines stay commented on purpose, so an unedited copy meets the refusal below rather than sending empty strings to your backend. |
100
100
 
101
101
  `xano/` is the scaffold's backend directory. The file is read from the directory of the
@@ -165,7 +165,7 @@ update it too if the change should outlive the next deploy.
165
165
  | `--env-var KEY=VALUE` | One value, for this process only. Never written to `xano/.env`, never printed back. Repeatable. Highest precedence: it beats whichever file supplied values, the default `xano/.env` or an explicit `--backend-env-file`. On `export` the value is still compiled into the bundle that command writes. A secret on the command line also lands in shell history and the process table, so prefer `--backend-env-file` in CI. |
166
166
  | `--backend-env-file <path>` | Read values from this dotenv-style file **instead of** `xano/.env`. It replaces the default rather than layering over it, so pointing at a CI secret mount cannot also ship a developer's local file. The flip side: a name that only `xano/.env` had is now unsupplied. |
167
167
  | `--allow-empty-env=NAME[,NAME]` | Send these declared names empty on purpose, **clearing whatever the target holds for them**. Per-name only; there is deliberately no bare form. |
168
- | `--allow-empty-doc-token=NAME[,NAME]` | The same, for a documentation token — but it **opens** something: the target's doc-site gate is cleared and those docs become publicly readable. Per-name only, no bare form. |
168
+ | `--allow-empty-doc-token=<scope>` | The same, for a documentation token — but it **opens** something: the target's doc-site gate is cleared and those docs become publicly readable. The scope is `workspace` or an API group's name; it is not comma-split, so repeat the flag for more than one. No bare form. |
169
169
 
170
170
  **A deploy replaces the workspace's env set.** So a declared name left empty in the config
171
171
  that no file and no flag supplies would clear the live value, and `deploy` refuses instead,
@@ -287,9 +287,9 @@ a rename, or to adopt an existing workspace object into code.
287
287
  **`xano.lock`** freezes the whole workspace's identities at once — every auto-derived guid,
288
288
  plus the `canonical` URL tokens of API groups and toolsets (which the engine otherwise
289
289
  randomizes, giving the same code different public URLs per environment). Every command that
290
- compiles an entry file writes it — `export`, `deploy`, `release`, `preflight`, with no flag —
290
+ compiles an entry file writes it — `export`, `deploy`, `preflight`, with no flag —
291
291
  and updates it on every build, atomically, before the bundle. **Commit it next to your code.**
292
- `npm run xano:check` is the CI guard (`xanosdk export ./xano/index.ts --check --strict`, which implies
292
+ `npm run xano:check` is the CI guard (the `routes --strict` freshness check, then the project typecheck, then `xanosdk export ./xano/index.ts --check --strict`, which implies
293
293
  `--frozen-lock`, writes nothing, and needs neither `xano/.env` nor `xano/.secrets.json`): it fails rather than change the lock,
294
294
  so an uncommitted identity change is caught in review instead of on a deploy. It also fails
295
295
  while the lock carries an entry no exported object matches. That entry is how a rename looks
@@ -333,7 +333,7 @@ explicitly with `--lock=<path>`.
333
333
  Precedence at emit is always **explicit in-code value → lock entry → name derivation**.
334
334
 
335
335
  **When the lock is actually load-bearing.** Because the default derivation is deterministic
336
- — `md5("<type>:<name>")`, and `md5("query:<group>|<verb>|<name>")` for a query — a project
336
+ — `md5("<payloadKey>:<name>")` (the bundle's payload key: `dbo` for a table, `toolset` for an agent or MCP server), and `md5("query:<group>|<verb>|<name>")` for a query — a project
337
337
  that created all of its own objects can regenerate a
338
338
  byte-identical lock from its own source. Delete that lock, release again, and the same guids
339
339
  come back: the objects match and update in place. For that project the lock is a *cache*, and
@@ -375,7 +375,7 @@ xanosdk lock rename --entry=xano/index.ts table stock goods # moves stock's i
375
375
  xanosdk lock prune --identity-only --yes table:stock --lock=xano/xano.lock # or just drop it
376
376
  ```
377
377
 
378
- `rename`/`adopt` take no entry file, so on their own they look for `xano.lock` in the
378
+ `rename`/`import` take no entry file, so on their own they look for `xano.lock` in the
379
379
  **current directory**. Pass `--entry=<path>` to derive it beside the entry the way
380
380
  `export`/`deploy`/`prune` do, or `--lock=<path>` to name the file outright. They never
381
381
  reach for a lock you did not point them at — when they spot one next door they say so and
@@ -392,8 +392,8 @@ real engine `packageExport`, capturing the live workspace's random guids by `(ty
392
392
  so code takes over an existing workspace and the first sync updates in place instead of
393
393
  duplicating.
394
394
 
395
- **CI** — `xanosdk export ./xano/index.ts --check --strict` (the scaffolded `npm run xano:check`) runs every
396
- check an export runs and writes nothing, so it needs no secrets. It implies `--frozen-lock`, which
395
+ **CI** — the scaffolded `npm run xano:check` runs the `routes --strict` freshness check, the project typecheck, and
396
+ `xanosdk export ./xano/index.ts --check --strict`, which runs every check an export runs and writes nothing, so it needs no secrets. It implies `--frozen-lock`, which
397
397
  fails instead of changing the lock, so a canonical
398
398
  minted in a throwaway container can never silently diverge public URLs. Mint locally, commit
399
399
  the lock. It fails on an entry no exported object matches too, which is the state a rename
@@ -48,7 +48,11 @@ is compiled or a workspace is checked.
48
48
 
49
49
  ```
50
50
  ✓ Installed @xano-sdk/auth.
51
- Import it in your backend (`xano/index.ts`) and register it onto your workspace.
51
+ Not registered yet.
52
+ Add to xano/index.ts:
53
+ import { registerAuth } from "@xano-sdk/auth";
54
+ registerAuth(app, { canonical: "authn" });
55
+ Then run `npx xanosdk export ./xano/index.ts --out /dev/null && npm run xano:routes` to bring xano.lock and the route manifest up to date.
52
56
  ```
53
57
 
54
58
  ```
@@ -116,7 +120,7 @@ The rendering has a fixed shape, filled from the module's own catalogue record:
116
120
  ```
117
121
 
118
122
  The `Installs` rows carry one of `table`, `endpoint`, `function`, `task`, `trigger`, `agent`,
119
- `mcp`, `middleware`. A toolchain module lists none of them, because it puts nothing on the
123
+ `tool`, `mcp`, `middleware`. A toolchain module lists none of them, because it puts nothing on the
120
124
  workspace.
121
125
 
122
126
  `--prompt` emits the publisher's own wiring instructions, raw and alone, written to be piped
@@ -273,6 +277,7 @@ A module also contributes lines to your `.gitattributes`, in its own marked bloc
273
277
  ```
274
278
  # xanosdk:begin @xano-sdk/xanoscript
275
279
  # xanosdk 1.2.0 — generated; edits inside this block are overwritten
280
+
276
281
  xanoscript/** linguist-generated
277
282
  # xanosdk:end @xano-sdk/xanoscript
278
283
  ```
@@ -362,10 +367,11 @@ run. A `--frozen-lock` run in that state exits 0 having verified less than it di
362
367
  and says nothing. Only the next `install`, `reinstall` or `remove` drops the stale block.
363
368
 
364
369
  The state that does fail **every** `--frozen-lock` run is the other one: a module still
365
- declared in `dependencies` but missing from `node_modules`, which is what `npm uninstall
366
- --no-save`, a deleted `node_modules/<pkg>` or a drifted lockfile leaves behind. There the
367
- project still says the module is expected, so its absence is reported rather than assumed
368
- away:
370
+ declared in `dependencies` and configured in the `"xanosdk"` block but missing from
371
+ `node_modules`, which is what `npm uninstall --no-save`, a deleted `node_modules/<pkg>` or a
372
+ drifted lockfile leaves behind. There the project still says the module is expected, so its
373
+ absence is reported rather than assumed away (an unconfigured dependency that is missing is
374
+ an ordinary package as far as the loader can tell, and is not reported):
369
375
 
370
376
  ```
371
377
  A toolchain module could not be loaded, so whatever it checks was not checked — and
@@ -128,9 +128,12 @@ your module is only correct against the SDK versions whose shapes it understands
128
128
  range out with a floor and a ceiling, as above: the ceiling is the next major, so a module
129
129
  built for 1.x loads on every 1.x SDK and is refused on 2.0.
130
130
 
131
- That range is **enforced at load**, on every command that discovers modules. An SDK outside it
131
+ That range is **enforced at load**. On `export`, `deploy`, `preflight` and `init`, an SDK outside it
132
132
  is refused by name before your plugin file is imported, naming the range you asked for and the
133
- version it got. So the floor is the version whose shapes your hooks understand, not an
133
+ version it got. The `routes.gen.ts` writers (`routes --emit`, the marketplace's route refresh,
134
+ `pull`, `generate`) and the marketplace reconcile skip the module with a warning instead: it is
135
+ never imported, a routes writer keeps its previous block, and `routes --emit --strict` still
136
+ fails. So the floor is the version whose shapes your hooks understand, not an
134
137
  aspiration — declare it accurately and the SDK will never quietly run your module against a
135
138
  contract it was not built for. Ranges are read as `>=` / `>` / `<=` / `<` / `=` comparators,
136
139
  `^`, `~`, exact pins and `||` unions of those; a shape outside that subset is not refused, it
@@ -394,7 +397,7 @@ read than it is slow.
394
397
  | `BundleContext` | What it carries |
395
398
  |---|---|
396
399
  | `bundle.payload` | The compiled payload, keyed by payload key (`table`, `query`, `app`, ...). |
397
- | `entry` | The entry file the bundle came from. **Absent** on the `--bundle <path>` branch. |
400
+ | `entry` | The entry file the bundle came from. **Absent** on the `--bundle <path>` branch, and when `deploy` fetches a remote source (`release:main`). |
398
401
  | `cwd` | The project root every relative path resolves against. |
399
402
  | `command` | `"export"` or `"deploy"`. |
400
403
  | `frozen` | The run is `--frozen-lock` (or `export --check` / `deploy --to … --dry-run`, which imply it): a verification, not a write. |
@@ -403,7 +406,7 @@ read than it is slow.
403
406
 
404
407
  **`entry` is optional rather than a made-up path** so a plugin may decline the
405
408
  `--bundle <path>` branch, where the input is already-serialized text with no entry and no
406
- registry behind it. A tree rendered from a bundle the project did not compile describes
409
+ registry behind it, and a `deploy` from a fetched source, where nothing local was compiled. A tree rendered from a bundle the project did not compile describes
407
410
  something other than the source beside it.
408
411
 
409
412
  **Under `frozen` a plugin must compare and report, never write.** It is also the mode in which
@@ -470,8 +473,10 @@ const plugin: ToolchainPlugin = {
470
473
 
471
474
  Your module's section of the route manifest, `xano/routes.gen.ts`. It runs wherever that file
472
475
  is written: `xanosdk routes ./xano/index.ts --emit xano/routes.gen.ts` (the scaffold's
473
- `xano:routes`), `pull`, `generate`, and the refresh `marketplace install`, `reinstall` and
474
- `remove` make, so your block lands with your module.
476
+ `xano:routes`), `init --marketplace` when it writes the project's first manifest, `pull`,
477
+ `generate`, and the refresh `marketplace install`, `reinstall` and `remove` make, so your
478
+ block lands with your module. Not `init --from`: a project it creates has no module installed
479
+ yet, and the first `xano:routes` after an install adds your section.
475
480
 
476
481
  | `RoutesManifestContext` | What it carries |
477
482
  |---|---|
@@ -14,11 +14,14 @@ and the seven trigger factories below. Signatures and payload keys are in
14
14
  the types don't tell you.
15
15
 
16
16
  **A knowledge item's body is a file, and `mode` is a running cost.** `knowledge()` is the
17
- markdown a workspace's AI agents read before they act, and it is the one kind whose payload
17
+ markdown shared by every AI that builds this backend — Xano's AI builder, people authoring in
18
+ XanoScript, and your local coding agent, which reads the same `.md` files in the repo (deploy
19
+ and `pull` keep them in sync). An `agent()` run never reads it; put what that agent needs in
20
+ its `llm.systemPrompt`. It is the one kind whose payload
18
21
  is prose — so the body is named by path (`knowledgeFile("./runbook.md", import.meta.url)`)
19
- rather than written as a string, and `refs: knowledgeDir(...)` ships a whole folder the
20
- agent searches on demand — UTF-8 text files only (other content is refused), and a
21
- symlink is not followed. What the agent actually receives is decided by `type` and `mode`,
22
+ rather than written as a string, and `refs: knowledgeDir(...)` ships a whole folder Xano's AI
23
+ builder searches on demand — UTF-8 text files only (other content is refused), and a
24
+ symlink is not followed. What the builder actually receives is decided by `type` and `mode`,
22
25
  and nothing in the types warns you: an `agents.md` item is injected in full on every turn
23
26
  whatever `mode` says, `mode: "always"` spends the body's whole length on every request, and
24
27
  the default `mode: "auto"` sends only the name and `description` until a request matches.
@@ -173,7 +176,7 @@ realtimeMessage({
173
176
  name: "send", // `input` types the message PAYLOAD
174
177
  channel: room, // the handle carries the server too
175
178
  input: { body: input.text({ required: true }) },
176
- deliverTo: "channel", // or "sender" (request/response) / "others"
179
+ deliverTo: "channel", // or "sender" (request/response) / "others" / "explicit"
177
180
  stack: [s.debug.log({ value: inp("body") })],
178
181
  });
179
182
  ```