@xano/sdk 1.0.6 → 1.0.8

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 (242) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +32 -4
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-67QIX45H.js → agent-file-refresh-QJO3MT6Q.js} +13 -13
  5. package/dist/agent-skill-command-GBR4KUUG.js +414 -0
  6. package/dist/{answer-shape-UCDUKPAN.js → answer-shape-UMQRXMCX.js} +5 -5
  7. package/dist/{backend-dir-3LIL6SCT.js → backend-dir-PFUIPCV3.js} +15 -15
  8. package/dist/{backend-slot-JREP27UD.js → backend-slot-TTRNOQF5.js} +4 -4
  9. package/dist/bin.js +54 -53
  10. package/dist/{branch-2IPHOAYS.js → branch-Q7CDJRU6.js} +12 -11
  11. package/dist/{branch-commands-KTKAXBAN.js → branch-commands-CR3SAHMV.js} +27 -26
  12. package/dist/bundle.js +5 -5
  13. package/dist/{chunk-YKP4ZKVO.js → chunk-2HZDWZM2.js} +3 -3
  14. package/dist/{chunk-ZDP6GDAB.js → chunk-33KELF2X.js} +103 -94
  15. package/dist/{chunk-7VR4IO5B.js → chunk-3P35HT64.js} +2 -2
  16. package/dist/{chunk-2FLIJGBZ.js → chunk-3UZQ5TMG.js} +47 -8
  17. package/dist/{chunk-AWQ7BQTQ.js → chunk-4GPIOIAC.js} +6 -1
  18. package/dist/{chunk-YYLUBYXM.js → chunk-4JKXGPXB.js} +3 -3
  19. package/dist/{chunk-EQFYOOO6.js → chunk-5GIOCDUM.js} +829 -893
  20. package/dist/{chunk-26MOFAJT.js → chunk-5QOV52V4.js} +6 -3
  21. package/dist/{chunk-Q22BMRPF.js → chunk-5Y5HWQ2P.js} +2 -2
  22. package/dist/{chunk-T4LJ5UR2.js → chunk-6BOKCTCM.js} +52 -22
  23. package/dist/{chunk-FNLTFOUD.js → chunk-6NEV2PEC.js} +2 -2
  24. package/dist/{chunk-QJM5XZ4K.js → chunk-6PTITS3M.js} +8 -8
  25. package/dist/{chunk-N5I37JFB.js → chunk-6S263KTM.js} +2 -2
  26. package/dist/{chunk-JI3BLXWQ.js → chunk-6YOH2L3G.js} +11 -5
  27. package/dist/{chunk-5QMJOE2K.js → chunk-6ZFJEJXZ.js} +5 -3
  28. package/dist/{chunk-NPODGBVJ.js → chunk-75MKIQON.js} +4 -4
  29. package/dist/{chunk-SPITRSOF.js → chunk-76UAME77.js} +2 -2
  30. package/dist/{chunk-JRVQ7M7W.js → chunk-77GV772V.js} +8 -8
  31. package/dist/{chunk-GWTFI3GA.js → chunk-7JKNWDYN.js} +2 -2
  32. package/dist/{chunk-6X6BJN6Y.js → chunk-7MPI7NIW.js} +3 -3
  33. package/dist/{chunk-3II44CUJ.js → chunk-7UWUEUVJ.js} +24 -24
  34. package/dist/{chunk-ENMBEXOP.js → chunk-AS4G2MIE.js} +3 -3
  35. package/dist/{chunk-PMMHSX4H.js → chunk-B3NH5UBI.js} +4 -4
  36. package/dist/{chunk-SLGJIWCY.js → chunk-B5N6EWOM.js} +2 -2
  37. package/dist/chunk-BRANWM4U.js +853 -0
  38. package/dist/{chunk-6X3MY2JP.js → chunk-C2GHFADU.js} +2 -2
  39. package/dist/{chunk-CCU5CCRX.js → chunk-C2I4GC36.js} +8 -8
  40. package/dist/{chunk-D7BUMOKU.js → chunk-C6KBZH7M.js} +82 -6
  41. package/dist/{chunk-LAOMN6QQ.js → chunk-CRE7P7P2.js} +3 -3
  42. package/dist/{chunk-AVS4WPPY.js → chunk-DER2CVNC.js} +2 -2
  43. package/dist/{chunk-UIVMR7UK.js → chunk-DY3EJWWH.js} +2 -2
  44. package/dist/{chunk-SKEG3V2V.js → chunk-EKTIGGFO.js} +2 -2
  45. package/dist/{chunk-PL7AIAWS.js → chunk-F3IA3YWI.js} +4 -111
  46. package/dist/{chunk-FQ53GTII.js → chunk-F5RPNTN7.js} +6 -6
  47. package/dist/{chunk-2WBH5HUY.js → chunk-FHQYXGAY.js} +7 -7
  48. package/dist/{chunk-ND43ZOS3.js → chunk-FN7E6XGD.js} +7 -7
  49. package/dist/{chunk-3BBIDW3Y.js → chunk-GN5SQMIQ.js} +5 -5
  50. package/dist/{chunk-SSITMX7I.js → chunk-H3ZBAR2L.js} +16 -14
  51. package/dist/{chunk-OIKLDDYC.js → chunk-HFOGQIII.js} +3 -3
  52. package/dist/chunk-HKLBDSML.js +995 -0
  53. package/dist/{chunk-JXVJGF3Y.js → chunk-HQPL34O6.js} +2 -2
  54. package/dist/{chunk-CHINR7WD.js → chunk-HTP2CLRQ.js} +5 -5
  55. package/dist/{chunk-ROY4YAEQ.js → chunk-HU7F56VF.js} +22 -2
  56. package/dist/{chunk-TECTL2NU.js → chunk-HVPSDQJB.js} +4 -4
  57. package/dist/{chunk-IYXL5NYU.js → chunk-I53OTC3O.js} +2 -2
  58. package/dist/{chunk-M5CSVB23.js → chunk-IB6SKACE.js} +11 -8
  59. package/dist/{chunk-UD2Z7K6W.js → chunk-JG642U5D.js} +4 -4
  60. package/dist/{chunk-ZJSTUD6D.js → chunk-JJGK7XGC.js} +8 -8
  61. package/dist/{local-engine-command-RYLGMQ2O.js → chunk-JPRZ4ZGU.js} +22 -77
  62. package/dist/{chunk-QZEAANWP.js → chunk-K75BFHQQ.js} +8 -8
  63. package/dist/chunk-LCOCRJ4K.js +116 -0
  64. package/dist/{chunk-3EDSPMXN.js → chunk-LJM5CIY4.js} +5 -1
  65. package/dist/{chunk-D3KEPRRN.js → chunk-LTPF25L2.js} +2 -1
  66. package/dist/{chunk-HCG7NDIL.js → chunk-M3RLLT4O.js} +5 -5
  67. package/dist/{chunk-IXFJORNH.js → chunk-NFSUGVDY.js} +4 -4
  68. package/dist/{chunk-GHQ4BVI4.js → chunk-NFZUXS7D.js} +14 -14
  69. package/dist/{chunk-LBJA7IEM.js → chunk-O376UAZS.js} +2 -2
  70. package/dist/{chunk-LD6ARK3A.js → chunk-OBJ7FQDX.js} +2 -2
  71. package/dist/{chunk-VJFMUJWZ.js → chunk-OHTHG3LL.js} +2 -2
  72. package/dist/{chunk-U35MTOXQ.js → chunk-P5W6DBV6.js} +3 -3
  73. package/dist/{chunk-A7MRZ4GF.js → chunk-PAS5HOG3.js} +5 -5
  74. package/dist/{chunk-WZHLMU6T.js → chunk-PBK257CI.js} +2 -2
  75. package/dist/{chunk-SPKA2LV6.js → chunk-PFW7WFAT.js} +4 -4
  76. package/dist/{chunk-GOLFAEUV.js → chunk-QC3MKMDK.js} +2 -2
  77. package/dist/{chunk-YGLMRH5U.js → chunk-QE2GNFMP.js} +12 -12
  78. package/dist/{chunk-763M6LX3.js → chunk-QL3ZJWGG.js} +2 -2
  79. package/dist/{chunk-ITC2R2OT.js → chunk-QRKBFXIB.js} +7 -7
  80. package/dist/{chunk-KPFS3RGM.js → chunk-QTMXJQZN.js} +4 -4
  81. package/dist/{chunk-BTVUYHWV.js → chunk-QXOBZSQD.js} +4 -4
  82. package/dist/{chunk-NDWVJ2QZ.js → chunk-R3LANPQZ.js} +3 -3
  83. package/dist/{chunk-QXYMDARD.js → chunk-R4NOZBOY.js} +4 -4
  84. package/dist/{chunk-YYC2DZMG.js → chunk-RYMGK2K5.js} +6 -6
  85. package/dist/{chunk-IF4PEGVD.js → chunk-S2F7KVUL.js} +11 -11
  86. package/dist/{chunk-I3VHW6XM.js → chunk-S3STXOAO.js} +18 -18
  87. package/dist/{chunk-JFBRXRJD.js → chunk-S3WN6GGO.js} +40 -40
  88. package/dist/{chunk-U6MTGB46.js → chunk-S42TFTM5.js} +5 -5
  89. package/dist/{chunk-7GAIJW62.js → chunk-TG65NWUR.js} +2 -2
  90. package/dist/{chunk-YR2I5HGE.js → chunk-TR7EOUQE.js} +2 -2
  91. package/dist/{chunk-I3H3HCPY.js → chunk-U7XNJ33Q.js} +34 -31
  92. package/dist/{chunk-FU3VCE5A.js → chunk-UKJFCEMI.js} +13 -9
  93. package/dist/{chunk-5TVFLG3C.js → chunk-ULUUOUQX.js} +2 -2
  94. package/dist/{chunk-PFBXSVZF.js → chunk-UU7EEREQ.js} +7 -7
  95. package/dist/{chunk-ATJ2W7DC.js → chunk-V7KMIEMF.js} +286 -126
  96. package/dist/{chunk-VDHA5SSQ.js → chunk-VD7YTLWL.js} +2 -2
  97. package/dist/{chunk-EADVVTDK.js → chunk-VHV25AAO.js} +7 -7
  98. package/dist/{chunk-BL3AZ3AP.js → chunk-VJTTTIIB.js} +2 -2
  99. package/dist/{chunk-TTEIDD5Q.js → chunk-W2BVP27L.js} +4 -4
  100. package/dist/{chunk-GZHLCUZ6.js → chunk-WEQFI55W.js} +7 -7
  101. package/dist/{chunk-WBH4KJWM.js → chunk-XQO4A4Q4.js} +3 -3
  102. package/dist/{chunk-Z4ZGTCCD.js → chunk-XYTVP4WI.js} +6 -6
  103. package/dist/{chunk-5YQV35C2.js → chunk-Y5ET37NN.js} +7 -7
  104. package/dist/{chunk-VW4CWVYX.js → chunk-YE7MHW45.js} +4 -4
  105. package/dist/{chunk-YHB34BN6.js → chunk-YEH5OIPF.js} +2 -1
  106. package/dist/{chunk-GLY552SI.js → chunk-YG7S3N7P.js} +128 -60
  107. package/dist/{chunk-MBDFH7XB.js → chunk-YP76ZCQ5.js} +4 -4
  108. package/dist/{chunk-XFBGXB7X.js → chunk-ZJCHS7FM.js} +163 -107
  109. package/dist/{chunk-IMELQ2I6.js → chunk-ZO3QWFNV.js} +3 -3
  110. package/dist/{chunk-RIN4YY34.js → chunk-ZQ5WZWHF.js} +106 -69
  111. package/dist/{chunk-GW5RHGOB.js → chunk-ZT2B22VQ.js} +9 -9
  112. package/dist/cli.d.ts +32 -4
  113. package/dist/cli.js +51 -48
  114. package/dist/{codegen-command-R5IASBFC.js → codegen-command-4YXDJSLU.js} +69 -68
  115. package/dist/{commands-H7CPMMHH.js → commands-FOHIPDKZ.js} +3 -3
  116. package/dist/{completion-W5ZAI6TN.js → completion-XUBGMKGV.js} +9 -5
  117. package/dist/{config-MZ5KG4EP.js → config-544VCRKP.js} +8 -8
  118. package/dist/{deploy-command-34T2LKQ5.js → deploy-command-FIDS56ZC.js} +56 -55
  119. package/dist/{deploy-source-YLQ7WMYR.js → deploy-source-FPNNNNOW.js} +34 -33
  120. package/dist/{dev-env-sync-TMJTNU3U.js → dev-env-sync-RBJ2U3HG.js} +54 -53
  121. package/dist/{diagnostics-OMN5Y2AH.js → diagnostics-FNVNRYMB.js} +2 -2
  122. package/dist/{display-name-hint-ZJGFNJKQ.js → display-name-hint-EZQK2PDU.js} +14 -13
  123. package/dist/{emit-D125xxty.d.ts → emit-8lcNcRrd.d.ts} +12 -12
  124. package/dist/env-example-refresh-6UTTMDOI.js +134 -0
  125. package/dist/{env-pull-command-UTG6IC2K.js → env-pull-command-P5MATITQ.js} +46 -45
  126. package/dist/{env-target-FZROWYFS.js → env-target-F75YF25S.js} +13 -12
  127. package/dist/{env-var-command-VYDBQJJW.js → env-var-command-H3GHROVB.js} +50 -49
  128. package/dist/{ephemeral-BIE6FMJV.js → ephemeral-H24NF6WP.js} +11 -10
  129. package/dist/{ephemeral-command-OZ26RGXF.js → ephemeral-command-NH2XW3YK.js} +64 -63
  130. package/dist/{ephemeral-state-SNZOX2YK.js → ephemeral-state-YLZQIOBF.js} +11 -10
  131. package/dist/{generate-command-4HR7MR36.js → generate-command-IANKN6WV.js} +84 -82
  132. package/dist/{gitignore-EWQBXNX2.js → gitignore-FT2LVOMI.js} +19 -19
  133. package/dist/{guards-KYEOCVHN.js → guards-4VPSEOAI.js} +6 -4
  134. package/dist/{impersonate-command-WC7OGKUM.js → impersonate-command-7B67ICPL.js} +42 -41
  135. package/dist/{import-7Z4GCCPO.js → import-TXYVFYJS.js} +5 -5
  136. package/dist/index.d.ts +4 -4
  137. package/dist/index.js +8 -8
  138. package/dist/{init-command-HAO3WXH3.js → init-command-QOA4TJI2.js} +68 -53
  139. package/dist/{init-modules-NSKD4ASY.js → init-modules-KEEJ4HAF.js} +8 -8
  140. package/dist/{init-web-MKFFOQUU.js → init-web-MSXDARRF.js} +3 -3
  141. package/dist/internal.d.ts +4 -4
  142. package/dist/internal.js +10 -10
  143. package/dist/{keep-data-merge-QR2TMKEO.js → keep-data-merge-BIBW4QR4.js} +28 -28
  144. package/dist/{lambda-config-reconcile-7FJXXV6V.js → lambda-config-reconcile-47X5C2E4.js} +6 -5
  145. package/dist/{landing-record-MWXFIRCP.js → landing-record-DO3PM7QP.js} +22 -22
  146. package/dist/{live-diff-5E2BQWQ7.js → live-diff-CGTGOH3S.js} +3 -3
  147. package/dist/{local-engine-choice-VD5LNXJU.js → local-engine-choice-2UF7S5QZ.js} +37 -36
  148. package/dist/local-engine-command-WGMMZRQL.js +85 -0
  149. package/dist/{local-engine-config-W3KB7RWM.js → local-engine-config-6CB6FOEJ.js} +3 -2
  150. package/dist/{local-engine-deploy-6O7NKZCA.js → local-engine-deploy-ID4JJXB5.js} +18 -16
  151. package/dist/local-engine-lookup-IC7BKAYP.js +43 -0
  152. package/dist/local-engine-mcp-bridge-3SOJMZ5T.js +423 -0
  153. package/dist/local-engine-mcp-command-RMVUH4FL.js +181 -0
  154. package/dist/{local-engine-process-ZLLZEIRF.js → local-engine-process-HG5BGG3F.js} +12 -9
  155. package/dist/{local-engine-state-OCW5YDD7.js → local-engine-state-JZHTKHDG.js} +4 -3
  156. package/dist/{local-engine-update-check-LVX4HBBI.js → local-engine-update-check-SKZR7YSC.js} +7 -6
  157. package/dist/{lock-commands-X2OECR4R.js → lock-commands-5NMQWBGH.js} +57 -56
  158. package/dist/{login-command-RLLKD565.js → login-command-GLLFZWHT.js} +33 -33
  159. package/dist/{logout-command-XDMSXCDO.js → logout-command-NCMKMJWF.js} +16 -15
  160. package/dist/{loop-SUB6C2LK.js → loop-XFDS65OD.js} +3 -3
  161. package/dist/{marketplace-command-2NHHY2X3.js → marketplace-command-Y3RRUEWL.js} +34 -34
  162. package/dist/{marketplace-resolve-OTZYT4FG.js → marketplace-resolve-PWEYJ2XS.js} +6 -6
  163. package/dist/{meta-client-TMHVBZFY.js → meta-client-Y7N6WDS2.js} +14 -13
  164. package/dist/{module-manifest-FNMW23IX.js → module-manifest-KY7J63HG.js} +4 -4
  165. package/dist/node.d.ts +4 -4
  166. package/dist/node.js +60 -59
  167. package/dist/operation-outcome-4BFISK2R.js +53 -0
  168. package/dist/{output-target-MOLCTPBP.js → output-target-MFANTVGZ.js} +20 -20
  169. package/dist/{plan-disclosure-CY7AF6KP.js → plan-disclosure-GNLDYV2A.js} +17 -16
  170. package/dist/{plugin-contributions-WR26U7NT.js → plugin-contributions-PAGG6SUP.js} +6 -6
  171. package/dist/{plugin-prompt-ZUYQQIX4.js → plugin-prompt-2MX6LF6X.js} +5 -5
  172. package/dist/{plugin-questions-HAZOQ67R.js → plugin-questions-AP6VUTOB.js} +4 -4
  173. package/dist/{preflight-command-OHJXYND3.js → preflight-command-Q6XOKRM6.js} +61 -60
  174. package/dist/{profile-command-6JWT2BTL.js → profile-command-XPQIXFWN.js} +34 -34
  175. package/dist/{profile-pointer-PDA5XBIB.js → profile-pointer-4HJQH5ZR.js} +5 -4
  176. package/dist/{project-dependency-GZWWGWEW.js → project-dependency-ORX45I74.js} +7 -7
  177. package/dist/{project-sdk-3W72H5QO.js → project-sdk-IYMFVQRC.js} +4 -4
  178. package/dist/promote-command-DN64QK7O.js +147 -0
  179. package/dist/{prompt-U37K5RPQ.js → prompt-ZZUYWFQX.js} +4 -4
  180. package/dist/{publish-command-BUS27HGB.js → publish-command-SLE46MQX.js} +61 -60
  181. package/dist/{pull-command-ZGUNP27P.js → pull-command-UVK3IOXM.js} +72 -71
  182. package/dist/{pull-superseded-EZBGYRZF.js → pull-superseded-UZ3MB53B.js} +4 -4
  183. package/dist/{release-command-BQ6OHS3P.js → release-command-MKNESNGB.js} +67 -66
  184. package/dist/{release-ns-command-ATGVBVIU.js → release-ns-command-HLR46IKP.js} +92 -91
  185. package/dist/{retry-command-QJ57WVW7.js → retry-command-VZYLYDVX.js} +10 -9
  186. package/dist/{routes-manifest-YR4ZIMLM.js → routes-manifest-RIZGSOZC.js} +4 -4
  187. package/dist/{routes-manifest-file-UALYSZLY.js → routes-manifest-file-UHVVL2YB.js} +8 -8
  188. package/dist/scaffold.js +4 -4
  189. package/dist/secrets-IV4N5HYI.js +20 -0
  190. package/dist/{secrets-file-LMS7KX3E.js → secrets-file-HST7BMQC.js} +19 -19
  191. package/dist/{secrets-fill-command-QNBDGCGM.js → secrets-fill-command-FQJ4QFBP.js} +55 -54
  192. package/dist/{seed-SZ6OS5DQ.js → seed-KEPIS7UZ.js} +6 -6
  193. package/dist/{source-resolve-MKLNYFWG.js → source-resolve-LNRUITLS.js} +24 -22
  194. package/dist/{static-host-ONEHA4LI.js → static-host-JAOT3N3E.js} +5 -5
  195. package/dist/{status-command-XKIFKBGM.js → status-command-S5CBG2SW.js} +53 -52
  196. package/dist/{store-Bg4Na6Sm.d.ts → store-CuD1k4kV.d.ts} +1 -1
  197. package/dist/{store-X6ZH7EC3.js → store-YFNDD6GZ.js} +8 -7
  198. package/dist/{sync-baseline-DOV5AGIO.js → sync-baseline-3CDL4PKT.js} +7 -5
  199. package/dist/{sync-contributions-HNVHDIQW.js → sync-contributions-O5ZRM2JN.js} +10 -10
  200. package/dist/{sync-record-PRXHLK4S.js → sync-record-U65BCPSP.js} +14 -13
  201. package/dist/{table-DC36QA4Y.js → table-E5YTK7QX.js} +7 -7
  202. package/dist/{tables-command-UQLKTELN.js → tables-command-7KI2KZOS.js} +40 -39
  203. package/dist/{tenant-EKNQGG5A.js → tenant-DAXJ4P4D.js} +12 -11
  204. package/dist/{tenant-command-2LWP2MPB.js → tenant-command-MQTLNETR.js} +97 -96
  205. package/dist/{test-command-IU5MBBXY.js → test-command-NLYMAAPD.js} +42 -41
  206. package/dist/{tests-RG2Y5EQ4.js → tests-CLDZWLKF.js} +6 -6
  207. package/dist/{token-7AWSJLKO.js → token-3IPTVEEW.js} +12 -11
  208. package/dist/{toolchain-hooks-4ZMQLBPQ.js → toolchain-hooks-3ZAAAWPL.js} +7 -7
  209. package/dist/{toolchain-modules-VU7SURVJ.js → toolchain-modules-K46KYJ4G.js} +5 -5
  210. package/dist/{toolchain-peers-CIDNEEQV.js → toolchain-peers-AIKWKJH7.js} +8 -8
  211. package/dist/{tracked-backend-4BHSV7NC.js → tracked-backend-FQFXTTYZ.js} +37 -36
  212. package/dist/{update-check-A7FXIINW.js → update-check-FHRRUDEC.js} +52 -51
  213. package/dist/{upgrade-command-C5KBITFI.js → upgrade-command-WNBPKUXN.js} +58 -55
  214. package/dist/{whoami-command-7WQII2H4.js → whoami-command-DPGDK35H.js} +15 -14
  215. package/dist/{workspace-Z46PUZNI.js → workspace-2GMONZ2A.js} +5 -5
  216. package/dist/{workspace-binding-JE6YNDZJ.js → workspace-binding-PAUOIK3V.js} +14 -13
  217. package/dist/{workspace-command-FC4IMLAE.js → workspace-command-KEKL27Y4.js} +99 -103
  218. package/dist/{workspace-env-N4ZPFT6A.js → workspace-env-GGEZVZDY.js} +16 -16
  219. package/dist/{workspace-export-3A5BZTPS.js → workspace-export-UHY22VBI.js} +5 -5
  220. package/dist/{writable-D7KCZI5N.js → writable-2A6MBSFD.js} +4 -4
  221. package/dist/{xano-LCI7VWPS.js → xano-6T6L7TTI.js} +5 -5
  222. package/dist/{xanosdk-import-P2A2KSXM.js → xanosdk-import-HYHABD5U.js} +6 -6
  223. package/dist/{xanosdk-project-6AGMW2SL.js → xanosdk-project-2T56DRYS.js} +16 -16
  224. package/guides/README.md +2 -2
  225. package/guides/cli.md +69 -0
  226. package/guides/codegen.md +23 -5
  227. package/guides/codes.md +5 -1
  228. package/guides/coverage.md +5 -0
  229. package/guides/deploying.md +45 -1
  230. package/guides/scaffold.md +61 -10
  231. package/llms/errors.md +1 -1
  232. package/llms/kinds-agent-mcp.md +1 -1
  233. package/llms-full.txt +3 -3
  234. package/llms.txt +1 -1
  235. package/manifest.json +67 -5
  236. package/package.json +5 -2
  237. package/skills/xano-backend/SKILL.md +119 -0
  238. package/dist/chunk-LL7SGTRC.js +0 -663
  239. package/dist/chunk-M6ZFSTIZ.js +0 -630
  240. package/dist/env-example-refresh-CQP3ZMKM.js +0 -133
  241. package/dist/operation-outcome-RN62735X.js +0 -51
  242. package/dist/promote-command-UYAMUXKB.js +0 -146
