@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
@@ -9,7 +9,10 @@ backend alone — see [No frontend, and existing apps](#no-frontend-and-existing
9
9
  (default: the folder name), `--theme <id>` / `--radius <len>` / `--dark <mode>` /
10
10
  `--font <id>` / `--font-mono <id>` / `--font-heading <id>` / `--icons <id>`
11
11
  (the look — see [Theming](#theming)), `--no-agents-md` (skip the `AGENTS.md`
12
- agent brief, which every coding agent reads and `init` writes by default),
12
+ agent brief, which every coding agent reads and `init` writes by default, and the
13
+ `.mcp.json` / `.cursor/mcp.json` configs that connect agents to the `xano-local`
14
+ MCP server), `--ai <preset|none>` (for scripted callers: `none` is `--no-agents-md`, and
15
+ any other value writes the one `AGENTS.md` every agent reads),
13
16
  `--marketplace <pkg>` (repeatable, comma-separated; installs add-ons and
14
17
  registers them — below), `--force` (write over what clashes when adding the backend to
15
18
  a non-empty folder; it lists the files and scripts it would overwrite and asks, `--yes`
@@ -109,11 +112,12 @@ the add-on puts on your workspace, what you have to supply, and the
109
112
  `xano/index.ts` registration to copy. Piped, it emits JSON; `--prompt` emits
110
113
  instructions written to be handed straight to a coding agent.
111
114
 
112
- That is `npm install` with two additions: add-ons are discoverable from `xanosdk
113
- --help`, and the command refuses before npm runs when you are not standing in a
114
- project — the mistake npm answers by silently writing to the wrong `package.json`.
115
- The package name is passed through exactly as typed, so version specifiers, tags,
116
- and third-party packages all work.
115
+ `install` resolves its argument through the marketplace before npm runs — a module's
116
+ package or its slug (`auth`), keeping any version or tag — and refuses a name the
117
+ marketplace does not list with **exit 8**; local paths, `file:`, tarball and git specs
118
+ install as given. It also refuses before npm runs when you are not standing in a project,
119
+ and reconciles afterwards, asking any toolchain module that arrived its questions. See
120
+ [Installing](marketplace.md#installing).
117
121
 
118
122
  ## No frontend, and existing apps
119
123
 
@@ -123,7 +127,8 @@ is a **new** project, and `--framework` decides its frontend. Any other director
123
127
 
124
128
  **A new project with `--framework none`** (or "No frontend" at the prompt) gets everything
125
129
  above except the frontend: `xano/`, a `package.json` with only the backend's scripts and
126
- dependencies, `.gitignore`, `.gitattributes`, the CI check, a README and `AGENTS.md`. There is
130
+ dependencies, `.gitignore`, `.gitattributes`, the CI check, a README, `AGENTS.md`, and the
131
+ `.mcp.json` / `.cursor/mcp.json` agent configs. There is
127
132
  no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
128
133
  `xano/tsconfig.json`, and `npm run xano:typecheck` checks it and its lambdas.
129
134
  `xano:deploy:ephemeral` deploys the backend alone, and there is no `dev`, `build` or
@@ -143,6 +148,11 @@ no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
143
148
  - A marked block in `.gitignore` (created when missing) and in `AGENTS.md`, added or
144
149
  refreshed in place; the rest of each file is left as it was. A symlinked `AGENTS.md` is left
145
150
  alone, and `--no-agents-md` skips it.
151
+ - The `xano-local` MCP server merged by key into `.mcp.json` and `.cursor/mcp.json` (created
152
+ when missing): the other servers a config declares are kept. A config that already declares
153
+ `xano-local`, or is not valid JSON, is left alone and is not a clash; a symlinked one is
154
+ skipped. `--no-agents-md` skips both. See
155
+ [Connecting a coding agent](deploying.md#connecting-a-coding-agent).
146
156
  - No frontend, README, CI workflow or root `tsconfig.json`. The line-ending rule goes in
147
157
  `xano/.gitattributes`, scoped to `xano/`, so the project's own files are not renormalized.
148
158
 
@@ -177,17 +187,19 @@ The workflow installs with the project's package manager (npm, pnpm, yarn or bun
177
187
  `init` detected it), frozen to the committed lockfile, then runs `xano:check` on every push
178
188
  and pull request. In a monorepo workspace member it installs at the workspace root and checks
179
189
  in the member's directory; move the file to the repository root's `.github/workflows/`, the
180
- only place GitHub reads it. That script
181
- runs `xanosdk export ./xano/index.ts --check --strict`: every check an export runs (a build warning fails it), under
190
+ only place GitHub reads it. That script runs three steps in order:
191
+ `xanosdk routes ./xano/index.ts --emit xano/routes.gen.ts --strict`, which fails when the
192
+ committed route manifest the frontend takes its paths from is stale or missing; the project's
193
+ typecheck (`tsc` on React, `svelte-kit sync && svelte-check` on Svelte, `tsc -p xano` with no
194
+ frontend, each followed by `tsc -p xano/lambdas`); and
195
+ `xanosdk export ./xano/index.ts --check --strict`: every check an export runs (a build warning fails it), under
182
196
  `--frozen-lock`, writing nothing — no bundle, no lock. Because nothing is written, it
183
197
  reads no `xano/.env` or `xano/.secrets.json`, so the workflow needs no repository
184
198
  secrets, even for an API group whose docs are token-gated. It fails instead of
185
199
  rewriting when `xano.lock` disagrees with the source, naming what would change. A
186
200
  project with nothing to record yet (a fresh scaffold) passes without a lock. It also fails while the lock
187
201
  carries an entry no exported object matches — the state a rename leaves until
188
- `lock rename` moves the identity across, or `lock prune` drops it. It first runs
189
- `xanosdk routes ./xano/index.ts --emit xano/routes.gen.ts --strict`, which fails when
190
- the committed route manifest the frontend takes its paths from is stale or missing.
202
+ `lock rename` moves the identity across, or `lock prune` drops it.
191
203
  `dev`, `build` and `typecheck` regenerate that file, so after adding or renaming an
192
204
  endpoint run `npm run xano:routes` (or any of them) and commit it. `init --from` and
193
205
  `pull` write it with the decoded backend, and `init --marketplace` writes it (and
@@ -36,6 +36,9 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
36
36
  one group and verb that a single path can reach (`query.route-shadowed`). Make the paths
37
37
  disjoint (`"runs/by-id/{id}"`), or declare a numeric param `input.int({ required: true })`:
38
38
  only a REQUIRED int/decimal segment matches digits only, and an optional one matches any text.
39
+
40
+ ## Inferring the response type
41
+
39
42
  - **`InferRow<typeof post>`** → the table's row type. Rename or retype a column and every
40
43
  consumer breaks at compile time — exactly where you want it.
41
44
  - **`InferResponse<typeof someQuery>`** → the endpoint's **response** type, closing the round
@@ -46,9 +49,6 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
46
49
  yielding null — `NotFound`/404 for `edit`/`patch`, a unique-constraint error for `add`, while
47
50
  `add_or_edit` upserts and never misses), `Row | null` for `db.get` (it binds
48
51
  `null` on a miss rather than throwing — handle the not-found path), a row list for
49
-
50
- ## Inferring the response type
51
-
52
52
  `db.query`/`db.bulk.patch` (→ `Row[]`), a `boolean` for `db.has`, a `number` count for
53
53
  `db.bulk.delete`, and a `get`/`query` `output: [...]` selection narrows to a `Pick` (still
54
54
  `| null` for `get`). A dotted entry selects sub-keys of an object column
@@ -64,7 +64,7 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
64
64
  `response: { user: obj({ id: ref("row.id") }) }` and the raw literal
65
65
  `response: { user: { id: ref("row.id") } }` both derive `{ user: { id: number | null } }`.
66
66
  A **call** carries the shape across: `s.function.call`/`s.function.run`, `s.tool.call` and
67
- `s.api.call` (workflow-test only, above) given a def **handle** bind their `as` with the
67
+ `s.api.call` (workflow-test only — see [Object kinds](object-kinds.md)) given a def **handle** bind their `as` with the
68
68
  target's own `InferResponse`,
69
69
  so `ref("discount_result.discount_cents")` in the caller types to that field instead of
70
70
  `unknown`. What the target resolves to is what propagates, so declaring `responseShape` on
@@ -89,7 +89,7 @@ For a **computed or multi-key object response**, author it as a *record of value
89
89
  `response: { success: c.bool(true), id: inp("id") }` — **not** `c.obj({ ... })`. `c.obj` builds a
90
90
  *constant*, so a tagged value nested inside it would serialize as internal representation the
91
91
  engine can't decode (a runtime 500); nesting one is now a compile error that points you at the
92
- record form (issue #42). A **nested plain object** in a record
92
+ record form. A **nested plain object** in a record
93
93
  response (`response: { user: { id: ref("u"), age: 3 } }`) is auto-wrapped for you — no manual
94
94
  `obj({ ... })` — and raw literals in a call/agent `input` map coerce too
95
95
  (`s.function.run({ fn, input: { max_age_days: 3 } })` — no `c.int(3)`).
@@ -238,6 +238,21 @@ const ws = new WebSocket(socketUrl("chat", XANO_HOST), token);
238
238
  ws.send(JSON.stringify({ action: "join", channel: channelPath("rooms/{room_id}", { room_id }) }));
239
239
  ```
240
240
 
241
+ MCP servers are there too: `mcpUrl(server, baseUrl)` is the equivalent of
242
+ `mcpServer().getUrl()`, with the same `/tenant/<name>` lift and the same refusal of an
243
+ already-resolved URL. It's an address to show a user or hand an MCP client. The endpoint
244
+ refuses any request carrying a browser `Origin`, so page JS can't call it directly:
245
+
246
+ ```ts
247
+ import { mcpUrl } from "../xano/routes.gen";
248
+
249
+ const connectUrl = mcpUrl("notes_mcp", XANO_HOST); // https://host/x2/mcp/<canonical>/mcp/stream
250
+ ```
251
+
252
+ Run `xanosdk routes ./xano/index.ts` without `--emit` to see every address the file carries:
253
+ each route in its `api:<canonical>/<name>` form, and each socket, channel and MCP server with
254
+ the call that builds it.
255
+
241
256
  **Request types come from the same file.** It exports four types-only maps, keyed exactly
242
257
  like the runtime tables they sit beside, so a frontend types what it sends without importing a
243
258
  def at all:
@@ -1,8 +1,8 @@
1
1
  # Knowledge def shape
2
2
 
3
- > Read when the workspace defines a `knowledge()` item for its AI agents.
3
+ > Read when the workspace defines a `knowledge()` item.
4
4
 
5
- - `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown Xano's own AI reads before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
5
+ - `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown shared by every AI that builds the backend: Xano's own AI reads it before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP — and a local coding agent reads the same `.md` files in the repo; deploy and `pull` keep the copies in sync. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
6
6
  - `body` (REQUIRED): `knowledgeFile("./runbook.md", import.meta.url)` — a path to a real markdown FILE. There is no inline-string form. The path resolves relative to the MODULE THAT DECLARES the item, not the process working directory and not the workspace entry; `import.meta.url` is required and is what makes that true.
7
7
  - `refs?`: `knowledgeDir("./runbook", import.meta.url)` — a directory whose WHOLE tree ships, recursively, paths preserved: UTF-8 text only (else refused; binary `.DS_Store` skipped), symlinks not followed. Keep the body OUT of it, or it ships as a reference file.
8
8
  - `type?`: `"skill"` (default) | `"doc"` | `"agents.md"`. `skill` and `doc` differ in how they are filed, not in what an agent receives.
@@ -12,7 +12,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
12
12
  - **Work on a timer** → `task` (cron or interval). **Work a request starts but does not wait for** → `s.function.run({ fn, runtime: { mode: "async-shared" } })`, which binds a job id, not the result (collect with `s.await`). **Work that follows a row change** → `tableTrigger`: it fires on every insert/update/delete of the table, whichever stack writes it, so the same side effect placed in one endpoint's stack misses every other write path.
13
13
  - **The same steps before or after many objects** (an auth check, a rate limit, logging) → `middleware`, attached per host (`middleware: { pre, post }` on a query, function, task, tool or API group) or to every host of a kind with `workspaceConfig({ middleware: { query, function, task, tool } })` — not a function call repeated at the top of each stack.
14
14
  - **Related rows on returned rows** → an `addon` attached to the read through its `addon: [{ addon, as, input }]` option (`db.query`/`get`/`add`/`edit`/`patch`), merged onto each row under `as` and typed in `InferResponse` — not a second read plus a loop that stitches rows together.
15
- - **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()`; an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
15
+ - **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()` (a local coding agent reads the same files in the repo); an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
16
16
  - **Pushing to connected clients** → `realtimeServer` → `realtimeChannel` → `realtimeMessage` (the handler for a frame a client sends — the realtime analogue of a query). A server-side push from any stack is `s.realtime.publish`; a client polling a `query` is the substitute this replaces.
17
17
  - **Code the typed surface cannot express** → a lambda (`s.lambda`, `fl.lambda`) for a short JavaScript body, LAST, after native filters and expressions (`llms/lambda.md`); a `microservice` for a long-running container or another language; `s.api.request` for a service that already has an HTTP API.
18
18
  - **Tests** → `tests` on a `query`/`defineFunction`/`middleware` for that one object's input → output; a `workflowTest` for a flow across objects (`s.function.call`, `s.api.call`, `s.task.call`) asserted with `s.expect.*`.
@@ -44,5 +44,5 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
44
44
  - channel: `realtimeChannel` → `Xano.registerRealtimeChannels` → payload `channel` — A realtime channel: a joinable path on a realtime server (`rooms/{room_id}`) with typed path params, join/publish policy, a client-visible conversation transcript, and delivery semantics. Owns message handlers. Returns a handle with `getChannel(params)` for the path a client joins.
45
45
  - message: `realtimeMessage` → `Xano.registerRealtimeMessages` → payload `message` — A realtime message handler: a named message type on a channel with its own typed payload and stack — the realtime analogue of a query. Pass the `realtimeChannel()` handle as `channel` and the owning server comes with it.
46
46
  - microservice: `microservice` → `Xano.registerMicroservices` → payload `microservice` — A container workload deployed alongside the workspace, called from a stack with `s.microservice.request`. Def shapes (`builtin` containers vs a `helm` chart) and the SECRET-handling rules its config carries: `llms/statements-calls.md`.
47
- - knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown Xano's own AI (the builder agent, and Meta API / MCP readers) reads before it acts — never an `agent()` run — an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
47
+ - knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
48
48
  - workspace: `workspaceConfig` → `Xano.registerWorkspace` → payload `workspace` — Workspace-level configuration such as default middleware chains and request-history defaults per host kind.
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.11
1
+ # xanosdk v1.0.13
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
@@ -45,7 +45,7 @@ plain file read resolves them at the version you have.
45
45
  - [Error index](llms/errors.md): Read when a request, test, build, or pull fails with a message you did not write — the string, its cause, and where the fix is.
46
46
  - [Saved unit tests, assertions, and mocks](llms/tests.md): Read when authoring a `workflowTest()` stack, when a query/function/middleware carries `tests`, when a statement needs a `mock`, or when running a deployed environment's tests.
47
47
  - [Agent and MCP def shapes](llms/kinds-agent-mcp.md): Read when building an MCP server (tools, prompts, resources) or an `agent()`.
48
- - [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item for its AI agents.
48
+ - [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item.
49
49
  - [Realtime def shapes](llms/kinds-realtime.md): Read when the workspace defines a `realtimeServer()`, `realtimeChannel()`, or `realtimeMessage()` handler.
50
50
  - [Triggers](llms/triggers.md): Read when authoring any trigger. A trigger's `stack` is a callback rather than the plain array every other kind takes, so the shape does not carry over.
51
51
  - [Array and database statements](llms/statements-data.md): Read when the stack reads or writes rows (`s.db.*`), or transforms an array in place (`s.array.map`, `s.array.union`).
@@ -507,7 +507,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
507
507
  - **Work on a timer** → `task` (cron or interval). **Work a request starts but does not wait for** → `s.function.run({ fn, runtime: { mode: "async-shared" } })`, which binds a job id, not the result (collect with `s.await`). **Work that follows a row change** → `tableTrigger`: it fires on every insert/update/delete of the table, whichever stack writes it, so the same side effect placed in one endpoint's stack misses every other write path.
508
508
  - **The same steps before or after many objects** (an auth check, a rate limit, logging) → `middleware`, attached per host (`middleware: { pre, post }` on a query, function, task, tool or API group) or to every host of a kind with `workspaceConfig({ middleware: { query, function, task, tool } })` — not a function call repeated at the top of each stack.
509
509
  - **Related rows on returned rows** → an `addon` attached to the read through its `addon: [{ addon, as, input }]` option (`db.query`/`get`/`add`/`edit`/`patch`), merged onto each row under `as` and typed in `InferResponse` — not a second read plus a loop that stitches rows together.
510
- - **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()`; an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
510
+ - **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()` (a local coding agent reads the same files in the repo); an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
511
511
  - **Pushing to connected clients** → `realtimeServer` → `realtimeChannel` → `realtimeMessage` (the handler for a frame a client sends — the realtime analogue of a query). A server-side push from any stack is `s.realtime.publish`; a client polling a `query` is the substitute this replaces.
512
512
  - **Code the typed surface cannot express** → a lambda (`s.lambda`, `fl.lambda`) for a short JavaScript body, LAST, after native filters and expressions (`llms/lambda.md`); a `microservice` for a long-running container or another language; `s.api.request` for a service that already has an HTTP API.
513
513
  - **Tests** → `tests` on a `query`/`defineFunction`/`middleware` for that one object's input → output; a `workflowTest` for a flow across objects (`s.function.call`, `s.api.call`, `s.task.call`) asserted with `s.expect.*`.
@@ -539,7 +539,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
539
539
  - channel: `realtimeChannel` → `Xano.registerRealtimeChannels` → payload `channel` — A realtime channel: a joinable path on a realtime server (`rooms/{room_id}`) with typed path params, join/publish policy, a client-visible conversation transcript, and delivery semantics. Owns message handlers. Returns a handle with `getChannel(params)` for the path a client joins.
540
540
  - message: `realtimeMessage` → `Xano.registerRealtimeMessages` → payload `message` — A realtime message handler: a named message type on a channel with its own typed payload and stack — the realtime analogue of a query. Pass the `realtimeChannel()` handle as `channel` and the owning server comes with it.
541
541
  - microservice: `microservice` → `Xano.registerMicroservices` → payload `microservice` — A container workload deployed alongside the workspace, called from a stack with `s.microservice.request`. Def shapes (`builtin` containers vs a `helm` chart) and the SECRET-handling rules its config carries: `llms/statements-calls.md`.
542
- - knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown Xano's own AI (the builder agent, and Meta API / MCP readers) reads before it acts — never an `agent()` run — an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
542
+ - knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
543
543
  - workspace: `workspaceConfig` → `Xano.registerWorkspace` → payload `workspace` — Workspace-level configuration such as default middleware chains and request-history defaults per host kind.
544
544
 
545
545
  # Core def shapes
@@ -901,9 +901,9 @@ The run is isolated in ways that make a correct test fail for reasons the failur
901
901
 
902
902
  # Knowledge def shape
903
903
 
904
- > Read when the workspace defines a `knowledge()` item for its AI agents.
904
+ > Read when the workspace defines a `knowledge()` item.
905
905
 
906
- - `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown Xano's own AI reads before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
906
+ - `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown shared by every AI that builds the backend: Xano's own AI reads it before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP — and a local coding agent reads the same `.md` files in the repo; deploy and `pull` keep the copies in sync. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
907
907
  - `body` (REQUIRED): `knowledgeFile("./runbook.md", import.meta.url)` — a path to a real markdown FILE. There is no inline-string form. The path resolves relative to the MODULE THAT DECLARES the item, not the process working directory and not the workspace entry; `import.meta.url` is required and is what makes that true.
908
908
  - `refs?`: `knowledgeDir("./runbook", import.meta.url)` — a directory whose WHOLE tree ships, recursively, paths preserved: UTF-8 text only (else refused; binary `.DS_Store` skipped), symlinks not followed. Keep the body OUT of it, or it ships as a reference file.
909
909
  - `type?`: `"skill"` (default) | `"doc"` | `"agents.md"`. `skill` and `doc` differ in how they are filed, not in what an agent receives.
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.11
1
+ # xanosdk v1.0.13
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
@@ -45,7 +45,7 @@ plain file read resolves them at the version you have.
45
45
  - [Error index](llms/errors.md): Read when a request, test, build, or pull fails with a message you did not write — the string, its cause, and where the fix is.
46
46
  - [Saved unit tests, assertions, and mocks](llms/tests.md): Read when authoring a `workflowTest()` stack, when a query/function/middleware carries `tests`, when a statement needs a `mock`, or when running a deployed environment's tests.
47
47
  - [Agent and MCP def shapes](llms/kinds-agent-mcp.md): Read when building an MCP server (tools, prompts, resources) or an `agent()`.
48
- - [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item for its AI agents.
48
+ - [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item.
49
49
  - [Realtime def shapes](llms/kinds-realtime.md): Read when the workspace defines a `realtimeServer()`, `realtimeChannel()`, or `realtimeMessage()` handler.
50
50
  - [Triggers](llms/triggers.md): Read when authoring any trigger. A trigger's `stack` is a callback rather than the plain array every other kind takes, so the shape does not carry over.
51
51
  - [Array and database statements](llms/statements-data.md): Read when the stack reads or writes rows (`s.db.*`), or transforms an array in place (`s.array.map`, `s.array.union`).
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanosdk",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
5
5
  "coverage": {
6
6
  "objectKinds": {
@@ -382,7 +382,7 @@
382
382
  "kind": "knowledge",
383
383
  "payloadKey": "knowledge",
384
384
  "authorFactory": "knowledge",
385
- "description": "Markdown Xano's own AI (the builder agent, and Meta API / MCP readers) reads before it acts — never an `agent()` run — an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile(\"./x.md\", import.meta.url)`, and `mode` decides how much of it reaches the agent.",
385
+ "description": "Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile(\"./x.md\", import.meta.url)`, and `mode` decides how much of it reaches the agent.",
386
386
  "registerMethod": "registerKnowledge",
387
387
  "registered": true
388
388
  },
@@ -10716,7 +10716,7 @@
10716
10716
  "description": "With --emit: write nothing, and fail when the file is missing or out of date (what xano:check runs)"
10717
10717
  }
10718
10718
  ],
10719
- "description": "List each query's verb + resolved api:<canonical>/<name>"
10719
+ "description": "List every address a frontend references — api:<canonical>/<name> routes, realtime sockets and channels, MCP servers"
10720
10720
  },
10721
10721
  {
10722
10722
  "command": "secrets fill",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xano/sdk",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "The official TypeScript SDK for Xano, one platform to build, run and govern AI-built software. Your coding agent writes the backend in TypeScript, you run it on the Xano Engine on your machine, then deploy it to Xano.",
5
5
  "keywords": [
6
6
  "xanosdk",
@@ -14,8 +14,8 @@ description: >-
14
14
  FastAPI) unless the user asks for Xano.
15
15
  license: MIT
16
16
  metadata:
17
- xanosdk-version: "1.0.11"
18
- xanosdk-digest: "sha256:c5d35da65c9b45a105277ba0dec5d798f6fcb6239a99f50db8f6327d1c7abca6"
17
+ xanosdk-version: "1.0.13"
18
+ xanosdk-digest: "sha256:5af311994df498c279a5f24b3f605468a690f046d8bddf612c938142ee46c759"
19
19
  ---
20
20
 
21
21
  # Xano backend