@xanots/sdk 0.0.3-beta.0 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/dist/.build-fingerprint +1 -1
  3. package/dist/{agent-file-refresh-J3KY54E5.js → agent-file-refresh-6M5M7T24.js} +3 -3
  4. package/dist/bin.js +3 -3
  5. package/dist/{chunk-CBL57QBQ.js → chunk-2V4YE6QC.js} +6 -6
  6. package/dist/{chunk-VVXPK6SE.js → chunk-3NFUWXOC.js} +24 -16
  7. package/dist/{chunk-FY6LXRR6.js → chunk-6USV65XA.js} +2 -2
  8. package/dist/{chunk-MWLNBSTY.js → chunk-BT2CSEC5.js} +2 -2
  9. package/dist/{chunk-WRYT2PAX.js → chunk-CMZLPTGW.js} +24 -36
  10. package/dist/{chunk-QO4I5OYF.js → chunk-DYCLVQXW.js} +12 -3
  11. package/dist/{chunk-4HKZH6YK.js → chunk-HQ2CBRVI.js} +230 -7
  12. package/dist/{chunk-HKAX756N.js → chunk-W2G2WPTB.js} +3 -3
  13. package/dist/chunk-WUSKBXXD.js +25 -0
  14. package/dist/{chunk-EWFHDJY5.js → chunk-ZO3HJOCJ.js} +2 -2
  15. package/dist/cli.d.ts +9 -0
  16. package/dist/cli.js +3 -3
  17. package/dist/{codegen-command-EXLKZ2ZI.js → codegen-command-FIADGXRN.js} +8 -8
  18. package/dist/{completion-2PVZK6YX.js → completion-BKAFCZBE.js} +2 -2
  19. package/dist/{deploy-command-SXX6RJWM.js → deploy-command-4R6BYC6G.js} +7 -7
  20. package/dist/{env-target-3EGIPR4D.js → env-target-XWS2ZZ2Y.js} +2 -2
  21. package/dist/{ephemeral-command-OGOYP7D6.js → ephemeral-command-JL4TPIRQ.js} +5 -5
  22. package/dist/{init-command-6DGXEVZD.js → init-command-LOK75W64.js} +7 -7
  23. package/dist/internal.js +4 -3
  24. package/dist/{lock-commands-R22J54XV.js → lock-commands-XOYS75YQ.js} +4 -4
  25. package/dist/{marketplace-command-XJIWL4YP.js → marketplace-command-UVV3XAOL.js} +4 -4
  26. package/dist/node.js +3 -3
  27. package/dist/{release-command-6PLMLGDK.js → release-command-HZUY2XZX.js} +8 -8
  28. package/dist/{test-command-LLPXKT35.js → test-command-72Y5S22H.js} +4 -4
  29. package/dist/{validate-command-WAT3ZJT3.js → validate-command-KDGH537H.js} +5 -5
  30. package/dist/{workspace-command-JKMI7RZ4.js → workspace-command-ICSI6PKO.js} +8 -8
  31. package/llms/kinds-agent-mcp.md +2 -1
  32. package/llms-full.txt +3 -2
  33. package/llms.txt +1 -1
  34. package/manifest.json +5 -1
  35. package/package.json +1 -1
  36. package/dist/chunk-47WDWMBJ.js +0 -14
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  compileBundle
3
- } from "./chunk-VVXPK6SE.js";
3
+ } from "./chunk-3NFUWXOC.js";
4
4
  import {
5
5
  missingArgument
6
- } from "./chunk-FY6LXRR6.js";
6
+ } from "./chunk-6USV65XA.js";
7
7
 
8
8
  // src/emit/bundle-input.ts
9
9
  import { existsSync, readFileSync } from "fs";
@@ -34,4 +34,4 @@ export {
34
34
  assertBundleInput,
35
35
  loadBundleText
36
36
  };
37
- //# sourceMappingURL=chunk-HKAX756N.js.map
37
+ //# sourceMappingURL=chunk-W2G2WPTB.js.map
@@ -0,0 +1,25 @@
1
+ // src/emit/npm.ts
2
+ import { spawnSync } from "child_process";
3
+ function npmBinary() {
4
+ return process.platform === "win32" ? "npm.cmd" : "npm";
5
+ }
6
+ function runNpm(args, cwd) {
7
+ const res = spawnSync(npmBinary(), [...args], { cwd, stdio: "inherit" });
8
+ return res.status ?? 1;
9
+ }
10
+ function runNpmCapturingStderr(args, cwd) {
11
+ const res = spawnSync(npmBinary(), [...args], {
12
+ cwd,
13
+ stdio: ["inherit", "inherit", "pipe"],
14
+ encoding: "utf8"
15
+ });
16
+ const stderr = res.stderr ?? "";
17
+ if (stderr !== "") process.stderr.write(stderr);
18
+ return { status: res.status ?? 1, stderr };
19
+ }
20
+
21
+ export {
22
+ runNpm,
23
+ runNpmCapturingStderr
24
+ };
25
+ //# sourceMappingURL=chunk-WUSKBXXD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  UsageError
3
- } from "./chunk-FY6LXRR6.js";
3
+ } from "./chunk-6USV65XA.js";
4
4
  import {
5
5
  style
6
6
  } from "./chunk-EZG76F7R.js";
