@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/guides/cli.md CHANGED
@@ -9,6 +9,8 @@ with `@xano/sdk` installed, run them as `npx xanosdk …`; anywhere else, `npx @
9
9
  ```bash
10
10
  xanosdk init my-app # scaffold a full project (frontend/ + xano/)
11
11
  xanosdk init my-app --framework svelte # SvelteKit instead of the default React
12
+ xanosdk init my-api --framework none # a new project with the backend only (no frontend/)
13
+ xanosdk init # inside an existing app: add xano/ and the xano:* scripts, no frontend (lists clashes and writes nothing; --force overwrites)
12
14
  xanosdk init my-app --no-agents-md --no-install # skip AGENTS.md and npm install
13
15
  xanosdk init my-app --theme zinc-blue --dark toggle --icons tabler # the look
14
16
  xanosdk init my-app --marketplace @xano-sdk/auth,@xano-sdk/vector # install add-ons AND register them
@@ -62,6 +64,8 @@ xanosdk deploy ./xano/index.ts --local=~/Downloads/engine.tar.gz # override: r
62
64
  XANOSDK_ENGINE_OVERRIDE=v0.1.8 npm run xano:deploy # the same override for every deploy in the shell
63
65
  xanosdk local list # Xano Engines on this machine, marking the ones xanosdk started
64
66
  xanosdk local token # print its meta API bearer: XANO_META_TOKEN=$(xanosdk local token)
67
+ xanosdk local mcp # how a coding agent connects to its MCP server (url, command, config); never the bearer
68
+ xanosdk local mcp --stdio # the bridge an agent's .mcp.json launches: follows restarts, brings the current bearer
65
69
  xanosdk local stop <name> # stop one (--all: every one xanosdk started, and what a crashed one left running)
66
70
  xanosdk local update # move this project's pinned engine to the latest (--version <v>: that one) and restart it — commit package.json
67
71
  xanosdk local cache list # each cached engine version, its size, and the engines running on it
@@ -133,6 +137,9 @@ xanosdk logout # revoke the active profile and remo
133
137
  xanosdk version # print the installed @xano/sdk version
134
138
  xanosdk upgrade --check # is a newer @xano/sdk published? exits 7 if so, 0 if current
135
139
  xanosdk upgrade # install it: globally (npm i -g) for a global CLI; in a project, into the block that lists it (--save-prod or --save-dev)
140
+ xanosdk agent-skill install # put the xano-backend skill into each coding agent detected on this machine (--agent <id> to pick)
141
+ xanosdk agent-skill status # each copy: current, stale, edited or absent
142
+ xanosdk agent-skill uninstall # remove the copies install wrote (an edited copy is kept)
136
143
  xanosdk help # grouped command reference (also the no-arg default)
137
144
  xanosdk <command> --help # that command's usage, subcommands, and flags (`xanosdk deploy --help`)
138
145
  xanosdk <noun> <verb> --help # scoped to one verb (`xanosdk workspace export --help`)
@@ -320,6 +327,68 @@ caret) and restamps the managed blocks in your
320
327
  outside a project, it installs nothing (`status: "not-installed"`): that copy is temporary,
321
328
  and `npx @xano/sdk@latest` already runs the newest release.
322
329
 
