@usenaive-sdk/cli 0.12.5 → 0.13.1

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 (164) hide show
  1. package/README.md +69 -6
  2. package/dist/client.d.ts +48 -0
  3. package/dist/client.js +199 -27
  4. package/dist/client.js.map +1 -1
  5. package/dist/commands/aeo.js +58 -23
  6. package/dist/commands/aeo.js.map +1 -1
  7. package/dist/commands/app-data.js +29 -11
  8. package/dist/commands/app-data.js.map +1 -1
  9. package/dist/commands/approvals.js +142 -9
  10. package/dist/commands/approvals.js.map +1 -1
  11. package/dist/commands/apps.d.ts +7 -0
  12. package/dist/commands/apps.js +255 -18
  13. package/dist/commands/apps.js.map +1 -1
  14. package/dist/commands/audio.d.ts +9 -0
  15. package/dist/commands/audio.js +391 -0
  16. package/dist/commands/audio.js.map +1 -0
  17. package/dist/commands/auth.d.ts +1 -0
  18. package/dist/commands/auth.js +47 -19
  19. package/dist/commands/auth.js.map +1 -1
  20. package/dist/commands/billing.js +9 -9
  21. package/dist/commands/billing.js.map +1 -1
  22. package/dist/commands/brain.js +813 -54
  23. package/dist/commands/brain.js.map +1 -1
  24. package/dist/commands/browser.js +8 -8
  25. package/dist/commands/browser.js.map +1 -1
  26. package/dist/commands/business.js +117 -16
  27. package/dist/commands/business.js.map +1 -1
  28. package/dist/commands/clone.js +8 -4
  29. package/dist/commands/clone.js.map +1 -1
  30. package/dist/commands/companies.d.ts +8 -0
  31. package/dist/commands/companies.js +137 -47
  32. package/dist/commands/companies.js.map +1 -1
  33. package/dist/commands/company-data.d.ts +2 -0
  34. package/dist/commands/company-data.js +168 -0
  35. package/dist/commands/company-data.js.map +1 -0
  36. package/dist/commands/compute.js +295 -18
  37. package/dist/commands/compute.js.map +1 -1
  38. package/dist/commands/connections.d.ts +6 -0
  39. package/dist/commands/connections.js +42 -2
  40. package/dist/commands/connections.js.map +1 -1
  41. package/dist/commands/domains.js +63 -19
  42. package/dist/commands/domains.js.map +1 -1
  43. package/dist/commands/ecommerce.js +19 -9
  44. package/dist/commands/ecommerce.js.map +1 -1
  45. package/dist/commands/email.js +56 -9
  46. package/dist/commands/email.js.map +1 -1
  47. package/dist/commands/formation.js +5 -5
  48. package/dist/commands/formation.js.map +1 -1
  49. package/dist/commands/identity.js +4 -3
  50. package/dist/commands/identity.js.map +1 -1
  51. package/dist/commands/images.js +86 -12
  52. package/dist/commands/images.js.map +1 -1
  53. package/dist/commands/init.d.ts +3 -0
  54. package/dist/commands/init.js +44 -36
  55. package/dist/commands/init.js.map +1 -1
  56. package/dist/commands/jobs.js +1 -0
  57. package/dist/commands/jobs.js.map +1 -1
  58. package/dist/commands/legacy-auth.d.ts +27 -0
  59. package/dist/commands/legacy-auth.js +64 -0
  60. package/dist/commands/legacy-auth.js.map +1 -0
  61. package/dist/commands/llm.js +14 -1
  62. package/dist/commands/llm.js.map +1 -1
  63. package/dist/commands/login.js +2 -0
  64. package/dist/commands/login.js.map +1 -1
  65. package/dist/commands/logout.d.ts +7 -0
  66. package/dist/commands/logout.js +55 -0
  67. package/dist/commands/logout.js.map +1 -0
  68. package/dist/commands/media.js +3 -3
  69. package/dist/commands/media.js.map +1 -1
  70. package/dist/commands/mobile.d.ts +2 -0
  71. package/dist/commands/mobile.js +42 -1
  72. package/dist/commands/mobile.js.map +1 -1
  73. package/dist/commands/payments.js +1 -1
  74. package/dist/commands/people.d.ts +2 -0
  75. package/dist/commands/people.js +197 -0
  76. package/dist/commands/people.js.map +1 -0
  77. package/dist/commands/phone.js +40 -83
  78. package/dist/commands/phone.js.map +1 -1
  79. package/dist/commands/projects.d.ts +13 -0
  80. package/dist/commands/projects.js +220 -0
  81. package/dist/commands/projects.js.map +1 -0
  82. package/dist/commands/register.js +13 -5
  83. package/dist/commands/register.js.map +1 -1
  84. package/dist/commands/sandbox.d.ts +2 -0
  85. package/dist/commands/sandbox.js +558 -0
  86. package/dist/commands/sandbox.js.map +1 -0
  87. package/dist/commands/search.js +27 -13
  88. package/dist/commands/search.js.map +1 -1
  89. package/dist/commands/seo.js +16 -8
  90. package/dist/commands/seo.js.map +1 -1
  91. package/dist/commands/sessions.d.ts +6 -0
  92. package/dist/commands/sessions.js +109 -0
  93. package/dist/commands/sessions.js.map +1 -0
  94. package/dist/commands/social-data.d.ts +2 -0
  95. package/dist/commands/social-data.js +245 -0
  96. package/dist/commands/social-data.js.map +1 -0
  97. package/dist/commands/social.js +9 -7
  98. package/dist/commands/social.js.map +1 -1
  99. package/dist/commands/tasks.js +9 -0
  100. package/dist/commands/tasks.js.map +1 -1
  101. package/dist/commands/teams.d.ts +69 -0
  102. package/dist/commands/teams.js +503 -0
  103. package/dist/commands/teams.js.map +1 -0
  104. package/dist/commands/up.d.ts +150 -0
  105. package/dist/commands/up.js +465 -15
  106. package/dist/commands/up.js.map +1 -1
  107. package/dist/commands/usage.js +15 -4
  108. package/dist/commands/usage.js.map +1 -1
  109. package/dist/commands/use.d.ts +9 -0
  110. package/dist/commands/use.js +76 -11
  111. package/dist/commands/use.js.map +1 -1
  112. package/dist/commands/users.d.ts +8 -0
  113. package/dist/commands/users.js +28 -9
  114. package/dist/commands/users.js.map +1 -1
  115. package/dist/commands/vault.js +31 -1
  116. package/dist/commands/vault.js.map +1 -1
  117. package/dist/commands/verification.js +1 -1
  118. package/dist/commands/verification.js.map +1 -1
  119. package/dist/commands/video.js +118 -19
  120. package/dist/commands/video.js.map +1 -1
  121. package/dist/commands/wallet.js +3 -3
  122. package/dist/commands/wallet.js.map +1 -1
  123. package/dist/commands/whoami.js +17 -1
  124. package/dist/commands/whoami.js.map +1 -1
  125. package/dist/config.d.ts +16 -1
  126. package/dist/config.js +15 -1
  127. package/dist/config.js.map +1 -1
  128. package/dist/index.d.ts +2 -1
  129. package/dist/index.js +250 -24
  130. package/dist/index.js.map +1 -1
  131. package/dist/lib/brain-select.d.ts +193 -0
  132. package/dist/lib/brain-select.js +403 -0
  133. package/dist/lib/brain-select.js.map +1 -0
  134. package/dist/lib/cli-validation.d.ts +12 -0
  135. package/dist/lib/cli-validation.js +46 -0
  136. package/dist/lib/cli-validation.js.map +1 -0
  137. package/dist/lib/deprecation.d.ts +158 -0
  138. package/dist/lib/deprecation.js +140 -0
  139. package/dist/lib/deprecation.js.map +1 -0
  140. package/dist/lib/duration.d.ts +8 -0
  141. package/dist/lib/duration.js +11 -0
  142. package/dist/lib/duration.js.map +1 -0
  143. package/dist/lib/http-response.d.ts +11 -0
  144. package/dist/lib/http-response.js +96 -0
  145. package/dist/lib/http-response.js.map +1 -0
  146. package/dist/lib/pricing.d.ts +132 -0
  147. package/dist/lib/pricing.js +148 -0
  148. package/dist/lib/pricing.js.map +1 -0
  149. package/dist/lib/stream-frames.d.ts +114 -0
  150. package/dist/lib/stream-frames.js +169 -0
  151. package/dist/lib/stream-frames.js.map +1 -0
  152. package/dist/lib/teams-catalog.d.ts +141 -0
  153. package/dist/lib/teams-catalog.js +765 -0
  154. package/dist/lib/teams-catalog.js.map +1 -0
  155. package/dist/lib/unknown-command.d.ts +55 -1
  156. package/dist/lib/unknown-command.js +113 -0
  157. package/dist/lib/unknown-command.js.map +1 -1
  158. package/dist/output.d.ts +127 -5
  159. package/dist/output.js +189 -12
  160. package/dist/output.js.map +1 -1
  161. package/package.json +3 -3
  162. package/dist/commands/link.d.ts +0 -3
  163. package/dist/commands/link.js +0 -91
  164. package/dist/commands/link.js.map +0 -1
