@xano/sdk 1.0.6 → 1.0.7

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 (215) hide show
  1. package/CHANGELOG.md +20 -5
  2. package/README.md +30 -4
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-67QIX45H.js → agent-file-refresh-DGGSRPJ4.js} +12 -12
  5. package/dist/agent-skill-command-37DFYS7Q.js +414 -0
  6. package/dist/{answer-shape-UCDUKPAN.js → answer-shape-RBFDCNZ7.js} +4 -4
  7. package/dist/{backend-dir-3LIL6SCT.js → backend-dir-KDD43X7K.js} +14 -14
  8. package/dist/{backend-slot-JREP27UD.js → backend-slot-TBOVZXDE.js} +3 -3
  9. package/dist/bin.js +48 -47
  10. package/dist/{branch-2IPHOAYS.js → branch-7PIKNUD7.js} +11 -10
  11. package/dist/{branch-commands-KTKAXBAN.js → branch-commands-EGY7ZEZE.js} +23 -22
  12. package/dist/bundle.js +4 -4
  13. package/dist/{chunk-GWTFI3GA.js → chunk-26LHXLD3.js} +2 -2
  14. package/dist/{chunk-ENMBEXOP.js → chunk-2ACWDSAQ.js} +3 -3
  15. package/dist/{chunk-GOLFAEUV.js → chunk-2SD4LA22.js} +2 -2
  16. package/dist/{chunk-GZHLCUZ6.js → chunk-2XWVZRL6.js} +7 -7
  17. package/dist/{chunk-IF4PEGVD.js → chunk-2YER2J47.js} +11 -11
  18. package/dist/{chunk-N5I37JFB.js → chunk-3FRGNBOC.js} +2 -2
  19. package/dist/{chunk-YKP4ZKVO.js → chunk-46PATL23.js} +3 -3
  20. package/dist/{chunk-QJM5XZ4K.js → chunk-47XT6WQL.js} +8 -8
  21. package/dist/{chunk-AWQ7BQTQ.js → chunk-4GPIOIAC.js} +6 -1
  22. package/dist/{chunk-ND43ZOS3.js → chunk-567KK6XF.js} +7 -7
  23. package/dist/{chunk-EQFYOOO6.js → chunk-5GIOCDUM.js} +829 -893
  24. package/dist/{chunk-TTEIDD5Q.js → chunk-5SCPRXFB.js} +4 -4
  25. package/dist/{chunk-LAOMN6QQ.js → chunk-5ZG7V2VW.js} +3 -3
  26. package/dist/{chunk-JXVJGF3Y.js → chunk-7M6JP3FS.js} +2 -2
  27. package/dist/{chunk-JFBRXRJD.js → chunk-7XXWKTCE.js} +36 -36
  28. package/dist/{chunk-PL7AIAWS.js → chunk-A4R5CAY4.js} +4 -111
  29. package/dist/{chunk-SPKA2LV6.js → chunk-AKERAUNH.js} +4 -4
  30. package/dist/{chunk-26MOFAJT.js → chunk-ARWMVNDJ.js} +6 -3
  31. package/dist/{chunk-I3VHW6XM.js → chunk-B2URJBC4.js} +18 -18
  32. package/dist/{chunk-A7MRZ4GF.js → chunk-B3P25SDP.js} +4 -4
  33. package/dist/chunk-BRANWM4U.js +853 -0
  34. package/dist/{chunk-CHINR7WD.js → chunk-BSVQEKHO.js} +4 -4
  35. package/dist/{chunk-UD2Z7K6W.js → chunk-BZ6WTG3E.js} +4 -4
  36. package/dist/{chunk-D7BUMOKU.js → chunk-CH23ONYG.js} +76 -5
  37. package/dist/{chunk-763M6LX3.js → chunk-CNZASQPL.js} +2 -2
  38. package/dist/{chunk-TECTL2NU.js → chunk-CPN6WSBH.js} +4 -4
  39. package/dist/{chunk-5YQV35C2.js → chunk-CT3J5JRZ.js} +7 -7
  40. package/dist/{chunk-YYC2DZMG.js → chunk-D5OZRJ3T.js} +6 -6
  41. package/dist/{chunk-XFBGXB7X.js → chunk-DG3APBUJ.js} +149 -97
  42. package/dist/chunk-DIWF7L33.js +995 -0
  43. package/dist/{chunk-RIN4YY34.js → chunk-DXZTL7NA.js} +95 -58
  44. package/dist/{chunk-PMMHSX4H.js → chunk-EF4MHLEW.js} +4 -4
  45. package/dist/{chunk-ZDP6GDAB.js → chunk-ELPQTDW6.js} +101 -93
  46. package/dist/{chunk-Q22BMRPF.js → chunk-EPFDY5JU.js} +2 -2
  47. package/dist/{chunk-ZJSTUD6D.js → chunk-EU32BC5B.js} +8 -8
  48. package/dist/{chunk-3BBIDW3Y.js → chunk-FDTET7FZ.js} +3 -3
  49. package/dist/{chunk-YYLUBYXM.js → chunk-FENA7K7C.js} +3 -3
  50. package/dist/{chunk-QZEAANWP.js → chunk-GHMLRFRX.js} +8 -8
  51. package/dist/{chunk-MBDFH7XB.js → chunk-H2K4GFUS.js} +3 -3
  52. package/dist/{chunk-U35MTOXQ.js → chunk-HTQWAQRW.js} +3 -3
  53. package/dist/{chunk-ROY4YAEQ.js → chunk-HU7F56VF.js} +22 -2
  54. package/dist/{chunk-2FLIJGBZ.js → chunk-HZ6ADG3O.js} +47 -8
  55. package/dist/{chunk-GLY552SI.js → chunk-I6XRUU6U.js} +54 -54
  56. package/dist/{chunk-KPFS3RGM.js → chunk-IPNN2KRW.js} +3 -3
  57. package/dist/{chunk-LD6ARK3A.js → chunk-JOOKM7AH.js} +2 -2
  58. package/dist/{chunk-6X6BJN6Y.js → chunk-JOWY6HFL.js} +3 -3
  59. package/dist/{chunk-UIVMR7UK.js → chunk-JX6N73H3.js} +2 -2
  60. package/dist/{chunk-JRVQ7M7W.js → chunk-L472YIGG.js} +8 -8
  61. package/dist/{chunk-YR2I5HGE.js → chunk-L6HZ67P6.js} +2 -2
  62. package/dist/chunk-LCOCRJ4K.js +116 -0
  63. package/dist/{chunk-3EDSPMXN.js → chunk-LJM5CIY4.js} +5 -1
  64. package/dist/{chunk-NPODGBVJ.js → chunk-M2C54ZBC.js} +4 -4
  65. package/dist/{chunk-QXYMDARD.js → chunk-M3NEK3LT.js} +4 -4
  66. package/dist/{chunk-BL3AZ3AP.js → chunk-MBL7CXJ7.js} +2 -2
  67. package/dist/{chunk-7GAIJW62.js → chunk-MYZRMSPM.js} +2 -2
  68. package/dist/{chunk-GHQ4BVI4.js → chunk-N3YFCFCO.js} +13 -13
  69. package/dist/{chunk-M5CSVB23.js → chunk-NDJAKSE7.js} +11 -8
  70. package/dist/{chunk-Z4ZGTCCD.js → chunk-NV37YGOV.js} +6 -6
  71. package/dist/{chunk-GW5RHGOB.js → chunk-O56DQKPL.js} +9 -9
  72. package/dist/{chunk-U6MTGB46.js → chunk-ORGNLQN6.js} +5 -5
  73. package/dist/{chunk-I3H3HCPY.js → chunk-PEIBGH2V.js} +33 -30
  74. package/dist/{chunk-5TVFLG3C.js → chunk-PEX4QZVI.js} +2 -2
  75. package/dist/{chunk-HCG7NDIL.js → chunk-PV25BDCH.js} +5 -5
  76. package/dist/{chunk-VDHA5SSQ.js → chunk-PY722CHR.js} +2 -2
  77. package/dist/{chunk-VW4CWVYX.js → chunk-QGIZLFAS.js} +4 -4
  78. package/dist/{chunk-SSITMX7I.js → chunk-QRQ54LUI.js} +16 -14
  79. package/dist/{chunk-OIKLDDYC.js → chunk-RBU2YX22.js} +3 -3
  80. package/dist/{chunk-EADVVTDK.js → chunk-RRMH7WMY.js} +7 -7
  81. package/dist/{chunk-WZHLMU6T.js → chunk-S46ODQRA.js} +2 -2
  82. package/dist/{chunk-SPITRSOF.js → chunk-SDGV76HF.js} +2 -2
  83. package/dist/{chunk-ATJ2W7DC.js → chunk-SGK3PTTM.js} +281 -121
  84. package/dist/{chunk-3II44CUJ.js → chunk-TWVUYS63.js} +24 -24
  85. package/dist/{chunk-2WBH5HUY.js → chunk-U5M7T6CI.js} +7 -7
  86. package/dist/{chunk-6X3MY2JP.js → chunk-UYFUIHH3.js} +2 -2
  87. package/dist/{chunk-IMELQ2I6.js → chunk-V7MBRUK6.js} +3 -3
  88. package/dist/{chunk-NDWVJ2QZ.js → chunk-VAGSKUWC.js} +3 -3
  89. package/dist/{chunk-WBH4KJWM.js → chunk-VIJ5D3RC.js} +3 -3
  90. package/dist/{chunk-ITC2R2OT.js → chunk-VNDR2T35.js} +7 -7
  91. package/dist/{chunk-IXFJORNH.js → chunk-WNCW2RNB.js} +4 -4
  92. package/dist/{chunk-BTVUYHWV.js → chunk-WUEPP5HD.js} +4 -4
  93. package/dist/{local-engine-command-RYLGMQ2O.js → chunk-YCUDOF6Q.js} +22 -77
  94. package/dist/{chunk-YGLMRH5U.js → chunk-YH2JVJAO.js} +12 -12
  95. package/dist/{chunk-PFBXSVZF.js → chunk-ZGLNHA7T.js} +7 -7
  96. package/dist/{chunk-CCU5CCRX.js → chunk-ZJOAWRED.js} +8 -8
  97. package/dist/{chunk-FU3VCE5A.js → chunk-ZXRDD3Q2.js} +13 -9
  98. package/dist/cli.d.ts +25 -4
  99. package/dist/cli.js +45 -42
  100. package/dist/{codegen-command-R5IASBFC.js → codegen-command-T7TC7PQO.js} +58 -57
  101. package/dist/{commands-H7CPMMHH.js → commands-JDENTDJS.js} +2 -2
  102. package/dist/{completion-W5ZAI6TN.js → completion-YFD5OVJW.js} +8 -4
  103. package/dist/{config-MZ5KG4EP.js → config-YJFUTRJW.js} +7 -7
  104. package/dist/{deploy-command-34T2LKQ5.js → deploy-command-OEVEE6UG.js} +50 -49
  105. package/dist/{deploy-source-YLQ7WMYR.js → deploy-source-HYVZEYXV.js} +33 -32
  106. package/dist/{dev-env-sync-TMJTNU3U.js → dev-env-sync-EFDCJ6KU.js} +48 -47
  107. package/dist/{display-name-hint-ZJGFNJKQ.js → display-name-hint-SW3GB3V7.js} +13 -12
  108. package/dist/{emit-D125xxty.d.ts → emit-Dov_92kn.d.ts} +1 -1
  109. package/dist/{env-example-refresh-CQP3ZMKM.js → env-example-refresh-WNSOH534.js} +59 -58
  110. package/dist/{env-pull-command-UTG6IC2K.js → env-pull-command-UYEXMQ3P.js} +43 -42
  111. package/dist/{env-target-FZROWYFS.js → env-target-JBSLBKNX.js} +12 -11
  112. package/dist/{env-var-command-VYDBQJJW.js → env-var-command-BJNRAXNV.js} +49 -48
  113. package/dist/{ephemeral-BIE6FMJV.js → ephemeral-CEOGMIEA.js} +10 -9
  114. package/dist/{ephemeral-command-OZ26RGXF.js → ephemeral-command-IPSGBCS5.js} +61 -60
  115. package/dist/{ephemeral-state-SNZOX2YK.js → ephemeral-state-MTBASPRS.js} +10 -9
  116. package/dist/{generate-command-4HR7MR36.js → generate-command-XQXODBS6.js} +73 -71
  117. package/dist/{gitignore-EWQBXNX2.js → gitignore-RUVCIZO4.js} +18 -18
  118. package/dist/{impersonate-command-WC7OGKUM.js → impersonate-command-MA27O7S5.js} +41 -40
  119. package/dist/{import-7Z4GCCPO.js → import-XKRFHABE.js} +4 -4
  120. package/dist/index.d.ts +4 -4
  121. package/dist/{init-command-HAO3WXH3.js → init-command-6RDTCMAB.js} +61 -46
  122. package/dist/{init-modules-NSKD4ASY.js → init-modules-DHTBOCQT.js} +7 -7
  123. package/dist/{init-web-MKFFOQUU.js → init-web-ELBXSXDL.js} +2 -2
  124. package/dist/internal.d.ts +4 -4
  125. package/dist/internal.js +1 -1
  126. package/dist/{keep-data-merge-QR2TMKEO.js → keep-data-merge-TDJOIAVT.js} +23 -23
  127. package/dist/{lambda-config-reconcile-7FJXXV6V.js → lambda-config-reconcile-47X5C2E4.js} +6 -5
  128. package/dist/{landing-record-MWXFIRCP.js → landing-record-TPPYFQAS.js} +21 -21
  129. package/dist/{local-engine-choice-VD5LNXJU.js → local-engine-choice-S6VHPJRU.js} +36 -35
  130. package/dist/local-engine-command-4EZCGZ6M.js +85 -0
  131. package/dist/{local-engine-config-W3KB7RWM.js → local-engine-config-2EBL3QKA.js} +3 -2
  132. package/dist/{local-engine-deploy-6O7NKZCA.js → local-engine-deploy-FOPNWU7X.js} +17 -15
  133. package/dist/local-engine-lookup-GM3E3NPP.js +43 -0
  134. package/dist/local-engine-mcp-bridge-QKZHUGW3.js +423 -0
  135. package/dist/local-engine-mcp-command-BFQVLXZC.js +181 -0
  136. package/dist/{local-engine-process-ZLLZEIRF.js → local-engine-process-XUQPQENQ.js} +11 -8
  137. package/dist/{local-engine-state-OCW5YDD7.js → local-engine-state-JQPKGB65.js} +4 -3
  138. package/dist/{local-engine-update-check-LVX4HBBI.js → local-engine-update-check-S7UF6ZF5.js} +6 -5
  139. package/dist/{lock-commands-X2OECR4R.js → lock-commands-HJ6Y5QVS.js} +51 -50
  140. package/dist/{login-command-RLLKD565.js → login-command-JO55NZAS.js} +32 -32
  141. package/dist/{logout-command-XDMSXCDO.js → logout-command-MPRIRSJA.js} +15 -14
  142. package/dist/{marketplace-command-2NHHY2X3.js → marketplace-command-BM6G257N.js} +33 -33
  143. package/dist/{marketplace-resolve-OTZYT4FG.js → marketplace-resolve-AWH3RG57.js} +5 -5
  144. package/dist/{meta-client-TMHVBZFY.js → meta-client-AOSWODQQ.js} +13 -12
  145. package/dist/{module-manifest-FNMW23IX.js → module-manifest-GXI46PEF.js} +3 -3
  146. package/dist/node.d.ts +4 -4
  147. package/dist/node.js +50 -49
  148. package/dist/{operation-outcome-RN62735X.js → operation-outcome-4UKPXTNC.js} +25 -23
  149. package/dist/{output-target-MOLCTPBP.js → output-target-RAZ4KN5J.js} +19 -19
  150. package/dist/{plan-disclosure-CY7AF6KP.js → plan-disclosure-JR52DWXN.js} +13 -12
  151. package/dist/{plugin-contributions-WR26U7NT.js → plugin-contributions-E6XHLQWK.js} +5 -5
  152. package/dist/{plugin-prompt-ZUYQQIX4.js → plugin-prompt-IODX5EU6.js} +4 -4
  153. package/dist/{plugin-questions-HAZOQ67R.js → plugin-questions-AAAJ7POP.js} +3 -3
  154. package/dist/{preflight-command-OHJXYND3.js → preflight-command-7GKJBWOQ.js} +52 -51
  155. package/dist/{profile-command-6JWT2BTL.js → profile-command-CM6J7E2M.js} +33 -33
  156. package/dist/{profile-pointer-PDA5XBIB.js → profile-pointer-KTYXL6FU.js} +4 -3
  157. package/dist/{project-dependency-GZWWGWEW.js → project-dependency-OQ5575QQ.js} +6 -6
  158. package/dist/{project-sdk-3W72H5QO.js → project-sdk-2ESHHZVL.js} +3 -3
  159. package/dist/{promote-command-UYAMUXKB.js → promote-command-BDRPG6UU.js} +68 -67
  160. package/dist/{prompt-U37K5RPQ.js → prompt-MQPGU4ZI.js} +3 -3
  161. package/dist/{publish-command-BUS27HGB.js → publish-command-IEMYZ7LF.js} +55 -54
  162. package/dist/{pull-command-ZGUNP27P.js → pull-command-S5E2ABZ4.js} +61 -60
  163. package/dist/{pull-superseded-EZBGYRZF.js → pull-superseded-E34BZVLH.js} +3 -3
  164. package/dist/{release-command-BQ6OHS3P.js → release-command-7F5TBKO2.js} +58 -57
  165. package/dist/{release-ns-command-ATGVBVIU.js → release-ns-command-EK2ZQ4CC.js} +84 -83
  166. package/dist/{retry-command-QJ57WVW7.js → retry-command-GL5HCMVB.js} +9 -8
  167. package/dist/{routes-manifest-file-UALYSZLY.js → routes-manifest-file-LCIKPDAG.js} +5 -5
  168. package/dist/scaffold.js +4 -4
  169. package/dist/secrets-IV4N5HYI.js +20 -0
  170. package/dist/{secrets-file-LMS7KX3E.js → secrets-file-LXREYU3M.js} +18 -18
  171. package/dist/{secrets-fill-command-QNBDGCGM.js → secrets-fill-command-QHZS3KWM.js} +49 -48
  172. package/dist/{seed-SZ6OS5DQ.js → seed-FRKMDN2Z.js} +4 -4
  173. package/dist/{source-resolve-MKLNYFWG.js → source-resolve-BBHYTOXI.js} +23 -21
  174. package/dist/{static-host-ONEHA4LI.js → static-host-7LC7OZR4.js} +4 -4
  175. package/dist/{status-command-XKIFKBGM.js → status-command-TY253MJT.js} +52 -51
  176. package/dist/{store-Bg4Na6Sm.d.ts → store-Boba9OOh.d.ts} +1 -1
  177. package/dist/{store-X6ZH7EC3.js → store-VJ3OS6VO.js} +7 -6
  178. package/dist/{sync-contributions-HNVHDIQW.js → sync-contributions-63542VE4.js} +9 -9
  179. package/dist/{sync-record-PRXHLK4S.js → sync-record-RGHK7EAL.js} +13 -12
  180. package/dist/{table-DC36QA4Y.js → table-OAYGFGEN.js} +5 -5
  181. package/dist/{tables-command-UQLKTELN.js → tables-command-PZIVDAH3.js} +38 -37
  182. package/dist/{tenant-EKNQGG5A.js → tenant-Y3II4VY3.js} +11 -10
  183. package/dist/{tenant-command-2LWP2MPB.js → tenant-command-G6XON7CF.js} +86 -85
  184. package/dist/{test-command-IU5MBBXY.js → test-command-3FZOX7O3.js} +41 -40
  185. package/dist/{tests-RG2Y5EQ4.js → tests-KF6N6BZ7.js} +5 -5
  186. package/dist/{token-7AWSJLKO.js → token-DJJUW5HY.js} +11 -10
  187. package/dist/{toolchain-hooks-4ZMQLBPQ.js → toolchain-hooks-7PWCFLSU.js} +4 -4
  188. package/dist/{toolchain-modules-VU7SURVJ.js → toolchain-modules-OTNSKK52.js} +4 -4
  189. package/dist/{toolchain-peers-CIDNEEQV.js → toolchain-peers-KQ7TQ2AR.js} +7 -7
  190. package/dist/{tracked-backend-4BHSV7NC.js → tracked-backend-AJCGTO5Y.js} +36 -35
  191. package/dist/{update-check-A7FXIINW.js → update-check-4E5L6GAW.js} +46 -45
  192. package/dist/{upgrade-command-C5KBITFI.js → upgrade-command-BXMSQN4C.js} +52 -49
  193. package/dist/{whoami-command-7WQII2H4.js → whoami-command-NLCCIEUM.js} +14 -13
  194. package/dist/{workspace-Z46PUZNI.js → workspace-PNMJOXE4.js} +4 -4
  195. package/dist/{workspace-binding-JE6YNDZJ.js → workspace-binding-J5GWDFRI.js} +13 -12
  196. package/dist/{workspace-command-FC4IMLAE.js → workspace-command-MHIIY352.js} +79 -78
  197. package/dist/{workspace-env-N4ZPFT6A.js → workspace-env-LLRWCHSA.js} +15 -15
  198. package/dist/{workspace-export-3A5BZTPS.js → workspace-export-BIKAYHWJ.js} +4 -4
  199. package/dist/{writable-D7KCZI5N.js → writable-UOTO4WWC.js} +3 -3
  200. package/dist/{xanosdk-import-P2A2KSXM.js → xanosdk-import-S7A3CVBN.js} +5 -5
  201. package/dist/{xanosdk-project-6AGMW2SL.js → xanosdk-project-J4VCFRHP.js} +15 -15
  202. package/guides/README.md +2 -2
  203. package/guides/cli.md +69 -0
  204. package/guides/codegen.md +23 -5
  205. package/guides/codes.md +1 -0
  206. package/guides/coverage.md +5 -0
  207. package/guides/deploying.md +28 -0
  208. package/guides/scaffold.md +61 -10
  209. package/llms-full.txt +1 -1
  210. package/llms.txt +1 -1
  211. package/manifest.json +63 -5
  212. package/package.json +5 -2
  213. package/skills/xano-backend/SKILL.md +119 -0
  214. package/dist/chunk-LL7SGTRC.js +0 -663
  215. package/dist/chunk-M6ZFSTIZ.js +0 -630