330
+ ## Adding the backend to an existing app
331
+
332
+ `init` decides what to write from its target directory. An empty or missing directory is a
333
+ **new** project: a full app, `react` unless `--framework` says otherwise, with a framework
334
+ prompt on a terminal whose choices include "No frontend" (`--framework none`, the backend
335
+ alone). Any other directory is an **existing** project: `init` writes `xano/` and merges the
336
+ `xano:*` scripts and the backend's dependencies into its `package.json`, with no prompt and no
337
+ frontend. [The scaffolded project](scaffold.md#no-frontend-and-existing-apps) lists exactly
338
+ what each mode writes and merges.
339
+
340
+ Each of these is a **clash**: an existing `xano/`, any other file `init` would write that is
341
+ already there, and a `xano:*` script the project defines with another command. `init` lists
342
+ every clash and writes nothing. `--force` lists what it would overwrite and asks first
343
+ (`--yes` answers without a terminal).
344
+
345
+ `--framework react` or `--framework svelte` is refused in an existing project, and the
346
+ frontend-only flags (`--theme`, `--radius`, `--dark`, `--font`, `--font-mono`,
347
+ `--font-heading`, `--icons`) are refused wherever no frontend is written, rather than
348
+ silently ignored. `init --from` follows the same two modes
349
+ ([Pulling an existing workspace](codegen.md#running-it)).
350
+
351
+ ```bash
352
+ xanosdk init --json # inside the app; then run the command in `next`
353
+ ```
354
+
355
+ `init --json` reports `mode` (`new` or `existing`), `files` (every file it wrote or merged
356
+ into, relative to the project) and `next` (the command to run next: the install when one is
357
+ still needed, then `xano:deploy`).
358
+
359
+ ## The agent skill
360
+
361
+ `xano-backend` is an agent skill for coding agents such as Claude Code, Codex and Cursor: it
362
+ tells the agent when to set up a Xano backend and hands it to `init`, then to the project's
363
+ `AGENTS.md` and `llms.txt`. It is not a `knowledge()` def; those are docs your workspace's own
364
+ AI agents read. The package ships it at `skills/xano-backend/SKILL.md`.
365
+
366
+ ```bash
367
+ xanosdk agent-skill install # every coding agent detected on this machine
368
+ xanosdk agent-skill install --agent claude-code # …or name one (repeatable)
369
+ xanosdk agent-skill install --dry-run # report what would change, write nothing
370
+ xanosdk agent-skill status --json # each copy, as data
371
+ xanosdk agent-skill uninstall
372
+ ```
373
+
374
+ It writes at most two copies. Claude Code reads `~/.claude/skills/xano-backend/SKILL.md`
375
+ (under `$CLAUDE_CONFIG_DIR` when that is set). Codex, Cursor, Copilot, Gemini CLI, Amp and
376
+ OpenCode read the shared `~/.agents/skills/xano-backend/SKILL.md`. An agent is detected by its
377
+ home config directory; `--agent` takes `claude-code`, `agents` (the shared directory),
378
+ `codex`, `cursor`, `copilot`, `gemini`, `amp` or `opencode` instead. When no agent is detected
379
+ and none is named, `install` refuses.
380
+
381
+ Each copy carries the SDK version and a digest. `status` reports a copy as **current**,
382
+ **stale** (an older version, unedited), **edited** (changed since it was installed) or
383
+ **absent**. `install` writes a missing or stale copy and leaves a current one unchanged; it
384
+ leaves an edited copy alone unless `--force`. `uninstall` removes only unedited copies. A
385
+ symlinked skill directory belongs to another installer, and neither command touches it.
386
+ Nothing prompts, so both run unattended; `--json` reports one entry per target.
387
+
388
+ The skill also installs without the CLI, from the public repository:
389
+ `npx skills add xano-sdk/sdk`, or in Claude Code `/plugin marketplace add xano-sdk/sdk`
390
+ followed by `/plugin install xano@xano-sdk`.
391
+
323
392
  ## Checking what an installed SDK can do
324
393
 
325
394
  A tool that drives the CLI, such as an editor extension or a CI step, should check that the
package/guides/codegen.md CHANGED
@@ -18,10 +18,27 @@ xanosdk init my-app --from ./ws.json # a bundle already on disk — off
18
18
  `workspace`, `ephemeral[:<name>]`, `local[:<name>]`, `tenant:<name>`, `release:<name>` —
19
19
  or a bundle path. Unlike most commands it has no default: a pull names its source.
20
20
 
21
- Everything else about the project is unchanged: `--framework`, the theme flags, `--no-agents-md` and
22
- `--web` mean the same thing here as they do without `--from`. The three flags that describe
23
- the pull itself — `--report`, `--skip-roundtrip` and `--branch` — are refused without it rather
24
- than silently ignored.
21
+ Everything else about the project is unchanged: `--framework` (`react`, `svelte` or `none`), the
22
+ theme flags, `--no-agents-md` and `--web` mean the same thing here as they do without `--from`.
23
+ The three flags that describe the pull itself — `--report`, `--skip-roundtrip` and `--branch` —
24
+ are refused without it rather than silently ignored.
25
+
26
+ The target directory decides what is written around `xano/`, as it does for a plain
27
+ [`init`](scaffold.md#no-frontend-and-existing-apps):
28
+
29
+ - **Empty or missing:** a new project, with the frontend `--framework` names (`none` for the
30
+ backend alone).
31
+ - **A previous pull** (`xano/.xanosdk-codegen.json` is there): `xano/` is refreshed in place —
32
+ see [Verification, and the decode report](#verification-and-the-decode-report) below.
33
+ - **Anything else:** an existing app, which gets the backend only. The decoded `xano/` is
34
+ written, and the `xano:*` scripts and the backend's dependencies are merged into its
35
+ `package.json`. An existing `xano/`, a file the pull would write, or a `xano:*` script with
36
+ another command is a clash: all of them are listed and nothing is read or written unless
37
+ `--force`. `--framework react|svelte` and the frontend-only flags are refused.
38
+
39
+ ```bash
40
+ cd my-existing-app && npx @xano/sdk init --from workspace # add the pulled backend to this app
41
+ ```
25
42
 
26
43
  ### Just the tree: `generate`
27
44
 
@@ -168,7 +185,8 @@ are listed), then updated from the new tree, so `export --check` passes after it
168
185
  over a `xano/` no decode wrote follows the same rules.
169
186
 
170
187
  > ⚠️ **`xano/` is your source once pulled — commit it.** A refresh overwrites the files it
171
- > decodes, so commit before one (a directory that isn't a previous pull still needs `--force`).
188
+ > decodes, so commit before one (an existing `xano/` that isn't a previous pull is a clash, and
189
+ > needs `--force`).
172
190
  > It carries schema only — no table rows or stored files.
173
191
  > `xanosdk deploy` sends it to the Xano Engine on this machine (`--ephemeral`: a disposable
174
192
  > ephemeral environment) as a *full replace*;
package/guides/codes.md CHANGED
@@ -28,6 +28,7 @@ Match on the code, never on the message text: messages are reworded, codes are n
28
28
  | `SDK_SEED_IN_STATIC` | A static build carries seed values from non-public columns (`details.leaks[]`); nothing was published. |
29
29
  | `SDK_SHARED_SCHEMA_CHANGE` | A promote would alter tables live serves from (`details.reason: "shared-schema-changes"`, `details.changes[]`), or could not read them (`"tables-unreadable"`); `--allow-shared-schema-changes` lands it. Exit 2. |
30
30
  | `SDK_USAGE` | The input is wrong — a command line, a def or a value the build or the command refuses as written — a confirmation was needed off a terminal (`details.reason: "needs-confirmation"`), or the named backend is in another workspace (`details.reason: "wrong-workspace"`, `details.heldIn`). Exit 1. |
31
+ | `SDK_WORKSPACE_CHANGED` | A `deploy --to workspace` would overwrite objects changed in Xano since the last sync (`details.reason: "workspace-changed"`, `details.objects[]`, `details.changedThere[]`, `details.changedBoth[]`, `details.baseline`); pull first, or `--overwrite` deploys over them. Exit 2. |
31
32
 
32
33
  ## CLI warnings
33
34
 
@@ -62,6 +63,7 @@ Printed as `! …` on stderr, and as `{ code, message }` in a `--json` document'
62
63
  | `deploy.ephemeral-write` | Says which ephemeral this deploy writes to. |
63
64
  | `deploy.import-failed-backup` | The import failed. Your pre-deploy snapshot is on branch "…". |
64
65
  | `deploy.open-no-url` | --open had no URL to open — the deploy reported none. |
66
+ | `deploy.overwrite-changed` | `--overwrite`: … object… changed in Xano since the last sync … overwritten: |
65
67
  | `deploy.replace-wipe` | `--replace` wipes … before importing — including table data and history. |
66
68
  | `deploy.rows-written` | Table rows from the bundle … written. |
67
69
  | `deploy.tenant-write` | This deploy writes to a target that is not an ephemeral, named in the message. |
@@ -133,6 +135,7 @@ Printed as `! …` on stderr, and as `{ code, message }` in a `--json` document'
133
135
  | `logout.revoke-failed` | Did not revoke …: … The token was not sent. |
134
136
  | `logout.shared-file` | Clearing … in the shared credential file … — this affects every project that reuses it. |
135
137
  | `logout.unreadable` | Could not read … (…). |
138
+ | `merge.symlink` | … is a symlink — left it and its target untouched. |
136
139
  | `microservice.failed` | Some microservices failed to start: |
137
140
  | `microservice.starting` | Microservices are still starting (…/… ready) — they should come up shortly: |
138
141
  | `microservice.status-unreadable` | Could not read microservice status (the backend deployed fine): |
@@ -278,7 +281,7 @@ Raised while a workspace compiles (`export`, `deploy`, `release`, …). A warnin
278
281
 
279
282
  | Code | Meaning |
280
283
  |---|---|
281
- | `agent.args-placeholder-unpassed` | … "…": `s.ai.agent.run` of agent "…" passes args …, but the agent's prompt reads `{{ $args… }}`, which this run never passes, so it resolves to nothing. |
284
+ | `agent.args-placeholder-unpassed` | …: `s.ai.agent.run` of agent "…" passes args …, but the agent's prompt reads `{{ $args… }}`, which this run never passes, so it resolves to nothing. |
282
285
  | `agent.literal-api-key` | agent "…" spells its `llm.apiKey` literally. |
283
286
  | `api-group.cors-no-methods` | apiGroup "…": `cors.mode: "custom"` enables no `allowMethods`, so no `access-control-allow-methods` is sent and a preflight has nothing to approve. |
284
287
  | `api-group.cors-no-origins` | apiGroup "…": `cors.mode: "custom"` with an empty `allowOrigins` matches no request, so responses carry NO `access-control-*` headers and every browser call… |
@@ -366,6 +369,7 @@ Raised while a workspace compiles (`export`, `deploy`, `release`, …). A warnin
366
369
  | `search.request-only-filter` | … pipes a search operand through `…`, which evaluates only in the request. |
367
370
  | `seed.invalid` | A seed row does not match its table's columns. |
368
371
  | `seed.public-seed` | Table "…" declares publicSeed but has no `seed`: there are no seed values to declare public. |
372
+ | `stack.agent-tools-off` | …: `s.ai.agent.run` of agent "…" leaves `allowToolExecution` unset, so the agent runs with its tools off: it sees them but never calls one, and answers as if… |
369
373
  | `stack.auth-no-caller` | … "…" reads `auth()`, but …: it deploys clean and never holds the caller's identity. |
370
374
  | `stack.auth-null-host` | … "…": an `s.redis.ratelimit` in its stack keys off auth(), where …. |
371
375
  | `stack.blank-table` | … has … (…) bound to no table (`table: null`) — … nothing when run. |
@@ -72,3 +72,8 @@ can learn the SDK without reading source:
72
72
  Both derive from the SDK's own sources of truth (so they can't drift), regenerate with
73
73
  `npm run manifest`, and are available at runtime via `buildManifest()` / `renderLlmsTxt()`,
74
74
  both exported from `@xano/sdk/internal`.
75
+
76
+ The package also ships the `xano-backend` agent skill at `skills/xano-backend/SKILL.md`. It
77
+ carries no reference of its own: it tells a coding agent when to set up a Xano backend, runs it
78
+ through `init` and the first deploy, and hands it to the project's `AGENTS.md` and `llms.txt`.
79
+ Installing it is in the [CLI guide](cli.md#the-agent-skill).
@@ -652,6 +652,34 @@ re-importing the backend. One command cannot serve it and refuses it by name: `r
652
652
  | `xanosdk local cache list` | Each cached engine version, its size on disk, and the engines running on it. |
653
653
  | `xanosdk local cache clear` | Removes every cached engine (`--version <v>`: just that one). An engine running on a removed version is stopped first; the next deploy fetches it again. |
654
654
 
655
+ #### Connecting a coding agent
656
+
657
+ The Xano Engine serves an MCP server for coding agents, and a local deploy prints where. It is
658
+ for looking at the deployed backend (objects, table schemas, rows, run history), seeding and
659
+ editing rows, and running functions, tasks, triggers, endpoints and tests by hand, each
660
+ answering its result and logs. It never changes a primitive: tables, endpoints, functions and
661
+ every other object change in `xano/` and ship with `xanosdk deploy`.
662
+
663
+ `xanosdk init` connects Claude Code (`.mcp.json`) and Cursor (`.cursor/mcp.json`) to it with one
664
+ server, `xano-local`, that launches a bridge:
665
+
666
+ ```json
667
+ { "mcpServers": { "xano-local": { "command": "npx", "args": ["--yes", "--package", "@xano/sdk", "xanosdk", "local", "mcp", "--stdio"] } } }
668
+ ```
669
+
670
+ Nothing has to be started or installed by hand: the agent launches the server itself, using the
671
+ project's own `@xano/sdk` when it is installed and fetching it when it is not (a fresh clone opened
672
+ before `npm install`). The config holds no url and no token. The engine may come back on a new port after a restart and
673
+ always mints a new bearer, so the bridge looks both up when it needs them, and again when the
674
+ engine stops answering or refuses the bearer. Before the first deploy the server connects and
675
+ lists no tools; once an engine is up it tells the agent its tools changed. A call cut off after
676
+ it reached the engine is reported as unknown, never sent twice. `xanosdk local mcp` prints the
677
+ details and each agent's config line, and `init` in an existing project adds the server beside
678
+ the ones a config already declares. An engine too old to serve MCP says so on deploy, and
679
+ `xanosdk local update` moves the project to one that does. Claude Code asks once before it
680
+ starts a project's server; a Cursor version that does not pick up the tool change needs the
681
+ `xano-local` server refreshed in its MCP settings after the first deploy.
682
+
655
683
  #### A frontend on the Xano Engine, and server rendering
656
684
 
657
685
  `xanosdk deploy <entry> --local --static <dir>` publishes a built frontend to the
@@ -1267,7 +1295,7 @@ xanosdk workspace diff ./xano/index.ts --json
1267
1295
  }
1268
1296
  ```
1269
1297
 
1270
- - `changedThere`: pull before you deploy, or the deploy overwrites that edit.
1298
+ - `changedThere`: pull before you deploy. `deploy --to workspace` refuses to overwrite it (see below).
1271
1299
  - `changedHere`: deploy it.
1272
1300
  - `changedBoth`: reconcile by hand.
1273
1301
  - `unclassified`: the baseline cannot tell. The object has no baseline entry, both sides
@@ -1295,6 +1323,22 @@ A few things to know about the baseline:
1295
1323
  next sync records a new baseline.
1296
1324
  - On a merge conflict in `xano.lock`, keep either side's baseline for a branch, or delete it.
1297
1325
 
1326
+ #### The deploy guard
1327
+
1328
+ `deploy --to workspace` reads the same baseline before it writes. When an object it would
1329
+ overwrite is in `changedThere` or `changedBoth`, it refuses with exit 2 and
1330
+ `SDK_WORKSPACE_CHANGED`. The refusal's `details.objects` lists those objects, and
1331
+ `details.changedThere`, `details.changedBoth` and `details.baseline` say how each was classified.
1332
+ Pull the change into the project and commit it, then deploy again. To deploy over it anyway, pass
1333
+ `--overwrite`; the run warns (`deploy.overwrite-changed`) and names what it overwrote. A
1334
+ `--dry-run` refuses nothing: it warns and lists the objects under `changedInXano`.
1335
+
1336
+ The guard counts only what the deploy writes. A merge leaves an object that only the branch holds
1337
+ alone, so an object added in Xano is refused over only under `--prune` or `--replace`, which
1338
+ delete it. Nothing is refused when the branch has no baseline, over an `unclassified`
1339
+ difference, or on a `--branch` deploy to a branch that does not exist yet. It reads the branch
1340
+ once, before the confirmation, so an edit made in Xano after that read is not caught.
1341
+
1298
1342
  ### Deploying to a branch
1299
1343
 
1300
1344
  `--branch <label>` stages on a Xano branch instead of the live one, which is the safer shape
@@ -1,27 +1,29 @@
1
1
  # The scaffolded project
2
2
 
3
- What `xanosdk init` writes, the two frontend presets, theming, add-ons, and the SvelteKit prerendering rules.
3
+ What `xanosdk init` writes, the two frontend presets, a project with no frontend, adding the backend to an existing app, theming, add-ons, and the SvelteKit prerendering rules.
4
4
 
5
5
  ## init flags and add-ons
6
6
 
7
- `init` flags: `--framework <react|svelte>` (default: `react`), `--name <name>`
7
+ `init` flags: `--framework <react|svelte|none>` (default: `react`; `none` writes the
8
+ backend alone — see [No frontend, and existing apps](#no-frontend-and-existing-apps)), `--name <name>`
8
9
  (default: the folder name), `--theme <id>` / `--radius <len>` / `--dark <mode>` /
9
10
  `--font <id>` / `--font-mono <id>` / `--font-heading <id>` / `--icons <id>`
10
11
  (the look — see [Theming](#theming)), `--no-agents-md` (skip the `AGENTS.md`
11
12
  agent brief, which every coding agent reads and `init` writes by default),
12
13
  `--marketplace <pkg>` (repeatable, comma-separated; installs add-ons and
13
- registers them — below), `--force` (scaffold into a non-empty folder; over an
14
- existing project it lists the files it would overwrite and asks, `--yes` answering
15
- without a terminal — files it does not write are kept),
14
+ registers them — below), `--force` (write over what clashes when adding the backend to
15
+ a non-empty folder; it lists the files and scripts it would overwrite and asks, `--yes`
16
+ answering without a terminal — files it does not write are kept),
16
17
  `--no-install` (skip `npm install`), `--web` (choose all of the above in a
17
18
  browser instead — see [Choosing in a browser](#choosing-in-a-browser)),
18
19
  `--from <source>` (fill `xano/` from an existing backend — any
19
20
  [backend spelling](cli.md#naming-a-backend) or a bundle path — rather than the
20
21
  starter — see [Pulling an existing workspace](codegen.md); over an existing `xano/` it lists
21
22
  what it replaces and asks, and `--yes` answers without a terminal).
22
- In a terminal, `init` prompts for the framework; the prompt has a default, so
23
- pressing enter is a valid answer. The look is never
24
- prompted for — it comes from the flags above, or from `--web`.
23
+ In a terminal, `init` prompts for the framework in an empty or missing folder
24
+ (React, Svelte, or "No frontend"); the prompt has a default, so pressing enter is a
25
+ valid answer. A folder that already has files gets no prompt and no frontend. The look
26
+ is never prompted for — it comes from the flags above, or from `--web`.
25
27
  The starter backend is empty but already compiles and deploys — grow it from the
26
28
  walkthrough in `xano/EXAMPLE.md`.
27
29
 
@@ -113,10 +115,59 @@ project — the mistake npm answers by silently writing to the wrong `package.js
113
115
  The package name is passed through exactly as typed, so version specifiers, tags,
114
116
  and third-party packages all work.
115
117
 
118
+ ## No frontend, and existing apps
119
+
120
+ `init` reads its target directory before it writes anything. An empty or missing directory
121
+ is a **new** project, and `--framework` decides its frontend. Any other directory is an
122
+ **existing** project, which has its own app and gets the backend only.
123
+
124
+ **A new project with `--framework none`** (or "No frontend" at the prompt) gets everything
125
+ 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
127
+ no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
128
+ `xano/tsconfig.json`, and `npm run xano:typecheck` checks it and its lambdas.
129
+ `xano:deploy:ephemeral` deploys the backend alone, and there is no `dev`, `build` or
130
+ `xano:deploy:frontend`.
131
+
132
+ **An existing project** (any non-empty directory) gets:
133
+
134
+ - `xano/`, the same starter a new project gets. When the project's `package.json` is not
135
+ `"type": "module"` (Next.js and `npm init -y` write one that is not), `init` also writes
136
+ `xano/package.json` holding only `{"type": "module"}`, so `xano/` loads as ES modules
137
+ without changing the project's own type.
138
+ - The `xano:*` scripts and the backend's dependencies merged into `package.json`. The
139
+ project's entries win: a dependency it already has keeps its range, a script it already
140
+ has keeps its command, and no other key changes (an add-on's settings under `"xanosdk"`
141
+ aside). The file keeps its indentation and line endings. A project with no
142
+ `package.json` gets one holding only what the backend needs.
143
+ - A marked block in `.gitignore` (created when missing) and in `AGENTS.md`, added or
144
+ refreshed in place; the rest of each file is left as it was. A symlinked `AGENTS.md` is left
145
+ alone, and `--no-agents-md` skips it.
146
+ - No frontend, README, CI workflow or root `tsconfig.json`. The line-ending rule goes in
147
+ `xano/.gitattributes`, scoped to `xano/`, so the project's own files are not renormalized.
148
+
149
+ What would be written over is a **clash**: an existing `xano/`, any other file `init` writes
150
+ that is already there, and a `xano:*` script the project defines with a different command (the
151
+ same command is no clash). `init` lists every clash and writes nothing; `--force` lists what it
152
+ overwrites and asks first. A `package.json` that is not valid JSON is refused, since there is
153
+ nothing to merge into.
154
+
155
+ `--framework react` or `--framework svelte` in a non-empty directory is refused, as are the
156
+ frontend-only flags (`--theme`, `--radius`, `--dark`, `--font`, `--font-mono`,
157
+ `--font-heading`, `--icons`) wherever no frontend is written. After the merge, `npm run
158
+ xano:deploy` runs the backend on the Xano Engine as it does in a new project.
159
+
160
+ If the project's own root `tsconfig.json` includes every `.ts` file (Next.js's does), add
161
+ `"xano/lambdas"` to its `exclude` before adding the first lambda: the lambda globals
162
+ type-check only under `xano/lambdas/tsconfig.json`. `init` leaves that file alone, and the
163
+ `AGENTS.md` it writes says the same.
164
+
116
165
  ## Git and CI
117
166
 
118
- `init` writes a `.gitattributes` and a `.github/workflows/check.yml` (`xanosdk-<dir>.yml`
119
- below the repository root, so moving it up never replaces another workflow).
167
+ A new project gets a `.gitattributes` and a `.github/workflows/check.yml` (`xanosdk-<dir>.yml`
168
+ below the repository root, so moving it up never replaces another workflow). An existing
169
+ project gets no workflow, and its line-ending rule is scoped to `xano/`; run
170
+ `npm run xano:check` from its own CI.
120
171
 
121
172
  The attributes file normalizes line endings, so any generated artifact the project
122
173
  commits is byte-identical on every checkout and a `--frozen-lock` check cannot fail
package/llms/errors.md CHANGED
@@ -34,7 +34,7 @@
34
34
  - A response types as `StackTupleWidened` — a `Statement[]` helper was spread into the stack; return `statements(...)`. `llms.txt`; `llms/statements-runtime.md`.
35
35
  - `ERR_PACKAGE_PATH_NOT_EXPORTED` — `tsx -e "import …"`, or running from outside the project root; run a real file with `tsx <file.ts>` from the root. `llms/client.md`.
36
36
  - `Missing statement: mvp:placeholder` on import — an unconfigured slot in a pulled tree; replace it with the statement it stands in for. `llms/legacy.md`.
37
- - A CLI command fails under `--json` or piped (unless stdout carries data): stdout is `{ ok: false, error: { code, message, exitCode, details?, suggestion? } }`, as does a failed release write. Codes: `SDK_SEED_IN_STATIC` (`details.leaks[]` → `publicSeed`), `SDK_EXPORT_INVALID` (`details.diagnostics[]`, `--strict` too), `SDK_DRIFT`, `SDK_BRANCH_TAKEN`, `SDK_BRANCH_LIVE`, `SDK_RELEASE_NAME_TAKEN`, `SDK_RELEASE_FILES_NOT_CARRIED`, `SDK_LIVE_BRANCH_MISMATCH` (`details.conflictsWith`), `SDK_IDENTITY_CONFLICT`, `SDK_KIND_CONFLICT`, `SDK_PRUNE_OUT_OF_SCOPE`, `SDK_IMPORT_REFUSED`, `SDK_SHARED_SCHEMA_CHANGE`, `SDK_CONSTRAINT_VIOLATION`, `SDK_CREDENTIAL_REJECTED` (`details`: `{ profile, credentialType, instance, workspaceId, signIn }`; ids null on a refused env refresh), `SDK_USAGE` (`details.reason: "needs-confirmation"`: run its `Re-run as`), `SDK_ERROR`. Landing refusal `details.refused`: identityConflict, renamePending, kindConflict, uniqueViolation, tableTrigger, importInProgress, importRefused, pruneOutOfScope. `warnings[]` / `details.warnings` / `accepted[]` entries: `{ code, message, subject? }` (`subject`: the def's `{ kind, name }`). Backend documents add `selector` and `workspaceId`.
37
+ - A CLI command fails under `--json` or piped (unless stdout carries data): stdout is `{ ok: false, error: { code, message, exitCode, details?, suggestion? } }`, as does a failed release write. Codes: `SDK_SEED_IN_STATIC` (`details.leaks[]` → `publicSeed`), `SDK_EXPORT_INVALID` (`details.diagnostics[]`, `--strict` too), `SDK_DRIFT`, `SDK_BRANCH_TAKEN`, `SDK_BRANCH_LIVE`, `SDK_RELEASE_NAME_TAKEN`, `SDK_RELEASE_FILES_NOT_CARRIED`, `SDK_LIVE_BRANCH_MISMATCH` (`details.conflictsWith`), `SDK_IDENTITY_CONFLICT`, `SDK_KIND_CONFLICT`, `SDK_PRUNE_OUT_OF_SCOPE`, `SDK_IMPORT_REFUSED`, `SDK_SHARED_SCHEMA_CHANGE`, `SDK_CONSTRAINT_VIOLATION`, `SDK_CREDENTIAL_REJECTED` (`details`: `{ profile, credentialType, instance, workspaceId, signIn }`; ids null on a refused env refresh), `SDK_WORKSPACE_CHANGED` (deploy over objects edited in Xano since the last sync; `details.objects`; pull first or `--overwrite`), `SDK_USAGE` (`details.reason: "needs-confirmation"`: run its `Re-run as`), `SDK_ERROR`. Landing refusal `details.refused`: identityConflict, renamePending, kindConflict, uniqueViolation, tableTrigger, importInProgress, importRefused, pruneOutOfScope. `warnings[]` / `details.warnings` / `accepted[]` entries: `{ code, message, subject? }` (`subject`: the def's `{ kind, name }`). Backend documents add `selector` and `workspaceId`.
38
38
  - A CLI command reports `could not reach <url>: fetch failed (<code>)` — blocked egress, not a bad credential; fix it before `xanosdk login`, which rotates a single-use refresh token.
39
39
 
40
40
  ### CLI exit codes
@@ -25,6 +25,6 @@
25
25
  - `llm` (REQUIRED): typed provider settings, a discriminated union on `type` (`"xano-free" | "anthropic" | "openai" | "google-genai"`). Shared fields: `systemPrompt?`, `maxSteps?` (default `5`), and `prompt?` XOR `messages?` (genuinely exclusive: both is a type error and throws — the engine stores ONE `prompt_type`, so one would be dropped); plus provider fields (`apiKey?`, `model?`, `temperature?`, `reasoningEffort?`, …). String fields accept Twig placeholders — `{{ $args.x }}` for run inputs (the `args` of `s.ai.agent.run`), `{{ $env.NAME }}` for env vars.
26
26
  - `tools?`: same `ToolsetToolEntry[]` as `mcpServer` — bare `tool()` handles, or a `{ tool, enabled?, auth? }` wrapper when one needs `enabled`/`auth`. A tool reading `auth()` MUST use the wrapper naming the auth table — a bare handle runs it with no caller (see `mcpServer`'s `tools?`).
27
27
  - `output?`: `{ schema: Record<string, input.*>, enabled? }` — structured-output schema. `schema` is a named-field record authored with the `input.*` catalog, exactly like a `defineFunction`/`query` `input:` map (the stored `structuredOutputsSchema` is the same wire shape as function inputs). e.g. `output: { schema: { priority: input.enum(["low","high"]), summary: input.text() } }`. When you pass the agent *handle* to `s.ai.agent.run({ agent })`, `.result` is typed straight from this schema — no `resultShape` witness needed (the shape is declared once). `resultShape` remains only to override that, or to type an agent referenced by bare name.
28
- - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var("summary", ref("run.result.summary"))`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` — raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. `.toolCalls` is the FINAL step's calls only (often `[]`); every call is a `.steps[].content[]` entry of `type: "tool-call"`.
28
+ - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, allowToolExecution: c.bool(true), as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var("summary", ref("run.result.summary"))`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` — raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. `.toolCalls` is the FINAL step's calls only (often `[]`); every call is a `.steps[].content[]` entry of `type: "tool-call"`. ⚠ An agent with tools needs `allowToolExecution: c.bool(true)` on the run: unset, its tools are OFF and it answers without them (warns `stack.agent-tools-off`).
29
29
  - **Marketplace:** for chat history, use `@xano-sdk/chatbot`; for vector RAG, use `@xano-sdk/vector` (`tools: [vector.searchTool]`). Find add-ons with `xanosdk marketplace search <q>`.
30
30
  - Both kinds persist under the `toolset` payload key, so a same-name `agent` + `mcpServer` pair derives ONE guid and `export()` throws — give them distinct names.
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.6
1
+ # xanosdk v1.0.8
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
@@ -766,7 +766,7 @@ core sections still refresh; under `routes --emit --strict` it is fatal. `@xano-
766
766
  - A response types as `StackTupleWidened` — a `Statement[]` helper was spread into the stack; return `statements(...)`. `llms.txt`; `llms/statements-runtime.md`.
767
767
  - `ERR_PACKAGE_PATH_NOT_EXPORTED` — `tsx -e "import …"`, or running from outside the project root; run a real file with `tsx <file.ts>` from the root. `llms/client.md`.
768
768
  - `Missing statement: mvp:placeholder` on import — an unconfigured slot in a pulled tree; replace it with the statement it stands in for. `llms/legacy.md`.
769
- - A CLI command fails under `--json` or piped (unless stdout carries data): stdout is `{ ok: false, error: { code, message, exitCode, details?, suggestion? } }`, as does a failed release write. Codes: `SDK_SEED_IN_STATIC` (`details.leaks[]` → `publicSeed`), `SDK_EXPORT_INVALID` (`details.diagnostics[]`, `--strict` too), `SDK_DRIFT`, `SDK_BRANCH_TAKEN`, `SDK_BRANCH_LIVE`, `SDK_RELEASE_NAME_TAKEN`, `SDK_RELEASE_FILES_NOT_CARRIED`, `SDK_LIVE_BRANCH_MISMATCH` (`details.conflictsWith`), `SDK_IDENTITY_CONFLICT`, `SDK_KIND_CONFLICT`, `SDK_PRUNE_OUT_OF_SCOPE`, `SDK_IMPORT_REFUSED`, `SDK_SHARED_SCHEMA_CHANGE`, `SDK_CONSTRAINT_VIOLATION`, `SDK_CREDENTIAL_REJECTED` (`details`: `{ profile, credentialType, instance, workspaceId, signIn }`; ids null on a refused env refresh), `SDK_USAGE` (`details.reason: "needs-confirmation"`: run its `Re-run as`), `SDK_ERROR`. Landing refusal `details.refused`: identityConflict, renamePending, kindConflict, uniqueViolation, tableTrigger, importInProgress, importRefused, pruneOutOfScope. `warnings[]` / `details.warnings` / `accepted[]` entries: `{ code, message, subject? }` (`subject`: the def's `{ kind, name }`). Backend documents add `selector` and `workspaceId`.
769
+ - A CLI command fails under `--json` or piped (unless stdout carries data): stdout is `{ ok: false, error: { code, message, exitCode, details?, suggestion? } }`, as does a failed release write. Codes: `SDK_SEED_IN_STATIC` (`details.leaks[]` → `publicSeed`), `SDK_EXPORT_INVALID` (`details.diagnostics[]`, `--strict` too), `SDK_DRIFT`, `SDK_BRANCH_TAKEN`, `SDK_BRANCH_LIVE`, `SDK_RELEASE_NAME_TAKEN`, `SDK_RELEASE_FILES_NOT_CARRIED`, `SDK_LIVE_BRANCH_MISMATCH` (`details.conflictsWith`), `SDK_IDENTITY_CONFLICT`, `SDK_KIND_CONFLICT`, `SDK_PRUNE_OUT_OF_SCOPE`, `SDK_IMPORT_REFUSED`, `SDK_SHARED_SCHEMA_CHANGE`, `SDK_CONSTRAINT_VIOLATION`, `SDK_CREDENTIAL_REJECTED` (`details`: `{ profile, credentialType, instance, workspaceId, signIn }`; ids null on a refused env refresh), `SDK_WORKSPACE_CHANGED` (deploy over objects edited in Xano since the last sync; `details.objects`; pull first or `--overwrite`), `SDK_USAGE` (`details.reason: "needs-confirmation"`: run its `Re-run as`), `SDK_ERROR`. Landing refusal `details.refused`: identityConflict, renamePending, kindConflict, uniqueViolation, tableTrigger, importInProgress, importRefused, pruneOutOfScope. `warnings[]` / `details.warnings` / `accepted[]` entries: `{ code, message, subject? }` (`subject`: the def's `{ kind, name }`). Backend documents add `selector` and `workspaceId`.
770
770
  - A CLI command reports `could not reach <url>: fetch failed (<code>)` — blocked egress, not a bad credential; fix it before `xanosdk login`, which rotates a single-use refresh token.
771
771
 
772
772
  ### CLI exit codes
@@ -874,7 +874,7 @@ The run is isolated in ways that make a correct test fail for reasons the failur
874
874
  - `llm` (REQUIRED): typed provider settings, a discriminated union on `type` (`"xano-free" | "anthropic" | "openai" | "google-genai"`). Shared fields: `systemPrompt?`, `maxSteps?` (default `5`), and `prompt?` XOR `messages?` (genuinely exclusive: both is a type error and throws — the engine stores ONE `prompt_type`, so one would be dropped); plus provider fields (`apiKey?`, `model?`, `temperature?`, `reasoningEffort?`, …). String fields accept Twig placeholders — `{{ $args.x }}` for run inputs (the `args` of `s.ai.agent.run`), `{{ $env.NAME }}` for env vars.
875
875
  - `tools?`: same `ToolsetToolEntry[]` as `mcpServer` — bare `tool()` handles, or a `{ tool, enabled?, auth? }` wrapper when one needs `enabled`/`auth`. A tool reading `auth()` MUST use the wrapper naming the auth table — a bare handle runs it with no caller (see `mcpServer`'s `tools?`).
876
876
  - `output?`: `{ schema: Record<string, input.*>, enabled? }` — structured-output schema. `schema` is a named-field record authored with the `input.*` catalog, exactly like a `defineFunction`/`query` `input:` map (the stored `structuredOutputsSchema` is the same wire shape as function inputs). e.g. `output: { schema: { priority: input.enum(["low","high"]), summary: input.text() } }`. When you pass the agent *handle* to `s.ai.agent.run({ agent })`, `.result` is typed straight from this schema — no `resultShape` witness needed (the shape is declared once). `resultShape` remains only to override that, or to type an agent referenced by bare name.
877
- - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var("summary", ref("run.result.summary"))`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` — raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. `.toolCalls` is the FINAL step's calls only (often `[]`); every call is a `.steps[].content[]` entry of `type: "tool-call"`.
877
+ - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, allowToolExecution: c.bool(true), as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var("summary", ref("run.result.summary"))`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` — raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. `.toolCalls` is the FINAL step's calls only (often `[]`); every call is a `.steps[].content[]` entry of `type: "tool-call"`. ⚠ An agent with tools needs `allowToolExecution: c.bool(true)` on the run: unset, its tools are OFF and it answers without them (warns `stack.agent-tools-off`).
878
878
  - **Marketplace:** for chat history, use `@xano-sdk/chatbot`; for vector RAG, use `@xano-sdk/vector` (`tools: [vector.searchTool]`). Find add-ons with `xanosdk marketplace search <q>`.
879
879
  - Both kinds persist under the `toolset` payload key, so a same-name `agent` + `mcpServer` pair derives ONE guid and `export()` throws — give them distinct names.
880
880
 
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.6
1
+ # xanosdk v1.0.8
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanosdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
5
5
  "coverage": {
6
6
  "objectKinds": {
@@ -8997,6 +8997,48 @@
8997
8997
  }
8998
8998
  ],
8999
8999
  "cli": [
9000
+ {
9001
+ "command": "agent-skill install",
9002
+ "flags": [
9003
+ {
9004
+ "flag": "--agent <id>",
9005
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9006
+ },
9007
+ {
9008
+ "flag": "--dry-run",
9009
+ "description": "Report what would change and write nothing"
9010
+ },
9011
+ {
9012
+ "flag": "--force",
9013
+ "description": "Replace a copy that was edited since it was installed"
9014
+ }
9015
+ ],
9016
+ "description": "Write the skill into the user-level skill directory of each detected agent; an edited copy is left alone unless --force"
9017
+ },
9018
+ {
9019
+ "command": "agent-skill status",
9020
+ "flags": [
9021
+ {
9022
+ "flag": "--agent <id>",
9023
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9024
+ }
9025
+ ],
9026
+ "description": "Report each copy as current, stale, edited or absent"
9027
+ },
9028
+ {
9029
+ "command": "agent-skill uninstall",
9030
+ "flags": [
9031
+ {
9032
+ "flag": "--agent <id>",
9033
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9034
+ },
9035
+ {
9036
+ "flag": "--dry-run",
9037
+ "description": "Report what would be removed and remove nothing"
9038
+ }
9039
+ ],
9040
+ "description": "Remove the copies install wrote; an edited copy is reported and kept"
9041
+ },
9000
9042
  {
9001
9043
  "command": "compile",
9002
9044
  "args": "<file>",
@@ -9076,6 +9118,10 @@
9076
9118
  "flag": "--allow-shared-schema-changes",
9077
9119
  "description": "Proceed even though table/microservice changes reach every branch — only with --to"
9078
9120
  },
9121
+ {
9122
+ "flag": "--overwrite",
9123
+ "description": "Deploy over objects changed in Xano since the last deploy or pull (see `workspace diff`) — only with --to"
9124
+ },
9079
9125
  {
9080
9126
  "flag": "--allow-branch-deletion",
9081
9127
  "description": "Acknowledge that --replace permanently deletes the workspace's other branches — only with --to"
@@ -9655,10 +9701,11 @@
9655
9701
  },
9656
9702
  {
9657
9703
  "flag": "--framework <id>",
9658
- "description": "Frontend framework to scaffold: react (default), svelte",
9704
+ "description": "Frontend to scaffold in a new project: react (default), svelte, or none for the backend only. A non-empty directory always gets the backend only",
9659
9705
  "values": [
9660
9706
  "react",
9661
- "svelte"
9707
+ "svelte",
9708
+ "none"
9662
9709
  ]
9663
9710
  },
9664
9711
  {
@@ -9777,7 +9824,7 @@
9777
9824
  },
9778
9825
  {
9779
9826
  "flag": "--force",
9780
- "description": "Write into a non-empty target directory. Over an existing project it lists every file it would overwrite and confirms first (--yes without a terminal); files the scaffold does not write are kept"
9827
+ "description": "Write over what clashes when adding the backend to a non-empty target directory: an existing xano/, a file init would write, a xano:* script with another command. It lists every file and script it would overwrite and confirms first (--yes without a terminal); files the scaffold does not write are kept"
9781
9828
  },
9782
9829
  {
9783
9830
  "flag": "--no-install",
@@ -9851,7 +9898,7 @@
9851
9898
  ]
9852
9899
  }
9853
9900
  ],
9854
- "description": "Scaffold a Xano SDK project — empty, or filled from an existing backend"
9901
+ "description": "Scaffold a Xano SDK project — empty, or filled from an existing backend. In a non-empty directory, add the backend to the project there"
9855
9902
  },
9856
9903
  {
9857
9904
  "command": "local cache",
@@ -9876,6 +9923,21 @@
9876
9923
  "command": "local list",
9877
9924
  "description": "List Xano Engines on this machine, marking the ones xanosdk started"
9878
9925
  },
9926
+ {
9927
+ "command": "local mcp",
9928
+ "args": "[name]",
9929
+ "flags": [
9930
+ {
9931
+ "flag": "--stdio",
9932
+ "description": "Run as an MCP stdio server that forwards to the live engine with its current bearer — the command a coding agent's MCP config launches"
9933
+ },
9934
+ {
9935
+ "flag": "--project <dir>",
9936
+ "description": "The project whose engine to reach, when the agent launches the bridge outside it (default: the current directory)"
9937
+ }
9938
+ ],
9939
+ "description": "Print how a coding agent connects to a Xano Engine's MCP server (look at the backend, seed rows, run functions, tasks, triggers, endpoints and tests); `--stdio` runs the bridge the agent's MCP config launches (default: the engine this project deployed to)"
9940
+ },
9879
9941
  {
9880
9942
  "command": "local stop",
9881
9943
  "args": "<name>",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xano/sdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Xano SDK — your Xano backend as TypeScript. `xanosdk deploy` ships your typed workspace (and an optional static frontend) to a live, auto-expiring ephemeral environment and prints its URL. init → deploy → URL.",
5
5
  "keywords": [
6
6
  "xanosdk",
@@ -86,6 +86,7 @@
86
86
  "llms-full.txt",
87
87
  "llms",
88
88
  "guides",
89
+ "skills",
89
90
  "README.md",
90
91
  "CHANGELOG.md"
91
92
  ],
@@ -107,6 +108,8 @@
107
108
  "audit:output-flag": "tsx scripts/audit-output-flag.ts",
108
109
  "audit:decode-coverage": "tsx scripts/audit-decode-coverage.ts",
109
110
  "audit:dts": "npm run build && tsx scripts/audit-dts.ts",
111
+ "eval:skill-trigger": "tsx scripts/eval-skill-trigger.ts",
112
+ "eval:skill-scenarios": "tsx scripts/eval-skill-scenarios.ts",
110
113
  "manifest": "tsx scripts/manifest.ts",
111
114
  "codes": "tsx scripts/codes.ts",
112
115
  "changelog": "tsx scripts/changelog.ts",
@@ -152,7 +155,7 @@
152
155
  "eslint": "^9.0.0",
153
156
  "gpt-tokenizer": "^3.4.0",
154
157
  "tsup": "^8.0.0",
155
- "tsx": "^4.22.4",
158
+ "tsx": "^4.23.15",
156
159
  "typescript": "^5.5.0",
157
160
  "vitest": "^4.1.11"
158
161
  },