@@ -26,4 +26,4 @@ async function confirm(message, opts) {
26
26
  export {
27
27
  confirm
28
28
  };
29
- //# sourceMappingURL=chunk-EWFHDJY5.js.map
29
+ //# sourceMappingURL=chunk-ZO3HJOCJ.js.map
package/dist/cli.d.ts CHANGED
@@ -159,6 +159,15 @@ interface ParsedArgs {
159
159
  * else write none. Validated in the init command, not at parse time.
160
160
  */
161
161
  ai: string[];
162
+ /**
163
+ * `init` `--marketplace <pkg>` (repeatable, comma-separated): marketplace
164
+ * add-ons to install into the new project and register in `xano/index.ts`.
165
+ *
166
+ * One flag rather than a follow-up command so that the whole project is one
167
+ * reproducible line — which is the promise onboarding makes when it prints
168
+ * the command it ran. Validated in `init-modules.ts`, not at parse time.
169
+ */
170
+ marketplace: string[];
162
171
  /**
163
172
  * `init`/`codegen` `--framework <id>`: which frontend to scaffold
164
173
  * (`react`/`svelte`). Undefined = prompt in a TTY, else the default.
package/dist/cli.js CHANGED
@@ -8,13 +8,13 @@ import {
8
8
  resolveHelpRequest,
9
9
  resolveLockPath,
10
10
  run
11
- } from "./chunk-VVXPK6SE.js";
12
- import "./chunk-FY6LXRR6.js";
11
+ } from "./chunk-3NFUWXOC.js";
12
+ import "./chunk-6USV65XA.js";
13
13
  import "./chunk-HJPTWBLH.js";
14
14
  import "./chunk-EZG76F7R.js";
15
15
  import "./chunk-GNPVYOPB.js";
16
16
  import "./chunk-55VHDNW5.js";
17
- import "./chunk-QO4I5OYF.js";
17
+ import "./chunk-DYCLVQXW.js";
18
18
  import "./chunk-5L4X5LS6.js";
19
19
  import "./chunk-WHOJWOSV.js";
20
20
  import "./chunk-5XZ744TS.js";
@@ -4,13 +4,13 @@ import {
4
4
  isMissingDependencyError,
5
5
  runCodegenCommand,
6
6
  verifyCrashEntry
7
- } from "./chunk-CBL57QBQ.js";
7
+ } from "./chunk-2V4YE6QC.js";
8
8
  import "./chunk-P3TTMWUP.js";
9
9
  import "./chunk-QTNO2WD6.js";
10
10
  import "./chunk-ZUTSMMAG.js";
11
- import "./chunk-4HKZH6YK.js";
12
- import "./chunk-WRYT2PAX.js";
13
- import "./chunk-47WDWMBJ.js";
11
+ import "./chunk-HQ2CBRVI.js";
12
+ import "./chunk-CMZLPTGW.js";
13
+ import "./chunk-WUSKBXXD.js";
14
14
  import "./chunk-3IGNIP6R.js";
15
15
  import "./chunk-C56BC2FY.js";
16
16
  import "./chunk-7REDODS2.js";
@@ -21,13 +21,13 @@ import "./chunk-YZ4GU6F5.js";
21
21
  import "./chunk-6DHJVLYP.js";
22
22
  import "./chunk-4BXJGVZ3.js";
23
23
  import "./chunk-U3G2UW65.js";
24
- import "./chunk-VVXPK6SE.js";
25
- import "./chunk-FY6LXRR6.js";
24
+ import "./chunk-3NFUWXOC.js";
25
+ import "./chunk-6USV65XA.js";
26
26
  import "./chunk-HJPTWBLH.js";
27
27
  import "./chunk-EZG76F7R.js";
28
28
  import "./chunk-GNPVYOPB.js";
29
29
  import "./chunk-55VHDNW5.js";
30
- import "./chunk-QO4I5OYF.js";
30
+ import "./chunk-DYCLVQXW.js";
31
31
  import "./chunk-5L4X5LS6.js";
32
32
  import "./chunk-WHOJWOSV.js";
33
33
  import "./chunk-5XZ744TS.js";
@@ -39,4 +39,4 @@ export {
39
39
  runCodegenCommand,
40
40
  verifyCrashEntry
41
41
  };
42
- //# sourceMappingURL=codegen-command-EXLKZ2ZI.js.map
42
+ //# sourceMappingURL=codegen-command-FIADGXRN.js.map
@@ -5,7 +5,7 @@ import {
5
5
  getCommand,
6
6
  liveCommandNames,
7
7
  liveSubcommandNames
8
- } from "./chunk-QO4I5OYF.js";
8
+ } from "./chunk-DYCLVQXW.js";
9
9
 
10
10
  // src/emit/completion.ts
11
11
  var COMPLETION_SHELLS = ["bash", "zsh", "fish"];
@@ -295,4 +295,4 @@ export {
295
295
  renderCompletion,
296
296
  runCompletionCommand
297
297
  };
298
- //# sourceMappingURL=completion-2PVZK6YX.js.map
298
+ //# sourceMappingURL=completion-BKAFCZBE.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  assertBundleInput,
3
3
  loadBundleText
4
- } from "./chunk-HKAX756N.js";
4
+ } from "./chunk-W2G2WPTB.js";
5
5
  import {
6
6
  importWorkspaceArchive
7
7
  } from "./chunk-5WGEURVI.js";
@@ -42,10 +42,10 @@ import {
42
42
  } from "./chunk-C56BC2FY.js";
43
43
  import "./chunk-7REDODS2.js";
44
44
  import "./chunk-X4DVXBFY.js";
45
- import "./chunk-VVXPK6SE.js";
45
+ import "./chunk-3NFUWXOC.js";
46
46
  import {
47
47
  assertWritableDest
48
- } from "./chunk-FY6LXRR6.js";
48
+ } from "./chunk-6USV65XA.js";
49
49
  import "./chunk-HJPTWBLH.js";
50
50
  import {
51
51
  blank,
@@ -63,7 +63,7 @@ import {
63
63
  } from "./chunk-EZG76F7R.js";
64
64
  import "./chunk-GNPVYOPB.js";
65
65
  import "./chunk-55VHDNW5.js";
66
- import "./chunk-QO4I5OYF.js";
66
+ import "./chunk-DYCLVQXW.js";
67
67
  import "./chunk-5L4X5LS6.js";
68
68
  import "./chunk-WHOJWOSV.js";
69
69
  import "./chunk-5XZ744TS.js";
@@ -158,7 +158,7 @@ async function runDeployedTests(auth, dest, summary, args) {
158
158
  }
159
159
  }
160
160
  async function runTestsOrThrow(auth, dest, summary, args) {
161
- const { runSuite, EXIT_TESTS_FAILED } = await import("./test-command-LLPXKT35.js");
161
+ const { runSuite, EXIT_TESTS_FAILED } = await import("./test-command-72Y5S22H.js");
162
162
  let target;
163
163
  if (dest === "ephemeral") {
164
164
  if (summary.url === void 0) {
@@ -168,7 +168,7 @@ async function runTestsOrThrow(auth, dest, summary, args) {
168
168
  const name = summary.ephemeral?.name;
169
169
  target = { base: summary.url, workspaceId: 1, label: name ? `ephemeral ${name}` : "the ephemeral", env: name };
170
170
  } else {
171
- const { resolveMetaTarget } = await import("./env-target-3EGIPR4D.js");
171
+ const { resolveMetaTarget } = await import("./env-target-XWS2ZZ2Y.js");
172
172
  target = await resolveMetaTarget(auth, { dest: "sandbox" });
173
173
  }
174
174
  const outcomes = await runSuite(auth, target, {
@@ -448,4 +448,4 @@ export {
448
448
  runDeployedTests,
449
449
  verifyMicroservices
450
450
  };
451
- //# sourceMappingURL=deploy-command-SXX6RJWM.js.map
451
+ //# sourceMappingURL=deploy-command-4R6BYC6G.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveMetaTarget
3
- } from "./chunk-MWLNBSTY.js";
3
+ } from "./chunk-BT2CSEC5.js";
4
4
  import "./chunk-DGSF2Q5H.js";
5
5
  import "./chunk-7DKX2SPN.js";
6
6
  import "./chunk-NDZFBZHC.js";
@@ -13,4 +13,4 @@ import "./chunk-GNPVYOPB.js";
13
13
  export {
14
14
  resolveMetaTarget
15
15
  };
16
- //# sourceMappingURL=env-target-3EGIPR4D.js.map
16
+ //# sourceMappingURL=env-target-XWS2ZZ2Y.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  confirm
3
- } from "./chunk-EWFHDJY5.js";
3
+ } from "./chunk-ZO3HJOCJ.js";
4
4
  import {
5
5
  deleteEphemeral,
6
6
  getEphemeral,
@@ -41,7 +41,7 @@ import "./chunk-7REDODS2.js";
41
41
  import "./chunk-X4DVXBFY.js";
42
42
  import {
43
43
  unknownSubcommand
44
- } from "./chunk-FY6LXRR6.js";
44
+ } from "./chunk-6USV65XA.js";
45
45
  import {
46
46
  detail,
47
47
  formatExpiration,
@@ -53,7 +53,7 @@ import {
53
53
  warn
54
54
  } from "./chunk-EZG76F7R.js";
55
55
  import "./chunk-GNPVYOPB.js";
56
- import "./chunk-QO4I5OYF.js";
56
+ import "./chunk-DYCLVQXW.js";
57
57
 
58
58
  // src/emit/ephemeral-command.ts
59
59
  import { writeFileSync } from "fs";
@@ -90,7 +90,7 @@ async function runEphemeralCommand(args) {
90
90
  case "impersonate":
91
91
  return runImpersonate(args);
92
92
  case "codegen": {
93
- const { runCodegenCommand } = await import("./codegen-command-EXLKZ2ZI.js");
93
+ const { runCodegenCommand } = await import("./codegen-command-FIADGXRN.js");
94
94
  return runCodegenCommand(args, { kind: "ephemeral" });
95
95
  }
96
96
  default:
@@ -239,4 +239,4 @@ export {
239
239
  resolveLive,
240
240
  runEphemeralCommand
241
241
  };
242
- //# sourceMappingURL=ephemeral-command-OGOYP7D6.js.map
242
+ //# sourceMappingURL=ephemeral-command-JL4TPIRQ.js.map
@@ -2,20 +2,20 @@ import {
2
2
  projectShellFiles,
3
3
  runInitCommand,
4
4
  sanitizeAppName
5
- } from "./chunk-4HKZH6YK.js";
5
+ } from "./chunk-HQ2CBRVI.js";
6
6
  import {
7
7
  resolveAiFlags
8
- } from "./chunk-WRYT2PAX.js";
9
- import "./chunk-47WDWMBJ.js";
8
+ } from "./chunk-CMZLPTGW.js";
9
+ import "./chunk-WUSKBXXD.js";
10
10
  import "./chunk-YZ4GU6F5.js";
11
11
  import "./chunk-6DHJVLYP.js";
12
- import "./chunk-VVXPK6SE.js";
13
- import "./chunk-FY6LXRR6.js";
12
+ import "./chunk-3NFUWXOC.js";
13
+ import "./chunk-6USV65XA.js";
14
14
  import "./chunk-HJPTWBLH.js";
15
15
  import "./chunk-EZG76F7R.js";
16
16
  import "./chunk-GNPVYOPB.js";
17
17
  import "./chunk-55VHDNW5.js";
18
- import "./chunk-QO4I5OYF.js";
18
+ import "./chunk-DYCLVQXW.js";
19
19
  import "./chunk-5L4X5LS6.js";
20
20
  import "./chunk-WHOJWOSV.js";
21
21
  import "./chunk-5XZ744TS.js";
@@ -26,4 +26,4 @@ export {
26
26
  runInitCommand,
27
27
  sanitizeAppName
28
28
  };
29
- //# sourceMappingURL=init-command-6DGXEVZD.js.map
29
+ //# sourceMappingURL=init-command-LOK75W64.js.map
package/dist/internal.js CHANGED
@@ -62,7 +62,7 @@ import {
62
62
  GLOBAL_FLAGS,
63
63
  flagKey,
64
64
  flagSummary
65
- } from "./chunk-QO4I5OYF.js";
65
+ } from "./chunk-DYCLVQXW.js";
66
66
  import {
67
67
  DECODE_ONLY_STATEMENTS,
68
68
  FILTER_NAMES,
@@ -1292,13 +1292,14 @@ function renderSections(m) {
1292
1292
  ""
1293
1293
  ];
1294
1294
  const kindsAgentMcp = [
1295
- "- `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, llm?, output? })` \u2014 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`, so a server that carries LLM settings can say so. Returns a handle with `getPath()`/`getUrl(baseUrl)` for the Streamable-HTTP endpoint \u2014 `getUrl` is NOT idempotent, a `baseUrl` already carrying an `/x2/mcp/<\u2026>/stream` path (an earlier result) THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral; does NOT fire in the sandbox (see Gotchas).",
1295
+ "- `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, llm?, output? })` \u2014 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 \u2014 `getUrl` is NOT idempotent, a `baseUrl` already carrying an `/x2/mcp/<\u2026>/stream` path THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral; not in sandbox.",
1296
1296
  " - `tools?`: a `ToolsetToolEntry[]`. Pass the `tool()` HANDLES directly (`tools: [saveNote]`), like every other collection in the SDK; use the `{ tool, enabled?, auth? }` wrapper only when a tool needs `enabled: false` or per-tool `auth`. `auth` names an auth **table** (a `table({ auth: true })` handle or its name) \u2014 Xano's ONLY MCP auth surface (per-tool; there is no server-level gate). An entry that names no tool (no handle, no `id`) THROWS at export rather than emitting the `id: 0` null reference it used to; a deliberate raw `id: 0` warns and is carried through, so a pulled workspace still round-trips.",
1297
1297
  "- `agent({ name, guid?, description?, docs?, enabled?, canonical?, tags?, history?, llm, tools?, output? })` \u2014 an LLM orchestrator. No top-level `instructions`/`prompt`/`spec` \u2014 the prompt lives under `llm`. Invoke from a stack with `s.ai.agent.run({ agent, args })`.",
1298
1298
  ' - `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 \u2014 the engine stores ONE `prompt_type`, so one would be dropped); plus provider fields (`apiKey?`, `model?`, `temperature?`, `reasoningEffort?`, \u2026). String fields accept Twig placeholders \u2014 `{{ $args.x }}` for run inputs (the `args` of `s.ai.agent.run`), `{{ $env.NAME }}` for env vars.',
1299
1299
  " - `tools?`: same `ToolsetToolEntry[]` as `mcpServer` \u2014 bare `tool()` handles, or a `{ tool, enabled?, auth? }` wrapper when one needs `enabled`/`auth`.",
1300
1300
  ' - `output?`: `{ schema: Record<string, input.*>, enabled? }` \u2014 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 \u2014 no `resultShape` witness needed (the shape is declared once). `resultShape` remains only to override that, or to type an agent referenced by bare name.',
1301
- ' - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) \u2014 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({ name, value: ref("run.result.summary") })`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` \u2014 raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. Tool-call / per-step data (when tools ran) rides `.toolCalls` / `.steps` on the same envelope \u2014 both optional, absent or empty when no tools executed.'
1301
+ ' - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) \u2014 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({ name, value: ref("run.result.summary") })`). `args` is a plain object of run inputs (`{ topic: inp("topic") }` \u2014 raw literals are fine, e.g. `{ max_steps: 3 }`) surfaced to the agent as `{{ $args.topic }}`. Tool-call / per-step data (when tools ran) rides `.toolCalls` / `.steps` on the same envelope \u2014 both optional, absent or empty when no tools executed.',
1302
+ " - **Marketplace:** for chat history, use `@xanots/chatbot`; for vector RAG, use `@xanots/vector` (`tools: [vector.searchTool]`). Find add-ons with `xanots marketplace search <q>`."
1302
1303
  ];
1303
1304
  const kindsRealtime = [
1304
1305
  "- **Realtime** \u2014 the only three-level chain: `realtimeServer` owns `realtimeChannel`s, which own `realtimeMessage` handlers. Pass the HANDLE, not a name (a channel path is unique only within its server).",
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  loadDefault
3
- } from "./chunk-VVXPK6SE.js";
3
+ } from "./chunk-3NFUWXOC.js";
4
4
  import {
5
5
  UsageError,
6
6
  missingArgument,
7
7
  unknownSubcommand
8
- } from "./chunk-FY6LXRR6.js";
8
+ } from "./chunk-6USV65XA.js";
9
9
  import {
10
10
  readLockFile,
11
11
  writeLockFile
@@ -15,7 +15,7 @@ import "./chunk-GNPVYOPB.js";
15
15
  import {
16
16
  Xano
17
17
  } from "./chunk-55VHDNW5.js";
18
- import "./chunk-QO4I5OYF.js";
18
+ import "./chunk-DYCLVQXW.js";
19
19
  import "./chunk-5L4X5LS6.js";
20
20
  import "./chunk-WHOJWOSV.js";
21
21
  import "./chunk-5XZ744TS.js";
@@ -229,4 +229,4 @@ ${lines}
229
229
  export {
230
230
  runLockCommand
231
231
  };
232
- //# sourceMappingURL=lock-commands-R22J54XV.js.map
232
+ //# sourceMappingURL=lock-commands-XOYS75YQ.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-NUQCEOKA.js";
5
5
  import {
6
6
  runNpm
7
- } from "./chunk-47WDWMBJ.js";
7
+ } from "./chunk-WUSKBXXD.js";
8
8
  import {
9
9
  serverMessage
10
10
  } from "./chunk-3IGNIP6R.js";
@@ -12,7 +12,7 @@ import {
12
12
  UsageError,
13
13
  indentBlock,
14
14
  missingArgument
15
- } from "./chunk-FY6LXRR6.js";
15
+ } from "./chunk-6USV65XA.js";
16
16
  import {
17
17
  blank,
18
18
  detail,
@@ -23,7 +23,7 @@ import {
23
23
  success,
24
24
  warn
25
25
  } from "./chunk-EZG76F7R.js";
26
- import "./chunk-QO4I5OYF.js";
26
+ import "./chunk-DYCLVQXW.js";
27
27
 
28
28
  // src/emit/marketplace-command.ts
29
29
  import { existsSync, readFileSync } from "fs";
@@ -376,4 +376,4 @@ export {
376
376
  runMarketplaceListCommand,
377
377
  runMarketplaceSearchCommand
378
378
  };
379
- //# sourceMappingURL=marketplace-command-XJIWL4YP.js.map
379
+ //# sourceMappingURL=marketplace-command-UVV3XAOL.js.map
package/dist/node.js CHANGED
@@ -108,8 +108,8 @@ import {
108
108
  run,
109
109
  writeArtifact,
110
110
  writeBundle
111
- } from "./chunk-VVXPK6SE.js";
112
- import "./chunk-FY6LXRR6.js";
111
+ } from "./chunk-3NFUWXOC.js";
112
+ import "./chunk-6USV65XA.js";
113
113
  import {
114
114
  readLockFile,
115
115
  writeLockFile
@@ -120,7 +120,7 @@ import {
120
120
  Xano,
121
121
  workspace
122
122
  } from "./chunk-55VHDNW5.js";
123
- import "./chunk-QO4I5OYF.js";
123
+ import "./chunk-DYCLVQXW.js";
124
124
  import {
125
125
  LAMBDA_BINDINGS,
126
126
  LAMBDA_CODE_FILTERS,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  assertBundleInput,
3
3
  loadBundleText
4
- } from "./chunk-HKAX756N.js";
4
+ } from "./chunk-W2G2WPTB.js";
5
5
  import {
6
6
  importWorkspaceArchive,
7
7
  planWorkspaceImport
8
8
  } from "./chunk-5WGEURVI.js";
9
9
  import {
10
10
  confirm
11
- } from "./chunk-EWFHDJY5.js";
11
+ } from "./chunk-ZO3HJOCJ.js";
12
12
  import {
13
13
  encodeWorkspaceArchive
14
14
  } from "./chunk-ZUTSMMAG.js";
@@ -24,11 +24,11 @@ import "./chunk-7REDODS2.js";
24
24
  import "./chunk-X4DVXBFY.js";
25
25
  import {
26
26
  resolveLockPath
27
- } from "./chunk-VVXPK6SE.js";
27
+ } from "./chunk-3NFUWXOC.js";
28
28
  import {
29
29
  UsageError,
30
30
  assertWritableDest
31
- } from "./chunk-FY6LXRR6.js";
31
+ } from "./chunk-6USV65XA.js";
32
32
  import {
33
33
  readLockFile
34
34
  } from "./chunk-HJPTWBLH.js";
@@ -43,7 +43,7 @@ import {
43
43
  } from "./chunk-EZG76F7R.js";
44
44
  import "./chunk-GNPVYOPB.js";
45
45
  import "./chunk-55VHDNW5.js";
46
- import "./chunk-QO4I5OYF.js";
46
+ import "./chunk-DYCLVQXW.js";
47
47
  import "./chunk-5L4X5LS6.js";
48
48
  import "./chunk-WHOJWOSV.js";
49
49
  import "./chunk-5XZ744TS.js";
@@ -338,7 +338,7 @@ async function runReleaseCommand(args) {
338
338
  { withSeed: req.records === true }
339
339
  );
340
340
  if (args.static !== void 0) {
341
- const { assertNoSeedLeaks } = await import("./deploy-command-SXX6RJWM.js");
341
+ const { assertNoSeedLeaks } = await import("./deploy-command-4R6BYC6G.js");
342
342
  await assertNoSeedLeaks(args.static, nonPublicSeedValues, args.allowSeedInStatic);
343
343
  }
344
344
  const workspaceId = auth.workspaceId;
@@ -405,7 +405,7 @@ async function runReleaseCommand(args) {
405
405
  unchangedEnv: losses.unchangedEnv
406
406
  };
407
407
  if (args.static !== void 0) {
408
- const { buildStaticEnv, deployStaticTo } = await import("./deploy-command-SXX6RJWM.js");
408
+ const { buildStaticEnv, deployStaticTo } = await import("./deploy-command-4R6BYC6G.js");
409
409
  const env = buildStaticEnv(auth.instance, args.staticEnv);
410
410
  const explicit = Object.keys(args.staticEnv).length > 0;
411
411
  summary.static = await deployStaticTo(
@@ -424,4 +424,4 @@ async function runReleaseCommand(args) {
424
424
  export {
425
425
  runReleaseCommand
426
426
  };
427
- //# sourceMappingURL=release-command-6PLMLGDK.js.map
427
+ //# sourceMappingURL=release-command-HZUY2XZX.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveMetaTarget
3
- } from "./chunk-MWLNBSTY.js";
3
+ } from "./chunk-BT2CSEC5.js";
4
4
  import "./chunk-DGSF2Q5H.js";
5
5
  import "./chunk-7DKX2SPN.js";
6
6
  import "./chunk-NDZFBZHC.js";
@@ -19,7 +19,7 @@ import {
19
19
  import "./chunk-7REDODS2.js";
20
20
  import {
21
21
  unknownSubcommand
22
- } from "./chunk-FY6LXRR6.js";
22
+ } from "./chunk-6USV65XA.js";
23
23
  import {
24
24
  blank,
25
25
  detail,
@@ -29,7 +29,7 @@ import {
29
29
  warn
30
30
  } from "./chunk-EZG76F7R.js";
31
31
  import "./chunk-GNPVYOPB.js";
32
- import "./chunk-QO4I5OYF.js";
32
+ import "./chunk-DYCLVQXW.js";
33
33
 
34
34
  // src/deploy/tests.ts
35
35
  var TIMEOUT_MS = 12e4;
@@ -380,4 +380,4 @@ export {
380
380
  runSuite,
381
381
  runTestCommand
382
382
  };
383
- //# sourceMappingURL=test-command-LLPXKT35.js.map
383
+ //# sourceMappingURL=test-command-72Y5S22H.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  assertBundleInput,
3
3
  loadBundleText
4
- } from "./chunk-HKAX756N.js";
5
- import "./chunk-VVXPK6SE.js";
6
- import "./chunk-FY6LXRR6.js";
4
+ } from "./chunk-W2G2WPTB.js";
5
+ import "./chunk-3NFUWXOC.js";
6
+ import "./chunk-6USV65XA.js";
7
7
  import "./chunk-HJPTWBLH.js";
8
8
  import {
9
9
  blank,
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-EZG76F7R.js";
16
16
  import "./chunk-GNPVYOPB.js";
17
17
  import "./chunk-55VHDNW5.js";
18
- import "./chunk-QO4I5OYF.js";
18
+ import "./chunk-DYCLVQXW.js";
19
19
  import "./chunk-5L4X5LS6.js";
20
20
  import "./chunk-WHOJWOSV.js";
21
21
  import "./chunk-5XZ744TS.js";
@@ -119,4 +119,4 @@ function fmt(v) {
119
119
  export {
120
120
  runValidateCommand
121
121
  };
122
- //# sourceMappingURL=validate-command-WAT3ZJT3.js.map
122
+ //# sourceMappingURL=validate-command-KDGH537H.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchWorkspaceBundle,
3
3
  runCodegenCommand
4
- } from "./chunk-CBL57QBQ.js";
4
+ } from "./chunk-2V4YE6QC.js";
5
5
  import "./chunk-P3TTMWUP.js";
6
6
  import {
7
7
  resolveOutputTarget
@@ -17,9 +17,9 @@ import {
17
17
  isMachineOutput,
18
18
  writeJson
19
19
  } from "./chunk-NUQCEOKA.js";
20
- import "./chunk-4HKZH6YK.js";
21
- import "./chunk-WRYT2PAX.js";
22
- import "./chunk-47WDWMBJ.js";
20
+ import "./chunk-HQ2CBRVI.js";
21
+ import "./chunk-CMZLPTGW.js";
22
+ import "./chunk-WUSKBXXD.js";
23
23
  import {
24
24
  fetchOrExplain,
25
25
  httpFailure
@@ -36,11 +36,11 @@ import "./chunk-YZ4GU6F5.js";
36
36
  import "./chunk-6DHJVLYP.js";
37
37
  import "./chunk-4BXJGVZ3.js";
38
38
  import "./chunk-U3G2UW65.js";
39
- import "./chunk-VVXPK6SE.js";
39
+ import "./chunk-3NFUWXOC.js";
40
40
  import {
41
41
  removedSubcommand,
42
42
  unknownSubcommand
43
- } from "./chunk-FY6LXRR6.js";
43
+ } from "./chunk-6USV65XA.js";
44
44
  import "./chunk-HJPTWBLH.js";
45
45
  import {
46
46
  formatFields,
@@ -50,7 +50,7 @@ import {
50
50
  } from "./chunk-EZG76F7R.js";
51
51
  import "./chunk-GNPVYOPB.js";
52
52
  import "./chunk-55VHDNW5.js";
53
- import "./chunk-QO4I5OYF.js";
53
+ import "./chunk-DYCLVQXW.js";
54
54
  import "./chunk-5L4X5LS6.js";
55
55
  import "./chunk-WHOJWOSV.js";
56
56
  import "./chunk-5XZ744TS.js";
@@ -155,4 +155,4 @@ async function runExport(args) {
155
155
  export {
156
156
  runWorkspaceCommand
157
157
  };
158
- //# sourceMappingURL=workspace-command-JKMI7RZ4.js.map
158
+ //# sourceMappingURL=workspace-command-ICSI6PKO.js.map
@@ -2,10 +2,11 @@
2
2
 
3
3
  > Read when the workspace defines an `agent()` or an `mcpServer()`.
4
4
 
5
- - `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, 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`, so a server that carries LLM settings can say so. 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 (an earlier result) THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral; does NOT fire in the sandbox (see Gotchas).
5
+ - `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, 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; not in sandbox.
6
6
  - `tools?`: a `ToolsetToolEntry[]`. Pass the `tool()` HANDLES directly (`tools: [saveNote]`), like every other collection in the SDK; use the `{ tool, enabled?, auth? }` wrapper only when a tool needs `enabled: false` or per-tool `auth`. `auth` names an auth **table** (a `table({ auth: true })` handle or its name) — Xano's ONLY MCP auth surface (per-tool; there is no server-level gate). An entry that names no tool (no handle, no `id`) THROWS at export rather than emitting the `id: 0` null reference it used to; a deliberate raw `id: 0` warns and is carried through, so a pulled workspace still round-trips.
7
7
  - `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 })`.
8
8
  - `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.
9
9
  - `tools?`: same `ToolsetToolEntry[]` as `mcpServer` — bare `tool()` handles, or a `{ tool, enabled?, auth? }` wrapper when one needs `enabled`/`auth`.
10
10
  - `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.
11
11
  - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var({ name, value: 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 }}`. Tool-call / per-step data (when tools ran) rides `.toolCalls` / `.steps` on the same envelope — both optional, absent or empty when no tools executed.
12
+ - **Marketplace:** for chat history, use `@xanots/chatbot`; for vector RAG, use `@xanots/vector` (`tools: [vector.searchTool]`). Find add-ons with `xanots marketplace search <q>`.
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanots v0.0.3-beta.0
1
+ # xanots v0.0.3
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
@@ -646,13 +646,14 @@ The run is isolated in ways that make a correct test fail for reasons the failur
646
646
 
647
647
  > Read when the workspace defines an `agent()` or an `mcpServer()`.
648
648
 
649
- - `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, 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`, so a server that carries LLM settings can say so. 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 (an earlier result) THROWS, so resolve ONCE from the instance base URL. Fires on an ephemeral; does NOT fire in the sandbox (see Gotchas).
649
+ - `mcpServer({ name, guid?, description?, instructions?, docs?, enabled?, canonical?, spec?, tags?, history?, tools?, 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; not in sandbox.
650
650
  - `tools?`: a `ToolsetToolEntry[]`. Pass the `tool()` HANDLES directly (`tools: [saveNote]`), like every other collection in the SDK; use the `{ tool, enabled?, auth? }` wrapper only when a tool needs `enabled: false` or per-tool `auth`. `auth` names an auth **table** (a `table({ auth: true })` handle or its name) — Xano's ONLY MCP auth surface (per-tool; there is no server-level gate). An entry that names no tool (no handle, no `id`) THROWS at export rather than emitting the `id: 0` null reference it used to; a deliberate raw `id: 0` warns and is carried through, so a pulled workspace still round-trips.
651
651
  - `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 })`.
652
652
  - `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.
653
653
  - `tools?`: same `ToolsetToolEntry[]` as `mcpServer` — bare `tool()` handles, or a `{ tool, enabled?, auth? }` wrapper when one needs `enabled`/`auth`.
654
654
  - `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.
655
655
  - **Run + read recipe (`s.ai.agent.run`):** bind the run to a var (`s.ai.agent.run({ agent, args, as: "run" })`) — it produces a rich envelope, and the completion is at **`.result`**. Read one structured field with a dotted ref (`response: ref("run.result.priority")`) or the whole completion (`ref("run.result")`, typed from `output.schema`); persist it in a later step the same way (`s.set_var({ name, value: 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 }}`. Tool-call / per-step data (when tools ran) rides `.toolCalls` / `.steps` on the same envelope — both optional, absent or empty when no tools executed.
656
+ - **Marketplace:** for chat history, use `@xanots/chatbot`; for vector RAG, use `@xanots/vector` (`tools: [vector.searchTool]`). Find add-ons with `xanots marketplace search <q>`.
656
657
 
657
658
  # Realtime def shapes
658
659
 
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanots v0.0.3-beta.0
1
+ # xanots v0.0.3
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4