@@ -0,0 +1,116 @@
1
+ // src/deploy/local-engine-handshake.ts
2
+ var LOOPBACK_HOSTS = ["127.0.0.1", "::1", "localhost"];
3
+ var ALLOWED_PROTOCOLS = ["http:", "https:"];
4
+ function isLoopbackUrl(url) {
5
+ let parsed;
6
+ try {
7
+ parsed = new URL(url);
8
+ } catch {
9
+ return false;
10
+ }
11
+ if (!ALLOWED_PROTOCOLS.includes(parsed.protocol)) return false;
12
+ const host = parsed.hostname.replace(/^\[|\]$/g, "");
13
+ if (!LOOPBACK_HOSTS.includes(host)) return false;
14
+ return /^[0-9]+$/.test(parsed.port);
15
+ }
16
+ function assertLoopbackUrl(url, what) {
17
+ if (isLoopbackUrl(url)) return;
18
+ throw new Error(
19
+ `${what} reports a url this SDK will not send a token to: ${url}
20
+ A Xano Engine has to serve loopback over http on a port of its own \u2014 ${LOOPBACK_HOSTS.join(", ")} \u2014 and anything else is reachable from off this machine. Stop that engine and start a fresh one without binding it to all interfaces.`
21
+ );
22
+ }
23
+ function requireString(raw, key, source) {
24
+ const value = raw[key];
25
+ if (typeof value !== "string" || value === "") {
26
+ throw new Error(
27
+ `${source} is missing \`${key}\`, or gave it as something other than text.
28
+ That is not an engine this SDK knows how to drive \u2014 the engine on this machine is older or newer than the one it was built against. Move to a current one with \`xanosdk local update\`.`
29
+ );
30
+ }
31
+ return value;
32
+ }
33
+ function optionalString(raw, key, source) {
34
+ return raw[key] === void 0 ? void 0 : requireString(raw, key, source);
35
+ }
36
+ function requireNumber(raw, key, source) {
37
+ const value = raw[key];
38
+ if (typeof value !== "number" || !Number.isFinite(value)) {
39
+ throw new Error(
40
+ `${source} is missing \`${key}\`, or gave it as something other than a number.
41
+ That is not an engine this SDK knows how to drive \u2014 the engine on this machine is older or newer than the one it was built against. Move to a current one with \`xanosdk local update\`.`
42
+ );
43
+ }
44
+ return value;
45
+ }
46
+ function readEngine(value, source) {
47
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
48
+ throw new Error(
49
+ `${source} did not print an engine description.
50
+ Re-run, and if it happens again fetch a fresh copy with \`xanosdk local cache clear\`, then \`xanosdk deploy --local\`.`
51
+ );
52
+ }
53
+ const raw = value;
54
+ const mcpUrl = optionalString(raw, "mcp_url", source);
55
+ return {
56
+ name: requireString(raw, "name", source),
57
+ url: requireString(raw, "url", source),
58
+ workspaceId: requireNumber(raw, "workspace_id", source),
59
+ token: requireString(raw, "access_token", source),
60
+ pid: requireNumber(raw, "pid", source),
61
+ signInUrl: requireString(raw, "sign_in_url", source),
62
+ loginLinkEndpoint: requireString(raw, "login_link_endpoint", source),
63
+ logPath: requireString(raw, "log", source),
64
+ ...mcpUrl === void 0 ? {} : { mcpUrl }
65
+ };
66
+ }
67
+ var HANDSHAKE_SOURCE = "The engine's start handshake";
68
+ var LISTING_SOURCE = "The engine's list of running engines";
69
+ function parseEngineHandshake(stdout) {
70
+ let value;
71
+ try {
72
+ value = JSON.parse(stdout.trim());
73
+ } catch {
74
+ throw new Error(
75
+ `${HANDSHAKE_SOURCE} did not print an engine description.
76
+ Re-run, and if it happens again fetch a fresh copy with \`xanosdk local cache clear\`, then \`xanosdk deploy --local\`.`
77
+ );
78
+ }
79
+ const engine = readEngine(value, HANDSHAKE_SOURCE);
80
+ assertLoopbackUrl(engine.url, "The engine that just started");
81
+ return engine;
82
+ }
83
+ function parseEngineListing(stdout) {
84
+ const text = stdout.trim();
85
+ if (text === "") return [];
86
+ let value;
87
+ try {
88
+ value = JSON.parse(text);
89
+ } catch {
90
+ throw new Error(
91
+ `${LISTING_SOURCE} was not readable.
92
+ Re-run, and if it happens again fetch a fresh copy with \`xanosdk local cache clear\`, then \`xanosdk deploy --local\`.`
93
+ );
94
+ }
95
+ if (!Array.isArray(value)) {
96
+ throw new Error(
97
+ `${LISTING_SOURCE} was not a list.
98
+ Re-run, and if it happens again fetch a fresh copy with \`xanosdk local cache clear\`, then \`xanosdk deploy --local\`.`
99
+ );
100
+ }
101
+ return value.filter((entry) => !isForeignEngine(entry)).map((entry) => readEngine(entry, LISTING_SOURCE));
102
+ }
103
+ function isForeignEngine(entry) {
104
+ if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return false;
105
+ const raw = entry;
106
+ return raw.workspace_id === void 0 && raw.access_token === void 0;
107
+ }
108
+
109
+ export {
110
+ LOOPBACK_HOSTS,
111
+ isLoopbackUrl,
112
+ assertLoopbackUrl,
113
+ parseEngineHandshake,
114
+ parseEngineListing
115
+ };
116
+ //# sourceMappingURL=chunk-LCOCRJ4K.js.map
@@ -38,6 +38,9 @@ function assertNoForgedMarkers(body, spec) {
38
38
  function gitattributesSpec(pkg) {
39
39
  return { dialect: HASH_DIALECT, pkg, file: ".gitattributes" };
40
40
  }
41
+ function gitignoreSpec() {
42
+ return { dialect: HASH_DIALECT, pkg: "@xano/sdk", file: ".gitignore" };
43
+ }
41
44
  function linesOutsideBlocks(text, dialect) {
42
45
  const begin = dialect.begin("");
43
46
  const end = dialect.end("");
@@ -163,6 +166,7 @@ export {
163
166
  htmlDialect,
164
167
  composeBlock,
165
168
  gitattributesSpec,
169
+ gitignoreSpec,
166
170
  linesOutsideBlocks,
167
171
  blockPackages,
168
172
  findBlock,
@@ -170,4 +174,4 @@ export {
170
174
  upsertBlock,
171
175
  removeBlock
172
176
  };
173
- //# sourceMappingURL=chunk-3EDSPMXN.js.map
177
+ //# sourceMappingURL=chunk-LJM5CIY4.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-2MNLRIOX.js";
4
4
  import {
5
5
  pipedYes
6
- } from "./chunk-6X3MY2JP.js";
6
+ } from "./chunk-UYFUIHH3.js";
7
7
  import {
8
8
  contextFlags
9
- } from "./chunk-N5I37JFB.js";
9
+ } from "./chunk-3FRGNBOC.js";
10
10
  import {
11
11
  shellWord
12
12
  } from "./chunk-FWD7AL6N.js";
@@ -18,7 +18,7 @@ import {
18
18
  retryingFetch,
19
19
  transportTarget,
20
20
  withWriteStatusAftermath
21
- } from "./chunk-YR2I5HGE.js";
21
+ } from "./chunk-L6HZ67P6.js";
22
22
  import {
23
23
  suggestAll
24
24
  } from "./chunk-UTI5G6OJ.js";
