@xano/sdk 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +13 -12
- package/dist/.build-fingerprint +1 -1
- package/dist/{agent-file-refresh-CKLYJRIS.js → agent-file-refresh-DAFGNMQX.js} +9 -9
- package/dist/{agent-skill-command-QKQG5NIZ.js → agent-skill-command-6M46ZGOL.js} +34 -34
- package/dist/{answer-shape-UMQRXMCX.js → answer-shape-CBUQRSXI.js} +4 -4
- package/dist/{backend-dir-V2FELHYM.js → backend-dir-J2J7JNS6.js} +9 -9
- package/dist/{backend-slot-TTRNOQF5.js → backend-slot-X5AUX2TT.js} +3 -3
- package/dist/bin.js +35 -35
- package/dist/{branch-Q7CDJRU6.js → branch-YS2K3VOB.js} +8 -8
- package/dist/{branch-commands-ZY2W3ICB.js → branch-commands-BUKVE637.js} +20 -20
- package/dist/{chunk-4JKXGPXB.js → chunk-2BHYGUTI.js} +2 -2
- package/dist/{chunk-VHV25AAO.js → chunk-373AVIL2.js} +7 -7
- package/dist/{chunk-YP76ZCQ5.js → chunk-3RZ4UJWV.js} +3 -3
- package/dist/{chunk-TG65NWUR.js → chunk-3ZVSOZZC.js} +2 -2
- package/dist/{chunk-76UAME77.js → chunk-4CS4DKQC.js} +2 -2
- package/dist/{chunk-KYTQW3YT.js → chunk-5ONWBQ2C.js} +7 -7
- package/dist/{chunk-NPW6DSZB.js → chunk-5SMUND4J.js} +6 -6
- package/dist/{chunk-B7JRCM2S.js → chunk-5XDKKE5Y.js} +4 -4
- package/dist/{chunk-WM7Y3MDE.js → chunk-6HTXQAMG.js} +14 -14
- package/dist/{chunk-NHXBKFHG.js → chunk-6OOZJQJK.js} +67 -67
- package/dist/{chunk-VJTTTIIB.js → chunk-6QJORUHC.js} +2 -2
- package/dist/{chunk-YE7MHW45.js → chunk-7NNLRNXE.js} +4 -4
- package/dist/{chunk-6S263KTM.js → chunk-A3CT26GX.js} +2 -2
- package/dist/{chunk-ULUUOUQX.js → chunk-AUYXBKGR.js} +2 -2
- package/dist/{chunk-4WBZ6T76.js → chunk-BXVNRUDB.js} +3 -3
- package/dist/{chunk-6PTITS3M.js → chunk-C4TZP5PQ.js} +5 -5
- package/dist/{chunk-3Q43PZGI.js → chunk-CGZSF756.js} +24 -24
- package/dist/{chunk-HFOGQIII.js → chunk-CTUIMNEM.js} +2 -2
- package/dist/{chunk-C6KBZH7M.js → chunk-D4VKPOD4.js} +2 -2
- package/dist/{chunk-HVPSDQJB.js → chunk-DB7P2SSK.js} +3 -3
- package/dist/{chunk-GN5SQMIQ.js → chunk-DFCYAEBE.js} +2 -2
- package/dist/{chunk-TR7EOUQE.js → chunk-DILYWJVP.js} +2 -2
- package/dist/{chunk-HXRXQAZE.js → chunk-DPSR5GRE.js} +43 -43
- package/dist/{chunk-ZO3QWFNV.js → chunk-DYGRTWAI.js} +3 -3
- package/dist/{chunk-VD7YTLWL.js → chunk-DZUNF7IH.js} +2 -2
- package/dist/{chunk-DY3EJWWH.js → chunk-EGEANMMK.js} +2 -2
- package/dist/{chunk-HW2JPR5W.js → chunk-EKS7SAZS.js} +40 -40
- package/dist/{chunk-ZS7VI7RK.js → chunk-ENAUSLMP.js} +3 -3
- package/dist/{chunk-QAY4RW2E.js → chunk-ENBGJJJH.js} +4 -4
- package/dist/{chunk-J746QNTP.js → chunk-FBWMKHLO.js} +3 -3
- package/dist/{chunk-QXOBZSQD.js → chunk-FLDFKG24.js} +4 -4
- package/dist/{chunk-D5NAWB4P.js → chunk-GRWYO2MS.js} +3 -3
- package/dist/{chunk-QL3ZJWGG.js → chunk-H5FAYLCR.js} +2 -2
- package/dist/{chunk-KSBUHLNF.js → chunk-H6VVSGKN.js} +7 -7
- package/dist/{chunk-7JKNWDYN.js → chunk-H7GMGZHI.js} +2 -2
- package/dist/{chunk-FGNDJBT4.js → chunk-HDANNK4A.js} +6 -6
- package/dist/{chunk-KI6U2GD2.js → chunk-HEMWBHQS.js} +13 -13
- package/dist/{chunk-5QOV52V4.js → chunk-I2AVVARA.js} +2 -2
- package/dist/{chunk-B3NH5UBI.js → chunk-JKGRQW6D.js} +4 -4
- package/dist/{chunk-XQO4A4Q4.js → chunk-K6BQPFRS.js} +3 -3
- package/dist/{chunk-NFSUGVDY.js → chunk-M7DIIJPW.js} +4 -4
- package/dist/{chunk-4BR5TEXI.js → chunk-MLKJUEG3.js} +21 -21
- package/dist/{chunk-C2GHFADU.js → chunk-N3XSXGAL.js} +2 -2
- package/dist/{chunk-U4LRDTIM.js → chunk-NMHTB346.js} +8 -8
- package/dist/{chunk-4ZTXYT3T.js → chunk-O6PWEJUV.js} +8 -8
- package/dist/{chunk-S42TFTM5.js → chunk-OBRMA2VK.js} +3 -3
- package/dist/{chunk-3UZQ5TMG.js → chunk-OCNTMJSY.js} +3 -3
- package/dist/{chunk-IB6SKACE.js → chunk-P5JF3U65.js} +4 -4
- package/dist/{chunk-AM5T76NQ.js → chunk-P6HXDOFG.js} +13 -13
- package/dist/{chunk-75MKIQON.js → chunk-PCHIHVX6.js} +4 -4
- package/dist/{chunk-PBK257CI.js → chunk-POZ6V4MU.js} +2 -2
- package/dist/{chunk-VTZF3ZNR.js → chunk-QWWQM4XZ.js} +7 -7
- package/dist/{chunk-QC3MKMDK.js → chunk-R7XZW4SB.js} +2 -2
- package/dist/{chunk-KDPXO5PO.js → chunk-RAGFXELQ.js} +5 -5
- package/dist/{chunk-DRWUMFSP.js → chunk-RQHXYL77.js} +3 -3
- package/dist/{chunk-OBJ7FQDX.js → chunk-RZABQ4YH.js} +2 -2
- package/dist/{chunk-KCCZCIDJ.js → chunk-SBS2IYTN.js} +3 -3
- package/dist/{chunk-LYN3XNDE.js → chunk-TANWE2ZY.js} +102 -122
- package/dist/{chunk-NU7EME32.js → chunk-U4BGBU3R.js} +27 -27
- package/dist/{chunk-SFOUFU4C.js → chunk-U4DSFCH5.js} +55 -5
- package/dist/{chunk-UUYKEIHP.js → chunk-UDCKYLBW.js} +4 -4
- package/dist/{chunk-D2PSNKZD.js → chunk-UECNKDDA.js} +8 -8
- package/dist/{chunk-R4NOZBOY.js → chunk-UFFIU57H.js} +4 -4
- package/dist/{chunk-RNKP5TA2.js → chunk-UKC65HBQ.js} +4 -4
- package/dist/{chunk-R3LANPQZ.js → chunk-VA4JK4TW.js} +3 -3
- package/dist/{chunk-I5XSXMJQ.js → chunk-VFRL4G72.js} +3 -3
- package/dist/{chunk-3BI62SPQ.js → chunk-W5MKVFBQ.js} +4 -4
- package/dist/{chunk-YKCDUHBR.js → chunk-WQZCFVAD.js} +5 -5
- package/dist/{chunk-HQPL34O6.js → chunk-XFQAA2SU.js} +2 -2
- package/dist/{chunk-SNKABK5L.js → chunk-XL7EA62X.js} +5 -5
- package/dist/{chunk-H3ZBAR2L.js → chunk-XM56DAM7.js} +8 -8
- package/dist/{chunk-PFW7WFAT.js → chunk-XVOODRNK.js} +4 -4
- package/dist/{chunk-FDPW2M3S.js → chunk-XYVPF63S.js} +8 -8
- package/dist/{chunk-7MPI7NIW.js → chunk-YJK4NPXC.js} +3 -3
- package/dist/{chunk-64ODZADR.js → chunk-ZACMAKZE.js} +13 -13
- package/dist/{chunk-7FPFYYCW.js → chunk-ZGNWMGN3.js} +7 -7
- package/dist/{chunk-7YSZSEZL.js → chunk-ZISPEBNM.js} +6 -3
- package/dist/{chunk-FNA5CUVN.js → chunk-ZSMHS7BU.js} +4 -4
- package/dist/cli.js +33 -33
- package/dist/{codegen-command-6AB3REIV.js → codegen-command-BAFON45M.js} +47 -47
- package/dist/{commands-FOHIPDKZ.js → commands-IFRAGWGK.js} +2 -2
- package/dist/{completion-XUBGMKGV.js → completion-RTXCODHS.js} +2 -2
- package/dist/{config-544VCRKP.js → config-EHFXNFSP.js} +3 -3
- package/dist/{deploy-command-LRJBO4LX.js → deploy-command-JW7R3BPW.js} +40 -40
- package/dist/{deploy-source-JTPMMO3B.js → deploy-source-ZUPLAL7L.js} +25 -25
- package/dist/{dev-env-sync-ODJYGSWT.js → dev-env-sync-W7OTV7OD.js} +34 -34
- package/dist/{display-name-hint-EZQK2PDU.js → display-name-hint-BKPMISQU.js} +10 -10
- package/dist/{env-example-refresh-DR44A6YZ.js → env-example-refresh-TS7WBVZQ.js} +48 -48
- package/dist/{env-pull-command-47XQO5J2.js → env-pull-command-5IYXQ2WK.js} +35 -35
- package/dist/{env-target-HBY2LQUA.js → env-target-TQBPLU2S.js} +9 -9
- package/dist/{env-var-command-HTKKTBOC.js → env-var-command-AKCWYZPB.js} +35 -35
- package/dist/{ephemeral-H24NF6WP.js → ephemeral-CART6DIR.js} +8 -8
- package/dist/{ephemeral-command-T5EFYCEY.js → ephemeral-command-SJYH6XRS.js} +36 -36
- package/dist/{ephemeral-state-YLZQIOBF.js → ephemeral-state-HPKSKC4Y.js} +7 -7
- package/dist/{generate-command-36OWZF23.js → generate-command-FSCFZPOJ.js} +52 -52
- package/dist/{gitignore-NLLQURLD.js → gitignore-6IJ66XME.js} +13 -13
- package/dist/{impersonate-command-HJYBQV6X.js → impersonate-command-IH4HMSS3.js} +31 -31
- package/dist/{import-TXYVFYJS.js → import-RUBCGLCA.js} +4 -4
- package/dist/{init-command-54M3AA27.js → init-command-STB4YSAK.js} +38 -38
- package/dist/{init-modules-MVULNRKR.js → init-modules-YIZYPCMM.js} +7 -7
- package/dist/{init-web-MSXDARRF.js → init-web-OGKACAOC.js} +2 -2
- package/dist/internal.js +5 -5
- package/dist/{keep-data-merge-Y6PYJOPW.js → keep-data-merge-VRKS64JK.js} +18 -18
- package/dist/{landing-record-LBJMKORB.js → landing-record-5EFK7RI6.js} +15 -15
- package/dist/{local-engine-choice-SXSWNCZT.js → local-engine-choice-TRTEJVMV.js} +28 -28
- package/dist/{local-engine-command-3GICPJPL.js → local-engine-command-2FK2PE2P.js} +33 -33
- package/dist/{local-engine-deploy-ID4JJXB5.js → local-engine-deploy-ZZVHBI2X.js} +11 -11
- package/dist/{local-engine-lookup-IC7BKAYP.js → local-engine-lookup-QFRKO35F.js} +2 -2
- package/dist/{local-engine-mcp-bridge-3SOJMZ5T.js → local-engine-mcp-bridge-T2EFRRAF.js} +4 -4
- package/dist/{local-engine-mcp-command-ZUS7LQ7F.js → local-engine-mcp-command-FB7EOGG6.js} +35 -35
- package/dist/{local-engine-process-HG5BGG3F.js → local-engine-process-XH35DURU.js} +6 -6
- package/dist/{local-engine-update-check-SKZR7YSC.js → local-engine-update-check-HAXE7BVG.js} +4 -4
- package/dist/{lock-commands-PTBKQE72.js → lock-commands-7PBZIRWR.js} +38 -38
- package/dist/{login-command-HH4FA65C.js → login-command-2O6GRMTH.js} +21 -21
- package/dist/{logout-command-WPUWLZSW.js → logout-command-RZXGW3O2.js} +12 -12
- package/dist/{marketplace-command-ISG2U5NA.js → marketplace-command-NCMLGIMS.js} +28 -28
- package/dist/{marketplace-resolve-PWEYJ2XS.js → marketplace-resolve-HPCRNV5O.js} +5 -5
- package/dist/{meta-client-P7E6PCB7.js → meta-client-DYYM5F5G.js} +10 -10
- package/dist/{module-manifest-KY7J63HG.js → module-manifest-EFE6JBZW.js} +3 -3
- package/dist/node.js +35 -35
- package/dist/{operation-outcome-2Z6II4HB.js → operation-outcome-SHNROAFA.js} +19 -19
- package/dist/{output-target-MWYZ5HYN.js → output-target-PSSR3E4N.js} +14 -14
- package/dist/{plan-disclosure-PQAXSAUH.js → plan-disclosure-WEMB5ZJ2.js} +11 -11
- package/dist/{plugin-contributions-PAGG6SUP.js → plugin-contributions-U5PAZKBE.js} +4 -4
- package/dist/{plugin-prompt-2MX6LF6X.js → plugin-prompt-O5PAMV5B.js} +4 -4
- package/dist/{plugin-questions-AP6VUTOB.js → plugin-questions-ZVYNKDRB.js} +3 -3
- package/dist/plugin.d.ts +2 -1
- package/dist/{preflight-command-6LCPYVTV.js → preflight-command-6F7JF3YQ.js} +42 -42
- package/dist/{profile-command-74AR3FB7.js → profile-command-5AOGD6GV.js} +22 -22
- package/dist/{profile-pointer-4HJQH5ZR.js → profile-pointer-VTOZDBHM.js} +3 -3
- package/dist/{project-dependency-ORX45I74.js → project-dependency-EZNTHMWI.js} +6 -6
- package/dist/{project-sdk-IYMFVQRC.js → project-sdk-ZGJM4WYQ.js} +3 -3
- package/dist/{promote-command-YD3YQWJG.js → promote-command-O2NRRFLK.js} +57 -57
- package/dist/{prompt-ZZUYWFQX.js → prompt-F7UVH4GP.js} +3 -3
- package/dist/{publish-command-7VKTBVVP.js → publish-command-6VVSJPLI.js} +43 -43
- package/dist/{pull-command-XIYO7WTF.js → pull-command-GE2WUEUF.js} +50 -50
- package/dist/{pull-superseded-UZ3MB53B.js → pull-superseded-77UZ7CHH.js} +3 -3
- package/dist/{release-command-NADSTRM2.js → release-command-55RTR674.js} +46 -46
- package/dist/{release-ns-command-2VUTJ4A6.js → release-ns-command-5XPZ2B6N.js} +65 -65
- package/dist/{retry-command-VZYLYDVX.js → retry-command-S5QALD5Z.js} +7 -7
- package/dist/{routes-manifest-Z7I4TZIL.js → routes-manifest-ET2TTSCL.js} +12 -2
- package/dist/{routes-manifest-file-BDJ6XQXF.js → routes-manifest-file-42FTJHRY.js} +5 -5
- package/dist/{secrets-file-KBMEY2SS.js → secrets-file-N5IF265R.js} +13 -13
- package/dist/{secrets-fill-command-YUAJSOZW.js → secrets-fill-command-35WKBURT.js} +37 -37
- package/dist/{seed-KEPIS7UZ.js → seed-5YLQRT2D.js} +3 -3
- package/dist/{source-resolve-KB7NWL3I.js → source-resolve-JXGOVJD3.js} +17 -17
- package/dist/{static-host-JAOT3N3E.js → static-host-TQP3FXPI.js} +4 -4
- package/dist/{status-command-YRIB6UJP.js → status-command-G3DFRMU7.js} +32 -32
- package/dist/{store-YFNDD6GZ.js → store-ZE5BXCOW.js} +5 -5
- package/dist/{sync-contributions-LMLYV7VL.js → sync-contributions-7T4CSPVQ.js} +8 -8
- package/dist/{sync-record-U65BCPSP.js → sync-record-ILWS44DG.js} +9 -9
- package/dist/{table-E5YTK7QX.js → table-V3LTQUY6.js} +5 -5
- package/dist/{tables-command-IONX4ZF2.js → tables-command-7NUOZBHX.js} +30 -30
- package/dist/{tenant-DAXJ4P4D.js → tenant-7WUS7Q6V.js} +9 -9
- package/dist/{tenant-command-635Y2YCR.js → tenant-command-JGEHRKN7.js} +67 -67
- package/dist/{test-command-CN76VVUK.js → test-command-2LNEA6GK.js} +30 -30
- package/dist/{tests-CLDZWLKF.js → tests-ENFUACKD.js} +5 -5
- package/dist/{token-WL7SSK64.js → token-DWNH44NW.js} +8 -8
- package/dist/{toolchain-hooks-VI2WOPST.js → toolchain-hooks-QIFGPGH2.js} +4 -4
- package/dist/{toolchain-modules-OXUU342N.js → toolchain-modules-F4DUMWTO.js} +4 -4
- package/dist/{toolchain-peers-AIKWKJH7.js → toolchain-peers-K44IINPG.js} +7 -7
- package/dist/{tracked-backend-ON5V2RBJ.js → tracked-backend-ZFXVLBBJ.js} +28 -28
- package/dist/{update-check-I75SHTAD.js → update-check-KBHT63GJ.js} +36 -36
- package/dist/{upgrade-command-2J7P5NSX.js → upgrade-command-CI543AZP.js} +38 -38
- package/dist/{whoami-command-HJJK2QJS.js → whoami-command-77DXENWD.js} +11 -11
- package/dist/{workspace-7QVUA7HI.js → workspace-RI5C77BZ.js} +4 -4
- package/dist/{workspace-binding-D7HZTF7N.js → workspace-binding-PR57NBGH.js} +10 -10
- package/dist/{workspace-command-KXTR5SOE.js → workspace-command-6HHVFQKW.js} +61 -61
- package/dist/{workspace-env-RASIOYSN.js → workspace-env-2APJEASO.js} +10 -10
- package/dist/{workspace-export-UHY22VBI.js → workspace-export-GHMUSX2P.js} +4 -4
- package/dist/{writable-2A6MBSFD.js → writable-Y6CE2CGK.js} +3 -3
- package/dist/{xanosdk-import-767BQ2HP.js → xanosdk-import-HBQH3ZBS.js} +5 -5
- package/dist/{xanosdk-project-PETOFVUQ.js → xanosdk-project-W45IR3Q7.js} +11 -11
- package/guides/authoring.md +13 -7
- package/guides/bundle.md +1 -1
- package/guides/cli.md +29 -19
- package/guides/codegen.md +3 -2
- package/guides/codes.md +2 -2
- package/guides/coverage.md +4 -3
- package/guides/deploying.md +17 -10
- package/guides/environment.md +12 -12
- package/guides/marketplace.md +12 -6
- package/guides/module-contract.md +11 -6
- package/guides/object-kinds.md +8 -5
- package/guides/scaffold.md +24 -12
- package/guides/typed-frontend.md +20 -5
- package/llms/kinds-knowledge.md +2 -2
- package/llms/object-kinds.md +2 -2
- package/llms-full.txt +6 -6
- package/llms.txt +2 -2
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/skills/xano-backend/SKILL.md +2 -2
package/guides/scaffold.md
CHANGED
|
@@ -9,7 +9,10 @@ backend alone — see [No frontend, and existing apps](#no-frontend-and-existing
|
|
|
9
9
|
(default: the folder name), `--theme <id>` / `--radius <len>` / `--dark <mode>` /
|
|
10
10
|
`--font <id>` / `--font-mono <id>` / `--font-heading <id>` / `--icons <id>`
|
|
11
11
|
(the look — see [Theming](#theming)), `--no-agents-md` (skip the `AGENTS.md`
|
|
12
|
-
agent brief, which every coding agent reads and `init` writes by default
|
|
12
|
+
agent brief, which every coding agent reads and `init` writes by default, and the
|
|
13
|
+
`.mcp.json` / `.cursor/mcp.json` configs that connect agents to the `xano-local`
|
|
14
|
+
MCP server), `--ai <preset|none>` (for scripted callers: `none` is `--no-agents-md`, and
|
|
15
|
+
any other value writes the one `AGENTS.md` every agent reads),
|
|
13
16
|
`--marketplace <pkg>` (repeatable, comma-separated; installs add-ons and
|
|
14
17
|
registers them — below), `--force` (write over what clashes when adding the backend to
|
|
15
18
|
a non-empty folder; it lists the files and scripts it would overwrite and asks, `--yes`
|
|
@@ -109,11 +112,12 @@ the add-on puts on your workspace, what you have to supply, and the
|
|
|
109
112
|
`xano/index.ts` registration to copy. Piped, it emits JSON; `--prompt` emits
|
|
110
113
|
instructions written to be handed straight to a coding agent.
|
|
111
114
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
and
|
|
115
|
+
`install` resolves its argument through the marketplace before npm runs — a module's
|
|
116
|
+
package or its slug (`auth`), keeping any version or tag — and refuses a name the
|
|
117
|
+
marketplace does not list with **exit 8**; local paths, `file:`, tarball and git specs
|
|
118
|
+
install as given. It also refuses before npm runs when you are not standing in a project,
|
|
119
|
+
and reconciles afterwards, asking any toolchain module that arrived its questions. See
|
|
120
|
+
[Installing](marketplace.md#installing).
|
|
117
121
|
|
|
118
122
|
## No frontend, and existing apps
|
|
119
123
|
|
|
@@ -123,7 +127,8 @@ is a **new** project, and `--framework` decides its frontend. Any other director
|
|
|
123
127
|
|
|
124
128
|
**A new project with `--framework none`** (or "No frontend" at the prompt) gets everything
|
|
125
129
|
above except the frontend: `xano/`, a `package.json` with only the backend's scripts and
|
|
126
|
-
dependencies, `.gitignore`, `.gitattributes`, the CI check, a README
|
|
130
|
+
dependencies, `.gitignore`, `.gitattributes`, the CI check, a README, `AGENTS.md`, and the
|
|
131
|
+
`.mcp.json` / `.cursor/mcp.json` agent configs. There is
|
|
127
132
|
no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
|
|
128
133
|
`xano/tsconfig.json`, and `npm run xano:typecheck` checks it and its lambdas.
|
|
129
134
|
`xano:deploy:ephemeral` deploys the backend alone, and there is no `dev`, `build` or
|
|
@@ -143,6 +148,11 @@ no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
|
|
|
143
148
|
- A marked block in `.gitignore` (created when missing) and in `AGENTS.md`, added or
|
|
144
149
|
refreshed in place; the rest of each file is left as it was. A symlinked `AGENTS.md` is left
|
|
145
150
|
alone, and `--no-agents-md` skips it.
|
|
151
|
+
- The `xano-local` MCP server merged by key into `.mcp.json` and `.cursor/mcp.json` (created
|
|
152
|
+
when missing): the other servers a config declares are kept. A config that already declares
|
|
153
|
+
`xano-local`, or is not valid JSON, is left alone and is not a clash; a symlinked one is
|
|
154
|
+
skipped. `--no-agents-md` skips both. See
|
|
155
|
+
[Connecting a coding agent](deploying.md#connecting-a-coding-agent).
|
|
146
156
|
- No frontend, README, CI workflow or root `tsconfig.json`. The line-ending rule goes in
|
|
147
157
|
`xano/.gitattributes`, scoped to `xano/`, so the project's own files are not renormalized.
|
|
148
158
|
|
|
@@ -177,17 +187,19 @@ The workflow installs with the project's package manager (npm, pnpm, yarn or bun
|
|
|
177
187
|
`init` detected it), frozen to the committed lockfile, then runs `xano:check` on every push
|
|
178
188
|
and pull request. In a monorepo workspace member it installs at the workspace root and checks
|
|
179
189
|
in the member's directory; move the file to the repository root's `.github/workflows/`, the
|
|
180
|
-
only place GitHub reads it. That script
|
|
181
|
-
|
|
190
|
+
only place GitHub reads it. That script runs three steps in order:
|
|
191
|
+
`xanosdk routes ./xano/index.ts --emit xano/routes.gen.ts --strict`, which fails when the
|
|
192
|
+
committed route manifest the frontend takes its paths from is stale or missing; the project's
|
|
193
|
+
typecheck (`tsc` on React, `svelte-kit sync && svelte-check` on Svelte, `tsc -p xano` with no
|
|
194
|
+
frontend, each followed by `tsc -p xano/lambdas`); and
|
|
195
|
+
`xanosdk export ./xano/index.ts --check --strict`: every check an export runs (a build warning fails it), under
|
|
182
196
|
`--frozen-lock`, writing nothing — no bundle, no lock. Because nothing is written, it
|
|
183
197
|
reads no `xano/.env` or `xano/.secrets.json`, so the workflow needs no repository
|
|
184
198
|
secrets, even for an API group whose docs are token-gated. It fails instead of
|
|
185
199
|
rewriting when `xano.lock` disagrees with the source, naming what would change. A
|
|
186
200
|
project with nothing to record yet (a fresh scaffold) passes without a lock. It also fails while the lock
|
|
187
201
|
carries an entry no exported object matches — the state a rename leaves until
|
|
188
|
-
`lock rename` moves the identity across, or `lock prune` drops it.
|
|
189
|
-
`xanosdk routes ./xano/index.ts --emit xano/routes.gen.ts --strict`, which fails when
|
|
190
|
-
the committed route manifest the frontend takes its paths from is stale or missing.
|
|
202
|
+
`lock rename` moves the identity across, or `lock prune` drops it.
|
|
191
203
|
`dev`, `build` and `typecheck` regenerate that file, so after adding or renaming an
|
|
192
204
|
endpoint run `npm run xano:routes` (or any of them) and commit it. `init --from` and
|
|
193
205
|
`pull` write it with the decoded backend, and `init --marketplace` writes it (and
|
package/guides/typed-frontend.md
CHANGED
|
@@ -36,6 +36,9 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
|
|
|
36
36
|
one group and verb that a single path can reach (`query.route-shadowed`). Make the paths
|
|
37
37
|
disjoint (`"runs/by-id/{id}"`), or declare a numeric param `input.int({ required: true })`:
|
|
38
38
|
only a REQUIRED int/decimal segment matches digits only, and an optional one matches any text.
|
|
39
|
+
|
|
40
|
+
## Inferring the response type
|
|
41
|
+
|
|
39
42
|
- **`InferRow<typeof post>`** → the table's row type. Rename or retype a column and every
|
|
40
43
|
consumer breaks at compile time — exactly where you want it.
|
|
41
44
|
- **`InferResponse<typeof someQuery>`** → the endpoint's **response** type, closing the round
|
|
@@ -46,9 +49,6 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
|
|
|
46
49
|
yielding null — `NotFound`/404 for `edit`/`patch`, a unique-constraint error for `add`, while
|
|
47
50
|
`add_or_edit` upserts and never misses), `Row | null` for `db.get` (it binds
|
|
48
51
|
`null` on a miss rather than throwing — handle the not-found path), a row list for
|
|
49
|
-
|
|
50
|
-
## Inferring the response type
|
|
51
|
-
|
|
52
52
|
`db.query`/`db.bulk.patch` (→ `Row[]`), a `boolean` for `db.has`, a `number` count for
|
|
53
53
|
`db.bulk.delete`, and a `get`/`query` `output: [...]` selection narrows to a `Pick` (still
|
|
54
54
|
`| null` for `get`). A dotted entry selects sub-keys of an object column
|
|
@@ -64,7 +64,7 @@ Every type and helper a frontend gets from a deployed def — path resolution, i
|
|
|
64
64
|
`response: { user: obj({ id: ref("row.id") }) }` and the raw literal
|
|
65
65
|
`response: { user: { id: ref("row.id") } }` both derive `{ user: { id: number | null } }`.
|
|
66
66
|
A **call** carries the shape across: `s.function.call`/`s.function.run`, `s.tool.call` and
|
|
67
|
-
`s.api.call` (workflow-test only
|
|
67
|
+
`s.api.call` (workflow-test only — see [Object kinds](object-kinds.md)) given a def **handle** bind their `as` with the
|
|
68
68
|
target's own `InferResponse`,
|
|
69
69
|
so `ref("discount_result.discount_cents")` in the caller types to that field instead of
|
|
70
70
|
`unknown`. What the target resolves to is what propagates, so declaring `responseShape` on
|
|
@@ -89,7 +89,7 @@ For a **computed or multi-key object response**, author it as a *record of value
|
|
|
89
89
|
`response: { success: c.bool(true), id: inp("id") }` — **not** `c.obj({ ... })`. `c.obj` builds a
|
|
90
90
|
*constant*, so a tagged value nested inside it would serialize as internal representation the
|
|
91
91
|
engine can't decode (a runtime 500); nesting one is now a compile error that points you at the
|
|
92
|
-
record form
|
|
92
|
+
record form. A **nested plain object** in a record
|
|
93
93
|
response (`response: { user: { id: ref("u"), age: 3 } }`) is auto-wrapped for you — no manual
|
|
94
94
|
`obj({ ... })` — and raw literals in a call/agent `input` map coerce too
|
|
95
95
|
(`s.function.run({ fn, input: { max_age_days: 3 } })` — no `c.int(3)`).
|
|
@@ -238,6 +238,21 @@ const ws = new WebSocket(socketUrl("chat", XANO_HOST), token);
|
|
|
238
238
|
ws.send(JSON.stringify({ action: "join", channel: channelPath("rooms/{room_id}", { room_id }) }));
|
|
239
239
|
```
|
|
240
240
|
|
|
241
|
+
MCP servers are there too: `mcpUrl(server, baseUrl)` is the equivalent of
|
|
242
|
+
`mcpServer().getUrl()`, with the same `/tenant/<name>` lift and the same refusal of an
|
|
243
|
+
already-resolved URL. It's an address to show a user or hand an MCP client. The endpoint
|
|
244
|
+
refuses any request carrying a browser `Origin`, so page JS can't call it directly:
|
|
245
|
+
|
|
246
|
+
```ts
|
|
247
|
+
import { mcpUrl } from "../xano/routes.gen";
|
|
248
|
+
|
|
249
|
+
const connectUrl = mcpUrl("notes_mcp", XANO_HOST); // https://host/x2/mcp/<canonical>/mcp/stream
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Run `xanosdk routes ./xano/index.ts` without `--emit` to see every address the file carries:
|
|
253
|
+
each route in its `api:<canonical>/<name>` form, and each socket, channel and MCP server with
|
|
254
|
+
the call that builds it.
|
|
255
|
+
|
|
241
256
|
**Request types come from the same file.** It exports four types-only maps, keyed exactly
|
|
242
257
|
like the runtime tables they sit beside, so a frontend types what it sends without importing a
|
|
243
258
|
def at all:
|
package/llms/kinds-knowledge.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Knowledge def shape
|
|
2
2
|
|
|
3
|
-
> Read when the workspace defines a `knowledge()` item
|
|
3
|
+
> Read when the workspace defines a `knowledge()` item.
|
|
4
4
|
|
|
5
|
-
- `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown Xano's own AI reads before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
|
|
5
|
+
- `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown shared by every AI that builds the backend: Xano's own AI reads it before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP — and a local coding agent reads the same `.md` files in the repo; deploy and `pull` keep the copies in sync. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
|
|
6
6
|
- `body` (REQUIRED): `knowledgeFile("./runbook.md", import.meta.url)` — a path to a real markdown FILE. There is no inline-string form. The path resolves relative to the MODULE THAT DECLARES the item, not the process working directory and not the workspace entry; `import.meta.url` is required and is what makes that true.
|
|
7
7
|
- `refs?`: `knowledgeDir("./runbook", import.meta.url)` — a directory whose WHOLE tree ships, recursively, paths preserved: UTF-8 text only (else refused; binary `.DS_Store` skipped), symlinks not followed. Keep the body OUT of it, or it ships as a reference file.
|
|
8
8
|
- `type?`: `"skill"` (default) | `"doc"` | `"agents.md"`. `skill` and `doc` differ in how they are filed, not in what an agent receives.
|
package/llms/object-kinds.md
CHANGED
|
@@ -12,7 +12,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
|
|
|
12
12
|
- **Work on a timer** → `task` (cron or interval). **Work a request starts but does not wait for** → `s.function.run({ fn, runtime: { mode: "async-shared" } })`, which binds a job id, not the result (collect with `s.await`). **Work that follows a row change** → `tableTrigger`: it fires on every insert/update/delete of the table, whichever stack writes it, so the same side effect placed in one endpoint's stack misses every other write path.
|
|
13
13
|
- **The same steps before or after many objects** (an auth check, a rate limit, logging) → `middleware`, attached per host (`middleware: { pre, post }` on a query, function, task, tool or API group) or to every host of a kind with `workspaceConfig({ middleware: { query, function, task, tool } })` — not a function call repeated at the top of each stack.
|
|
14
14
|
- **Related rows on returned rows** → an `addon` attached to the read through its `addon: [{ addon, as, input }]` option (`db.query`/`get`/`add`/`edit`/`patch`), merged onto each row under `as` and typed in `InferResponse` — not a second read plus a loop that stitches rows together.
|
|
15
|
-
- **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()
|
|
15
|
+
- **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()` (a local coding agent reads the same files in the repo); an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
|
|
16
16
|
- **Pushing to connected clients** → `realtimeServer` → `realtimeChannel` → `realtimeMessage` (the handler for a frame a client sends — the realtime analogue of a query). A server-side push from any stack is `s.realtime.publish`; a client polling a `query` is the substitute this replaces.
|
|
17
17
|
- **Code the typed surface cannot express** → a lambda (`s.lambda`, `fl.lambda`) for a short JavaScript body, LAST, after native filters and expressions (`llms/lambda.md`); a `microservice` for a long-running container or another language; `s.api.request` for a service that already has an HTTP API.
|
|
18
18
|
- **Tests** → `tests` on a `query`/`defineFunction`/`middleware` for that one object's input → output; a `workflowTest` for a flow across objects (`s.function.call`, `s.api.call`, `s.task.call`) asserted with `s.expect.*`.
|
|
@@ -44,5 +44,5 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
|
|
|
44
44
|
- channel: `realtimeChannel` → `Xano.registerRealtimeChannels` → payload `channel` — A realtime channel: a joinable path on a realtime server (`rooms/{room_id}`) with typed path params, join/publish policy, a client-visible conversation transcript, and delivery semantics. Owns message handlers. Returns a handle with `getChannel(params)` for the path a client joins.
|
|
45
45
|
- message: `realtimeMessage` → `Xano.registerRealtimeMessages` → payload `message` — A realtime message handler: a named message type on a channel with its own typed payload and stack — the realtime analogue of a query. Pass the `realtimeChannel()` handle as `channel` and the owning server comes with it.
|
|
46
46
|
- microservice: `microservice` → `Xano.registerMicroservices` → payload `microservice` — A container workload deployed alongside the workspace, called from a stack with `s.microservice.request`. Def shapes (`builtin` containers vs a `helm` chart) and the SECRET-handling rules its config carries: `llms/statements-calls.md`.
|
|
47
|
-
- knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown Xano's own AI (the builder agent,
|
|
47
|
+
- knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
|
|
48
48
|
- workspace: `workspaceConfig` → `Xano.registerWorkspace` → payload `workspace` — Workspace-level configuration such as default middleware chains and request-history defaults per host kind.
|
package/llms-full.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# xanosdk v1.0.
|
|
1
|
+
# xanosdk v1.0.13
|
|
2
2
|
|
|
3
3
|
> TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
|
|
4
4
|
|
|
@@ -45,7 +45,7 @@ plain file read resolves them at the version you have.
|
|
|
45
45
|
- [Error index](llms/errors.md): Read when a request, test, build, or pull fails with a message you did not write — the string, its cause, and where the fix is.
|
|
46
46
|
- [Saved unit tests, assertions, and mocks](llms/tests.md): Read when authoring a `workflowTest()` stack, when a query/function/middleware carries `tests`, when a statement needs a `mock`, or when running a deployed environment's tests.
|
|
47
47
|
- [Agent and MCP def shapes](llms/kinds-agent-mcp.md): Read when building an MCP server (tools, prompts, resources) or an `agent()`.
|
|
48
|
-
- [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item
|
|
48
|
+
- [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item.
|
|
49
49
|
- [Realtime def shapes](llms/kinds-realtime.md): Read when the workspace defines a `realtimeServer()`, `realtimeChannel()`, or `realtimeMessage()` handler.
|
|
50
50
|
- [Triggers](llms/triggers.md): Read when authoring any trigger. A trigger's `stack` is a callback rather than the plain array every other kind takes, so the shape does not carry over.
|
|
51
51
|
- [Array and database statements](llms/statements-data.md): Read when the stack reads or writes rows (`s.db.*`), or transforms an array in place (`s.array.map`, `s.array.union`).
|
|
@@ -507,7 +507,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
|
|
|
507
507
|
- **Work on a timer** → `task` (cron or interval). **Work a request starts but does not wait for** → `s.function.run({ fn, runtime: { mode: "async-shared" } })`, which binds a job id, not the result (collect with `s.await`). **Work that follows a row change** → `tableTrigger`: it fires on every insert/update/delete of the table, whichever stack writes it, so the same side effect placed in one endpoint's stack misses every other write path.
|
|
508
508
|
- **The same steps before or after many objects** (an auth check, a rate limit, logging) → `middleware`, attached per host (`middleware: { pre, post }` on a query, function, task, tool or API group) or to every host of a kind with `workspaceConfig({ middleware: { query, function, task, tool } })` — not a function call repeated at the top of each stack.
|
|
509
509
|
- **Related rows on returned rows** → an `addon` attached to the read through its `addon: [{ addon, as, input }]` option (`db.query`/`get`/`add`/`edit`/`patch`), merged onto each row under `as` and typed in `InferResponse` — not a second read plus a loop that stitches rows together.
|
|
510
|
-
- **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()
|
|
510
|
+
- **AI.** An LLM running inside the backend → `agent()`, started from a stack with `s.ai.agent.run`; it has no public endpoint. An external AI client (Claude, Cursor, any MCP client) calling the backend → `mcpServer()`. Standing instructions for Xano's own builder AI → `knowledge()` (a local coding agent reads the same files in the repo); an `agent()` run never reads it. The actions either one calls → `tool()`. What an MCP server serves besides tools (`prompt()`, `resource()`) and when each fits: `llms/kinds-agent-mcp.md`.
|
|
511
511
|
- **Pushing to connected clients** → `realtimeServer` → `realtimeChannel` → `realtimeMessage` (the handler for a frame a client sends — the realtime analogue of a query). A server-side push from any stack is `s.realtime.publish`; a client polling a `query` is the substitute this replaces.
|
|
512
512
|
- **Code the typed surface cannot express** → a lambda (`s.lambda`, `fl.lambda`) for a short JavaScript body, LAST, after native filters and expressions (`llms/lambda.md`); a `microservice` for a long-running container or another language; `s.api.request` for a service that already has an HTTP API.
|
|
513
513
|
- **Tests** → `tests` on a `query`/`defineFunction`/`middleware` for that one object's input → output; a `workflowTest` for a flow across objects (`s.function.call`, `s.api.call`, `s.task.call`) asserted with `s.expect.*`.
|
|
@@ -539,7 +539,7 @@ Choose by who or what starts the work. Each rule names the kind that fits and th
|
|
|
539
539
|
- channel: `realtimeChannel` → `Xano.registerRealtimeChannels` → payload `channel` — A realtime channel: a joinable path on a realtime server (`rooms/{room_id}`) with typed path params, join/publish policy, a client-visible conversation transcript, and delivery semantics. Owns message handlers. Returns a handle with `getChannel(params)` for the path a client joins.
|
|
540
540
|
- message: `realtimeMessage` → `Xano.registerRealtimeMessages` → payload `message` — A realtime message handler: a named message type on a channel with its own typed payload and stack — the realtime analogue of a query. Pass the `realtimeChannel()` handle as `channel` and the owning server comes with it.
|
|
541
541
|
- microservice: `microservice` → `Xano.registerMicroservices` → payload `microservice` — A container workload deployed alongside the workspace, called from a stack with `s.microservice.request`. Def shapes (`builtin` containers vs a `helm` chart) and the SECRET-handling rules its config carries: `llms/statements-calls.md`.
|
|
542
|
-
- knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown Xano's own AI (the builder agent,
|
|
542
|
+
- knowledge: `knowledge` → `Xano.registerKnowledge` → payload `knowledge` — Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile("./x.md", import.meta.url)`, and `mode` decides how much of it reaches the agent.
|
|
543
543
|
- workspace: `workspaceConfig` → `Xano.registerWorkspace` → payload `workspace` — Workspace-level configuration such as default middleware chains and request-history defaults per host kind.
|
|
544
544
|
|
|
545
545
|
# Core def shapes
|
|
@@ -901,9 +901,9 @@ The run is isolated in ways that make a correct test fail for reasons the failur
|
|
|
901
901
|
|
|
902
902
|
# Knowledge def shape
|
|
903
903
|
|
|
904
|
-
> Read when the workspace defines a `knowledge()` item
|
|
904
|
+
> Read when the workspace defines a `knowledge()` item.
|
|
905
905
|
|
|
906
|
-
- `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown Xano's own AI reads before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
|
|
906
|
+
- `knowledge({ name, description?, type?, mode?, enabled?, body, refs?, guid?, tags? })` — markdown shared by every AI that builds the backend: Xano's own AI reads it before it acts — the workspace's builder agent, and outside agents reading the workspace through the Meta API or MCP — and a local coding agent reads the same `.md` files in the repo; deploy and `pull` keep the copies in sync. It does NOT reach an `agent()` run by `s.ai.agent.run`, whatever its `type` or `mode`: put what such an agent must know in its `llm.systemPrompt`. Takes `registerKnowledge`.
|
|
907
907
|
- `body` (REQUIRED): `knowledgeFile("./runbook.md", import.meta.url)` — a path to a real markdown FILE. There is no inline-string form. The path resolves relative to the MODULE THAT DECLARES the item, not the process working directory and not the workspace entry; `import.meta.url` is required and is what makes that true.
|
|
908
908
|
- `refs?`: `knowledgeDir("./runbook", import.meta.url)` — a directory whose WHOLE tree ships, recursively, paths preserved: UTF-8 text only (else refused; binary `.DS_Store` skipped), symlinks not followed. Keep the body OUT of it, or it ships as a reference file.
|
|
909
909
|
- `type?`: `"skill"` (default) | `"doc"` | `"agents.md"`. `skill` and `doc` differ in how they are filed, not in what an agent receives.
|
package/llms.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# xanosdk v1.0.
|
|
1
|
+
# xanosdk v1.0.13
|
|
2
2
|
|
|
3
3
|
> TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
|
|
4
4
|
|
|
@@ -45,7 +45,7 @@ plain file read resolves them at the version you have.
|
|
|
45
45
|
- [Error index](llms/errors.md): Read when a request, test, build, or pull fails with a message you did not write — the string, its cause, and where the fix is.
|
|
46
46
|
- [Saved unit tests, assertions, and mocks](llms/tests.md): Read when authoring a `workflowTest()` stack, when a query/function/middleware carries `tests`, when a statement needs a `mock`, or when running a deployed environment's tests.
|
|
47
47
|
- [Agent and MCP def shapes](llms/kinds-agent-mcp.md): Read when building an MCP server (tools, prompts, resources) or an `agent()`.
|
|
48
|
-
- [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item
|
|
48
|
+
- [Knowledge def shape](llms/kinds-knowledge.md): Read when the workspace defines a `knowledge()` item.
|
|
49
49
|
- [Realtime def shapes](llms/kinds-realtime.md): Read when the workspace defines a `realtimeServer()`, `realtimeChannel()`, or `realtimeMessage()` handler.
|
|
50
50
|
- [Triggers](llms/triggers.md): Read when authoring any trigger. A trigger's `stack` is a callback rather than the plain array every other kind takes, so the shape does not carry over.
|
|
51
51
|
- [Array and database statements](llms/statements-data.md): Read when the stack reads or writes rows (`s.db.*`), or transforms an array in place (`s.array.map`, `s.array.union`).
|
package/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xanosdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
|
|
5
5
|
"coverage": {
|
|
6
6
|
"objectKinds": {
|
|
@@ -382,7 +382,7 @@
|
|
|
382
382
|
"kind": "knowledge",
|
|
383
383
|
"payloadKey": "knowledge",
|
|
384
384
|
"authorFactory": "knowledge",
|
|
385
|
-
"description": "Markdown Xano's own AI (the builder agent,
|
|
385
|
+
"description": "Markdown shared by every AI that builds the backend — Xano's own AI (the builder agent, Meta API / MCP readers) and a local coding agent reading the same files — never an `agent()` run: an `agents.md` of standing instructions, a `skill`, or a `doc`. The body is a real markdown FILE via `knowledgeFile(\"./x.md\", import.meta.url)`, and `mode` decides how much of it reaches the agent.",
|
|
386
386
|
"registerMethod": "registerKnowledge",
|
|
387
387
|
"registered": true
|
|
388
388
|
},
|
|
@@ -10716,7 +10716,7 @@
|
|
|
10716
10716
|
"description": "With --emit: write nothing, and fail when the file is missing or out of date (what xano:check runs)"
|
|
10717
10717
|
}
|
|
10718
10718
|
],
|
|
10719
|
-
"description": "List
|
|
10719
|
+
"description": "List every address a frontend references — api:<canonical>/<name> routes, realtime sockets and channels, MCP servers"
|
|
10720
10720
|
},
|
|
10721
10721
|
{
|
|
10722
10722
|
"command": "secrets fill",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xano/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "The official TypeScript SDK for Xano, one platform to build, run and govern AI-built software. Your coding agent writes the backend in TypeScript, you run it on the Xano Engine on your machine, then deploy it to Xano.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xanosdk",
|
|
@@ -14,8 +14,8 @@ description: >-
|
|
|
14
14
|
FastAPI) unless the user asks for Xano.
|
|
15
15
|
license: MIT
|
|
16
16
|
metadata:
|
|
17
|
-
xanosdk-version: "1.0.
|
|
18
|
-
xanosdk-digest: "sha256:
|
|
17
|
+
xanosdk-version: "1.0.13"
|
|
18
|
+
xanosdk-digest: "sha256:5af311994df498c279a5f24b3f605468a690f046d8bddf612c938142ee46c759"
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# Xano backend
|