@xano/sdk 1.0.9 → 1.0.11
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.
- package/CHANGELOG.md +25 -0
- package/README.md +85 -86
- package/dist/.build-fingerprint +1 -1
- package/dist/{agent-file-refresh-XXCQOTWN.js → agent-file-refresh-CKLYJRIS.js} +6 -6
- package/dist/{agent-skill-command-VDSMXH4M.js → agent-skill-command-QKQG5NIZ.js} +26 -26
- package/dist/{backend-dir-G44PETFO.js → backend-dir-V2FELHYM.js} +5 -5
- package/dist/bin.js +26 -26
- package/dist/{branch-commands-Q6E66PMM.js → branch-commands-ZY2W3ICB.js} +14 -14
- package/dist/bundle.d.ts +2 -2
- package/dist/bundle.js +5 -5
- package/dist/{chunk-HTP2CLRQ.js → chunk-3BI62SPQ.js} +2 -2
- package/dist/{chunk-QGDT52FA.js → chunk-3Q43PZGI.js} +17 -17
- package/dist/{chunk-XLQT3CCF.js → chunk-4BR5TEXI.js} +15 -15
- package/dist/{chunk-QTMXJQZN.js → chunk-4WBZ6T76.js} +2 -2
- package/dist/{chunk-FFB3YCUO.js → chunk-4ZTXYT3T.js} +2 -2
- package/dist/{chunk-WKCA66SH.js → chunk-64ODZADR.js} +7 -7
- package/dist/{chunk-OHTHG3LL.js → chunk-6LECAG3Y.js} +4 -4
- package/dist/{chunk-7KPKDHHI.js → chunk-76SBT7KS.js} +2 -2
- package/dist/{chunk-XPLBTV77.js → chunk-7FPFYYCW.js} +4 -4
- package/dist/{chunk-KDS4PDFD.js → chunk-7YSZSEZL.js} +5 -5
- package/dist/{chunk-DDUOMOIP.js → chunk-AM5T76NQ.js} +6 -6
- package/dist/{chunk-BEXZ4XRV.js → chunk-AXNX4NWN.js} +2 -2
- package/dist/{chunk-3XSTC3TM.js → chunk-B7JRCM2S.js} +2 -2
- package/dist/{chunk-BRANWM4U.js → chunk-C2SAVXAB.js} +2 -2
- package/dist/{chunk-SSOTLVOJ.js → chunk-D2PSNKZD.js} +2 -2
- package/dist/{chunk-6IOQRBRX.js → chunk-D5NAWB4P.js} +2 -2
- package/dist/{chunk-NI56XX5Z.js → chunk-DRWUMFSP.js} +4 -4
- package/dist/{chunk-ETAZIGNT.js → chunk-F2NFNYCB.js} +2 -2
- package/dist/{chunk-OYRQLU66.js → chunk-FDPW2M3S.js} +2 -2
- package/dist/{chunk-5BEK7YKY.js → chunk-FGNDJBT4.js} +2 -2
- package/dist/{chunk-HETQSTGG.js → chunk-FNA5CUVN.js} +2 -2
- package/dist/{chunk-4XHAT7C5.js → chunk-HJZUI2ZU.js} +2 -2
- package/dist/{chunk-DSD2NNTX.js → chunk-HUEFVPYW.js} +2 -2
- package/dist/{chunk-HVSIS47X.js → chunk-HW2JPR5W.js} +22 -22
- package/dist/{chunk-UZUY6VPB.js → chunk-HXRXQAZE.js} +29 -29
- package/dist/{chunk-S5RZYUP2.js → chunk-I5XSXMJQ.js} +2 -2
- package/dist/{chunk-3P35HT64.js → chunk-IDOVZLPK.js} +2 -2
- package/dist/{chunk-6NEV2PEC.js → chunk-IEDQT4Z3.js} +6 -6
- package/dist/{chunk-6JAEMMZ7.js → chunk-IFXPHVPY.js} +3 -3
- package/dist/{chunk-5GIOCDUM.js → chunk-IZI3SYXH.js} +3 -3
- package/dist/{chunk-Y3FM4BSZ.js → chunk-J746QNTP.js} +1 -1
- package/dist/{chunk-6YOH2L3G.js → chunk-JFPLHK6Y.js} +3 -3
- package/dist/{chunk-I53OTC3O.js → chunk-JHQAVWHW.js} +3 -3
- package/dist/{chunk-HBFXR4OJ.js → chunk-KCCZCIDJ.js} +2 -2
- package/dist/{chunk-GAU2FCT7.js → chunk-KDPXO5PO.js} +5 -5
- package/dist/{chunk-SGYDFEXD.js → chunk-KI6U2GD2.js} +7 -7
- package/dist/{chunk-6ZFJEJXZ.js → chunk-KICERNAP.js} +5 -5
- package/dist/{chunk-BUTGFWWA.js → chunk-KSBUHLNF.js} +2 -2
- package/dist/{chunk-WLFANUXE.js → chunk-KYTQW3YT.js} +2 -2
- package/dist/{chunk-U7XSQXOA.js → chunk-LYN3XNDE.js} +74 -68
- package/dist/{chunk-YMVCKGY2.js → chunk-NHXBKFHG.js} +42 -42
- package/dist/{chunk-GHPC52TD.js → chunk-NPW6DSZB.js} +3 -3
- package/dist/{chunk-XTUYIX5H.js → chunk-NU7EME32.js} +30 -30
- package/dist/{chunk-6BOKCTCM.js → chunk-NZ7ML6LG.js} +4 -4
- package/dist/{chunk-T3ZVNOJC.js → chunk-ONNSFD73.js} +10 -10
- package/dist/{chunk-Y2LKSXFK.js → chunk-QAY4RW2E.js} +3 -3
- package/dist/{chunk-5VOGPS5O.js → chunk-RNKP5TA2.js} +2 -2
- package/dist/{chunk-O376UAZS.js → chunk-SFOUFU4C.js} +110 -6
- package/dist/{chunk-ZYPEH64F.js → chunk-SNKABK5L.js} +2 -2
- package/dist/{chunk-EOIJ7MVW.js → chunk-T3HNISBN.js} +3 -3
- package/dist/{chunk-IFCQCM2Q.js → chunk-U4LRDTIM.js} +3 -3
- package/dist/{chunk-CXWCWYX3.js → chunk-UUYKEIHP.js} +2 -2
- package/dist/{chunk-S56YBYMN.js → chunk-VIRFG3WG.js} +2 -2
- package/dist/{chunk-2VWSUG2B.js → chunk-VTZF3ZNR.js} +2 -2
- package/dist/{chunk-LTPF25L2.js → chunk-W2QFR3ZJ.js} +2 -2
- package/dist/{chunk-INAM6KR6.js → chunk-WM7Y3MDE.js} +2 -2
- package/dist/{chunk-EKTIGGFO.js → chunk-WZXEQUIM.js} +4 -4
- package/dist/{chunk-YVXUYDHC.js → chunk-YKCDUHBR.js} +2 -2
- package/dist/{chunk-UVF45BVU.js → chunk-Z6N5N4MN.js} +1 -1
- package/dist/{chunk-ADKC3EII.js → chunk-ZS7VI7RK.js} +3 -3
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +25 -25
- package/dist/{codegen-command-KZJ7LYHW.js → codegen-command-6AB3REIV.js} +40 -40
- package/dist/codegen.d.ts +3 -3
- package/dist/{deploy-command-RXPJAM7M.js → deploy-command-LRJBO4LX.js} +29 -29
- package/dist/{deploy-source-TD77W4SA.js → deploy-source-JTPMMO3B.js} +8 -8
- package/dist/{dev-env-sync-2UCNSIJL.js → dev-env-sync-ODJYGSWT.js} +26 -26
- package/dist/{emit-D-a6JznN.d.ts → emit-YLt3GfsZ.d.ts} +3 -3
- package/dist/{env-example-refresh-QKZI26F2.js → env-example-refresh-DR44A6YZ.js} +41 -41
- package/dist/{env-pull-command-72PQOMKW.js → env-pull-command-47XQO5J2.js} +21 -21
- package/dist/{env-target-AZJ4JXT7.js → env-target-HBY2LQUA.js} +2 -2
- package/dist/{env-var-command-ALJITZDL.js → env-var-command-HTKKTBOC.js} +14 -14
- package/dist/{ephemeral-command-T276HQBO.js → ephemeral-command-T5EFYCEY.js} +22 -22
- package/dist/{generate-command-M6LAT4XU.js → generate-command-36OWZF23.js} +44 -44
- package/dist/{gitignore-V6QHYKIR.js → gitignore-NLLQURLD.js} +7 -7
- package/dist/{guards-4VPSEOAI.js → guards-RU4C7TFG.js} +5 -5
- package/dist/{impersonate-command-S6PYDMHQ.js → impersonate-command-HJYBQV6X.js} +10 -10
- package/dist/index.d.ts +8 -8
- package/dist/index.js +14 -14
- package/dist/{init-command-ENAZKPZA.js → init-command-54M3AA27.js} +29 -29
- package/dist/{init-modules-AIKWWTVQ.js → init-modules-MVULNRKR.js} +2 -2
- package/dist/internal.d.ts +6 -6
- package/dist/internal.js +33 -21
- package/dist/{keep-data-merge-3WPUPPTY.js → keep-data-merge-Y6PYJOPW.js} +15 -15
- package/dist/{lambda-config-reconcile-47X5C2E4.js → lambda-config-reconcile-FXPDH2U5.js} +3 -3
- package/dist/{landing-record-SJ5HG7T5.js → landing-record-LBJMKORB.js} +6 -6
- package/dist/{live-diff-CGTGOH3S.js → live-diff-HARRGFV4.js} +8 -8
- package/dist/{local-engine-choice-BD5O7SAU.js → local-engine-choice-SXSWNCZT.js} +9 -9
- package/dist/{local-engine-command-MXQUXXAA.js → local-engine-command-3GICPJPL.js} +10 -10
- package/dist/{local-engine-mcp-command-6G3TDWDI.js → local-engine-mcp-command-ZUS7LQ7F.js} +10 -10
- package/dist/{lock-commands-SUPQOEVU.js → lock-commands-PTBKQE72.js} +26 -26
- package/dist/{login-command-LTYO3EK7.js → login-command-HH4FA65C.js} +10 -10
- package/dist/{logout-command-QRRT36DY.js → logout-command-WPUWLZSW.js} +3 -3
- package/dist/{loop-XFDS65OD.js → loop-QHZD37KX.js} +8 -8
- package/dist/{marketplace-command-POQH5GVT.js → marketplace-command-ISG2U5NA.js} +14 -14
- package/dist/{meta-client-PDUP4EOW.js → meta-client-P7E6PCB7.js} +2 -2
- package/dist/node.d.ts +7 -7
- package/dist/node.js +32 -32
- package/dist/{operation-outcome-IXMC5SBN.js → operation-outcome-2Z6II4HB.js} +4 -4
- package/dist/{output-target-4XN43WIB.js → output-target-MWYZ5HYN.js} +8 -8
- package/dist/{plan-disclosure-GNLDYV2A.js → plan-disclosure-PQAXSAUH.js} +12 -12
- package/dist/{preflight-command-QWZL4O2N.js → preflight-command-6LCPYVTV.js} +36 -36
- package/dist/{profile-command-V6WFDYZW.js → profile-command-74AR3FB7.js} +11 -11
- package/dist/{promote-command-B3QODJNT.js → promote-command-YD3YQWJG.js} +48 -48
- package/dist/{publish-command-JOL6LXH6.js → publish-command-7VKTBVVP.js} +29 -29
- package/dist/{pull-command-RPGL6LXP.js → pull-command-XIYO7WTF.js} +42 -42
- package/dist/{raw-where-ZMLND6AG.d.ts → raw-where-gWGr-E4t.d.ts} +1 -1
- package/dist/{release-command-USZAWVXO.js → release-command-NADSTRM2.js} +37 -37
- package/dist/{release-ns-command-3XDRQKJD.js → release-ns-command-2VUTJ4A6.js} +46 -46
- package/dist/{routes-manifest-RIZGSOZC.js → routes-manifest-Z7I4TZIL.js} +7 -7
- package/dist/{routes-manifest-file-V5JJVIPH.js → routes-manifest-file-BDJ6XQXF.js} +9 -9
- package/dist/scaffold.js +2 -2
- package/dist/{secrets-file-ZA6K4J6W.js → secrets-file-KBMEY2SS.js} +6 -6
- package/dist/{secrets-fill-command-MH53XR45.js → secrets-fill-command-YUAJSOZW.js} +28 -28
- package/dist/{source-resolve-I55GN6ZC.js → source-resolve-KB7NWL3I.js} +3 -3
- package/dist/{status-command-I6S2TVAY.js → status-command-YRIB6UJP.js} +13 -13
- package/dist/{store-xUySg-KR.d.ts → store-BM7SQcUt.d.ts} +3 -3
- package/dist/{sync-baseline-3CDL4PKT.js → sync-baseline-JGAAOS25.js} +10 -10
- package/dist/{sync-contributions-4HHBUGJ4.js → sync-contributions-LMLYV7VL.js} +2 -2
- package/dist/{tables-command-L4JRA7JF.js → tables-command-IONX4ZF2.js} +11 -11
- package/dist/{tenant-command-IZ3R4BDG.js → tenant-command-635Y2YCR.js} +54 -54
- package/dist/{test-command-GCKZRRSL.js → test-command-CN76VVUK.js} +11 -11
- package/dist/{token-XQCIFX7R.js → token-WL7SSK64.js} +2 -2
- package/dist/{toolchain-hooks-3ZAAAWPL.js → toolchain-hooks-VI2WOPST.js} +8 -8
- package/dist/{toolchain-modules-C53NXT3S.js → toolchain-modules-OXUU342N.js} +2 -2
- package/dist/{tracked-backend-UHKPD2JU.js → tracked-backend-ON5V2RBJ.js} +10 -10
- package/dist/{update-check-KMAC4VEJ.js → update-check-I75SHTAD.js} +27 -27
- package/dist/{upgrade-command-HQBSUFNE.js → upgrade-command-2J7P5NSX.js} +30 -30
- package/dist/{whoami-command-23UXAC6F.js → whoami-command-HJJK2QJS.js} +4 -4
- package/dist/{workspace-TZMAJ7NF.js → workspace-7QVUA7HI.js} +2 -2
- package/dist/{workspace-binding-RBU22BBX.js → workspace-binding-D7HZTF7N.js} +3 -3
- package/dist/{workspace-command-N4BTEHSW.js → workspace-command-KXTR5SOE.js} +50 -50
- package/dist/{workspace-env-O3RK26FR.js → workspace-env-RASIOYSN.js} +6 -6
- package/dist/{xano-6T6L7TTI.js → xano-2A2GT7EH.js} +7 -7
- package/dist/{xanosdk-import-WPCHIVP6.js → xanosdk-import-767BQ2HP.js} +2 -2
- package/dist/{xanosdk-project-TEAXYQZW.js → xanosdk-project-PETOFVUQ.js} +6 -6
- package/dist/{xdo-CxDr2Q1C.d.ts → xdo-D4OwfF2J.d.ts} +10 -4
- package/guides/codes.md +1 -0
- package/llms/client.md +2 -1
- package/llms/errors.md +2 -0
- package/llms/filters.md +2 -1
- package/llms/kinds-agent-mcp.md +2 -0
- package/llms/values.md +1 -1
- package/llms-full.txt +16 -9
- package/llms.txt +7 -6
- package/manifest.json +2 -2
- package/package.json +2 -2
- package/skills/xano-backend/SKILL.md +2 -2
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
} from "./chunk-R4NOZBOY.js";
|
|
5
5
|
import {
|
|
6
6
|
fetchWorkspaceBundle
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-NU7EME32.js";
|
|
8
|
+
import "./chunk-HW2JPR5W.js";
|
|
9
|
+
import "./chunk-KDPXO5PO.js";
|
|
10
|
+
import "./chunk-4WBZ6T76.js";
|
|
11
|
+
import "./chunk-SFOUFU4C.js";
|
|
12
|
+
import "./chunk-JFPLHK6Y.js";
|
|
13
|
+
import "./chunk-NPW6DSZB.js";
|
|
14
14
|
import {
|
|
15
15
|
confirm
|
|
16
16
|
} from "./chunk-HQPL34O6.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-IEDQT4Z3.js";
|
|
18
18
|
import {
|
|
19
19
|
listTables
|
|
20
20
|
} from "./chunk-YP76ZCQ5.js";
|
|
@@ -29,38 +29,38 @@ import {
|
|
|
29
29
|
reachableWorkspaces,
|
|
30
30
|
refuseUnreachableWorkspace,
|
|
31
31
|
unreachableWorkspaceMessage
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-KYTQW3YT.js";
|
|
33
|
+
import "./chunk-YKCDUHBR.js";
|
|
34
34
|
import "./chunk-OBJ7FQDX.js";
|
|
35
35
|
import "./chunk-2TFRR6JV.js";
|
|
36
36
|
import {
|
|
37
37
|
resolveOutputTarget,
|
|
38
38
|
secretsPhrase,
|
|
39
39
|
writeExportFile
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-I5XSXMJQ.js";
|
|
41
41
|
import {
|
|
42
42
|
secretsCarriedBy
|
|
43
|
-
} from "./chunk-
|
|
44
|
-
import "./chunk-
|
|
43
|
+
} from "./chunk-JHQAVWHW.js";
|
|
44
|
+
import "./chunk-FNA5CUVN.js";
|
|
45
45
|
import {
|
|
46
46
|
assertBundleFile,
|
|
47
47
|
assertBundleInput,
|
|
48
48
|
assertEntryFile,
|
|
49
49
|
assertValueFiles,
|
|
50
50
|
loadBundleText
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-LYN3XNDE.js";
|
|
52
52
|
import "./chunk-XQO4A4Q4.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-QAY4RW2E.js";
|
|
54
|
+
import "./chunk-KI6U2GD2.js";
|
|
55
55
|
import "./chunk-PBK257CI.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-WM7Y3MDE.js";
|
|
57
57
|
import "./chunk-7JKNWDYN.js";
|
|
58
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-RNKP5TA2.js";
|
|
59
59
|
import "./chunk-VJTTTIIB.js";
|
|
60
60
|
import {
|
|
61
61
|
getAccessToken
|
|
62
|
-
} from "./chunk-
|
|
63
|
-
import "./chunk-
|
|
62
|
+
} from "./chunk-U4LRDTIM.js";
|
|
63
|
+
import "./chunk-VTZF3ZNR.js";
|
|
64
64
|
import "./chunk-5Y5HWQ2P.js";
|
|
65
65
|
import "./chunk-F3IA3YWI.js";
|
|
66
66
|
import "./chunk-LCOCRJ4K.js";
|
|
@@ -69,9 +69,9 @@ import "./chunk-YE7MHW45.js";
|
|
|
69
69
|
import "./chunk-2MNLRIOX.js";
|
|
70
70
|
import "./chunk-PFW7WFAT.js";
|
|
71
71
|
import "./chunk-CJDPSCMX.js";
|
|
72
|
-
import "./chunk-
|
|
72
|
+
import "./chunk-DRWUMFSP.js";
|
|
73
73
|
import "./chunk-VD7YTLWL.js";
|
|
74
|
-
import "./chunk-
|
|
74
|
+
import "./chunk-UUYKEIHP.js";
|
|
75
75
|
import "./chunk-S42TFTM5.js";
|
|
76
76
|
import "./chunk-ZYJP6BOO.js";
|
|
77
77
|
import "./chunk-QO6BVGS5.js";
|
|
@@ -86,9 +86,9 @@ import {
|
|
|
86
86
|
} from "./chunk-6S263KTM.js";
|
|
87
87
|
import "./chunk-IB6SKACE.js";
|
|
88
88
|
import "./chunk-EUUUMY7J.js";
|
|
89
|
-
import "./chunk-
|
|
90
|
-
import "./chunk-
|
|
91
|
-
import "./chunk-
|
|
89
|
+
import "./chunk-D5NAWB4P.js";
|
|
90
|
+
import "./chunk-7YSZSEZL.js";
|
|
91
|
+
import "./chunk-FGNDJBT4.js";
|
|
92
92
|
import "./chunk-B3NH5UBI.js";
|
|
93
93
|
import "./chunk-ZFDZKNGG.js";
|
|
94
94
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -116,10 +116,10 @@ import "./chunk-X2NL4KUO.js";
|
|
|
116
116
|
import {
|
|
117
117
|
writeData
|
|
118
118
|
} from "./chunk-4GPIOIAC.js";
|
|
119
|
-
import "./chunk-
|
|
119
|
+
import "./chunk-WZXEQUIM.js";
|
|
120
120
|
import "./chunk-E763QI3G.js";
|
|
121
|
-
import "./chunk-
|
|
122
|
-
import "./chunk-
|
|
121
|
+
import "./chunk-C2SAVXAB.js";
|
|
122
|
+
import "./chunk-IZI3SYXH.js";
|
|
123
123
|
import "./chunk-LJM5CIY4.js";
|
|
124
124
|
import "./chunk-7THDHQ4R.js";
|
|
125
125
|
import "./chunk-3YW23UFH.js";
|
|
@@ -144,17 +144,17 @@ import {
|
|
|
144
144
|
writeJson,
|
|
145
145
|
writeTargetPayload
|
|
146
146
|
} from "./chunk-C6KBZH7M.js";
|
|
147
|
-
import "./chunk-
|
|
148
|
-
import "./chunk-
|
|
149
|
-
import "./chunk-
|
|
150
|
-
import "./chunk-
|
|
147
|
+
import "./chunk-ONNSFD73.js";
|
|
148
|
+
import "./chunk-6LECAG3Y.js";
|
|
149
|
+
import "./chunk-IFXPHVPY.js";
|
|
150
|
+
import "./chunk-KICERNAP.js";
|
|
151
151
|
import "./chunk-45ZUMF4E.js";
|
|
152
|
-
import "./chunk-
|
|
152
|
+
import "./chunk-76SBT7KS.js";
|
|
153
153
|
import "./chunk-7FIMUFBP.js";
|
|
154
|
-
import "./chunk-
|
|
154
|
+
import "./chunk-NZ7ML6LG.js";
|
|
155
155
|
import "./chunk-ICK36EGF.js";
|
|
156
|
-
import "./chunk-
|
|
157
|
-
import "./chunk-
|
|
156
|
+
import "./chunk-AXNX4NWN.js";
|
|
157
|
+
import "./chunk-F2NFNYCB.js";
|
|
158
158
|
import "./chunk-GSGDWJB5.js";
|
|
159
159
|
import "./chunk-B5N6EWOM.js";
|
|
160
160
|
import "./chunk-ERVIASGL.js";
|
|
@@ -173,13 +173,13 @@ import "./chunk-UDZX2ZL4.js";
|
|
|
173
173
|
import "./chunk-ZY55DO5P.js";
|
|
174
174
|
import "./chunk-A2AOUBJS.js";
|
|
175
175
|
import "./chunk-TFFGOFVZ.js";
|
|
176
|
-
import "./chunk-
|
|
176
|
+
import "./chunk-IDOVZLPK.js";
|
|
177
177
|
import "./chunk-EHP3WPEG.js";
|
|
178
|
-
import "./chunk-
|
|
178
|
+
import "./chunk-W2QFR3ZJ.js";
|
|
179
179
|
import "./chunk-Q7DGTQ5G.js";
|
|
180
|
-
import "./chunk-
|
|
181
|
-
import "./chunk-
|
|
182
|
-
import "./chunk-
|
|
180
|
+
import "./chunk-HJZUI2ZU.js";
|
|
181
|
+
import "./chunk-VIRFG3WG.js";
|
|
182
|
+
import "./chunk-Z6N5N4MN.js";
|
|
183
183
|
import "./chunk-VAX3UZOY.js";
|
|
184
184
|
import "./chunk-LL6ED5IB.js";
|
|
185
185
|
import "./chunk-4BW2SG2N.js";
|
|
@@ -203,7 +203,7 @@ async function runWorkspaceCommand(args) {
|
|
|
203
203
|
case "reset-tables":
|
|
204
204
|
return runResetTables(args);
|
|
205
205
|
case "branch": {
|
|
206
|
-
const { runBranchCommand } = await import("./branch-commands-
|
|
206
|
+
const { runBranchCommand } = await import("./branch-commands-ZY2W3ICB.js");
|
|
207
207
|
return runBranchCommand(args);
|
|
208
208
|
}
|
|
209
209
|
default:
|
|
@@ -232,7 +232,7 @@ async function runDetails(args) {
|
|
|
232
232
|
const auth = await getAccessToken(args);
|
|
233
233
|
const workspaceId = auth.workspaceId;
|
|
234
234
|
const all = await fetchWorkspaces(auth).catch(async (err) => {
|
|
235
|
-
const { unansweredRead } = await import("./source-resolve-
|
|
235
|
+
const { unansweredRead } = await import("./source-resolve-KB7NWL3I.js");
|
|
236
236
|
throw unansweredRead(err, "read the workspace list", "workspace");
|
|
237
237
|
});
|
|
238
238
|
const match = all.find((w) => w.id === workspaceId);
|
|
@@ -292,7 +292,7 @@ async function runExport(args) {
|
|
|
292
292
|
var EXIT_DIFF_MISMATCH = 2;
|
|
293
293
|
async function runDiff(args) {
|
|
294
294
|
if (args.file === void 0 && args.bundle === void 0) {
|
|
295
|
-
const { resolveProjectEntry } = await import("./deploy-source-
|
|
295
|
+
const { resolveProjectEntry } = await import("./deploy-source-JTPMMO3B.js");
|
|
296
296
|
const entry = resolveProjectEntry(process.cwd());
|
|
297
297
|
if (entry !== void 0) args = { ...args, file: entry };
|
|
298
298
|
}
|
|
@@ -305,11 +305,11 @@ async function runDiff(args) {
|
|
|
305
305
|
try {
|
|
306
306
|
live = await fetchWorkspaceBundle(auth, args.branch);
|
|
307
307
|
} catch (err) {
|
|
308
|
-
const { unansweredRead } = await import("./source-resolve-
|
|
308
|
+
const { unansweredRead } = await import("./source-resolve-KB7NWL3I.js");
|
|
309
309
|
throw unansweredRead(err, "read the workspace to compare", "workspace");
|
|
310
310
|
}
|
|
311
|
-
const { SETTINGS_LABEL } = await import("./live-diff-
|
|
312
|
-
const { codePinnedCanonicals, releaseCanonicalLock } = await import("./release-command-
|
|
311
|
+
const { SETTINGS_LABEL } = await import("./live-diff-HARRGFV4.js");
|
|
312
|
+
const { codePinnedCanonicals, releaseCanonicalLock } = await import("./release-command-NADSTRM2.js");
|
|
313
313
|
const pinned = codePinnedCanonicals(local.bundle, releaseCanonicalLock(args), args.file !== void 0);
|
|
314
314
|
const listed = await listBranches(auth, { baseUrl: auth.instance, workspaceId: auth.workspaceId }).catch(
|
|
315
315
|
() => void 0
|
|
@@ -317,9 +317,9 @@ async function runDiff(args) {
|
|
|
317
317
|
const liveLabel = listed?.find((b) => b.live)?.label;
|
|
318
318
|
const comparedLabel = args.branch ?? liveLabel;
|
|
319
319
|
const comparedIsLive = args.branch === void 0 ? true : liveLabel === void 0 ? null : args.branch === liveLabel;
|
|
320
|
-
const { landingLockPath } = await import("./landing-record-
|
|
320
|
+
const { landingLockPath } = await import("./landing-record-LBJMKORB.js");
|
|
321
321
|
const { readSyncBaseline, storedBranchLabel } = await import("./sync-record-U65BCPSP.js");
|
|
322
|
-
const { directedComparison } = await import("./sync-baseline-
|
|
322
|
+
const { directedComparison } = await import("./sync-baseline-JGAAOS25.js");
|
|
323
323
|
const syncLabel = storedBranchLabel(listed, args.branch);
|
|
324
324
|
const baseline = syncLabel === void 0 ? void 0 : readSyncBaseline(landingLockPath(args, args.file !== void 0 ? { entryFile: args.file } : {}), {
|
|
325
325
|
instance: auth.instance,
|
|
@@ -560,4 +560,4 @@ export {
|
|
|
560
560
|
EXIT_DIFF_MISMATCH,
|
|
561
561
|
runWorkspaceCommand
|
|
562
562
|
};
|
|
563
|
-
//# sourceMappingURL=workspace-command-
|
|
563
|
+
//# sourceMappingURL=workspace-command-KXTR5SOE.js.map
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
renderWorkspaceEnvFile,
|
|
15
15
|
valueProblem,
|
|
16
16
|
workspaceEnvPathIn
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-QAY4RW2E.js";
|
|
18
|
+
import "./chunk-D5NAWB4P.js";
|
|
19
|
+
import "./chunk-7YSZSEZL.js";
|
|
20
|
+
import "./chunk-FGNDJBT4.js";
|
|
21
21
|
import "./chunk-B3NH5UBI.js";
|
|
22
22
|
import "./chunk-ZFDZKNGG.js";
|
|
23
23
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
} from "./chunk-HU7F56VF.js";
|
|
35
35
|
import "./chunk-MF4W6FHU.js";
|
|
36
36
|
import "./chunk-X2NL4KUO.js";
|
|
37
|
-
import "./chunk-
|
|
37
|
+
import "./chunk-IZI3SYXH.js";
|
|
38
38
|
import "./chunk-LJM5CIY4.js";
|
|
39
39
|
import "./chunk-C6KBZH7M.js";
|
|
40
40
|
import {
|
|
@@ -68,4 +68,4 @@ export {
|
|
|
68
68
|
valueProblem,
|
|
69
69
|
workspaceEnvPathIn
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=workspace-env-
|
|
71
|
+
//# sourceMappingURL=workspace-env-RASIOYSN.js.map
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
Xano,
|
|
4
4
|
standaloneDefKind,
|
|
5
5
|
workspace
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KICERNAP.js";
|
|
7
7
|
import "./chunk-45ZUMF4E.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-76SBT7KS.js";
|
|
9
9
|
import "./chunk-7FIMUFBP.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-NZ7ML6LG.js";
|
|
11
11
|
import "./chunk-ICK36EGF.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-AXNX4NWN.js";
|
|
13
|
+
import "./chunk-F2NFNYCB.js";
|
|
14
14
|
import "./chunk-GSGDWJB5.js";
|
|
15
15
|
import "./chunk-B5N6EWOM.js";
|
|
16
16
|
import "./chunk-ERVIASGL.js";
|
|
@@ -25,7 +25,7 @@ import "./chunk-5ZSO4T2G.js";
|
|
|
25
25
|
import "./chunk-VQPDATQT.js";
|
|
26
26
|
import "./chunk-ZY55DO5P.js";
|
|
27
27
|
import "./chunk-A2AOUBJS.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-Z6N5N4MN.js";
|
|
29
29
|
import "./chunk-VAX3UZOY.js";
|
|
30
30
|
import "./chunk-LL6ED5IB.js";
|
|
31
31
|
import "./chunk-4BW2SG2N.js";
|
|
@@ -40,4 +40,4 @@ export {
|
|
|
40
40
|
standaloneDefKind,
|
|
41
41
|
workspace
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=xano-
|
|
43
|
+
//# sourceMappingURL=xano-2A2GT7EH.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
resetXanoSdkImportDetection,
|
|
14
14
|
withDefaultBranchPointer,
|
|
15
15
|
xanosdkImport
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-B7JRCM2S.js";
|
|
17
17
|
import "./chunk-3DRXWLJ5.js";
|
|
18
18
|
import "./chunk-X4DVXBFY.js";
|
|
19
19
|
import "./chunk-VJTTTIIB.js";
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
withDefaultBranchPointer,
|
|
54
54
|
xanosdkImport
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=xanosdk-import-
|
|
56
|
+
//# sourceMappingURL=xanosdk-import-767BQ2HP.js.map
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
enterProjectRoot,
|
|
4
4
|
isProjectDir,
|
|
5
5
|
projectDirFrom
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RNKP5TA2.js";
|
|
7
7
|
import "./chunk-EUUUMY7J.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-D5NAWB4P.js";
|
|
9
|
+
import "./chunk-7YSZSEZL.js";
|
|
10
|
+
import "./chunk-FGNDJBT4.js";
|
|
11
11
|
import "./chunk-B3NH5UBI.js";
|
|
12
12
|
import "./chunk-ZFDZKNGG.js";
|
|
13
13
|
import "./chunk-FWD7AL6N.js";
|
|
@@ -23,7 +23,7 @@ import "./chunk-LLNZGEFK.js";
|
|
|
23
23
|
import "./chunk-HU7F56VF.js";
|
|
24
24
|
import "./chunk-MF4W6FHU.js";
|
|
25
25
|
import "./chunk-X2NL4KUO.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-IZI3SYXH.js";
|
|
27
27
|
import "./chunk-LJM5CIY4.js";
|
|
28
28
|
import "./chunk-C6KBZH7M.js";
|
|
29
29
|
import "./chunk-YEH5OIPF.js";
|
|
@@ -39,4 +39,4 @@ export {
|
|
|
39
39
|
isProjectDir,
|
|
40
40
|
projectDirFrom
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=xanosdk-project-
|
|
42
|
+
//# sourceMappingURL=xanosdk-project-PETOFVUQ.js.map
|
|
@@ -685,10 +685,16 @@ type CaughtField = "code" | "message" | "name" | "result";
|
|
|
685
685
|
*
|
|
686
686
|
* Only valid inside the catch arm; the engine binds these for that scope alone
|
|
687
687
|
* and they read empty anywhere else. The four fields are all the engine sets:
|
|
688
|
-
* - `name` —
|
|
689
|
-
*
|
|
690
|
-
* - `
|
|
691
|
-
*
|
|
688
|
+
* - `name` — `s.throw`'s `name` (empty without one), else a label
|
|
689
|
+
* (`"Exception"`, `"Access Denied"`)
|
|
690
|
+
* - `message` — the error text: a precondition's `error`, the engine's, or an
|
|
691
|
+
* LLM provider's (`"Throw Error Statement"` for a throw)
|
|
692
|
+
* - `code` — the error type (`ERROR_FATAL`, a precondition's `error_type`,
|
|
693
|
+
* `ERROR_CODE_THROWN_ERROR`)
|
|
694
|
+
* - `result` — the attached payload: `s.throw`'s value, or for an
|
|
695
|
+
* `s.ai.agent.run` provider failure `{ name: "AI_APICallError", statusCode,
|
|
696
|
+
* isRetryable, data }`. The path takes only these four names; read deeper
|
|
697
|
+
* with `withFilters(caught("result"), fl.get("statusCode"))`.
|
|
692
698
|
*
|
|
693
699
|
* e.g. `s.try_catch({ try: [...], catch: [s.debug_log(caught("message"))] })`.
|
|
694
700
|
* Bare `caught()` is the whole error record.
|
package/guides/codes.md
CHANGED
|
@@ -229,6 +229,7 @@ Printed as `! …` on stderr, and as `{ code, message }` in a `--json` document'
|
|
|
229
229
|
| `release.seed-rows-not-decoded` | … carries seed rows for …, and a decoded tree carries no rows — they are not in …/. |
|
|
230
230
|
| `release.transfer-cancelled` | Transfer cancelled — nothing was imported. |
|
|
231
231
|
| `routes.cli-skew` | This CLI is another version than the project's installed SDK, so it left the route table for the installed CLI to render. |
|
|
232
|
+
| `routes.mcp-unresolved` | …: leaving out … — … — whose canonical URL token resolves nowhere. |
|
|
232
233
|
| `routes.module-failed` | A toolchain module could not generate its section of `routes.gen.ts`; the rest was refreshed and its previous block, if any, was kept. |
|
|
233
234
|
| `routes.not-written` | The route table (`routes.gen.ts`) was not written this run; the line says why and what writes it. |
|
|
234
235
|
| `routes.realtime-unresolved` | …: leaving out … — … — whose canonical URL token resolves nowhere, along with their channels. |
|
package/llms/client.md
CHANGED
|
@@ -14,7 +14,8 @@ Importing a def into a browser bundle or a Node script — for `getPath()`, `get
|
|
|
14
14
|
Fix: `xanosdk routes <entry> --emit xano/routes.gen.ts` (`paths` is an accepted alias) — verbs, paths, and sockets as
|
|
15
15
|
plain data importing NOTHING, still compile-checked: `routePath("GET blog/{slug}", { slug })`
|
|
16
16
|
`channelPath("rooms/{room_id}", { room_id })`, `socketUrl("chat", baseUrl)` (tenant base
|
|
17
|
-
URLs lifted to `wss://h/ws/<tenant>:<canonical>`)
|
|
17
|
+
URLs lifted to `wss://h/ws/<tenant>:<canonical>`), `mcpUrl("notes_mcp", baseUrl)` (an MCP
|
|
18
|
+
server's address to show a user or hand a client; browser JS cannot call it). A rename is a type error, not a 404.
|
|
18
19
|
- **Request types without the def.** `routes.gen.ts` also exports types-only `RouteInputs`,
|
|
19
20
|
`ChannelInputs`, `MessageInputs` (and `MessageName`), keyed like `ROUTES`, `CHANNELS`, and
|
|
20
21
|
`"<channel key> <message name>"`: `type NewListing = RouteInputs["POST listings"]`. A
|
package/llms/errors.md
CHANGED
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
- A lambda returns error TEXT with HTTP 200 (`Could not resolve "node:crypto"`, an undefined-binding message) — the body threw; use the preloaded globals, the surface's bindings, and `capture`. `llms/lambda.md`.
|
|
24
24
|
- `Unable to locate request.` (404) on an endpoint that deployed — a lowercase verb, a `.` in the name, or a CORS `mode` typo that dropped the whole API group. `llms/kinds-core.md`.
|
|
25
25
|
- A browser call fails on a missing `access-control-allow-origin` while deploy looks fine — CORS `mode: "custom"` with `"*"` or an unmatched origin. `llms/kinds-core.md`.
|
|
26
|
+
- 403 `Forbidden: Origin not allowed` from an MCP server URL — the request came from a browser; MCP endpoints refuse every `Origin`, so call them server-side. `llms/kinds-agent-mcp.md`.
|
|
27
|
+
- `ERROR_FATAL` `The free model is not available in this process.` — an `xano-free` agent run on the Xano Engine on this machine; it runs only on Xano's cloud. `llms/kinds-agent-mcp.md`.
|
|
26
28
|
- A websocket is closed right after the handshake — a refused `connect` gate: an empty/falsy return, a crash, or a gating trigger with no `response`. `llms/triggers.md`.
|
|
27
29
|
- `to_throw failed - response is ok` around an auth-refused call — `ERROR_CODE_ACCESS_DENIED` carries no message; the auth gate is not reachable from a workflow test. `llms/tests.md`.
|
|
28
30
|
- Output reads `Hi [object Object]` — a tagged value inside a JS template literal; compose at runtime with `withFilters` + `fl.concat`. `llms.txt`.
|
package/llms/filters.md
CHANGED
|
@@ -182,6 +182,7 @@ stored value inside a `db.edit` `row` (it is `null`; `null + 1` aborts): `db.get
|
|
|
182
182
|
- `fl.url_hasarg(key: text): text`
|
|
183
183
|
- `fl.yaml_encode(options?: bool, inline?: int, indent?: int): text`
|
|
184
184
|
|
|
185
|
-
Zero-argument filters — call as `fl.<name>()`; an argument is a compile error:
|
|
185
|
+
Zero-argument filters, by operand type — call as `fl.<name>()`; an argument is a compile error. array: array_entries, array_keys, array_lower, array_pop, array_shift, array_shuffle, array_values, count, first, flatten, last, reverse, rsort, safe_array; comparison: bitwise_not, empty, even, is_array, is_bool, is_decimal, is_int, is_object, is_text, is_uuid, not, odd; geo: to_geo_linestring, to_geo_multilinestring, to_geo_multipoint, to_geo_multipolygon, to_geo_point, to_geo_polygon; math: abs, acos, acosh, asin, asinh, atan, atanh, avg, ceil, cos, deg2rad, exp, floor, ln, log10, product, rad2deg, sin, sqrt, sum, tan; misc: null; other: sort; security: uid, uuid4; text: addslashes, capitalize, escape, from_utf8, list_encodings, lower, querystring_parse, sql_alias, sql_esc, strip_accents, strlen, text_escape, text_unescape, to_utf8, upper, url_parse; timestamp: ms_to_secs, secs_to_ms; transform: base64_decode, base64_decode_urlsafe, base64_encode, base64_encode_urlsafe, bin2hex, bindec, create_object_from_entries, decbin, dechex, decoct, hex2bin, hexdec, json_decode, json_encode, octdec, to_bool, to_decimal, to_expr, to_int, to_text, url_decode, url_decode_rfc3986, url_encode, url_encode_rfc3986, xml_decode, yaml_decode.
|
|
186
|
+
`fl.reverse()` reverses a list only: on a text value it answers the text UNCHANGED, with no error.
|
|
186
187
|
|
|
187
188
|
Variadic filters — they take arguments, but no declared list, so the count is not checked: sprintf.
|
package/llms/kinds-agent-mcp.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- An MCP server serves THREE primitives, and each reaches the client differently: a `tool()` is an action the MODEL calls (it may write); a `resource()` is read-only context the client APPLICATION lists and attaches by `uri` (reference docs, a schema, one record through a `{variable}` template); a `prompt()` is a message template with arguments the USER picks by name. Context a session opens with is a `resource()`; a workflow a user starts by name is a `prompt()`; data the model must fetch on its own mid-task stays a `tool()`, since a client shows the model only the resources attached to the conversation. Register each kind (`registerTools`/`registerPrompts`/`registerResources`) and list it on the server.
|
|
6
6
|
- `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, prompts?, resources?, oauth?, llm?, output? })` — an MCP toolset. `llm?`/`output?` are the same blocks `agent()` takes and are usually absent: an MCP server and an agent are ONE stored object distinguished by `type`. Returns a handle with `getPath()`/`getUrl(baseUrl)` for the Streamable-HTTP endpoint — `getUrl` is NOT idempotent, a `baseUrl` already carrying an `/x2/mcp/<…>/stream` path THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral. A TENANT rides AFTER the prefix (`/x2/mcp/tenant/<tenant>/<canonical>/<token>/stream`), not as a base-URL segment: `getUrl` LIFTS a `/tenant/<name>` out of the base and re-places it there, so `getUrl(window.XANO_HOST)` is correct as-is; concatenating them by hand builds an unregistered route that 404s. Pass `{ tenant }` when the base URL cannot name it (a tenant on its own domain).
|
|
7
|
+
- ⚠ Refuses any request carrying a browser `Origin`, preflight too: 403, JSON-RPC `-32000` `Forbidden: Origin not allowed`. One with no `Origin` (curl, a server, an MCP client) is served; the bundle cannot admit an origin, so call it server-side, never from browser JS.
|
|
7
8
|
- `tools?`: a `ToolsetToolEntry[]`. Pass the `tool()` HANDLES directly (`tools: [saveNote]`); use the `{ tool, enabled?, auth?, type?, resourceUri?, toolMeta? }` wrapper when an entry needs more. `type: "resource"` (+ a required `resourceUri`) is the LEGACY way to publish a tool as an MCP resource — author a `resource()` and list it in `resources` instead; `toolMeta` is extra metadata on a tool entry. The two payload fields are per-type and supplying the other one is refused, because the engine stores it against neither. `auth` names an auth **table** (a `table({ auth: true })` handle or its name) — per-tool, and the only gate there is. ⚠ It is also what gives the tool a CALLER, on an `agent()` exactly as on an MCP server. `auth()` inside a tool whose entry names no table does NOT return null: the call answers a normal result carrying `{"code":"ERROR_FATAL","message":""}`, so the model reads a successful tool result and reports success while nothing is written. A caller token does not rescue it — the ENTRY supplies identity. Spell it `{ tool: saveNote, auth: users }`; `export()` warns. An entry naming no tool THROWS at export; a deliberate raw `id: 0` warns and carries through.
|
|
8
9
|
- `prompts?` / `resources?`: `prompt()` / `resource()` HANDLES (or names), or a `{ prompt, enabled?, auth? }` / `{ resource, enabled?, auth? }` wrapper. `auth` names the auth table and is what gives the stack a caller: a prompt/resource reading `auth()` behind an entry with none answers every `prompts/get` / `resources/read` with `-32603 "Access Denied"` (`export()` warns `toolset.primitive-reads-auth-ungated`). Listing one target twice THROWS; two resources with one `uri` on one server fail `export()` (`mcp.resource-uri-duplicate`). MCP-server only — `agent()` takes tools only.
|
|
9
10
|
- `history?` is the server tier for its tools, prompts AND resources alike; an object's own `history` wins. The workspace tier (`workspaceConfig({ history })`) has `prompt` and `resource` keys, both default on.
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
- `s.mcp.oauth.revoke({ mcp_server, user_id? | grant_id? | all?, as? })` — end hosted sign-ins on a server: EXACTLY ONE of `user_id`, `grant_id`, `all: c.bool(true)`, else `export()` fails (`mcp.oauth-revoke-target`). Binds `{ revoked }`.
|
|
25
26
|
- `agent({ name, guid?, description?, docs?, enabled?, canonical?, tags?, history?, llm, tools?, output? })` — an LLM orchestrator. No top-level `instructions`/`prompt`/`spec` — the prompt lives under `llm`. Invoke from a stack with `s.ai.agent.run({ agent, args })`.
|
|
26
27
|
- `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.
|
|
28
|
+
- `xano-free` runs only on Xano's cloud: on the Xano Engine on this machine a run fails `ERROR_FATAL` `The free model is not available in this process.` — use a keyed provider there.
|
|
27
29
|
- `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?`).
|
|
28
30
|
- `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.
|
|
29
31
|
- **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`).
|
package/llms/values.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
- `inp(name: string) => Value` — Reference a function/endpoint input → tag "input". Resolves ONLY against the `input` block of the def it sits in — a value produced earlier in the stack is `ref("var.field")`, not `inp("field")`. A name that is not declared here deploys clean and fails at runtime with ERROR_FATAL "Unable to locate input: <name>" on every branch that reads it; `export()` warns, and `--strict` fails the build. Sending the name in the request does NOT rescue it — an undeclared input is never bound, so the call fails identically with the value present. A dotted path drills INTO a declared input (`inp("action.amount")` needs a declared `action`).
|
|
18
18
|
- `col(name: string) => Value` — Reference a table column → tag "col".
|
|
19
19
|
- `auth(path?: string) => Value` — Reference the authenticated identity (auth("id") → $auth.id) → tag "auth".
|
|
20
|
-
- `caught(path?: "code" | "message" | "name" | "result") => Value` — Read the caught error inside an s.try_catch CATCH arm → tag "trycatch". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds
|
|
20
|
+
- `caught(path?: "code" | "message" | "name" | "result") => Value` — Read the caught error inside an s.try_catch CATCH arm → tag "trycatch". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds; bare caught() is the whole error record. `code` is the error type: `ERROR_FATAL` for an engine error, a precondition's `error_type` (`ERROR_CODE_ACCESS_DENIED`, …), `ERROR_CODE_THROWN_ERROR` for `s.throw`. `message` is the error text (a precondition's `error`, the engine's, an LLM provider's) EXCEPT for `s.throw`, where it is the fixed "Throw Error Statement" and your value is in `result`. `name` is `s.throw`'s `name` (empty without one), else a label (`Exception`, `Access Denied`). ⚠ An `s.ai.agent.run` provider failure binds `result: { name: "AI_APICallError", statusCode, isRetryable, data }`; branch a fallback on `withFilters(caught("result"), fl.get("statusCode"))` (401: the key was refused). The path takes only the four names; reach deeper with `fl.get`.
|
|
21
21
|
- `toolset(path: "token" | "params" | `params.${string}`) => Value` — Read a toolset-scoped binding inside a tool → tag "toolset". The engine binds two: token (the calling URL's token, null when absent) and params (its parameters, as an object); a dotted params.<key> reads one parameter out of that object. Bound only while a tool runs under its toolset — anywhere else it reads empty.
|
|
22
22
|
- `env(name: string) => Value` — Read a WORKSPACE environment variable (set via workspaceConfig({ env }) or the dashboard) → `$env.NAME`. Compiles to tag "setting" with the plain name. env("remote_ip") reads a user var named remote_ip, not the caller IP — use sys.remoteIp() for that. A name that does not exist resolves to NULL rather than erroring, so a typo deploys clean and fails downstream of the value: prefer typedEnv(config), which turns the names that config declares into properties (E.STRIPE_KEY), and export() warns stack.env-undeclared on any env() or bare setting() outside the declared set once a config declares env at all.
|
|
23
23
|
- `setting(name: string) => Value` — Reference a workspace setting → tag "setting". Built-in system vars are $-prefixed settings, e.g. setting("$remote_ip"); prefer the typed sys.* accessors.
|
package/llms-full.txt
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
# xanosdk v1.0.
|
|
1
|
+
# xanosdk v1.0.11
|
|
2
2
|
|
|
3
3
|
> TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
|
|
4
4
|
|
|
5
|
-
Xano is
|
|
6
|
-
database, HTTP
|
|
7
|
-
agents
|
|
8
|
-
TypeScript — typed def objects registered on a
|
|
9
|
-
|
|
5
|
+
Xano is one platform to build, run and govern AI-built software: one WORKSPACE
|
|
6
|
+
serves a managed PostgreSQL database, HTTP APIs, background tasks, realtime
|
|
7
|
+
websocket channels, AI agents, MCP servers, file storage and redis. This SDK
|
|
8
|
+
authors it in TypeScript — typed def objects registered on a
|
|
9
|
+
`workspace(name)` — compiled to one importable bundle by `xanosdk export
|
|
10
|
+
./xano/index.ts`, shipped live by `xanosdk deploy`.
|
|
10
11
|
|
|
11
12
|
Def modules execute at BUILD time only: `s.*` factories return data, and the engine
|
|
12
13
|
runs the compiled stack per request — statements in order, a statement's `as:`
|
|
@@ -658,7 +659,8 @@ Importing a def into a browser bundle or a Node script — for `getPath()`, `get
|
|
|
658
659
|
Fix: `xanosdk routes <entry> --emit xano/routes.gen.ts` (`paths` is an accepted alias) — verbs, paths, and sockets as
|
|
659
660
|
plain data importing NOTHING, still compile-checked: `routePath("GET blog/{slug}", { slug })`
|
|
660
661
|
`channelPath("rooms/{room_id}", { room_id })`, `socketUrl("chat", baseUrl)` (tenant base
|
|
661
|
-
URLs lifted to `wss://h/ws/<tenant>:<canonical>`)
|
|
662
|
+
URLs lifted to `wss://h/ws/<tenant>:<canonical>`), `mcpUrl("notes_mcp", baseUrl)` (an MCP
|
|
663
|
+
server's address to show a user or hand a client; browser JS cannot call it). A rename is a type error, not a 404.
|
|
662
664
|
- **Request types without the def.** `routes.gen.ts` also exports types-only `RouteInputs`,
|
|
663
665
|
`ChannelInputs`, `MessageInputs` (and `MessageName`), keyed like `ROUTES`, `CHANNELS`, and
|
|
664
666
|
`"<channel key> <message name>"`: `type NewListing = RouteInputs["POST listings"]`. A
|
|
@@ -769,6 +771,8 @@ core sections still refresh; under `routes --emit --strict` it is fatal. `@xano-
|
|
|
769
771
|
- A lambda returns error TEXT with HTTP 200 (`Could not resolve "node:crypto"`, an undefined-binding message) — the body threw; use the preloaded globals, the surface's bindings, and `capture`. `llms/lambda.md`.
|
|
770
772
|
- `Unable to locate request.` (404) on an endpoint that deployed — a lowercase verb, a `.` in the name, or a CORS `mode` typo that dropped the whole API group. `llms/kinds-core.md`.
|
|
771
773
|
- A browser call fails on a missing `access-control-allow-origin` while deploy looks fine — CORS `mode: "custom"` with `"*"` or an unmatched origin. `llms/kinds-core.md`.
|
|
774
|
+
- 403 `Forbidden: Origin not allowed` from an MCP server URL — the request came from a browser; MCP endpoints refuse every `Origin`, so call them server-side. `llms/kinds-agent-mcp.md`.
|
|
775
|
+
- `ERROR_FATAL` `The free model is not available in this process.` — an `xano-free` agent run on the Xano Engine on this machine; it runs only on Xano's cloud. `llms/kinds-agent-mcp.md`.
|
|
772
776
|
- A websocket is closed right after the handshake — a refused `connect` gate: an empty/falsy return, a crash, or a gating trigger with no `response`. `llms/triggers.md`.
|
|
773
777
|
- `to_throw failed - response is ok` around an auth-refused call — `ERROR_CODE_ACCESS_DENIED` carries no message; the auth gate is not reachable from a workflow test. `llms/tests.md`.
|
|
774
778
|
- Output reads `Hi [object Object]` — a tagged value inside a JS template literal; compose at runtime with `withFilters` + `fl.concat`. `llms.txt`.
|
|
@@ -867,6 +871,7 @@ The run is isolated in ways that make a correct test fail for reasons the failur
|
|
|
867
871
|
|
|
868
872
|
- An MCP server serves THREE primitives, and each reaches the client differently: a `tool()` is an action the MODEL calls (it may write); a `resource()` is read-only context the client APPLICATION lists and attaches by `uri` (reference docs, a schema, one record through a `{variable}` template); a `prompt()` is a message template with arguments the USER picks by name. Context a session opens with is a `resource()`; a workflow a user starts by name is a `prompt()`; data the model must fetch on its own mid-task stays a `tool()`, since a client shows the model only the resources attached to the conversation. Register each kind (`registerTools`/`registerPrompts`/`registerResources`) and list it on the server.
|
|
869
873
|
- `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, prompts?, resources?, oauth?, llm?, output? })` — an MCP toolset. `llm?`/`output?` are the same blocks `agent()` takes and are usually absent: an MCP server and an agent are ONE stored object distinguished by `type`. Returns a handle with `getPath()`/`getUrl(baseUrl)` for the Streamable-HTTP endpoint — `getUrl` is NOT idempotent, a `baseUrl` already carrying an `/x2/mcp/<…>/stream` path THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral. A TENANT rides AFTER the prefix (`/x2/mcp/tenant/<tenant>/<canonical>/<token>/stream`), not as a base-URL segment: `getUrl` LIFTS a `/tenant/<name>` out of the base and re-places it there, so `getUrl(window.XANO_HOST)` is correct as-is; concatenating them by hand builds an unregistered route that 404s. Pass `{ tenant }` when the base URL cannot name it (a tenant on its own domain).
|
|
874
|
+
- ⚠ Refuses any request carrying a browser `Origin`, preflight too: 403, JSON-RPC `-32000` `Forbidden: Origin not allowed`. One with no `Origin` (curl, a server, an MCP client) is served; the bundle cannot admit an origin, so call it server-side, never from browser JS.
|
|
870
875
|
- `tools?`: a `ToolsetToolEntry[]`. Pass the `tool()` HANDLES directly (`tools: [saveNote]`); use the `{ tool, enabled?, auth?, type?, resourceUri?, toolMeta? }` wrapper when an entry needs more. `type: "resource"` (+ a required `resourceUri`) is the LEGACY way to publish a tool as an MCP resource — author a `resource()` and list it in `resources` instead; `toolMeta` is extra metadata on a tool entry. The two payload fields are per-type and supplying the other one is refused, because the engine stores it against neither. `auth` names an auth **table** (a `table({ auth: true })` handle or its name) — per-tool, and the only gate there is. ⚠ It is also what gives the tool a CALLER, on an `agent()` exactly as on an MCP server. `auth()` inside a tool whose entry names no table does NOT return null: the call answers a normal result carrying `{"code":"ERROR_FATAL","message":""}`, so the model reads a successful tool result and reports success while nothing is written. A caller token does not rescue it — the ENTRY supplies identity. Spell it `{ tool: saveNote, auth: users }`; `export()` warns. An entry naming no tool THROWS at export; a deliberate raw `id: 0` warns and carries through.
|
|
871
876
|
- `prompts?` / `resources?`: `prompt()` / `resource()` HANDLES (or names), or a `{ prompt, enabled?, auth? }` / `{ resource, enabled?, auth? }` wrapper. `auth` names the auth table and is what gives the stack a caller: a prompt/resource reading `auth()` behind an entry with none answers every `prompts/get` / `resources/read` with `-32603 "Access Denied"` (`export()` warns `toolset.primitive-reads-auth-ungated`). Listing one target twice THROWS; two resources with one `uri` on one server fail `export()` (`mcp.resource-uri-duplicate`). MCP-server only — `agent()` takes tools only.
|
|
872
877
|
- `history?` is the server tier for its tools, prompts AND resources alike; an object's own `history` wins. The workspace tier (`workspaceConfig({ history })`) has `prompt` and `resource` keys, both default on.
|
|
@@ -887,6 +892,7 @@ The run is isolated in ways that make a correct test fail for reasons the failur
|
|
|
887
892
|
- `s.mcp.oauth.revoke({ mcp_server, user_id? | grant_id? | all?, as? })` — end hosted sign-ins on a server: EXACTLY ONE of `user_id`, `grant_id`, `all: c.bool(true)`, else `export()` fails (`mcp.oauth-revoke-target`). Binds `{ revoked }`.
|
|
888
893
|
- `agent({ name, guid?, description?, docs?, enabled?, canonical?, tags?, history?, llm, tools?, output? })` — an LLM orchestrator. No top-level `instructions`/`prompt`/`spec` — the prompt lives under `llm`. Invoke from a stack with `s.ai.agent.run({ agent, args })`.
|
|
889
894
|
- `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.
|
|
895
|
+
- `xano-free` runs only on Xano's cloud: on the Xano Engine on this machine a run fails `ERROR_FATAL` `The free model is not available in this process.` — use a keyed provider there.
|
|
890
896
|
- `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?`).
|
|
891
897
|
- `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.
|
|
892
898
|
- **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`).
|
|
@@ -1249,7 +1255,7 @@ Microservices (the `microservice()` def and the statement that calls it):
|
|
|
1249
1255
|
- `inp(name: string) => Value` — Reference a function/endpoint input → tag "input". Resolves ONLY against the `input` block of the def it sits in — a value produced earlier in the stack is `ref("var.field")`, not `inp("field")`. A name that is not declared here deploys clean and fails at runtime with ERROR_FATAL "Unable to locate input: <name>" on every branch that reads it; `export()` warns, and `--strict` fails the build. Sending the name in the request does NOT rescue it — an undeclared input is never bound, so the call fails identically with the value present. A dotted path drills INTO a declared input (`inp("action.amount")` needs a declared `action`).
|
|
1250
1256
|
- `col(name: string) => Value` — Reference a table column → tag "col".
|
|
1251
1257
|
- `auth(path?: string) => Value` — Reference the authenticated identity (auth("id") → $auth.id) → tag "auth".
|
|
1252
|
-
- `caught(path?: "code" | "message" | "name" | "result") => Value` — Read the caught error inside an s.try_catch CATCH arm → tag "trycatch". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds
|
|
1258
|
+
- `caught(path?: "code" | "message" | "name" | "result") => Value` — Read the caught error inside an s.try_catch CATCH arm → tag "trycatch". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds; bare caught() is the whole error record. `code` is the error type: `ERROR_FATAL` for an engine error, a precondition's `error_type` (`ERROR_CODE_ACCESS_DENIED`, …), `ERROR_CODE_THROWN_ERROR` for `s.throw`. `message` is the error text (a precondition's `error`, the engine's, an LLM provider's) EXCEPT for `s.throw`, where it is the fixed "Throw Error Statement" and your value is in `result`. `name` is `s.throw`'s `name` (empty without one), else a label (`Exception`, `Access Denied`). ⚠ An `s.ai.agent.run` provider failure binds `result: { name: "AI_APICallError", statusCode, isRetryable, data }`; branch a fallback on `withFilters(caught("result"), fl.get("statusCode"))` (401: the key was refused). The path takes only the four names; reach deeper with `fl.get`.
|
|
1253
1259
|
- `toolset(path: "token" | "params" | `params.${string}`) => Value` — Read a toolset-scoped binding inside a tool → tag "toolset". The engine binds two: token (the calling URL's token, null when absent) and params (its parameters, as an object); a dotted params.<key> reads one parameter out of that object. Bound only while a tool runs under its toolset — anywhere else it reads empty.
|
|
1254
1260
|
- `env(name: string) => Value` — Read a WORKSPACE environment variable (set via workspaceConfig({ env }) or the dashboard) → `$env.NAME`. Compiles to tag "setting" with the plain name. env("remote_ip") reads a user var named remote_ip, not the caller IP — use sys.remoteIp() for that. A name that does not exist resolves to NULL rather than erroring, so a typo deploys clean and fails downstream of the value: prefer typedEnv(config), which turns the names that config declares into properties (E.STRIPE_KEY), and export() warns stack.env-undeclared on any env() or bare setting() outside the declared set once a config declares env at all.
|
|
1255
1261
|
- `setting(name: string) => Value` — Reference a workspace setting → tag "setting". Built-in system vars are $-prefixed settings, e.g. setting("$remote_ip"); prefer the typed sys.* accessors.
|
|
@@ -1621,7 +1627,8 @@ stored value inside a `db.edit` `row` (it is `null`; `null + 1` aborts): `db.get
|
|
|
1621
1627
|
- `fl.url_hasarg(key: text): text`
|
|
1622
1628
|
- `fl.yaml_encode(options?: bool, inline?: int, indent?: int): text`
|
|
1623
1629
|
|
|
1624
|
-
Zero-argument filters — call as `fl.<name>()`; an argument is a compile error:
|
|
1630
|
+
Zero-argument filters, by operand type — call as `fl.<name>()`; an argument is a compile error. array: array_entries, array_keys, array_lower, array_pop, array_shift, array_shuffle, array_values, count, first, flatten, last, reverse, rsort, safe_array; comparison: bitwise_not, empty, even, is_array, is_bool, is_decimal, is_int, is_object, is_text, is_uuid, not, odd; geo: to_geo_linestring, to_geo_multilinestring, to_geo_multipoint, to_geo_multipolygon, to_geo_point, to_geo_polygon; math: abs, acos, acosh, asin, asinh, atan, atanh, avg, ceil, cos, deg2rad, exp, floor, ln, log10, product, rad2deg, sin, sqrt, sum, tan; misc: null; other: sort; security: uid, uuid4; text: addslashes, capitalize, escape, from_utf8, list_encodings, lower, querystring_parse, sql_alias, sql_esc, strip_accents, strlen, text_escape, text_unescape, to_utf8, upper, url_parse; timestamp: ms_to_secs, secs_to_ms; transform: base64_decode, base64_decode_urlsafe, base64_encode, base64_encode_urlsafe, bin2hex, bindec, create_object_from_entries, decbin, dechex, decoct, hex2bin, hexdec, json_decode, json_encode, octdec, to_bool, to_decimal, to_expr, to_int, to_text, url_decode, url_decode_rfc3986, url_encode, url_encode_rfc3986, xml_decode, yaml_decode.
|
|
1631
|
+
`fl.reverse()` reverses a list only: on a text value it answers the text UNCHANGED, with no error.
|
|
1625
1632
|
|
|
1626
1633
|
Variadic filters — they take arguments, but no declared list, so the count is not checked: sprintf.
|
|
1627
1634
|
|
package/llms.txt
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
# xanosdk v1.0.
|
|
1
|
+
# xanosdk v1.0.11
|
|
2
2
|
|
|
3
3
|
> TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
|
|
4
4
|
|
|
5
|
-
Xano is
|
|
6
|
-
database, HTTP
|
|
7
|
-
agents
|
|
8
|
-
TypeScript — typed def objects registered on a
|
|
9
|
-
|
|
5
|
+
Xano is one platform to build, run and govern AI-built software: one WORKSPACE
|
|
6
|
+
serves a managed PostgreSQL database, HTTP APIs, background tasks, realtime
|
|
7
|
+
websocket channels, AI agents, MCP servers, file storage and redis. This SDK
|
|
8
|
+
authors it in TypeScript — typed def objects registered on a
|
|
9
|
+
`workspace(name)` — compiled to one importable bundle by `xanosdk export
|
|
10
|
+
./xano/index.ts`, shipped live by `xanosdk deploy`.
|
|
10
11
|
|
|
11
12
|
Def modules execute at BUILD time only: `s.*` factories return data, and the engine
|
|
12
13
|
runs the compiled stack per request — statements in order, a statement's `as:`
|
package/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xanosdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
|
|
5
5
|
"coverage": {
|
|
6
6
|
"objectKinds": {
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
{
|
|
129
129
|
"name": "caught",
|
|
130
130
|
"signature": "(path?: \"code\" | \"message\" | \"name\" | \"result\") => Value",
|
|
131
|
-
"description": "Read the caught error inside an s.try_catch CATCH arm → tag \"trycatch\". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds
|
|
131
|
+
"description": "Read the caught error inside an s.try_catch CATCH arm → tag \"trycatch\". Valid ONLY there — it reads empty in the try/finally arms and outside the statement. Those four fields are all the engine binds; bare caught() is the whole error record. `code` is the error type: `ERROR_FATAL` for an engine error, a precondition's `error_type` (`ERROR_CODE_ACCESS_DENIED`, …), `ERROR_CODE_THROWN_ERROR` for `s.throw`. `message` is the error text (a precondition's `error`, the engine's, an LLM provider's) EXCEPT for `s.throw`, where it is the fixed \"Throw Error Statement\" and your value is in `result`. `name` is `s.throw`'s `name` (empty without one), else a label (`Exception`, `Access Denied`). ⚠ An `s.ai.agent.run` provider failure binds `result: { name: \"AI_APICallError\", statusCode, isRetryable, data }`; branch a fallback on `withFilters(caught(\"result\"), fl.get(\"statusCode\"))` (401: the key was refused). The path takes only the four names; reach deeper with `fl.get`."
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
"name": "toolset",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xano/sdk",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.11",
|
|
4
|
+
"description": "The official TypeScript SDK for Xano, one platform to build, run and govern AI-built software. Your coding agent writes the backend in TypeScript, you run it on the Xano Engine on your machine, then deploy it to Xano.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xanosdk",
|
|
7
7
|
"xano",
|
|
@@ -14,8 +14,8 @@ description: >-
|
|
|
14
14
|
FastAPI) unless the user asks for Xano.
|
|
15
15
|
license: MIT
|
|
16
16
|
metadata:
|
|
17
|
-
xanosdk-version: "1.0.
|
|
18
|
-
xanosdk-digest: "sha256:
|
|
17
|
+
xanosdk-version: "1.0.11"
|
|
18
|
+
xanosdk-digest: "sha256:c5d35da65c9b45a105277ba0dec5d798f6fcb6239a99f50db8f6327d1c7abca6"
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# Xano backend
|