@@ -288,4 +288,4 @@ export {
288
288
  freeBranchLabel,
289
289
  requireBranch
290
290
  };
291
- //# sourceMappingURL=chunk-NPODGBVJ.js.map
291
+ //# sourceMappingURL=chunk-M2C54ZBC.js.map
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  hasString,
3
3
  listAnswer
4
- } from "./chunk-7GAIJW62.js";
4
+ } from "./chunk-MYZRMSPM.js";
5
5
  import {
6
6
  READ_AFTERMATH,
7
7
  explainFetchFailure,
8
8
  httpFailure,
9
9
  readBodyText
10
- } from "./chunk-YR2I5HGE.js";
10
+ } from "./chunk-L6HZ67P6.js";
11
11
  import {
12
12
  detail,
13
13
  info,
14
14
  warn
15
- } from "./chunk-D7BUMOKU.js";
15
+ } from "./chunk-CH23ONYG.js";
16
16
 
17
17
  // src/deploy/microservice-status.ts
18
18
  var TIMEOUT_MS = 3e4;
@@ -168,4 +168,4 @@ export {
168
168
  readyRatio,
169
169
  printMicroserviceSection
170
170
  };
171
- //# sourceMappingURL=chunk-QXYMDARD.js.map
171
+ //# sourceMappingURL=chunk-M3NEK3LT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  httpFailure
3
- } from "./chunk-YR2I5HGE.js";
3
+ } from "./chunk-L6HZ67P6.js";
4
4
 
