@xanots/sdk 0.0.4 → 0.0.6

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 (78) hide show
  1. package/CHANGELOG.md +21 -10
  2. package/README.md +7 -3
  3. package/dist/.build-fingerprint +1 -0
  4. package/dist/{agent-file-refresh-IJ7GN2FJ.js → agent-file-refresh-6XT23SLU.js} +4 -4
  5. package/dist/bin.js +8 -8
  6. package/dist/branch-commands-R4FR75UW.js +134 -0
  7. package/dist/{chunk-7SISR3CS.js → chunk-2SUCC4DV.js} +2 -2
  8. package/dist/{chunk-BPEEGJJA.js → chunk-3FQD3QME.js} +3 -3
  9. package/dist/{chunk-EAIR6VUL.js → chunk-4HDOP7LH.js} +8 -67
  10. package/dist/chunk-4PTSTDIG.js +59 -0
  11. package/dist/{live-diff-FP4SFNT4.js → chunk-5HCDZ2XN.js} +67 -6
  12. package/dist/{chunk-5WGEURVI.js → chunk-6AAT2AYQ.js} +21 -1
  13. package/dist/{chunk-AJ7JQ4OU.js → chunk-AAFBSOSD.js} +3 -3
  14. package/dist/{chunk-VWGJQTNA.js → chunk-CEFYM6N5.js} +4 -4
  15. package/dist/{chunk-YUPQOLFX.js → chunk-CQBJNFDK.js} +2 -2
  16. package/dist/{chunk-FN4OQT2J.js → chunk-CU5VOSTW.js} +4 -4
  17. package/dist/{chunk-YUBJLB6G.js → chunk-EFH4NFPY.js} +6 -3
  18. package/dist/chunk-EQW3YT5U.js +159 -0
  19. package/dist/{chunk-CYJ7R3AD.js → chunk-GC7ZQHW7.js} +22 -10
  20. package/dist/{chunk-KGNJM4LN.js → chunk-JQLR64UC.js} +6 -5
  21. package/dist/{chunk-PXXLBXOP.js → chunk-JRGDLAEA.js} +2 -2
  22. package/dist/{chunk-7REDODS2.js → chunk-LLWK6H77.js} +20 -2
  23. package/dist/{chunk-WGDAOOXG.js → chunk-MU3O43L2.js} +3 -3
  24. package/dist/{chunk-YYSJAAJM.js → chunk-OKNSR7MT.js} +51 -3
  25. package/dist/{chunk-MFIHIS6B.js → chunk-OLQLJY5T.js} +2 -2
  26. package/dist/{chunk-ACQCK4DT.js → chunk-OR43PDCW.js} +2 -2
  27. package/dist/{chunk-QUUB7HYK.js → chunk-P5C2YKAM.js} +2 -2
  28. package/dist/{chunk-D6OGU2AI.js → chunk-P5OAM3G2.js} +2 -2
  29. package/dist/{chunk-6DHJVLYP.js → chunk-Q77KNEUL.js} +1 -1
  30. package/dist/{chunk-SWIXWJIY.js → chunk-QVSUMHNN.js} +3 -3
  31. package/dist/{chunk-C56BC2FY.js → chunk-SG4UBJ47.js} +2 -2
  32. package/dist/{chunk-DUC3PXDG.js → chunk-SOCYCBYG.js} +54 -27
  33. package/dist/{chunk-VKD3EBKG.js → chunk-TYBB7ON3.js} +58 -38
  34. package/dist/{chunk-VTIL47DT.js → chunk-W5NOKYEG.js} +6 -2
  35. package/dist/{chunk-DGSF2Q5H.js → chunk-WJYB7DSI.js} +2 -2
  36. package/dist/{chunk-T6N3VMMO.js → chunk-Y7BARS25.js} +2 -2
  37. package/dist/cli.d.ts +36 -3
  38. package/dist/cli.js +7 -7
  39. package/dist/{codegen-command-Z7WQMOJ7.js → codegen-command-6XXOIQ25.js} +18 -18
  40. package/dist/{completion-4GYN752B.js → completion-A6BZ3XGU.js} +8 -7
  41. package/dist/{deploy-command-M2S4HHLC.js → deploy-command-MTQQXPOO.js} +16 -16
  42. package/dist/{env-target-GSFCYHKZ.js → env-target-C5JFLDK3.js} +6 -6
  43. package/dist/{ephemeral-command-6WJW7LP6.js → ephemeral-command-K3UJSDS4.js} +13 -13
  44. package/dist/index.d.ts +67 -24
  45. package/dist/index.js +6 -6
  46. package/dist/init-command-AY4KSXR5.js +30 -0
  47. package/dist/internal.js +13 -11
  48. package/dist/{io-7VIA5SON.js → io-65CJNLYI.js} +3 -3
  49. package/dist/live-diff-QK4KC2FJ.js +12 -0
  50. package/dist/{lock-KXOJIGCG.js → lock-PDFCNYUW.js} +2 -2
  51. package/dist/{lock-commands-7IH7RSSP.js → lock-commands-MC6I3MZA.js} +8 -8
  52. package/dist/{login-command-QM5SBBI2.js → login-command-LCOOOPO2.js} +139 -36
  53. package/dist/{logout-command-THPASOHM.js → logout-command-J2AG5NKC.js} +2 -2
  54. package/dist/{marketplace-command-463DT7O7.js → marketplace-command-BCOAAN2I.js} +3 -3
  55. package/dist/{meta-client-OW5WKWW7.js → meta-client-57ZWVHST.js} +2 -2
  56. package/dist/node.js +10 -10
  57. package/dist/{profile-command-EUWPVWED.js → profile-command-ZPC2DPFV.js} +3 -3
  58. package/dist/{release-command-M4CVNTWL.js → release-command-V4K4IORX.js} +193 -25
  59. package/dist/{sandbox-details-command-BRII3QHG.js → sandbox-details-command-DMY2KGA2.js} +4 -4
  60. package/dist/{sandbox-export-command-PCZ5FL4U.js → sandbox-export-command-R6QMEK3D.js} +5 -5
  61. package/dist/scaffold.d.ts +10 -13
  62. package/dist/scaffold.js +3 -3
  63. package/dist/{test-command-U4G5Y3UM.js → test-command-OEBIGOPP.js} +8 -8
  64. package/dist/{upgrade-command-CKJ4BS2P.js → upgrade-command-52AAZ3NV.js} +13 -13
  65. package/dist/{validate-command-S5N37JRP.js → validate-command-KTLPSSH7.js} +10 -10
  66. package/dist/{workspace-command-RALSEJSW.js → workspace-command-LX5S5N2H.js} +24 -20
  67. package/guides/cli.md +1 -0
  68. package/guides/deploying.md +18 -0
  69. package/guides/environment.md +1 -1
  70. package/guides/scaffold.md +3 -2
  71. package/llms/statements-calls.md +1 -1
  72. package/llms/statements-data.md +2 -1
  73. package/llms-full.txt +4 -3
  74. package/llms.txt +1 -1
  75. package/manifest.json +6 -2
  76. package/package.json +1 -1
  77. package/dist/chunk-ALNQCWAW.js +0 -29
  78. package/dist/init-command-GJUPWTKA.js +0 -30
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  fetchWorkspaceBundle,
3
3
  runCodegenCommand