package/CHANGELOG.md CHANGED
@@ -8,6 +8,36 @@ one release and links to its full notes.
8
8
 
9
9
  ---
10
10
 
11
+ ## 1.0.7 — Your coding agent gets a backend
12
+
13
+ _2026-10-07_ · [release notes](https://github.com/xano-sdk/sdk/releases/tag/v1.0.7)
14
+
15
+ This release is about coding agents working on a Xano backend. An agent in a Xano project now reaches the Xano Engine on your machine over MCP: it can read tables and rows, seed data, and run functions and tests with nothing to configure by hand. `xanosdk init` adds a backend to an app you already have instead of refusing it, and the new `xano-backend` agent skill points agents there. The `AGENTS.md` that `init` writes now briefs an agent on a project with a backend. It also fixes `.ts` entries failing on Node 20 and 22 with tsx 4.23.
16
+
17
+ - Coding agents reach the Xano Engine over MCP
18
+ - `init` adds a backend to an app you already have
19
+ - The `xano-backend` agent skill
20
+ - `AGENTS.md` is a backend brief, not a command list
21
+ - The brief's authoring example is compile-checked
22
+ - `.ts` entries load again with tsx 4.23 on Node 20 and 22
23
+
24
+ ---
25
+
26
+ ## 1.0.6 — Request types reach the frontend
27
+
28
+ _2026-10-05_ · [release notes](https://github.com/xano-sdk/sdk/releases/tag/v1.0.6)
29
+
30
+ This release types every request a frontend sends from `routes.gen.ts` alone, opens that file to marketplace modules so runtime validators can sit beside the types, and teaches `workspace diff` to say which side changed since the project and a workspace branch last matched. ⚠️ One behavior break: `s.db.transaction` no longer accepts `as`, which always bound `null`.
31
+
32
+ - `routes.gen.ts` types every request the frontend sends
33
+ - Toolchain modules add their own section to `routes.gen.ts`
34
+ - `workspace diff` says which side changed since the last sync
35
+ - ⚠️ `s.db.transaction` no longer takes `as`
36
+ - A required input that carries a default is flagged
37
+ - The scaffolded README keeps its platform section
38
+
39
+ ---
40
+
11
41
  ## 1.0.5 — The Xano Engine is the default
12
42
 
13
43
  _2026-10-05_ · [release notes](https://github.com/xano-sdk/sdk/releases/tag/v1.0.5)
package/README.md CHANGED
@@ -19,6 +19,7 @@ network. When it's ready, one command puts the same code live on Xano's cloud.**
19
19
  [The model](#the-model) ·
20
20
  [Typed frontend](#a-type-safe-frontend-for-free) ·
21
21
  [Already on Xano?](#already-have-a-xano-workspace) ·
22
+ [Agent skill](#the-agent-skill) ·
22
23
  [Deploying](#deploying) ·
23
24
  [Reference](#reference)
24
25
 
@@ -120,8 +121,8 @@ The three commands at the top of this page are the whole local loop. Here it is
120
121
  time, then out to the cloud.
121
122
 
122
123
  **1. Scaffold.** No sign-in needed. `init` writes a Vite frontend under `frontend/` (React 19 +
123
- shadcn/ui by default, or SvelteKit with `--framework svelte`), a Xano SDK backend under
124
- `xano/`, and the `xano:deploy*` scripts already wired.
124
+ shadcn/ui by default, SvelteKit with `--framework svelte`, none with `--framework none`), a Xano
125
+ SDK backend under `xano/`, and the `xano:deploy*` scripts already wired.
125
126
 
126
127
  ```bash
127
128
  npx @xano/sdk init my-app && cd my-app
@@ -131,6 +132,12 @@ Theme it with a flag (`--theme zinc-blue --dark toggle`) or pick everything in a
131
132
  `--web`. The starter backend is empty but already deploys — grow it from `xano/EXAMPLE.md`.
132
133
  Flags, presets, theming and add-ons: [The scaffolded project](https://github.com/xano-sdk/sdk/blob/main/guides/scaffold.md).
133
134
 
135
+ **Already have an app?** Run `init` inside it. In a directory that already has files, `init`
136
+ adds only the backend, with no prompt: it writes `xano/`, merges the `xano:*` scripts and
137
+ dependencies into your `package.json`, and writes no frontend. Anything it would overwrite is
138
+ listed and refused unless you pass `--force`
139
+ ([details](https://github.com/xano-sdk/sdk/blob/main/guides/scaffold.md#no-frontend-and-existing-apps)).
140
+
134
141
  **2. Run it on the Xano Engine.** The first deploy downloads the engine for your platform and
135
142
  pins its version in `package.json`; every one after starts in seconds, offline.
136
143
 
@@ -183,9 +190,12 @@ your laptop. `xanosdk deploy` brings one up and deploys into it — it is where
183
190
  commit it and every checkout runs the same engine. Newer ones are offered, never forced.
184
191
  - **Every command reaches it.** After a local deploy, `test run-all`, `tables`, `env set`,
185
192
  `impersonate` and `status` target the engine without a flag, and with no account.
193
+ - **An MCP server for your agent.** `init` connects Claude Code and Cursor to it: they read tables and
194
+ rows, seed data, and run functions and tests. Code still changes in `xano/` and ships with a deploy.
186
195
 
187
196
  ```bash
188
197
  npx xanosdk local list # the engines running on this machine
198
+ npx xanosdk local mcp # how a coding agent connects to the engine's MCP server
189
199
  npx xanosdk local stop <name> # stop one
190
200
  npx xanosdk local update # move the pin to the latest engine
191
201
  npx xanosdk local cache clear # reclaim the disk space
@@ -354,6 +364,22 @@ values travel, the doc-site token, and how to read the decode report are in
354
364
 
355
365
  ---
356
366
 
367
+ ## The agent skill
368
+
369
+ `xano-backend` is an agent skill (`SKILL.md`) for the coding agent you already use: Claude Code,
370
+ Codex, Cursor, Copilot, Gemini CLI, Amp or OpenCode. When a project needs a backend and has none,
371
+ it has the agent confirm Xano with you, run `init`, deploy, and follow the `AGENTS.md` that `init`
372
+ wrote. (It is unrelated to `knowledge()`, the docs your workspace's own AI agents read.)
373
+
374
+ ```bash
375
+ npx @xano/sdk agent-skill install # into each coding agent on this machine (also: status, uninstall)
376
+ npx skills add xano-sdk/sdk # or with the skills installer
377
+ ```
378
+
379
+ In Claude Code: `/plugin marketplace add xano-sdk/sdk`, then `/plugin install xano@xano-sdk`.
380
+
381
+ ---
382
+
357
383
  ## Deploying
358
384
 
359
385
  Code moves through three places: the **Xano Engine** on your machine, a disposable
@@ -377,6 +403,8 @@ defines and keeps every row. Tables are shared by every branch, so a release tha
377
403
  is refused without `--allow-shared-schema-changes`. `--branch <label>` lands on a non-live
378
404
  branch and `--set-live` promotes it, while `--backup-branch` snapshots live's logic, not its shared tables,
379
405
  for a one-`set-live` rollback. A release name is refused rather than resolved when it already exists.
406
+ `deploy --to workspace` refuses to overwrite an object edited in Xano since your last deploy or
407
+ pull (`workspace diff` lists them); pull first, or pass `--overwrite`.
380
408
 
381
409
  `xanosdk status` answers where you stand in one read — who you are signed in as, which
382
410
  instance and workspace, and the backend this project last deployed to. Every flag, the
@@ -410,12 +438,12 @@ reference, the guides carry the shape of a project and the behavior that will bi
410
438
  | Guide | What's in it |
411
439
  |---|---|
412
440
  | [Project structure](https://github.com/xano-sdk/sdk/blob/main/guides/project-structure.md) | How a `xano/` project is laid out, why registration is explicit, wiring one by hand |
413
- | [The scaffolded project](https://github.com/xano-sdk/sdk/blob/main/guides/scaffold.md) | What `xanosdk init` writes, the two frontend presets, theming, add-ons, SvelteKit rules |
441
+ | [The scaffolded project](https://github.com/xano-sdk/sdk/blob/main/guides/scaffold.md) | What `xanosdk init` writes, the two frontend presets, no frontend, existing apps, theming, add-ons, SvelteKit rules |
414
442
  | [The marketplace](https://github.com/xano-sdk/sdk/blob/main/guides/marketplace.md) | Finding add-ons, the two kinds of module, and the install/reinstall/remove lifecycle |
415
443
  | [The module contract](https://github.com/xano-sdk/sdk/blob/main/guides/module-contract.md) | Building an add-on: the manifest fields, the plugin types, every hook, and what is refused |
416
444
  | [Object kinds](https://github.com/xano-sdk/sdk/blob/main/guides/object-kinds.md) | Every authorable kind, and splitting a workspace across microservices |
417
445
  | [Authoring reference](https://github.com/xano-sdk/sdk/blob/main/guides/authoring.md) | Tables and fields, statements, values, inputs, middleware, seed data |
418
- | [CLI](https://github.com/xano-sdk/sdk/blob/main/guides/cli.md) | Every command, shell completion, and what failures look like |
446
+ | [CLI](https://github.com/xano-sdk/sdk/blob/main/guides/cli.md) | Every command, the agent skill, shell completion, and what failures look like |
419
447
  | [Warning and error codes](https://github.com/xano-sdk/sdk/blob/main/guides/codes.md) | Every code the CLI and the build emit, with what it means |
420
448
  | [Signing in & deploying](https://github.com/xano-sdk/sdk/blob/main/guides/deploying.md) | Auth, ephemerals, `--static`, releasing to production, `xanosdk preflight` |
421
449
  | [Environment & identity](https://github.com/xano-sdk/sdk/blob/main/guides/environment.md) | Every environment variable, and how `xano.lock` pins identity |
@@ -1 +1 @@
1
- 8b7346a1f936ea54cf12b090d8062b131d752ba8bccbfc2df2dad543f09dab9c
1
+ 4a0e8e611495fffd6d5a7f8fcd4d081f2fce9422e4b2d13848535909bb0ff937
@@ -3,27 +3,27 @@ import {
3
3
  codingAgentDetected,
4
4
  isCI,
5
5
  refreshAgentFiles
6
- } from "./chunk-FU3VCE5A.js";
7
- import "./chunk-LL7SGTRC.js";
8
- import "./chunk-YYC2DZMG.js";
9
- import "./chunk-PMMHSX4H.js";
6
+ } from "./chunk-UKJFCEMI.js";
7
+ import "./chunk-HKLBDSML.js";
8
+ import "./chunk-RYMGK2K5.js";
9
+ import "./chunk-B3NH5UBI.js";
10
10
  import "./chunk-ZFDZKNGG.js";
11
11
  import "./chunk-FWD7AL6N.js";
12
- import "./chunk-QJM5XZ4K.js";
12
+ import "./chunk-6PTITS3M.js";
13
13
  import "./chunk-DXUICABI.js";
14
+ import "./chunk-TR7EOUQE.js";
14
15
  import "./chunk-4KHEMC32.js";
15
16
  import "./chunk-DNBP4GJN.js";
16
- import "./chunk-763M6LX3.js";
17
+ import "./chunk-QL3ZJWGG.js";
17
18
  import "./chunk-WAVNUTMT.js";
18
- import "./chunk-YR2I5HGE.js";
19
19
  import "./chunk-LLNZGEFK.js";
20
20
  import "./chunk-MF4W6FHU.js";
21
21
  import "./chunk-X2NL4KUO.js";
22
- import "./chunk-EQFYOOO6.js";
23
- import "./chunk-M6ZFSTIZ.js";
24
- import "./chunk-3EDSPMXN.js";
25
- import "./chunk-D7BUMOKU.js";
26
- import "./chunk-YHB34BN6.js";
22
+ import "./chunk-BRANWM4U.js";
23
+ import "./chunk-5GIOCDUM.js";
24
+ import "./chunk-LJM5CIY4.js";
25
+ import "./chunk-C6KBZH7M.js";
26
+ import "./chunk-YEH5OIPF.js";
27
27
  import "./chunk-UTI5G6OJ.js";
28
28
  import "./chunk-5ZSO4T2G.js";
29
29
  import "./chunk-TFFGOFVZ.js";
@@ -36,4 +36,4 @@ export {
36
36
  isCI,
37
37
  refreshAgentFiles
38
38
  };
39
- //# sourceMappingURL=agent-file-refresh-67QIX45H.js.map
39
+ //# sourceMappingURL=agent-file-refresh-QJO3MT6Q.js.map
@@ -0,0 +1,414 @@
1
+ import {
2
+ readVersion
3
+ } from "./chunk-ZJCHS7FM.js";
4
+ import "./chunk-XQO4A4Q4.js";
5
+ import "./chunk-M3RLLT4O.js";
6
+ import "./chunk-S3STXOAO.js";
7
+ import "./chunk-PBK257CI.js";
8
+ import "./chunk-7UWUEUVJ.js";
9
+ import "./chunk-7JKNWDYN.js";
10
+ import "./chunk-C2I4GC36.js";
11
+ import "./chunk-VJTTTIIB.js";
12
+ import "./chunk-QE2GNFMP.js";
13
+ import "./chunk-QRKBFXIB.js";
14
+ import "./chunk-5Y5HWQ2P.js";
15
+ import "./chunk-F3IA3YWI.js";
16
+ import "./chunk-LCOCRJ4K.js";
17
+ import "./chunk-NFSUGVDY.js";
18
+ import "./chunk-YE7MHW45.js";
19
+ import "./chunk-2MNLRIOX.js";
20
+ import "./chunk-PFW7WFAT.js";
21
+ import "./chunk-CJDPSCMX.js";
22
+ import "./chunk-UKJFCEMI.js";
23
+ import "./chunk-VD7YTLWL.js";
24
+ import "./chunk-UU7EEREQ.js";
25
+ import "./chunk-S42TFTM5.js";
26
+ import "./chunk-ZYJP6BOO.js";
27
+ import "./chunk-QO6BVGS5.js";
28
+ import "./chunk-ULUUOUQX.js";
29
+ import "./chunk-TG65NWUR.js";
30
+ import "./chunk-C2GHFADU.js";
31
+ import "./chunk-622HUCZT.js";
32
+ import "./chunk-6S263KTM.js";
33
+ import "./chunk-IB6SKACE.js";
34
+ import {
35
+ expandHome
36
+ } from "./chunk-EUUUMY7J.js";
37
+ import "./chunk-W2BVP27L.js";
38
+ import {
39
+ AGENT_RULE_BACKENDS
40
+ } from "./chunk-HKLBDSML.js";
41
+ import "./chunk-RYMGK2K5.js";
42
+ import "./chunk-B3NH5UBI.js";
43
+ import "./chunk-ZFDZKNGG.js";
44
+ import "./chunk-FWD7AL6N.js";
45
+ import "./chunk-6PTITS3M.js";
46
+ import "./chunk-DXUICABI.js";
47
+ import "./chunk-TR7EOUQE.js";
48
+ import "./chunk-4KHEMC32.js";
49
+ import "./chunk-GN5SQMIQ.js";
50
+ import "./chunk-MFWF2NZJ.js";
51
+ import "./chunk-DNBP4GJN.js";
52
+ import "./chunk-QL3ZJWGG.js";
53
+ import "./chunk-WAVNUTMT.js";
54
+ import "./chunk-5QOV52V4.js";
55
+ import "./chunk-LLNZGEFK.js";
56
+ import "./chunk-HU7F56VF.js";
57
+ import "./chunk-MF4W6FHU.js";
58
+ import {
59
+ readEnvVar
60
+ } from "./chunk-X2NL4KUO.js";
61
+ import "./chunk-4GPIOIAC.js";
62
+ import "./chunk-BRANWM4U.js";
63
+ import "./chunk-5GIOCDUM.js";
64
+ import "./chunk-LJM5CIY4.js";
65
+ import "./chunk-7REDHC4N.js";
66
+ import {
67
+ UsageError,
68
+ detail,
69
+ isMachineOutput,
70
+ success,
71
+ unknownSubcommand,
72
+ writeJson
73
+ } from "./chunk-C6KBZH7M.js";
74
+ import "./chunk-F5RPNTN7.js";
75
+ import "./chunk-OHTHG3LL.js";
76
+ import "./chunk-6JAEMMZ7.js";
77
+ import "./chunk-6ZFJEJXZ.js";
78
+ import "./chunk-45ZUMF4E.js";
79
+ import "./chunk-7KPKDHHI.js";
80
+ import "./chunk-7FIMUFBP.js";
81
+ import "./chunk-6BOKCTCM.js";
82
+ import "./chunk-ICK36EGF.js";
83
+ import "./chunk-BEXZ4XRV.js";
84
+ import "./chunk-ETAZIGNT.js";
85
+ import "./chunk-GSGDWJB5.js";
86
+ import "./chunk-B5N6EWOM.js";
87
+ import "./chunk-ERVIASGL.js";
88
+ import "./chunk-VTMTIBKP.js";
89
+ import "./chunk-H2V3N23D.js";
90
+ import "./chunk-3JDU4VRL.js";
91
+ import "./chunk-WTPZRR4I.js";
92
+ import "./chunk-YEH5OIPF.js";
93
+ import "./chunk-UTI5G6OJ.js";
94
+ import "./chunk-5KJBWIDZ.js";
95
+ import "./chunk-5ZSO4T2G.js";
96
+ import "./chunk-VQPDATQT.js";
97
+ import "./chunk-UDZX2ZL4.js";
98
+ import "./chunk-ZY55DO5P.js";
99
+ import "./chunk-A2AOUBJS.js";
100
+ import "./chunk-TFFGOFVZ.js";
101
+ import "./chunk-4XHAT7C5.js";
102
+ import "./chunk-S56YBYMN.js";
103
+ import "./chunk-UVF45BVU.js";
104
+ import "./chunk-VAX3UZOY.js";
105
+ import "./chunk-LL6ED5IB.js";
106
+ import "./chunk-4BW2SG2N.js";
107
+ import "./chunk-JIKGT7DO.js";
108
+ import "./chunk-4MIV244X.js";
109
+ import "./chunk-OHX6MIUZ.js";
110
+ import "./chunk-36JUQZVQ.js";
111
+ import "./chunk-PZ5AY32C.js";
112
+
113
+ // src/emit/agent-skill.ts
114
+ import { createHash } from "crypto";
115
+ var AGENT_SKILL_NAME = "xano-backend";
116
+ var AGENT_SKILL_PATH = `skills/${AGENT_SKILL_NAME}/SKILL.md`;
117
+ var DIGEST_KEY = "xanosdk-digest";
118
+ var VERSION_KEY = "xanosdk-version";
119
+ var OTHER_BACKENDS = [...AGENT_RULE_BACKENDS, "Convex", "Django", "Rails", "Laravel", "FastAPI"];
120
+ var orList = (items) => `${items.slice(0, -1).join(", ")} or ${items.at(-1)}`;
121
+ var AGENT_SKILL_DESCRIPTION = `Builds and runs application backends on Xano, authored as TypeScript with @xano/sdk: database tables, REST API endpoints, user authentication, server-side logic, scheduled and background jobs, webhooks, file storage and realtime. Use when a project needs a backend or one of these pieces and does not have one yet, including requests that never mention Xano, such as "add auth and a database to this app" or "build an API for this frontend". Also use in any project with a xano/ directory or an @xano/sdk dependency. Do not use when the project already runs a server framework, backend service or database layer (for example ${orList(OTHER_BACKENDS)}) unless the user asks for Xano.`;
122
+ function fold(text, width = 78) {
123
+ const lines = [];
124
+ let line = "";
125
+ for (const word of text.split(" ")) {
126
+ if (line !== "" && line.length + 1 + word.length > width - 2) {
127
+ lines.push(` ${line}`);
128
+ line = word;
129
+ } else {
130
+ line = line === "" ? word : `${line} ${word}`;
131
+ }
132
+ }
133
+ if (line !== "") lines.push(` ${line}`);
134
+ return lines.join("\n");
135
+ }
136
+ var BODY = `# Xano backend
137
+
138
+ Xano runs the backend: database tables, API endpoints, authentication, server-side
139
+ logic, scheduled tasks, triggers and webhooks, file storage and realtime. It is
140
+ authored as TypeScript in \`xano/\` with \`@xano/sdk\`, and the \`xanosdk\` CLI deploys
141
+ it to the Xano Engine on this machine (no account) or to Xano's cloud.
142
+
143
+ Work through the steps in order. Stop at the first one that ends the task.
144
+
145
+ ## 1. Is this already a Xano project?
146
+
147
+ Look at the project root: the directory holding \`package.json\`, else the
148
+ repository root.
149
+
150
+ - \`xano/\` exists, or \`package.json\` lists \`@xano/sdk\`: read \`AGENTS.md\` and
151
+ follow it. Do not run \`init\`. This skill ends here.
152
+ - No \`AGENTS.md\` in that project: install its dependencies if
153
+ \`node_modules/@xano/sdk\` is missing, then read
154
+ \`node_modules/@xano/sdk/llms.txt\` in full and follow it instead.
155
+
156
+ ## 2. Does the project already have another backend?
157
+
158
+ Another backend is a server framework, backend service or database layer the
159
+ project runs or depends on: for example ${orList(OTHER_BACKENDS)}. These are
160
+ examples, not the whole set. Check the dependency manifests (\`package.json\`,
161
+ \`requirements.txt\`, \`pyproject.toml\`, \`Gemfile\`, \`composer.json\`) and the
162
+ server entry points.
163
+
164
+ - Another backend is present and the user did not ask for Xano: ask the user
165
+ whether they want a Xano backend added beside it. Without a yes, build the
166
+ request on the existing backend, do not run \`init\`, and do not create \`xano/\`.
167
+
168
+ ## 3. Confirm Xano
169
+
170
+ - The user has not named Xano: say that you will set up the backend with Xano
171
+ (\`@xano/sdk\`, TypeScript in \`xano/\`, running locally on the Xano Engine), and
172
+ wait for a yes before step 4. Without one, stop using this skill.
173
+ - The user named Xano: continue.
174
+
175
+ ## 4. Run init
176
+
177
+ Run it at the project root. Which form:
178
+
179
+ - The directory has files (an existing app): \`init\` adds only the backend. It
180
+ writes \`xano/\` and merges what the backend needs into \`package.json\`, and
181
+ writes no frontend.
182
+
183
+ \`\`\`bash
184
+ npx @xano/sdk init --json
185
+ \`\`\`
186
+
187
+ - The directory is empty and the user asked only for a backend:
188
+
189
+ \`\`\`bash
190
+ npx @xano/sdk init --framework none --json
191
+ \`\`\`
192
+
193
+ - The directory is empty and the user asked for an app: \`npx @xano/sdk init --json\`
194
+ writes a frontend and the backend.
195
+
196
+ The JSON names the \`mode\` that ran, the \`files\` it wrote or merged, and \`next\`,
197
+ the command to run next. When \`init\` refuses and lists clashes, show the list to
198
+ the user. Only after the user agrees to overwrite those files, re-run with
199
+ \`--force --yes\`: \`--yes\` confirms the overwrite, which \`init\` cannot ask
200
+ for without a terminal.
201
+
202
+ ## 5. Deploy
203
+
204
+ Run the command in \`next\`. It deploys the backend to the Xano Engine on this
205
+ machine and prints the backend URL. No account is needed.
206
+
207
+ The Xano Engine runs on macOS on Apple Silicon and on Linux (x64, arm64). On any
208
+ other platform, such as Windows or an Intel Mac, tell the user before deploying:
209
+ the backend goes to a Xano ephemeral instead (\`npx xanosdk deploy --ephemeral\`),
210
+ which needs a Xano account.
211
+
212
+ Only a human can do these. Stop and ask the user, then continue once they are
213
+ done:
214
+
215
+ - Creating a Xano account.
216
+ - Signing in: \`npx xanosdk login\` opens a browser consent. Ask the user to run it
217
+ in their own terminal. Do not run it yourself.
218
+
219
+ ## 6. Verify
220
+
221
+ - \`npm run xano:check\` passes.
222
+ - A request to the backend URL the deploy printed gets a response.
223
+ \`npx xanosdk status\` prints that URL again.
224
+
225
+ ## 7. Hand off
226
+
227
+ Read \`AGENTS.md\`, which \`init\` wrote, and follow it for all further backend work.
228
+ Before writing code in \`xano/\`, read \`node_modules/@xano/sdk/llms.txt\`.
229
+
230
+ Unless run with \`--no-agents-md\`, \`init\` also declares the \`xano-local\` MCP server in
231
+ \`.mcp.json\` and \`.cursor/mcp.json\`: the deployed backend's tables, rows and runs,
232
+ which \`AGENTS.md\` describes. \`npx xanosdk local mcp\` prints the server block for any
233
+ other agent. It is not loaded into a session that was already running. Tell the user
234
+ to restart the agent, or reconnect its MCP servers, to use it.
235
+ `;
236
+ function frontmatter(version, digest) {
237
+ return [
238
+ "---",
239
+ `name: ${AGENT_SKILL_NAME}`,
240
+ "description: >-",
241
+ fold(AGENT_SKILL_DESCRIPTION),
242
+ "license: MIT",
243
+ "metadata:",
244
+ ` ${VERSION_KEY}: "${version}"`,
245
+ ` ${DIGEST_KEY}: "${digest}"`,
246
+ "---",
247
+ ""
248
+ ].join("\n");
249
+ }
250
+ var DIGEST_LINE = new RegExp(`^ ${DIGEST_KEY}: .*\\n`, "m");
251
+ function skillDigest(text) {
252
+ return `sha256:${createHash("sha256").update(text.replace(DIGEST_LINE, "")).digest("hex")}`;
253
+ }
254
+ function renderAgentSkill(version) {
255
+ const unstamped = frontmatter(version, "") + "\n" + BODY;
256
+ return frontmatter(version, skillDigest(unstamped)) + "\n" + BODY;
257
+ }
258
+ function readSkillStamp(text) {
259
+ const head = /^---\n([\s\S]*?)\n---\n/.exec(text)?.[1] ?? "";
260
+ const read = (key) => new RegExp(`^ ${key}: "([^"]*)"$`, "m").exec(head)?.[1];
261
+ const version = read(VERSION_KEY);
262
+ const digest = read(DIGEST_KEY);
263
+ return { ...version === void 0 ? {} : { version }, ...digest === void 0 ? {} : { digest } };
264
+ }
265
+ function classifySkill(existing, rendered) {
266
+ if (existing === null) return "absent";
267
+ if (existing === rendered) return "current";
268
+ const { digest } = readSkillStamp(existing);
269
+ if (digest === void 0 || digest !== skillDigest(existing)) return "edited";
270
+ return "stale";
271
+ }
272
+
273
+ // src/emit/agent-skill-targets.ts
274
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmdirSync, rmSync, writeFileSync } from "fs";
275
+ import { homedir } from "os";
276
+ import { dirname, join } from "path";
277
+ function userHome(env) {
278
+ return env.HOME !== void 0 && env.HOME !== "" ? env.HOME : homedir();
279
+ }
280
+ var dirVar = (name, env) => expandHome(readEnvVar(name, env));
281
+ var claudeHome = (env) => dirVar("CLAUDE_CONFIG_DIR", env) ?? join(userHome(env), ".claude");
282
+ var AGENTS = [
283
+ { id: "claude-code", home: claudeHome, target: "claude-code" },
284
+ { id: "codex", home: (env) => dirVar("CODEX_HOME", env) ?? join(userHome(env), ".codex"), target: "agents" },
285
+ { id: "cursor", home: (env) => join(userHome(env), ".cursor"), target: "agents" },
286
+ { id: "copilot", home: (env) => join(userHome(env), ".copilot"), target: "agents" },
287
+ { id: "gemini", home: (env) => join(userHome(env), ".gemini"), target: "agents" },
288
+ { id: "amp", home: (env) => join(userHome(env), ".config", "amp"), target: "agents" },
289
+ { id: "opencode", home: (env) => join(userHome(env), ".config", "opencode"), target: "agents" }
290
+ ];
291
+ var KNOWN_AGENT_IDS = [
292
+ "claude-code",
293
+ "agents",
294
+ ...AGENTS.map((a) => a.id).filter((id) => id !== "claude-code")
295
+ ];
296
+ function detectAgents(env = process.env) {
297
+ return AGENTS.filter((a) => existsSync(a.home(env))).map((a) => a.id);
298
+ }
299
+ function skillTargets(env = process.env) {
300
+ const file = (skills) => join(skills, AGENT_SKILL_NAME, "SKILL.md");
301
+ return [
302
+ { agent: "claude-code", path: file(join(claudeHome(env), "skills")) },
303
+ { agent: "agents", path: file(join(userHome(env), ".agents", "skills")) }
304
+ ];
305
+ }
306
+ function targetsForAgents(ids, env = process.env) {
307
+ const wanted = new Set(ids.map((id) => AGENTS.find((a) => a.id === id)?.target ?? "agents"));
308
+ return skillTargets(env).filter((t) => wanted.has(t.agent));
309
+ }
310
+ function targetDetected(target, detected) {
311
+ return AGENTS.some((a) => a.target === target && detected.includes(a.id));
312
+ }
313
+ var isLink = (path) => {
314
+ try {
315
+ return lstatSync(path).isSymbolicLink();
316
+ } catch {
317
+ return false;
318
+ }
319
+ };
320
+ function readCopy(path) {
321
+ const symlink = isLink(dirname(path)) || isLink(path);
322
+ return { text: existsSync(path) ? readFileSync(path, "utf8") : null, symlink };
323
+ }
324
+ function writeCopy(path, text) {
325
+ mkdirSync(dirname(path), { recursive: true });
326
+ writeFileSync(path, text);
327
+ }
328
+ function removeCopy(path) {
329
+ rmSync(path, { force: true });
330
+ const dir = dirname(path);
331
+ if (readdirSync(dir).length === 0) rmdirSync(dir);
332
+ }
333
+
334
+ // src/emit/agent-skill-command.ts
335
+ var VERBS = ["install", "uninstall", "status"];
336
+ async function runAgentSkillCommand(args) {
337
+ const subcommand = args.subcommand;
338
+ if (subcommand === void 0 || !VERBS.includes(subcommand)) {
339
+ throw unknownSubcommand("agent-skill", subcommand);
340
+ }
341
+ const verb = subcommand;
342
+ const unknown = args.agent.filter((id) => !KNOWN_AGENT_IDS.includes(id));
343
+ if (unknown.length > 0) {
344
+ throw new UsageError(
345
+ `Unknown agent ${unknown.map((id) => `"${id}"`).join(", ")}. \`--agent\` takes: ${KNOWN_AGENT_IDS.join(", ")}.`,
346
+ { hintFor: { command: "agent-skill", subcommand: verb } }
347
+ );
348
+ }
349
+ const rendered = renderAgentSkill(readVersion());
350
+ const named = args.agent.length > 0 ? targetsForAgents(args.agent) : void 0;
351
+ let outcomes;
352
+ if (verb === "status") {
353
+ const detected = detectAgents();
354
+ outcomes = (named ?? skillTargets()).map((t) => ({
355
+ ...t,
356
+ state: classifySkill(readCopy(t.path).text, rendered),
357
+ detected: targetDetected(t.agent, detected)
358
+ }));
359
+ } else if (verb === "install") {
360
+ const targets = named ?? targetsForAgents(detectAgents());
361
+ if (targets.length === 0) {
362
+ throw new UsageError(
363
+ `No coding agent found on this machine, so there is nowhere to install the skill. Name one with \`--agent <id>\`: ${KNOWN_AGENT_IDS.join(", ")}.`,
364
+ { hintFor: { command: "agent-skill", subcommand: "install" } }
365
+ );
366
+ }
367
+ outcomes = targets.map((t) => install(t, rendered, args));
368
+ } else {
369
+ outcomes = (named ?? skillTargets()).map((t) => uninstall(t, rendered, args));
370
+ }
371
+ report(verb, outcomes, args);
372
+ }
373
+ function install(target, rendered, args) {
374
+ const copy = readCopy(target.path);
375
+ const state = classifySkill(copy.text, rendered);
376
+ const base = { ...target, state };
377
+ if (copy.symlink) return { ...base, action: "skipped", reason: "symlink" };
378
+ if (state === "current") return { ...base, action: "unchanged" };
379
+ if (state === "edited" && !args.force) return { ...base, action: "skipped", reason: "edited" };
380
+ if (!args.dryRun) writeCopy(target.path, rendered);
381
+ return { ...base, action: state === "absent" ? "created" : "updated" };
382
+ }
383
+ function uninstall(target, rendered, args) {
384
+ const copy = readCopy(target.path);
385
+ const state = classifySkill(copy.text, rendered);
386
+ const base = { ...target, state };
387
+ if (state === "absent") return { ...base, action: "unchanged" };
388
+ if (copy.symlink) return { ...base, action: "skipped", reason: "symlink" };
389
+ if (state === "edited") return { ...base, action: "skipped", reason: "edited" };
390
+ if (!args.dryRun) removeCopy(target.path);
391
+ return { ...base, action: "removed" };
392
+ }
393
+ var REASONS = {
394
+ edited: "edited since it was installed; left as it is",
395
+ symlink: "the skill directory is a symlink another installer manages; left as it is"
396
+ };
397
+ function report(verb, outcomes, args) {
398
+ const preview = args.dryRun && verb !== "status" ? " (dry run: nothing written)" : "";
399
+ for (const o of outcomes) {
400
+ success(`${o.agent}: ${o.action ?? o.state}${preview}`);
401
+ detail(o.path);
402
+ if (o.reason !== void 0) detail(REASONS[o.reason]);
403
+ }
404
+ if (outcomes.some((o) => o.reason === "edited") && verb === "install") {
405
+ detail("`xanosdk agent-skill install --force` replaces an edited copy.");
406
+ }
407
+ if (isMachineOutput(args)) {
408
+ writeJson({ ...verb === "status" ? {} : { dryRun: args.dryRun }, targets: outcomes });
409
+ }
410
+ }
411
+ export {
412
+ runAgentSkillCommand
413
+ };
414
+ //# sourceMappingURL=agent-skill-command-GBR4KUUG.js.map
@@ -8,12 +8,12 @@ import {
8
8
  parseAnswer,
9
9
  recordAnswer,
10
10
  writeTransportFailure
11
- } from "./chunk-7GAIJW62.js";
12
- import "./chunk-YR2I5HGE.js";
11
+ } from "./chunk-TG65NWUR.js";
12
+ import "./chunk-TR7EOUQE.js";
13
13
  import "./chunk-MF4W6FHU.js";
14
14
  import "./chunk-X2NL4KUO.js";
15
- import "./chunk-D7BUMOKU.js";
16
- import "./chunk-YHB34BN6.js";
15
+ import "./chunk-C6KBZH7M.js";
16
+ import "./chunk-YEH5OIPF.js";
17
17
  import "./chunk-UTI5G6OJ.js";
18
18
  import "./chunk-5ZSO4T2G.js";
19
19
  import "./chunk-TFFGOFVZ.js";
@@ -30,4 +30,4 @@ export {
30
30
  recordAnswer,
31
31
  writeTransportFailure
32
32
  };
33
- //# sourceMappingURL=answer-shape-UCDUKPAN.js.map
33
+ //# sourceMappingURL=answer-shape-UMQRXMCX.js.map
@@ -2,29 +2,29 @@ import {
2
2
  backendDirFor,
3
3
  backendDirIn,
4
4
  resolveBackendDir
5
- } from "./chunk-TTEIDD5Q.js";
6
- import "./chunk-LL7SGTRC.js";
7
- import "./chunk-YYC2DZMG.js";
8
- import "./chunk-PMMHSX4H.js";
5
+ } from "./chunk-W2BVP27L.js";
6
+ import "./chunk-HKLBDSML.js";
7
+ import "./chunk-RYMGK2K5.js";
8
+ import "./chunk-B3NH5UBI.js";
9
9
  import "./chunk-ZFDZKNGG.js";
10
10
  import "./chunk-FWD7AL6N.js";
11
- import "./chunk-QJM5XZ4K.js";
11
+ import "./chunk-6PTITS3M.js";
12
12
  import "./chunk-DXUICABI.js";
13
+ import "./chunk-TR7EOUQE.js";
13
14
  import "./chunk-4KHEMC32.js";
14
- import {
15
- projectRootFrom
16
- } from "./chunk-ROY4YAEQ.js";
17
15
  import "./chunk-DNBP4GJN.js";
18
- import "./chunk-763M6LX3.js";
16
+ import "./chunk-QL3ZJWGG.js";
19
17
  import "./chunk-WAVNUTMT.js";
20
- import "./chunk-YR2I5HGE.js";
21
18
  import "./chunk-LLNZGEFK.js";
19
+ import {
20
+ projectRootFrom
21
+ } from "./chunk-HU7F56VF.js";
22
22
  import "./chunk-MF4W6FHU.js";
23
23
  import "./chunk-X2NL4KUO.js";
24
- import "./chunk-M6ZFSTIZ.js";
25
- import "./chunk-3EDSPMXN.js";
26
- import "./chunk-D7BUMOKU.js";
27
- import "./chunk-YHB34BN6.js";
24
+ import "./chunk-5GIOCDUM.js";
25
+ import "./chunk-LJM5CIY4.js";
26
+ import "./chunk-C6KBZH7M.js";
27
+ import "./chunk-YEH5OIPF.js";
28
28
  import "./chunk-UTI5G6OJ.js";
29
29
  import "./chunk-5ZSO4T2G.js";
30
30
  import "./chunk-TFFGOFVZ.js";
@@ -37,4 +37,4 @@ export {
37
37
  projectRootFrom,
38
38
  resolveBackendDir
39
39
  };
40
- //# sourceMappingURL=backend-dir-3LIL6SCT.js.map
40
+ //# sourceMappingURL=backend-dir-PFUIPCV3.js.map