5
5
  // src/deploy/import.ts
6
6
  var ImportHttpError = class extends Error {
@@ -23,4 +23,4 @@ export {
23
23
  ImportHttpError,
24
24
  isSignatureRefusal
25
25
  };
26
- //# sourceMappingURL=chunk-BL3AZ3AP.js.map
26
+ //# sourceMappingURL=chunk-MBL7CXJ7.js.map
@@ -8,7 +8,7 @@ import {
8
8
  notJsonError,
9
9
  parseJsonAnswer,
10
10
  unexpectedAnswerError
11
- } from "./chunk-YR2I5HGE.js";
11
+ } from "./chunk-L6HZ67P6.js";
12
12
 
13
13
  // src/deploy/answer-shape.ts
14
14
  function isRecord(v) {
@@ -94,4 +94,4 @@ export {
94
94
  multidocAnswer,
95
95
  writeTransportFailure
96
96
  };
97
- //# sourceMappingURL=chunk-7GAIJW62.js.map
97
+ //# sourceMappingURL=chunk-MYZRMSPM.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  confirm
3
- } from "./chunk-JXVJGF3Y.js";
3
+ } from "./chunk-7M6JP3FS.js";
4
4
  import {
5
5
  discloseCanonicalMoves,
6
6
  movesClause,
7
7
  releaseCanonicalMoves
8
- } from "./chunk-CHINR7WD.js";
8
+ } from "./chunk-BSVQEKHO.js";
9
9
  import {
10
10
  exportWorkspaceBundle
11
- } from "./chunk-GOLFAEUV.js";
11
+ } from "./chunk-2SD4LA22.js";
12
12
  import {
13
13
  DEFAULT_BRANCH_LABEL,
14
14
  deleteBranch,
@@ -17,22 +17,22 @@ import {
17
17
  liveBranchLabel,
18
18
  requireBranch,
19
19
  setLiveBranch
20
- } from "./chunk-NPODGBVJ.js";
20
+ } from "./chunk-M2C54ZBC.js";
21
21
  import {
22
22
  sectionKind
23
23
  } from "./chunk-IYXL5NYU.js";