4
- } from "./chunk-VKD3EBKG.js";
4
+ } from "./chunk-TYBB7ON3.js";
5
5
  import "./chunk-ZOYMZZ3S.js";
6
6
  import {
7
7
  resolveOutputTarget
8
- } from "./chunk-AJ7JQ4OU.js";
9
- import "./chunk-ACQCK4DT.js";
8
+ } from "./chunk-AAFBSOSD.js";
9
+ import "./chunk-OR43PDCW.js";
10
10
  import {
11
11
  printMicroserviceSection,
12
12
  readMicroservices
@@ -14,35 +14,35 @@ import {
14
14
  import {
15
15
  ENV_WORKSPACE,
16
16
  getAccessToken
17
- } from "./chunk-C56BC2FY.js";
18
- import "./chunk-7REDODS2.js";
17
+ } from "./chunk-SG4UBJ47.js";
18
+ import "./chunk-LLWK6H77.js";
19
19
  import "./chunk-QTNO2WD6.js";
20
20
  import "./chunk-ZUTSMMAG.js";
21
21
  import "./chunk-X4DVXBFY.js";
22
- import "./chunk-EAIR6VUL.js";
22
+ import "./chunk-4HDOP7LH.js";
23
23
  import {
24
24
  isMachineOutput,
25
25
  writeJson
26
26
  } from "./chunk-NUQCEOKA.js";
27
- import "./chunk-7SISR3CS.js";
27
+ import "./chunk-2SUCC4DV.js";
28
28
  import "./chunk-ZSYZTGJH.js";
29
29
  import {
30
30
  fetchOrExplain,
31
31
  httpFailure
32
32
  } from "./chunk-3IGNIP6R.js";
33
- import "./chunk-PXXLBXOP.js";
33
+ import "./chunk-JRGDLAEA.js";
34
34
  import "./chunk-LU7TRWMC.js";
35
- import "./chunk-WGDAOOXG.js";
36
- import "./chunk-QUUB7HYK.js";
37
- import "./chunk-6DHJVLYP.js";
35
+ import "./chunk-MU3O43L2.js";
36
+ import "./chunk-P5C2YKAM.js";
37
+ import "./chunk-Q77KNEUL.js";
38
38
  import "./chunk-4BXJGVZ3.js";
39
- import "./chunk-CYJ7R3AD.js";
40
- import "./chunk-DUC3PXDG.js";
39
+ import "./chunk-GC7ZQHW7.js";
40
+ import "./chunk-SOCYCBYG.js";
41
41
  import {
42
42
  removedSubcommand,
43
43
  unknownSubcommand
44
- } from "./chunk-KGNJM4LN.js";
45
- import "./chunk-MFIHIS6B.js";
44
+ } from "./chunk-JQLR64UC.js";
45
+ import "./chunk-OLQLJY5T.js";
46
46
  import "./chunk-GNPVYOPB.js";