@@ -0,0 +1,558 @@
1
+ import { Command } from "commander";
2
+ import { readFileSync } from "node:fs";
3
+ import { apiRequest, handleApiError } from "../client.js";
4
+ import { agentOutput } from "../output.js";
5
+ /**
6
+ * THE SUCCESS ENVELOPE.
7
+ *
8
+ * `naive --help` promises "every command returns structured JSON with result
9
+ * data, next steps, and contextual guidance for autonomous operation"
10
+ * (index.ts), and /cli/overview documents the same shape. `sandbox` shipped with
11
+ * 16 of its 20 success envelopes passing `next_steps: []` and none carrying
12
+ * `hints`, so an agent that created a sandbox and ran a command in it got the
13
+ * data and no route onward — on the one primitive where the route onward
14
+ * (`park`, `sleep`, `destroy`) is what stops the meter.
15
+ *
16
+ * Both are DERIVED from the response the API just returned — the id in a
17
+ * suggested command is the id the API echoed, a hint restates a field it
18
+ * actually sent — so neither can drift from what the platform did. Same rule as
19
+ * `creditCostHint` in output.ts. The API's own advisory `note` (`sleep` explains
20
+ * what wakes the sandbox) is lifted into `hints` rather than left buried inside
21
+ * `result`.
22
+ */
23
+ /** The sandbox id for a suggested command: the one the API echoed (top level or
24
+ * nested under `sandbox`), else what the caller typed, so a next step is
25
+ * copy-pasteable rather than a `<id>` placeholder. */
26
+ function sid(data, typed) {
27
+ const d = (data ?? {});
28
+ const id = d.sandbox_id ?? d.sandbox?.sandbox_id;
29
+ return typeof id === "string" && id ? id : (typed ?? "<id>");
30
+ }
31
+ /** Hints echoed off a sandbox the API returned — restated, never asserted. */
32
+ function sandboxHints(data) {
33
+ const d = (data ?? {});
34
+ const sb = (d.sandbox && typeof d.sandbox === "object" ? d.sandbox : d);
35
+ const out = [];
36
+ if (typeof sb.status === "string")
37
+ out.push(`Status: ${sb.status}`);
38
+ if (typeof sb.size === "string")
39
+ out.push(`Size: ${sb.size}`);
40
+ if (typeof sb.metered_credits === "number" && Number.isFinite(sb.metered_credits)) {
41
+ const credits = Math.round(sb.metered_credits * 10000) / 10000;
42
+ out.push(`Metered so far: ${credits} ${credits === 1 ? "credit" : "credits"}`);
43
+ }
44
+ // Why a sandbox is in its current status ("Auto-destroyed: credits exhausted…")
45
+ // — the only way a tenant learns why one stopped, so it belongs in `hints`.
46
+ if (typeof sb.error === "string" && sb.error)
47
+ out.push(sb.error);
48
+ return out;
49
+ }
50
+ /** The API's own advisory `note`/`hint`, lifted out of `result` where it sent one. */
51
+ function apiNote(data) {
52
+ const d = (data ?? {});
53
+ const out = [];
54
+ if (typeof d.note === "string" && d.note)
55
+ out.push(d.note);
56
+ if (typeof d.hint === "string" && d.hint)
57
+ out.push(d.hint);
58
+ return out;
59
+ }
60
+ export const sandboxCmd = new Command("sandbox")
61
+ .description("Sandbox — disposable micro-VM code sandboxes (usage billed from credits)")
62
+ .addHelpText("after", `
63
+ Subcommands:
64
+ naive sandbox status Primitive status + sizes + usage rates
65
+ naive sandbox list List your sandboxes
66
+ naive sandbox create [--name n] [--size s] Create a sandbox (may require approval)
67
+ naive sandbox show <id> Show a sandbox
68
+ naive sandbox exec <id> <command...> Run a shell command (may require approval)
69
+ naive sandbox write <id> <path> [--file f] Write a file into the sandbox
70
+ naive sandbox read <id> <path> Read a file from the sandbox
71
+ naive sandbox ls <id> <path> List a directory in the sandbox
72
+ naive sandbox mkdir <id> <path> Create a directory (mkdir -p)
73
+ naive sandbox rm <id> <path> Remove a file or directory tree
74
+ naive sandbox expose <id> <port> Expose a guest port at a public URL (may require approval)
75
+ naive sandbox unexpose <id> <port> Stop exposing a guest port
76
+ naive sandbox ports <id> List the sandbox's exposed ports
77
+ naive sandbox checkpoint <id> Durable checkpoint (disk+memory+connections)
78
+ naive sandbox fork <id> New sandbox from a checkpoint (may require approval)
79
+ naive sandbox park <id> Checkpoint + stop the sandbox and its meter
80
+ naive sandbox sleep <id> [--wake-at t] Idle the sandbox; wakes on traffic, exec, or a schedule
81
+ naive sandbox resume <id> Resume a parked or sleeping sandbox
82
+ naive sandbox destroy <id> Destroy a sandbox (stops billing)
83
+
84
+ Billing:
85
+ Sandboxes bill OBSERVED usage from your Naive credits while running — CPU,
86
+ memory, and disk actually used, plus a small one-time creation fee per size.
87
+ Sleeping and parked sandboxes are free. Running out of credits auto-destroys
88
+ the sandbox. \`naive sandbox status\` prints the current per-hour rates.
89
+
90
+ Sizes (ceilings, not reservations — you pay only for what you use):
91
+ s 1 vCPU · up to 16 GiB memory · up to 32 GiB disk
92
+ m 4 vCPU · up to 32 GiB memory · up to 128 GiB disk (default)
93
+
94
+ Examples:
95
+ $ naive sandbox create --name scratch --size s
96
+ $ naive sandbox exec <id> "python3 -c 'print(40+2)'"
97
+ $ naive sandbox write <id> /app/server.py --file ./server.py
98
+ $ naive sandbox exec <id> "python3 /app/server.py &"
99
+ $ naive sandbox expose <id> 8000
100
+ $ naive sandbox checkpoint <id> && naive sandbox fork <id> --name variant-b
101
+ $ naive sandbox park <id>
102
+ `);
103
+ sandboxCmd
104
+ .command("status")
105
+ .description("Primitive status (configured, reachable, counts, sizes, usage rates)")
106
+ .action(async () => {
107
+ const resp = await apiRequest("GET", "/v1/sandboxes/status");
108
+ handleApiError("sandbox.status", resp);
109
+ const s = (resp.data ?? {});
110
+ agentOutput({
111
+ action: "sandbox.status",
112
+ result: resp.data,
113
+ next_steps: [
114
+ { command: "naive sandbox list", description: "List the sandboxes you have" },
115
+ { command: "naive sandbox create --size s", description: "Create one", when: "configured and reachable" },
116
+ ],
117
+ hints: [
118
+ `Provider configured: ${s.configured === true}; reachable: ${s.reachable === true}.`,
119
+ `${s.sandboxes ?? 0} sandbox(es), ${s.running_sandboxes ?? 0} running.`,
120
+ ...(s.error ? [s.error] : []),
121
+ "`rates` in the result are the per-hour usage rates the meter actually charges.",
122
+ ],
123
+ related_commands: ["naive sandbox list", "naive sandbox create"],
124
+ });
125
+ });
126
+ sandboxCmd
127
+ .command("list", { isDefault: true })
128
+ .description("List your sandboxes")
129
+ .action(async () => {
130
+ const resp = await apiRequest("GET", "/v1/sandboxes");
131
+ handleApiError("sandbox.list", resp);
132
+ const boxes = (resp.data?.sandboxes ?? []);
133
+ const first = boxes[0]?.sandbox_id ?? "<id>";
134
+ const running = boxes.filter((b) => b.status === "running").length;
135
+ agentOutput({
136
+ action: "sandbox.list",
137
+ result: resp.data,
138
+ next_steps: [
139
+ { command: `naive sandbox show ${first}`, description: "Inspect one — status, size, metered credits" },
140
+ { command: `naive sandbox exec ${first} "<command>"`, description: "Run a shell command in it" },
141
+ { command: `naive sandbox park ${first}`, description: "Checkpoint and stop its meter", when: "it is running and idle" },
142
+ ],
143
+ hints: [
144
+ `${boxes.length} sandbox${boxes.length === 1 ? "" : "es"}, ${running} running.`,
145
+ ...(running > 0
146
+ ? ["Running sandboxes bill observed usage — `park` or `sleep` stops the meter without losing state."]
147
+ : ["Nothing is metering right now."]),
148
+ ],
149
+ related_commands: ["naive sandbox show", "naive sandbox park", "naive sandbox destroy"],
150
+ });
151
+ });
152
+ sandboxCmd
153
+ .command("create")
154
+ .description("Create a sandbox (usage-billed; may require approval)")
155
+ .option("--name <name>", "Display name")
156
+ .option("--size <size>", "Resource ceiling: s | m (default m)")
157
+ .option("--memory <gib>", "Memory ceiling override in GiB")
158
+ .option("--disk <gib>", "Disk ceiling override in GiB")
159
+ .action(async (opts) => {
160
+ const resp = await apiRequest("POST", "/v1/sandboxes", {
161
+ name: opts.name,
162
+ size: opts.size,
163
+ memory_gib: opts.memory ? Number(opts.memory) : undefined,
164
+ disk_gib: opts.disk ? Number(opts.disk) : undefined,
165
+ });
166
+ handleApiError("sandbox.create", resp);
167
+ const id = sid(resp.data);
168
+ agentOutput({
169
+ action: "sandbox.create",
170
+ result: resp.data,
171
+ next_steps: [
172
+ { command: `naive sandbox exec ${id} "<command>"`, description: "Run a shell command in the sandbox" },
173
+ { command: `naive sandbox write ${id} <path> --file <local>`, description: "Upload a file into it" },
174
+ { command: `naive sandbox park ${id}`, description: "Checkpoint and stop the usage meter", when: "done for now" },
175
+ ],
176
+ hints: [
177
+ ...sandboxHints(resp.data),
178
+ "The meter runs while the sandbox is running — `park` or `sleep` is free, `destroy` is final.",
179
+ ],
180
+ related_commands: ["naive sandbox exec", "naive sandbox park", "naive sandbox destroy"],
181
+ });
182
+ });
183
+ sandboxCmd
184
+ .command("show <id>")
185
+ .description("Show a sandbox")
186
+ .action(async (id) => {
187
+ const resp = await apiRequest("GET", `/v1/sandboxes/${id}`);
188
+ handleApiError("sandbox.show", resp);
189
+ const sb = sid(resp.data, id);
190
+ agentOutput({
191
+ action: "sandbox.show",
192
+ result: resp.data,
193
+ next_steps: [
194
+ { command: `naive sandbox exec ${sb} "<command>"`, description: "Run a shell command in it" },
195
+ { command: `naive sandbox ports ${sb}`, description: "See which guest ports are exposed" },
196
+ { command: `naive sandbox park ${sb}`, description: "Checkpoint and stop the meter", when: "it is running and idle" },
197
+ ],
198
+ hints: [
199
+ ...sandboxHints(resp.data),
200
+ "`metered_credits` is what this sandbox has cost so far, not a forecast.",
201
+ ],
202
+ related_commands: ["naive sandbox exec", "naive sandbox park", "naive sandbox destroy"],
203
+ });
204
+ });
205
+ sandboxCmd
206
+ .command("exec <id> <command...>")
207
+ .description("Run a shell command in the sandbox (may require approval)")
208
+ .option("--cwd <dir>", "Working directory")
209
+ .option("--timeout <ms>", "Command timeout in ms")
210
+ .action(async (id, commandParts, opts) => {
211
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/exec`, {
212
+ command: commandParts.join(" "),
213
+ cwd: opts.cwd,
214
+ timeout_ms: opts.timeout ? Number(opts.timeout) : undefined,
215
+ });
216
+ handleApiError("sandbox.exec", resp);
217
+ const sb = sid(resp.data, id);
218
+ const exit = resp.data?.exit_code;
219
+ agentOutput({
220
+ action: "sandbox.exec",
221
+ result: resp.data,
222
+ next_steps: [
223
+ { command: `naive sandbox exec ${sb} "<command>"`, description: "Run the next command" },
224
+ { command: `naive sandbox ls ${sb} <path>`, description: "Inspect what the command wrote" },
225
+ { command: `naive sandbox park ${sb}`, description: "Checkpoint and stop the meter", when: "done for now" },
226
+ ],
227
+ hints: [
228
+ typeof exit === "number"
229
+ ? `Exit code: ${exit}${exit === 0 ? "" : " — stderr in the result has the reason"}.`
230
+ : "The command ran; `stdout`/`stderr` are in the result.",
231
+ "Output is truncated past 256 KiB — write large output to a file and `sandbox read` it.",
232
+ ],
233
+ related_commands: ["naive sandbox read", "naive sandbox ls", "naive sandbox park"],
234
+ });
235
+ });
236
+ sandboxCmd
237
+ .command("write <id> <path>")
238
+ .description("Write a file into the sandbox (--file or --content)")
239
+ .option("--file <local>", "Local file to upload")
240
+ .option("--content <text>", "Inline content")
241
+ .action(async (id, path, opts) => {
242
+ const content = opts.file ? readFileSync(opts.file, "utf8") : (opts.content ?? "");
243
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/files`, { path, content });
244
+ handleApiError("sandbox.write", resp);
245
+ const sb = sid(resp.data, id);
246
+ const size = resp.data?.size;
247
+ agentOutput({
248
+ action: "sandbox.write",
249
+ result: resp.data,
250
+ next_steps: [
251
+ { command: `naive sandbox read ${sb} ${path}`, description: "Read it back" },
252
+ { command: `naive sandbox exec ${sb} "<command>"`, description: "Run it" },
253
+ ],
254
+ hints: [
255
+ typeof size === "number" ? `Wrote ${size} byte${size === 1 ? "" : "s"} to ${path}.` : `Wrote ${path}.`,
256
+ "This surface caps a file at 4 MiB — use `sandbox exec` to fetch anything larger inside the VM.",
257
+ ],
258
+ related_commands: ["naive sandbox read", "naive sandbox ls", "naive sandbox exec"],
259
+ });
260
+ });
261
+ sandboxCmd
262
+ .command("read <id> <path>")
263
+ .description("Read a file from the sandbox")
264
+ .action(async (id, path) => {
265
+ const resp = await apiRequest("GET", `/v1/sandboxes/${id}/files?path=${encodeURIComponent(path)}`);
266
+ handleApiError("sandbox.read", resp);
267
+ const sb = sid(resp.data, id);
268
+ const size = resp.data?.size;
269
+ agentOutput({
270
+ action: "sandbox.read",
271
+ result: resp.data,
272
+ next_steps: [
273
+ { command: `naive sandbox write ${sb} ${path} --content "<text>"`, description: "Overwrite it" },
274
+ { command: `naive sandbox ls ${sb} <dir>`, description: "List the directory it lives in" },
275
+ ],
276
+ hints: [
277
+ typeof size === "number" ? `${size} byte${size === 1 ? "" : "s"} from ${path}.` : `Read ${path}.`,
278
+ "Content comes back inside the envelope — binary files should be base64-encoded in the sandbox first.",
279
+ ],
280
+ related_commands: ["naive sandbox write", "naive sandbox ls"],
281
+ });
282
+ });
283
+ sandboxCmd
284
+ .command("ls <id> <path>")
285
+ .description("List a directory's entries in the sandbox")
286
+ .action(async (id, path) => {
287
+ const resp = await apiRequest("GET", `/v1/sandboxes/${id}/files/ls?path=${encodeURIComponent(path)}`);
288
+ handleApiError("sandbox.ls", resp);
289
+ const sb = sid(resp.data, id);
290
+ const entries = (resp.data?.entries ?? []);
291
+ agentOutput({
292
+ action: "sandbox.ls",
293
+ result: resp.data,
294
+ next_steps: [
295
+ { command: `naive sandbox read ${sb} ${path}/<name>`, description: "Read one of the entries" },
296
+ { command: `naive sandbox rm ${sb} ${path}/<name>`, description: "Remove one", when: "you are cleaning up" },
297
+ ],
298
+ hints: [
299
+ `${entries.length} entr${entries.length === 1 ? "y" : "ies"} in ${path}.`,
300
+ "This lists immediate entries only — it does not recurse.",
301
+ ],
302
+ related_commands: ["naive sandbox read", "naive sandbox mkdir", "naive sandbox rm"],
303
+ });
304
+ });
305
+ sandboxCmd
306
+ .command("mkdir <id> <path>")
307
+ .description("Create a directory and any missing parents in the sandbox")
308
+ .action(async (id, path) => {
309
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/files/mkdir`, { path });
310
+ handleApiError("sandbox.mkdir", resp);
311
+ const sb = sid(resp.data, id);
312
+ agentOutput({
313
+ action: "sandbox.mkdir",
314
+ result: resp.data,
315
+ next_steps: [
316
+ { command: `naive sandbox write ${sb} ${path}/<name> --file <local>`, description: "Put a file in it" },
317
+ { command: `naive sandbox ls ${sb} ${path}`, description: "Confirm what is there" },
318
+ ],
319
+ hints: [
320
+ `Created ${path} (and any missing parents).`,
321
+ "It behaves like `mkdir -p` — creating an existing directory is not an error.",
322
+ ],
323
+ related_commands: ["naive sandbox write", "naive sandbox ls"],
324
+ });
325
+ });
326
+ sandboxCmd
327
+ .command("rm <id> <path>")
328
+ .description("Remove a file or directory tree in the sandbox (like rm -rf)")
329
+ .action(async (id, path) => {
330
+ const resp = await apiRequest("DELETE", `/v1/sandboxes/${id}/files?path=${encodeURIComponent(path)}`);
331
+ handleApiError("sandbox.rm", resp);
332
+ const sb = sid(resp.data, id);
333
+ agentOutput({
334
+ action: "sandbox.rm",
335
+ result: resp.data,
336
+ next_steps: [
337
+ { command: `naive sandbox ls ${sb} <dir>`, description: "Confirm what is left" },
338
+ { command: `naive sandbox destroy ${sb}`, description: "Throw the whole sandbox away", when: "you are done with it" },
339
+ ],
340
+ hints: [
341
+ `Removed ${path}.`,
342
+ "This is recursive, like `rm -rf` — a checkpoint taken before it is the only way back.",
343
+ ],
344
+ related_commands: ["naive sandbox ls", "naive sandbox checkpoint"],
345
+ });
346
+ });
347
+ sandboxCmd
348
+ .command("expose <id> <port>")
349
+ .description("Expose a guest port at a public URL (http) or address (tcp); may require approval")
350
+ .option("--protocol <proto>", "http (default) or tcp")
351
+ .action(async (id, port, opts) => {
352
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/expose`, {
353
+ port: Number(port),
354
+ protocol: opts.protocol,
355
+ });
356
+ handleApiError("sandbox.expose", resp);
357
+ const sb = sid(resp.data, id);
358
+ const url = resp.data?.url;
359
+ agentOutput({
360
+ action: "sandbox.expose",
361
+ result: resp.data,
362
+ next_steps: [
363
+ { command: `naive sandbox ports ${sb}`, description: "See every port this sandbox exposes" },
364
+ { command: `naive sandbox unexpose ${sb} ${port}`, description: "Take it down again", when: "you are done" },
365
+ ],
366
+ hints: [
367
+ typeof url === "string" && url ? `Reachable at ${url}` : `Port ${port} is exposed; the URL is in the result.`,
368
+ "A public port is reachable by anyone who has the URL — unexpose it when you are finished.",
369
+ ],
370
+ related_commands: ["naive sandbox ports", "naive sandbox unexpose"],
371
+ });
372
+ });
373
+ sandboxCmd
374
+ .command("unexpose <id> <port>")
375
+ .description("Stop exposing a guest port")
376
+ .action(async (id, port) => {
377
+ const resp = await apiRequest("DELETE", `/v1/sandboxes/${id}/expose/${Number(port)}`);
378
+ handleApiError("sandbox.unexpose", resp);
379
+ const sb = sid(resp.data, id);
380
+ agentOutput({
381
+ action: "sandbox.unexpose",
382
+ result: resp.data,
383
+ next_steps: [
384
+ { command: `naive sandbox ports ${sb}`, description: "Confirm what is still exposed" },
385
+ { command: `naive sandbox expose ${sb} ${port}`, description: "Expose it again", when: "you need it back" },
386
+ ],
387
+ hints: [
388
+ `Port ${port} is no longer exposed.`,
389
+ "The process inside the sandbox keeps running — only the public listener is gone.",
390
+ ],
391
+ related_commands: ["naive sandbox ports", "naive sandbox expose"],
392
+ });
393
+ });
394
+ sandboxCmd
395
+ .command("ports <id>")
396
+ .description("List the sandbox's exposed ports (does not wake it)")
397
+ .action(async (id) => {
398
+ const resp = await apiRequest("GET", `/v1/sandboxes/${id}/expose`);
399
+ handleApiError("sandbox.ports", resp);
400
+ const sb = sid(resp.data, id);
401
+ const ports = (resp.data?.ports ?? []);
402
+ agentOutput({
403
+ action: "sandbox.ports",
404
+ result: resp.data,
405
+ next_steps: [
406
+ { command: `naive sandbox expose ${sb} <port>`, description: "Expose another guest port" },
407
+ ...(ports.length > 0
408
+ ? [{ command: `naive sandbox unexpose ${sb} ${ports[0].port ?? "<port>"}`, description: "Take one down" }]
409
+ : []),
410
+ { command: `naive sandbox show ${sb}`, description: "Check the sandbox's status" },
411
+ ],
412
+ hints: [
413
+ `${ports.length} exposed port${ports.length === 1 ? "" : "s"}.`,
414
+ "Listing ports does not wake a sleeping sandbox.",
415
+ ],
416
+ related_commands: ["naive sandbox expose", "naive sandbox unexpose"],
417
+ });
418
+ });
419
+ sandboxCmd
420
+ .command("checkpoint <id>")
421
+ .description("Take a durable checkpoint (disk + memory + connections) without stopping")
422
+ .option("--name <name>", "Checkpoint name")
423
+ .action(async (id, opts) => {
424
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/checkpoints`, { name: opts.name });
425
+ handleApiError("sandbox.checkpoint", resp);
426
+ const sb = sid(resp.data, id);
427
+ const cp = resp.data ?? {};
428
+ agentOutput({
429
+ action: "sandbox.checkpoint",
430
+ result: resp.data,
431
+ next_steps: [
432
+ { command: `naive sandbox fork ${sb}`, description: "Start a new sandbox from the checkpoint" },
433
+ { command: `naive sandbox park ${sb}`, description: "Checkpoint and stop the meter", when: "done for now" },
434
+ ],
435
+ hints: [
436
+ typeof cp.checkpoint_id === "string" ? `Checkpoint ${cp.checkpoint_id}.` : "Checkpoint taken.",
437
+ ...(typeof cp.expires_at === "string" ? [`Expires ${cp.expires_at}.`] : []),
438
+ "The sandbox keeps running — checkpointing does not stop the meter, `park` does.",
439
+ ],
440
+ related_commands: ["naive sandbox fork", "naive sandbox park"],
441
+ });
442
+ });
443
+ sandboxCmd
444
+ .command("fork <id>")
445
+ .description("Start a NEW sandbox from a checkpoint of this one (may require approval)")
446
+ .option("--name <name>", "Name for the fork")
447
+ .option("--checkpoint <checkpointId>", "Fork a specific checkpoint (defaults to latest)")
448
+ .action(async (id, opts) => {
449
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/fork`, {
450
+ name: opts.name,
451
+ checkpoint_id: opts.checkpoint,
452
+ });
453
+ handleApiError("sandbox.fork", resp);
454
+ const forked = sid(resp.data);
455
+ agentOutput({
456
+ action: "sandbox.fork",
457
+ result: resp.data,
458
+ next_steps: [
459
+ { command: `naive sandbox exec ${forked} "<command>"`, description: "Run a command in the fork" },
460
+ { command: `naive sandbox park ${forked}`, description: "Checkpoint and stop the fork's meter", when: "done for now" },
461
+ { command: "naive sandbox list", description: "See the original and the fork side by side" },
462
+ ],
463
+ hints: [
464
+ ...sandboxHints(resp.data),
465
+ `The fork is a separate sandbox with its own meter — ${id} keeps running independently.`,
466
+ ],
467
+ related_commands: ["naive sandbox list", "naive sandbox exec", "naive sandbox park"],
468
+ });
469
+ });
470
+ sandboxCmd
471
+ .command("park <id>")
472
+ .description("Checkpoint and stop the sandbox and its meter (free while parked)")
473
+ .action(async (id) => {
474
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/park`, {});
475
+ handleApiError("sandbox.park", resp);
476
+ const sb = sid(resp.data, id);
477
+ agentOutput({
478
+ action: "sandbox.park",
479
+ result: resp.data,
480
+ next_steps: [
481
+ { command: `naive sandbox resume ${sb}`, description: "Restore the checkpoint and restart the meter" },
482
+ { command: `naive sandbox destroy ${sb}`, description: "Throw it away for good", when: "you will not come back to it" },
483
+ ],
484
+ hints: [
485
+ ...sandboxHints(resp.data),
486
+ ...apiNote(resp.data),
487
+ "Parked sandboxes are free — the meter is stopped, the checkpointed state is kept.",
488
+ ],
489
+ related_commands: ["naive sandbox resume", "naive sandbox destroy"],
490
+ });
491
+ });
492
+ sandboxCmd
493
+ .command("sleep <id>")
494
+ .description("Idle the sandbox (free while asleep; wakes on ingress traffic, exec, or --wake-at)")
495
+ .option("--wake-at <iso>", "Schedule a wall-clock wake (ISO-8601 timestamp)")
496
+ .action(async (id, opts) => {
497
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/sleep`, opts.wakeAt ? { wake_at: opts.wakeAt } : {});
498
+ handleApiError("sandbox.sleep", resp);
499
+ const sb = sid(resp.data, id);
500
+ const wakeAt = resp.data?.wake_at;
501
+ agentOutput({
502
+ action: "sandbox.sleep",
503
+ result: resp.data,
504
+ next_steps: [
505
+ { command: `naive sandbox resume ${sb}`, description: "Wake it now and restart the meter" },
506
+ { command: `naive sandbox ports ${sb}`, description: "Check its exposed ports without waking it" },
507
+ ],
508
+ hints: [
509
+ ...sandboxHints(resp.data),
510
+ // The API explains what wakes it; that advisory is the point of the call.
511
+ ...apiNote(resp.data),
512
+ ...(typeof wakeAt === "string" ? [`Scheduled wake: ${wakeAt}.`] : []),
513
+ ],
514
+ related_commands: ["naive sandbox resume", "naive sandbox park"],
515
+ });
516
+ });
517
+ sandboxCmd
518
+ .command("resume <id>")
519
+ .description("Resume a parked or sleeping sandbox (restarts the usage meter)")
520
+ .action(async (id) => {
521
+ const resp = await apiRequest("POST", `/v1/sandboxes/${id}/resume`, {});
522
+ handleApiError("sandbox.resume", resp);
523
+ const sb = sid(resp.data, id);
524
+ agentOutput({
525
+ action: "sandbox.resume",
526
+ result: resp.data,
527
+ next_steps: [
528
+ { command: `naive sandbox exec ${sb} "<command>"`, description: "Carry on where you left off" },
529
+ { command: `naive sandbox park ${sb}`, description: "Stop the meter again", when: "done for now" },
530
+ ],
531
+ hints: [
532
+ ...sandboxHints(resp.data),
533
+ "The meter restarts from the resume time — park or sleep it again when you stop working.",
534
+ ],
535
+ related_commands: ["naive sandbox exec", "naive sandbox park"],
536
+ });
537
+ });
538
+ sandboxCmd
539
+ .command("destroy <id>")
540
+ .description("Destroy a sandbox (stops billing; un-checkpointed state is lost)")
541
+ .action(async (id) => {
542
+ const resp = await apiRequest("DELETE", `/v1/sandboxes/${id}`);
543
+ handleApiError("sandbox.destroy", resp);
544
+ agentOutput({
545
+ action: "sandbox.destroy",
546
+ result: resp.data,
547
+ next_steps: [
548
+ { command: "naive sandbox list", description: "Confirm what is left" },
549
+ { command: "naive sandbox create --size s", description: "Start a fresh one", when: "you need another" },
550
+ ],
551
+ hints: [
552
+ ...sandboxHints(resp.data),
553
+ "Destroy is final and stops billing — un-checkpointed state is gone.",
554
+ ],
555
+ related_commands: ["naive sandbox list", "naive sandbox create"],
556
+ });
557
+ });
558
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"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"}