24
24
  import {
25
25
  assertOneName
26
- } from "./chunk-WBH4KJWM.js";
26
+ } from "./chunk-VIJ5D3RC.js";
27
27
  import {
28
28
  getAccessToken
29
- } from "./chunk-YGLMRH5U.js";
29
+ } from "./chunk-YH2JVJAO.js";
30
30
  import {
31
31
  pipedYes
32
- } from "./chunk-6X3MY2JP.js";
32
+ } from "./chunk-UYFUIHH3.js";
33
33
  import {
34
34
  contextFlags
35
- } from "./chunk-N5I37JFB.js";
35
+ } from "./chunk-3FRGNBOC.js";
36
36
  import {
37
37
  shellWord
38
38
  } from "./chunk-FWD7AL6N.js";
@@ -56,7 +56,7 @@ import {
56
56
  warn,
57
57
  writeJson,
58
58
  writeTargetPayload
59
- } from "./chunk-D7BUMOKU.js";
59
+ } from "./chunk-CH23ONYG.js";
60
60
  import {
61
61
  suggestAll
62
62
  } from "./chunk-UTI5G6OJ.js";
@@ -139,7 +139,7 @@ async function runBranchCommand(args) {
139
139
  const workspaceId = auth.workspaceId;
140
140
  const target = { baseUrl: auth.instance, workspaceId };
141
141
  const { branches, unaddressable } = await listBranchListing(auth, target).catch(async (err) => {
142
- const { unansweredRead } = await import("./source-resolve-MKLNYFWG.js");
142
+ const { unansweredRead } = await import("./source-resolve-BBHYTOXI.js");
143
143
  throw unansweredRead(err, `list the branches of workspace ${workspaceId}`, "workspace");
144
144
  });
145
145
  if (verb === "list") {
@@ -161,7 +161,7 @@ async function runBranchCommand(args) {
161
161
  const meant = near.map((n) => `Did you mean "${safeText(n)}"? \`xanosdk workspace branch delete ${shellWord(n)}${again}\` deletes it, after asking to confirm.`);
162
162
  const branchesLine = known !== "" ? [`Its branches: ${known}.`] : [];
163
163
  if (near.length > 0) {
164
- const { SourceError } = await import("./source-resolve-MKLNYFWG.js");
164
+ const { SourceError } = await import("./source-resolve-BBHYTOXI.js");
165
165
  throw new SourceError([missed, ...meant, ...branchesLine].join("\n"), "gone", "workspace", near[0], near.length > 1 ? near : void 0);
166
166
  }
167
167
  warn(missed, "branch.not-found", branchesLine);
@@ -280,7 +280,7 @@ Check what is serving with \`xanosdk workspace branch list${contextFlags()}\`, t
280
280
  }
281
281
  if (args.expectLive !== void 0) {
282
282
  const now = await listBranchListing(auth, target).catch(async (err) => {
283
- const { unansweredRead } = await import("./source-resolve-MKLNYFWG.js");
283
+ const { unansweredRead } = await import("./source-resolve-BBHYTOXI.js");
284
284
  throw unansweredRead(err, `list the branches of workspace ${workspaceId}`, "workspace");
285
285
  });
286
286
  const drift = liveMismatch(now, args.expectLive);
@@ -424,4 +424,4 @@ export {
424
424
  liveBranchMismatch,
425
425
  staleSchemaRefs
426
426
  };
427
- //# sourceMappingURL=chunk-GHQ4BVI4.js.map
427
+ //# sourceMappingURL=chunk-N3YFCFCO.js.map
@@ -1,7 +1,3 @@
1
- import {
2
- registerSecret,
3
- tokenTextProblem
4
- } from "./chunk-AWQ7BQTQ.js";
5
1
  import {
6
2
  expandHome,
7
3
  readPathEnvVar
@@ -12,11 +8,11 @@ import {
12
8
  httpFailure,
13
9
  isTimeoutError,
14
10
  statusLabel
15
- } from "./chunk-YR2I5HGE.js";
11
+ } from "./chunk-L6HZ67P6.js";
16
12
  import {
17
13
  pointerRootFor,
18
14
  resolveProjectProfile
19
- } from "./chunk-26MOFAJT.js";
15
+ } from "./chunk-ARWMVNDJ.js";
20
16
  import {
21
17
  atomicWrite,
22
18
  linkTarget
@@ -28,9 +24,13 @@ import {
28
24
  import {
29
25
  readEnvVar
30
26
  } from "./chunk-X2NL4KUO.js";
27
+ import {
28
+ registerSecret,
29
+ tokenTextProblem
30
+ } from "./chunk-4GPIOIAC.js";
31
31
  import {
32
32
  UsageError
33
- } from "./chunk-D7BUMOKU.js";
33
+ } from "./chunk-CH23ONYG.js";
34
34
  import {
35
35
  shellQuote
36
36
  } from "./chunk-5ZSO4T2G.js";
@@ -1099,6 +1099,9 @@ function addGitignoreRule(authFilePath, opts = {}) {
1099
1099
  fileEntry.includes("/") ? fileEntry : `/${fileEntry}`
1100
1100
  ) : relForwardSlash(root, containingDir) + "/";
1101
1101
  const gitignorePath = join2(root, ".gitignore");
1102
+ if (lstatSync(gitignorePath, { throwIfNoEntry: false })?.isSymbolicLink() === true) {
1103
+ throw new Error(`${gitignorePath} is a symlink, so it was left untouched`);
1104
+ }
1102
1105
  const existing = existsSync2(gitignorePath) ? readFileSync2(gitignorePath, "utf8") : "";
1103
1106
  if (ignoreCovers(existing, entry) || ignoreCovers(existing, fileEntry) || gitIgnores(abs)) return void 0;
1104
1107
  const prefix = existing.length === 0 || existing.endsWith("\n") ? existing : existing + "\n";
@@ -1189,4 +1192,4 @@ export {
1189
1192
  addGitignoreRule,
1190
1193
  gitSaysIgnored
1191
1194
  };
1192
- //# sourceMappingURL=chunk-M5CSVB23.js.map
1195
+ //# sourceMappingURL=chunk-NDJAKSE7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  exportWorkspaceBundle
3
- } from "./chunk-GOLFAEUV.js";
3
+ } from "./chunk-2SD4LA22.js";
4
4
  import {
5
5
  encodeWorkspaceArchive,
6
6
  readArchiveEntries
@@ -10,20 +10,20 @@ import {
10
10
  } from "./chunk-X4DVXBFY.js";
11
11
  import {
12
12
  resolveSource
13
- } from "./chunk-3II44CUJ.js";
13
+ } from "./chunk-TWVUYS63.js";
14
14
  import {
15
15
  downloadRelease
16
- } from "./chunk-GWTFI3GA.js";
16
+ } from "./chunk-26LHXLD3.js";
17
17
  import {
18
18
  backendDirIn
19
- } from "./chunk-TTEIDD5Q.js";
19
+ } from "./chunk-5SCPRXFB.js";
20
20
  import {
21
21
  BARE,
22
22
  UsageError,
23
23
  isKindShaped,
24
24
  parseSource,
25
25
  relForwardSlash
26
- } from "./chunk-D7BUMOKU.js";
26
+ } from "./chunk-CH23ONYG.js";
27
27
  import {
28
28
  calcSignatureJson
29
29
  } from "./chunk-7FIMUFBP.js";
@@ -144,4 +144,4 @@ export {
144
144
  gatedApiGroups,
145
145
  asWorkspaceArchive
146
146
  };
147
- //# sourceMappingURL=chunk-Z4ZGTCCD.js.map
147
+ //# sourceMappingURL=chunk-NV37YGOV.js.map
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  resolveProjectEntry
3
- } from "./chunk-Z4ZGTCCD.js";
3
+ } from "./chunk-NV37YGOV.js";
4
4
  import {
5
5
  isUnusablePin,
6
6
  readPin,
7
7
  writePin
8
- } from "./chunk-YYLUBYXM.js";
8
+ } from "./chunk-FENA7K7C.js";
9
9
  import {
10
10
  ENGINE_RELEASES_URL_ENV,
11
11
  EngineReleaseNotFoundError,
12
12
  usesCustomReleaseManager
13
- } from "./chunk-OIKLDDYC.js";
13
+ } from "./chunk-RBU2YX22.js";
14
14
  import {
15
15
  LOCAL_ENGINE_OVERRIDE_ENV,
16
16
  engineOverrideFromEnv,
17
17
  resolveEnginePlatform,
18
18
  resolveEngineSource
19
- } from "./chunk-PL7AIAWS.js";
19
+ } from "./chunk-A4R5CAY4.js";
20
20
  import {
21
21
  ORIGIN_READ_ONLY_BY_REFRESH
22
- } from "./chunk-N5I37JFB.js";
22
+ } from "./chunk-3FRGNBOC.js";
23
23
  import {
24
24
  UsageError,
25
25
  info,
26
26
  warn
27
- } from "./chunk-D7BUMOKU.js";
27
+ } from "./chunk-CH23ONYG.js";
28
28
 
29
29
  // src/emit/local-engine-choice.ts
30
30
  function refuseCredentialFlagsForLocal(args, kinds) {
@@ -87,7 +87,7 @@ async function chooseLocalEngine(flagValue, dir, machineOutput) {
87
87
  };
88
88
  const platform = resolveEnginePlatform();
89
89
  if (platform === void 0) return keep;
90
- const check = await import("./local-engine-update-check-LVX4HBBI.js");
90
+ const check = await import("./local-engine-update-check-S7UF6ZF5.js");
91
91
  const latest = await check.latestKnownVersion({ platform });
92
92
  if (latest === void 0) return keep;
93
93
  const decision = check.decideUpdate({
@@ -101,7 +101,7 @@ async function chooseLocalEngine(flagValue, dir, machineOutput) {
101
101
  info(check.updateNoticeText(pin, latest));
102
102
  return keep;
103
103
  }
104
- const { confirm } = await import("./prompt-U37K5RPQ.js");
104
+ const { confirm } = await import("./prompt-MQPGU4ZI.js");
105
105
  const yes = await confirm(check.updatePromptText(pin, latest), {
106
106
  flag: "`xanosdk local update`",
107
107
  refusal: { details: { updated: false }, rerun: "xanosdk local update" }
@@ -170,4 +170,4 @@ export {
170
170
  pinAfterAcquire,
171
171
  pinWrittenText
172
172
  };
173
- //# sourceMappingURL=chunk-GW5RHGOB.js.map
173
+ //# sourceMappingURL=chunk-O56DQKPL.js.map
@@ -7,14 +7,14 @@ import {
7
7
  } from "./chunk-QO6BVGS5.js";
8
8
  import {
9
9
  unreadableError
10
- } from "./chunk-5TVFLG3C.js";
10
+ } from "./chunk-PEX4QZVI.js";
11
+ import {
12
+ ensureGitignored
13
+ } from "./chunk-NDJAKSE7.js";
11
14
  import {
12
15
  destinationKey,
13
16
  nextLandedRecord
14
17
  } from "./chunk-MFWF2NZJ.js";
15
- import {
16
- ensureGitignored
17
- } from "./chunk-M5CSVB23.js";
18
18
  import {
19
19
  atomicWrite
20
20
  } from "./chunk-LLNZGEFK.js";
@@ -301,4 +301,4 @@ export {
301
301
  recordEphemeralLanding,
302
302
  clearEphemeralLanding
303
303
  };
304
- //# sourceMappingURL=chunk-U6MTGB46.js.map
304
+ //# sourceMappingURL=chunk-ORGNLQN6.js.map
@@ -2,10 +2,10 @@ import {
2
2
  keptDuplicates,
3
3
  replacedRegistrations,
4
4
  reportSuperseded
5
- } from "./chunk-SPITRSOF.js";
5
+ } from "./chunk-SDGV76HF.js";
6
6
  import {
7
7
  rerenderEnvExample
8
- } from "./chunk-U35MTOXQ.js";
8
+ } from "./chunk-HTQWAQRW.js";
9
9
  import {
10
10
  carriedSeedRows,
11
11
  decodeBundle,
@@ -17,58 +17,62 @@ import {
17
17
  verifyPulledTree,
18
18
  withSourceIdentities,
19
19
  writeDocumentationTokens
20
- } from "./chunk-RIN4YY34.js";
20
+ } from "./chunk-DXZTL7NA.js";
21
21
  import {
22
22
  ROUTES_MANIFEST_BASENAME
23
23
  } from "./chunk-LBJA7IEM.js";
24
- import {
25
- confirm
26
- } from "./chunk-JXVJGF3Y.js";
27
- import {
28
- recordSync,
29
- syncBranchLabel
30
- } from "./chunk-NDWVJ2QZ.js";
31
24
  import {
32
25
  syncDigests
33
26
  } from "./chunk-JI3BLXWQ.js";
34
27
  import {
35
28
  fetchSourceArchive
36
- } from "./chunk-Z4ZGTCCD.js";
29
+ } from "./chunk-NV37YGOV.js";
30
+ import {
31
+ confirm
32
+ } from "./chunk-7M6JP3FS.js";
33
+ import {
34
+ recordSync,
35
+ syncBranchLabel
36
+ } from "./chunk-VAGSKUWC.js";
37
37
  import {
38
38
  decodeWorkspaceArchive,
39
39
  encodeWorkspaceArchive
40
40
  } from "./chunk-3DRXWLJ5.js";
41
41
  import {
42
42
  ensureSecretPathGitignored
43
- } from "./chunk-UD2Z7K6W.js";
43
+ } from "./chunk-BZ6WTG3E.js";
44
44
  import {
45
45
  readVersion,
46
46
  refreshAgentGuidance
47
- } from "./chunk-XFBGXB7X.js";
47
+ } from "./chunk-DG3APBUJ.js";
48
48
  import {
49
49
  WORKSPACE_ENV_BASENAME,
50
50
  WORKSPACE_ENV_EXAMPLE_BASENAME,
51
51
  namesInEnvExample,
52
52
  readWorkspaceEnvFile
53
- } from "./chunk-HCG7NDIL.js";
53
+ } from "./chunk-PV25BDCH.js";
54
54
  import {
55
55
  memoCredential,
56
56
  refuseProfileForLocal,
57
57
  selectBackend
58
- } from "./chunk-I3VHW6XM.js";
58
+ } from "./chunk-B2URJBC4.js";
59
59
  import {
60
60
  getAccessToken
61
- } from "./chunk-YGLMRH5U.js";
61
+ } from "./chunk-YH2JVJAO.js";
62
+ import {
63
+ readLockFile,
64
+ writeLockFile
65
+ } from "./chunk-CJDPSCMX.js";
62
66
  import {
63
67
  requireBackendSlot
64
- } from "./chunk-VDHA5SSQ.js";
68
+ } from "./chunk-PY722CHR.js";
65
69
  import {
66
70
  contextFlags
67
- } from "./chunk-N5I37JFB.js";
71
+ } from "./chunk-3FRGNBOC.js";
68
72
  import {
69
73
  backendDirIn,
70
74
  resolveBackendDir
71
- } from "./chunk-TTEIDD5Q.js";
75
+ } from "./chunk-5SCPRXFB.js";
72
76
  import {
73
77
  CODEGEN_MARKER,
74
78
  DECODE_MARKER,
@@ -83,15 +87,14 @@ import {
83
87
  readDecodeRecord,
84
88
  removeEmptiedDirs,
85
89
  removeFiles
86
- } from "./chunk-LL7SGTRC.js";
90
+ } from "./chunk-DIWF7L33.js";
87
91
  import {
88
- readLockFile,
89
- writeLockFile
90
- } from "./chunk-CJDPSCMX.js";
92
+ holdsProjectManifest
93
+ } from "./chunk-HU7F56VF.js";
91
94
  import {
92
95
  decodeMarkerHead,
93
96
  decodeMarkerWith
94
- } from "./chunk-M6ZFSTIZ.js";
97
+ } from "./chunk-5GIOCDUM.js";
95
98
  import {
96
99
  CliError,
97
100
  UsageError,
@@ -104,7 +107,7 @@ import {
104
107
  terminalText,
105
108
  warn,
106
109
  writeJson
107
- } from "./chunk-D7BUMOKU.js";
110
+ } from "./chunk-CH23ONYG.js";
108
111
  import {
109
112
  WORKSPACE_SECRETS_BASENAME
110
113
  } from "./chunk-3JDU4VRL.js";
@@ -248,7 +251,7 @@ function projectBackendAbove(cwd) {
248
251
  const parent = dirname(dir);
249
252
  if (parent === dir) return void 0;
250
253
  dir = parent;
251
- const backend = existsSync(join(dir, "package.json")) ? backendDirIn(dir) : join(dir, XANO_DIR);
254
+ const backend = holdsProjectManifest(dir) ? backendDirIn(dir) : join(dir, XANO_DIR);
252
255
  if (existsSync(join(backend, "index.ts"))) return relative(cwd, backend).split(sep).join("/");
253
256
  }
254
257
  }
@@ -316,7 +319,7 @@ async function runPullCommand(args) {
316
319
  });
317
320
  refuseDuplicateSourceGuids(project);
318
321
  const seedRows = carriedSeedRows(fetched.archive, bundle.payload);
319
- const { discoverManifestModules } = await import("./routes-manifest-file-UALYSZLY.js");
322
+ const { discoverManifestModules } = await import("./routes-manifest-file-LCIKPDAG.js");
320
323
  const modules = await discoverManifestModules(cwd, join(cwd, backendDir, ROUTES_MANIFEST_BASENAME), readVersion());
321
324
  const placed = placeGeneratedFiles(project, backendDir, void 0, void 0, modules);
322
325
  const settings = source.kind === "release" ? keepProjectSettings(placed, backendDir, join(cwd, backendDir)) : { files: placed, kept: false, lost: [], from: WORKSPACE_SETTINGS_FILE };
@@ -437,7 +440,7 @@ async function runPullCommand(args) {
437
440
  );
438
441
  }
439
442
  if (args.yes !== true) {
440
- const { yesRerun } = await import("./retry-command-QJ57WVW7.js");
443
+ const { yesRerun } = await import("./retry-command-GL5HCMVB.js");
441
444
  const { rerun, note } = yesRerun(args, "pull");
442
445
  const ok = await confirm(`Replace ${backendDir}/ from ${fetched.label}?`, {
443
446
  flag: "--yes",
@@ -912,7 +915,7 @@ function envFillRemedy(kind, args, one = false) {
912
915
  return `fill ${them} in, or run \`xanosdk env pull${from}${flags}\`.`;
913
916
  }
914
917
  async function needsYes(args, head, why, details) {
915
- const { yesRerun } = await import("./retry-command-QJ57WVW7.js");
918
+ const { yesRerun } = await import("./retry-command-GL5HCMVB.js");
916
919
  const { rerun, note } = yesRerun(args, "pull");
917
920
  return new CliError("SDK_USAGE", `${head} Re-run as \`${rerun}\` ${why}.${note}`, {
918
921
  exitCode: 1,
@@ -941,4 +944,4 @@ export {
941
944
  projectWorkspaceName,
942
945
  envFillRemedy
943
946
  };
944
- //# sourceMappingURL=chunk-I3H3HCPY.js.map
947
+ //# sourceMappingURL=chunk-PEIBGH2V.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  UsageError,
6
6
  displayPath
7
- } from "./chunk-D7BUMOKU.js";
7
+ } from "./chunk-CH23ONYG.js";
8
8
 
9
9
  // src/emit/writable.ts
10
10
  import { accessSync, constants, existsSync, statSync } from "fs";
@@ -63,4 +63,4 @@ export {
63
63
  unreadableError,
64
64
  assertReadWritable
65
65
  };
66
- //# sourceMappingURL=chunk-5TVFLG3C.js.map
66
+ //# sourceMappingURL=chunk-PEX4QZVI.js.map