47
47
  import {
48
48
  formatFields,
@@ -50,12 +50,12 @@ import {
50
50
  step,
51
51
  success
52
52
  } from "./chunk-EZG76F7R.js";
53
- import "./chunk-BPEEGJJA.js";
54
- import "./chunk-YYSJAAJM.js";
55
- import "./chunk-YUPQOLFX.js";
53
+ import "./chunk-3FQD3QME.js";
54
+ import "./chunk-OKNSR7MT.js";
55
+ import "./chunk-CQBJNFDK.js";
56
56
  import "./chunk-WHOJWOSV.js";
57
57
  import "./chunk-5XZ744TS.js";
58
- import "./chunk-YUBJLB6G.js";
58
+ import "./chunk-EFH4NFPY.js";
59
59
 
60
60
  // src/emit/workspace-command.ts
61
61
  import { writeFileSync } from "fs";
@@ -69,6 +69,10 @@ async function runWorkspaceCommand(args) {
69
69
  return runExport(args);
70
70
  case "codegen":
71
71
  return runCodegenCommand(args, { kind: "workspace" });
72
+ case "branch": {
73
+ const { runBranchCommand } = await import("./branch-commands-R4FR75UW.js");
74
+ return runBranchCommand(args);
75
+ }
72
76
  case "deploy":
73
77
  throw removedSubcommand("workspace", "deploy");
74
78
  default:
@@ -156,4 +160,4 @@ async function runExport(args) {
156
160
  export {
157
161
  runWorkspaceCommand
158
162
  };
159
- //# sourceMappingURL=workspace-command-RALSEJSW.js.map
163
+ //# sourceMappingURL=workspace-command-LX5S5N2H.js.map
package/guides/cli.md CHANGED
@@ -28,6 +28,7 @@ xanots lock prune --no-verify --entry=xano/index.ts --yes dbo:notes # …or dro
28
28
  xanots lock adopt live-export.json --entry=xano/index.ts --yes # seed the lock from a live engine export
29
29
 
30
30
  xanots login # OAuth sign-in (once) — pick the instance + workspace at consent
31
+ xanots login --paste # …when the browser can't reach this machine's 127.0.0.1 (remote shell, container, Codespace)
31
32
  xanots workspace details # which instance/workspace am I bound to, and via which credential?
32
33
  xanots deploy ./xano/index.ts # compile + import into a live ephemeral (the dev loop) → URL
33
34
  xanots deploy ./xano/index.ts --dest sandbox # …or your throwaway singleton sandbox
@@ -21,6 +21,24 @@ The credential caches by default in a **shared** `~/.xanots/auth.json`, reusable
21
21
  from **any** project directory — so a single `xanots login` covers all your projects.
22
22
  Override the OAuth host with `--origin`/`$XANO_ORIGIN` and the loopback port with `--port`.
23
23
 
24
+ **When the browser can't reach this machine** — a remote shell, a container, a
25
+ Codespace — the `127.0.0.1` redirect lands nowhere and `login` waits five minutes for a
26
+ callback that will never arrive. Run `xanots login --paste` instead. It binds nothing:
27
+ it prints the authorize URL, you finish signing in in whatever browser you have, and
28
+ your browser then fails to load the `127.0.0.1` callback — which is expected. Paste that
29
+ URL back from the address bar (or just the `code=` value out of it) and the sign-in
30
+ completes. Everything else is identical, including the instance and workspace you pick
31
+ at consent.
32
+
33
+ Two things follow from how the code is bound. The paste has to happen in the same run
34
+ that printed the URL, so `--paste` needs a terminal — for automation use the environment
35
+ credential instead (see [Environment variables](environment.md)). And `--port` still
36
+ matters under `--paste`, not because anything binds it, but because it is part of the
37
+ redirect URL's identity.
38
+
39
+ Note this is **not** what `XANO_NO_BROWSER` does: that only suppresses the browser
40
+ launch, and still needs the redirect to arrive here.
41
+
24
42
  Running `login` again when a usable credential is already cached prints what you're
25
43
  signed in to and stops, rather than spending another browser round trip — pass `--force`
26
44
  to sign in anyway. That guard is also what keeps `login` from silently replacing a
@@ -20,7 +20,7 @@ are what you get when the variable is unset.
20
20
  | `XANO_GLOBAL_CONFIG` | Moves the **shared** credential cache off `~/.xanots/auth.json`. Only changes where the global cache lives; the project-local `./.xano/auth.json` and the `XANO_CONFIG`/`--config` override are unaffected. |
21
21
  | `XANO_CLIENT_FILE` | Moves the OAuth **client-registration** cache off `~/.xano/xanots-clients.json`. That file holds the `client_id` minted per auth host + redirect URI, not a credential. |
22
22
  | `XANO_ORIGIN` | OAuth host to sign in against, instead of the default — the same thing `--origin` does. |
23
- | `XANO_NO_BROWSER` | Set to anything non-empty and `xanots login` will **not** launch a browser; it prints the authorize URL to stderr for you to open yourself. The loopback server still runs and still waits for the redirect, so the flow completes once you visit the URL. For a machine that has no browser to launch, or a remote shell. |
23
+ | `XANO_NO_BROWSER` | Set to anything non-empty and `xanots login` will **not** launch a browser; it prints the authorize URL to stderr for you to open yourself. The loopback server still runs and still waits for the redirect, so the flow completes only if the browser you open it in can reach this machine's `127.0.0.1`. For a machine that has no browser to launch. When the browser is on a **different** machine, that redirect cannot arrive — use `xanots login --paste` instead. |
24
24
 
25
25
  **`xanots validate`** — its own target, deliberately separate from the deploy login
26
26
 
@@ -12,8 +12,9 @@ What `xanots init` writes, the two frontend presets, theming, add-ons, and the S
12
12
  `--marketplace <pkg>` (repeatable, comma-separated; installs add-ons and
13
13
  registers them — below), `--force` (scaffold into a non-empty folder),
14
14
  `--no-install` (skip `npm install`).
15
- In a terminal, `init` prompts for the framework, the theme, and the AI files;
16
- every prompt has a default, so pressing enter three times is a valid answer.
15
+ In a terminal, `init` prompts for the framework and the AI files; every prompt
16
+ has a default, so pressing enter twice is a valid answer. The look is never
17
+ prompted for — it comes from the flags above, or from `xanots onboard`.
17
18
  The starter backend is empty but already compiles and deploys — grow it from the
18
19
  walkthrough in `xano/EXAMPLE.md`.
19
20
 
@@ -13,7 +13,7 @@ Auth & calls:
13
13
  - `s.stream.from_request({ url, method?, …tls, as? })` — streaming external HTTP request (`mvp:streaming_api_request`); same typed field surface as `s.api.request` (no description/output envelope). `url` is REQUIRED — it shares `api.request`'s engine declaration, which has no default.
14
14
  - `s.webflow.request({ path, method?, …tls, as? })` — Webflow API request (`mvp:connect_webflow_api_request`); like `s.api.request` but addressed by `path` (host is engine-supplied), and `path` is REQUIRED — the engine rejects an empty one. No `headers`: the engine builds its own from the workspace's Webflow connection and ignores an authored value.
15
15
  - `s.task.call` / `s.tool.call` / `s.trigger.call` / `s.middleware.call` / `s.addon.call` — same `{ <target>, input?, as? }` shape against the named kind. `s.task.call` and `s.trigger.call` are WORKFLOW-TEST ONLY (see Gotchas in `llms.txt`); `s.tool.call`, `s.middleware.call` and `s.addon.call` run from any stack.
16
- - `s.action.call({ action, package?, input?, as? })` / `s.action.package.call()` — invoke a marketplace action; `package` is its slug.
16
+ - `s.action.call({ actionId, input?, registry?, as? })` / `s.action.package.call({ traceId, versionId, slug, input?, registry?, as? })` — invoke an installed action. Ids are SUPPLIED, never derived from a name: an action is installed onto the instance, so its identity is assigned at install and differs per instance — read them off a call in a pulled workspace. The package form needs all three parts; they are one composite and two of them address nothing. `registry` is the action's own settings, `input` the per-call arguments.
17
17
  - `s.cloud.job({ image, command, args?, secret?, template?, await?, as? })` — launch a containerized job. `image`/`command` are REQUIRED; omitted → `Missing param`. ⚠ `await` is SECONDS (default 60), not a boolean.
18
18
  - `s.cloud.job.status({ id, as? })` · `s.cloud.job.await({ ids, timeout, as? })` — poll one job, or block on several (`ids` a list `Value`, `timeout` in seconds; both required).
19
19
 
@@ -16,7 +16,8 @@ primary key `id`):
16
16
  - `s.db.del({ table, fieldName?, fieldValue, as? })` — delete by field match.
17
17
  - `s.db.add({ table, row?, data?, output?, as? })` — insert; `row` is a partial keyed by column.
18
18
  - A row CELL takes a tagged `Value`, a nested object of sub-keys, or a bare JS literal typed against that column: `row: { is_hidden: true, notes: "…" }` encodes exactly as `{ is_hidden: c.bool(true), notes: c.text("…") }`. The tag comes from the COLUMN, not the literal — `10` on an `f.decimal()` column is `const:decimal`, not `const:int` — so a literal contradicting its column is a compile error on a `f.*`-schema table (`{ is_hidden: "yes" }` on an `f.bool()` column) and throws at encode on a raw-`ColumnDef[]` one. An `f.enum()` column keeps its member union. A column with no literal form — obj/json/list/geo/vector/file — still needs `c.obj`/`c.array`.
19
- - `null` is accepted on EVERY column, including ones that refuse every other literal, and encodes `const:null` — a write OF null, not the same as omitting the key (omitted takes the column's type default on `add`: `[]` for a list, `{}` for obj/json, else `null`; on `edit` it is left untouched). A column's `nullable` is not consulted; the engine refuses a null it forbids.
19
+ - `null` is accepted on EVERY column, including ones that refuse every other literal, and encodes `const:null` — a write OF null, not the same as omitting the key. A column's `nullable` is not consulted at encode; the engine refuses a null it forbids.
20
+ - Omitting a key on `add` writes the column's type default — declared `default` if set, `[]` for a list, `{}` for obj/json, else `null`. That `null` is EMITTED, not what the row holds: the engine applies the column's nullability, so a `nullable` column keeps `null` and a non-nullable one lands on its type's zero value (`""`, `0`, `false`). Set the cell when the stored value matters. On `edit` an omitted key keeps its stored value.
20
21
  - An `f.password()` cell takes the PLAINTEXT — the column hashes on write, so a pre-hashed value, or a hashing filter on the cell, stores a hash of a hash that `security.check_password` can never match.
21
22
  - `s.db.edit({ table, fieldName?, fieldValue, row?, data?, output?, as? })` — update by field match.
22
23
  - `s.db.patch({ table, fieldName?, fieldValue, data, output?, as? })` — merge a partial (`data` is an object value).
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanots v0.0.4
1
+ # xanots v0.0.6
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
@@ -796,7 +796,8 @@ primary key `id`):
796
796
  - `s.db.del({ table, fieldName?, fieldValue, as? })` — delete by field match.
797
797
  - `s.db.add({ table, row?, data?, output?, as? })` — insert; `row` is a partial keyed by column.
798
798
  - A row CELL takes a tagged `Value`, a nested object of sub-keys, or a bare JS literal typed against that column: `row: { is_hidden: true, notes: "…" }` encodes exactly as `{ is_hidden: c.bool(true), notes: c.text("…") }`. The tag comes from the COLUMN, not the literal — `10` on an `f.decimal()` column is `const:decimal`, not `const:int` — so a literal contradicting its column is a compile error on a `f.*`-schema table (`{ is_hidden: "yes" }` on an `f.bool()` column) and throws at encode on a raw-`ColumnDef[]` one. An `f.enum()` column keeps its member union. A column with no literal form — obj/json/list/geo/vector/file — still needs `c.obj`/`c.array`.
799
- - `null` is accepted on EVERY column, including ones that refuse every other literal, and encodes `const:null` — a write OF null, not the same as omitting the key (omitted takes the column's type default on `add`: `[]` for a list, `{}` for obj/json, else `null`; on `edit` it is left untouched). A column's `nullable` is not consulted; the engine refuses a null it forbids.
799
+ - `null` is accepted on EVERY column, including ones that refuse every other literal, and encodes `const:null` — a write OF null, not the same as omitting the key. A column's `nullable` is not consulted at encode; the engine refuses a null it forbids.
800
+ - Omitting a key on `add` writes the column's type default — declared `default` if set, `[]` for a list, `{}` for obj/json, else `null`. That `null` is EMITTED, not what the row holds: the engine applies the column's nullability, so a `nullable` column keeps `null` and a non-nullable one lands on its type's zero value (`""`, `0`, `false`). Set the cell when the stored value matters. On `edit` an omitted key keeps its stored value.
800
801
  - An `f.password()` cell takes the PLAINTEXT — the column hashes on write, so a pre-hashed value, or a hashing filter on the cell, stores a hash of a hash that `security.check_password` can never match.
801
802
  - `s.db.edit({ table, fieldName?, fieldValue, row?, data?, output?, as? })` — update by field match.
802
803
  - `s.db.patch({ table, fieldName?, fieldValue, data, output?, as? })` — merge a partial (`data` is an object value).
@@ -901,7 +902,7 @@ Auth & calls:
901
902
  - `s.stream.from_request({ url, method?, …tls, as? })` — streaming external HTTP request (`mvp:streaming_api_request`); same typed field surface as `s.api.request` (no description/output envelope). `url` is REQUIRED — it shares `api.request`'s engine declaration, which has no default.
902
903
  - `s.webflow.request({ path, method?, …tls, as? })` — Webflow API request (`mvp:connect_webflow_api_request`); like `s.api.request` but addressed by `path` (host is engine-supplied), and `path` is REQUIRED — the engine rejects an empty one. No `headers`: the engine builds its own from the workspace's Webflow connection and ignores an authored value.
903
904
  - `s.task.call` / `s.tool.call` / `s.trigger.call` / `s.middleware.call` / `s.addon.call` — same `{ <target>, input?, as? }` shape against the named kind. `s.task.call` and `s.trigger.call` are WORKFLOW-TEST ONLY (see Gotchas in `llms.txt`); `s.tool.call`, `s.middleware.call` and `s.addon.call` run from any stack.
904
- - `s.action.call({ action, package?, input?, as? })` / `s.action.package.call()` — invoke a marketplace action; `package` is its slug.
905
+ - `s.action.call({ actionId, input?, registry?, as? })` / `s.action.package.call({ traceId, versionId, slug, input?, registry?, as? })` — invoke an installed action. Ids are SUPPLIED, never derived from a name: an action is installed onto the instance, so its identity is assigned at install and differs per instance — read them off a call in a pulled workspace. The package form needs all three parts; they are one composite and two of them address nothing. `registry` is the action's own settings, `input` the per-call arguments.
905
906
  - `s.cloud.job({ image, command, args?, secret?, template?, await?, as? })` — launch a containerized job. `image`/`command` are REQUIRED; omitted → `Missing param`. ⚠ `await` is SECONDS (default 60), not a boolean.
906
907
  - `s.cloud.job.status({ id, as? })` · `s.cloud.job.await({ ids, timeout, as? })` — poll one job, or block on several (`ids` a list `Value`, `timeout` in seconds; both required).
907
908
 
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanots v0.0.4
1
+ # xanots v0.0.6
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanots",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
5
5
  "coverage": {
6
6
  "objectKinds": {
@@ -9076,9 +9076,13 @@
9076
9076
  "flag": "--local",
9077
9077
  "description": "Use the project-local ./.xano/auth.json instead of the shared cache"
9078
9078
  },
9079
+ {
9080
+ "flag": "--paste",
9081
+ "description": "Sign in without the loopback callback: open the printed URL in any browser and paste the redirect back. For a host whose 127.0.0.1 the browser cannot reach — remote shell, container, Codespace. Needs a terminal."
9082
+ },
9079
9083
  {
9080
9084
  "flag": "--port <n>",
9081
- "description": "Fixed loopback callback port (default: ephemeral)"
9085
+ "description": "Loopback callback port (default: 47100)"
9082
9086
  },
9083
9087
  {
9084
9088
  "flag": "--scope \"<list>\"",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xanots/sdk",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "XanoTS — your Xano backend as TypeScript. `xanots deploy` ships your typed workspace (and an optional static frontend) to a live, auto-expiring ephemeral environment and prints its URL. init → deploy → URL.",
5
5
  "keywords": [
6
6
  "xanots",
@@ -1,29 +0,0 @@
1
- import {
2
- UsageError
3
- } from "./chunk-KGNJM4LN.js";
4
- import {
5
- style
6
- } from "./chunk-EZG76F7R.js";
7
-
8
- // src/emit/prompt.ts
9
- import { createInterface } from "readline";
10
- async function confirm(message, opts) {
11
- if (process.stdin.isTTY !== true) {
12
- throw new UsageError(
13
- `Cannot ask for confirmation: stdin is not a terminal. Re-run with ${opts.flag} to confirm without being asked.`,
14
- { helpFor: opts.helpFor }
15
- );
16
- }
17
- const rl = createInterface({ input: process.stdin, output: process.stderr });
18
- try {
19
- const answer = await new Promise((res) => rl.question(`${style.yellow("?")} ${message} (y/N) `, res));
20
- return /^y(es)?$/i.test(answer.trim());
21
- } finally {
22
- rl.close();
23
- }
24
- }
25
-
26
- export {
27
- confirm
28
- };
29
- //# sourceMappingURL=chunk-ALNQCWAW.js.map
@@ -1,30 +0,0 @@
1
- import {
2
- projectShellFiles,
3
- runInitCommand,
4
- sanitizeAppName
5
- } from "./chunk-EAIR6VUL.js";
6
- import {
7
- resolveAiFlags
8
- } from "./chunk-7SISR3CS.js";
9
- import "./chunk-ZSYZTGJH.js";
10
- import "./chunk-WGDAOOXG.js";
11
- import "./chunk-QUUB7HYK.js";
12
- import "./chunk-6DHJVLYP.js";
13
- import "./chunk-DUC3PXDG.js";
14
- import "./chunk-KGNJM4LN.js";
15
- import "./chunk-MFIHIS6B.js";
16
- import "./chunk-GNPVYOPB.js";
17
- import "./chunk-EZG76F7R.js";
18
- import "./chunk-BPEEGJJA.js";
19
- import "./chunk-YYSJAAJM.js";
20
- import "./chunk-YUPQOLFX.js";
21
- import "./chunk-WHOJWOSV.js";
22
- import "./chunk-5XZ744TS.js";
23
- import "./chunk-YUBJLB6G.js";
24
- export {
25
- projectShellFiles,
26
- resolveAiFlags,
27
- runInitCommand,
28
- sanitizeAppName
29
- };
30
- //# sourceMappingURL=init-command-GJUPWTKA.js.map