@usenaive-sdk/cli 0.12.2 → 0.13.0

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 (193) hide show
  1. package/README.md +76 -5
  2. package/dist/client.d.ts +74 -1
  3. package/dist/client.js +351 -17
  4. package/dist/client.js.map +1 -1
  5. package/dist/commands/aeo.js +69 -27
  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/apps.d.ts +7 -0
  10. package/dist/commands/apps.js +255 -18
  11. package/dist/commands/apps.js.map +1 -1
  12. package/dist/commands/audio.d.ts +9 -0
  13. package/dist/commands/audio.js +391 -0
  14. package/dist/commands/audio.js.map +1 -0
  15. package/dist/commands/auth.d.ts +31 -0
  16. package/dist/commands/auth.js +403 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/billing.js +12 -12
  19. package/dist/commands/billing.js.map +1 -1
  20. package/dist/commands/brain.d.ts +2 -0
  21. package/dist/commands/brain.js +1255 -0
  22. package/dist/commands/brain.js.map +1 -0
  23. package/dist/commands/browser.js +35 -8
  24. package/dist/commands/browser.js.map +1 -1
  25. package/dist/commands/business.js +117 -16
  26. package/dist/commands/business.js.map +1 -1
  27. package/dist/commands/clone.d.ts +2 -0
  28. package/dist/commands/clone.js +203 -0
  29. package/dist/commands/clone.js.map +1 -0
  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 +10 -3
  37. package/dist/commands/compute.js.map +1 -1
  38. package/dist/commands/config.d.ts +2 -0
  39. package/dist/commands/config.js +36 -0
  40. package/dist/commands/config.js.map +1 -0
  41. package/dist/commands/connections.d.ts +6 -0
  42. package/dist/commands/connections.js +29 -1
  43. package/dist/commands/connections.js.map +1 -1
  44. package/dist/commands/domains.js +1 -1
  45. package/dist/commands/ecommerce.js +19 -9
  46. package/dist/commands/ecommerce.js.map +1 -1
  47. package/dist/commands/email.js +56 -9
  48. package/dist/commands/email.js.map +1 -1
  49. package/dist/commands/env.d.ts +3 -3
  50. package/dist/commands/env.js +68 -4
  51. package/dist/commands/env.js.map +1 -1
  52. package/dist/commands/formation.js +3 -3
  53. package/dist/commands/identity.js +4 -3
  54. package/dist/commands/identity.js.map +1 -1
  55. package/dist/commands/images.js +87 -13
  56. package/dist/commands/images.js.map +1 -1
  57. package/dist/commands/init.d.ts +3 -0
  58. package/dist/commands/init.js +39 -36
  59. package/dist/commands/init.js.map +1 -1
  60. package/dist/commands/jobs.js +1 -0
  61. package/dist/commands/jobs.js.map +1 -1
  62. package/dist/commands/keys.js +26 -3
  63. package/dist/commands/keys.js.map +1 -1
  64. package/dist/commands/legacy-auth.d.ts +27 -0
  65. package/dist/commands/legacy-auth.js +64 -0
  66. package/dist/commands/legacy-auth.js.map +1 -0
  67. package/dist/commands/llm.js +13 -0
  68. package/dist/commands/llm.js.map +1 -1
  69. package/dist/commands/login.js +2 -0
  70. package/dist/commands/login.js.map +1 -1
  71. package/dist/commands/loops.d.ts +2 -0
  72. package/dist/commands/loops.js +260 -0
  73. package/dist/commands/loops.js.map +1 -0
  74. package/dist/commands/media.js +3 -3
  75. package/dist/commands/media.js.map +1 -1
  76. package/dist/commands/mobile.d.ts +4 -0
  77. package/dist/commands/mobile.js +382 -0
  78. package/dist/commands/mobile.js.map +1 -0
  79. package/dist/commands/payments.d.ts +2 -0
  80. package/dist/commands/payments.js +131 -0
  81. package/dist/commands/payments.js.map +1 -0
  82. package/dist/commands/people.d.ts +2 -0
  83. package/dist/commands/people.js +193 -0
  84. package/dist/commands/people.js.map +1 -0
  85. package/dist/commands/phone.js +3 -3
  86. package/dist/commands/phone.js.map +1 -1
  87. package/dist/commands/projects.d.ts +13 -0
  88. package/dist/commands/projects.js +220 -0
  89. package/dist/commands/projects.js.map +1 -0
  90. package/dist/commands/register.js +16 -8
  91. package/dist/commands/register.js.map +1 -1
  92. package/dist/commands/sandbox.d.ts +2 -0
  93. package/dist/commands/sandbox.js +245 -0
  94. package/dist/commands/sandbox.js.map +1 -0
  95. package/dist/commands/search.js +26 -12
  96. package/dist/commands/search.js.map +1 -1
  97. package/dist/commands/seo.js +16 -8
  98. package/dist/commands/seo.js.map +1 -1
  99. package/dist/commands/sessions.d.ts +6 -0
  100. package/dist/commands/sessions.js +109 -0
  101. package/dist/commands/sessions.js.map +1 -0
  102. package/dist/commands/social-data.d.ts +2 -0
  103. package/dist/commands/social-data.js +244 -0
  104. package/dist/commands/social-data.js.map +1 -0
  105. package/dist/commands/social.js +8 -6
  106. package/dist/commands/social.js.map +1 -1
  107. package/dist/commands/teams.d.ts +69 -0
  108. package/dist/commands/teams.js +503 -0
  109. package/dist/commands/teams.js.map +1 -0
  110. package/dist/commands/up.d.ts +150 -0
  111. package/dist/commands/up.js +415 -15
  112. package/dist/commands/up.js.map +1 -1
  113. package/dist/commands/usage.js +15 -4
  114. package/dist/commands/usage.js.map +1 -1
  115. package/dist/commands/use.d.ts +9 -0
  116. package/dist/commands/use.js +76 -11
  117. package/dist/commands/use.js.map +1 -1
  118. package/dist/commands/users.d.ts +8 -0
  119. package/dist/commands/users.js +28 -9
  120. package/dist/commands/users.js.map +1 -1
  121. package/dist/commands/vault.js +28 -1
  122. package/dist/commands/vault.js.map +1 -1
  123. package/dist/commands/video.js +190 -270
  124. package/dist/commands/video.js.map +1 -1
  125. package/dist/commands/voice.d.ts +2 -0
  126. package/dist/commands/voice.js +516 -0
  127. package/dist/commands/voice.js.map +1 -0
  128. package/dist/commands/wallet.d.ts +2 -0
  129. package/dist/commands/wallet.js +244 -0
  130. package/dist/commands/wallet.js.map +1 -0
  131. package/dist/commands/whoami.js +17 -1
  132. package/dist/commands/whoami.js.map +1 -1
  133. package/dist/config.d.ts +24 -1
  134. package/dist/config.js +36 -7
  135. package/dist/config.js.map +1 -1
  136. package/dist/index.d.ts +2 -1
  137. package/dist/index.js +290 -20
  138. package/dist/index.js.map +1 -1
  139. package/dist/lib/brain-select.d.ts +193 -0
  140. package/dist/lib/brain-select.js +403 -0
  141. package/dist/lib/brain-select.js.map +1 -0
  142. package/dist/lib/cli-validation.d.ts +12 -0
  143. package/dist/lib/cli-validation.js +46 -0
  144. package/dist/lib/cli-validation.js.map +1 -0
  145. package/dist/lib/deprecation.d.ts +158 -0
  146. package/dist/lib/deprecation.js +140 -0
  147. package/dist/lib/deprecation.js.map +1 -0
  148. package/dist/lib/duration.d.ts +8 -0
  149. package/dist/lib/duration.js +11 -0
  150. package/dist/lib/duration.js.map +1 -0
  151. package/dist/lib/http-response.d.ts +11 -0
  152. package/dist/lib/http-response.js +96 -0
  153. package/dist/lib/http-response.js.map +1 -0
  154. package/dist/lib/pricing.d.ts +132 -0
  155. package/dist/lib/pricing.js +148 -0
  156. package/dist/lib/pricing.js.map +1 -0
  157. package/dist/lib/stream-frames.d.ts +114 -0
  158. package/dist/lib/stream-frames.js +169 -0
  159. package/dist/lib/stream-frames.js.map +1 -0
  160. package/dist/lib/teams-catalog.d.ts +141 -0
  161. package/dist/lib/teams-catalog.js +765 -0
  162. package/dist/lib/teams-catalog.js.map +1 -0
  163. package/dist/lib/unknown-command.d.ts +57 -0
  164. package/dist/lib/unknown-command.js +93 -0
  165. package/dist/lib/unknown-command.js.map +1 -0
  166. package/dist/lib/version-check.d.ts +26 -0
  167. package/dist/lib/version-check.js +21 -0
  168. package/dist/lib/version-check.js.map +1 -0
  169. package/dist/output.d.ts +119 -10
  170. package/dist/output.js +309 -15
  171. package/dist/output.js.map +1 -1
  172. package/dist/prompt.d.ts +17 -0
  173. package/dist/prompt.js +70 -0
  174. package/dist/prompt.js.map +1 -0
  175. package/package.json +11 -6
  176. package/dist/commands/billing-client.d.ts +0 -2
  177. package/dist/commands/billing-client.js +0 -271
  178. package/dist/commands/billing-client.js.map +0 -1
  179. package/dist/commands/crm-app.d.ts +0 -2
  180. package/dist/commands/crm-app.js +0 -306
  181. package/dist/commands/crm-app.js.map +0 -1
  182. package/dist/commands/crm.d.ts +0 -2
  183. package/dist/commands/crm.js +0 -319
  184. package/dist/commands/crm.js.map +0 -1
  185. package/dist/commands/integrations.d.ts +0 -2
  186. package/dist/commands/integrations.js +0 -199
  187. package/dist/commands/integrations.js.map +0 -1
  188. package/dist/commands/link.d.ts +0 -3
  189. package/dist/commands/link.js +0 -91
  190. package/dist/commands/link.js.map +0 -1
  191. package/dist/commands/operators.d.ts +0 -11
  192. package/dist/commands/operators.js +0 -120
  193. package/dist/commands/operators.js.map +0 -1
@@ -0,0 +1,382 @@
1
+ import { Command } from "commander";
2
+ import { apiRequest, handleApiError, handlePendingApproval } from "../client.js";
3
+ import { agentError, agentOutput } from "../output.js";
4
+ export function mobileHealthIssue(data) {
5
+ const result = data;
6
+ const health = result.provider ?? result;
7
+ if (health.configured === false) {
8
+ return {
9
+ code: "feature_not_configured",
10
+ message: "MobileRun is not configured on this deployment.",
11
+ operator_action: "Set a valid MOBILERUN_API_KEY on the API deployment, redeploy, then retry.",
12
+ };
13
+ }
14
+ if (health.reachable === false) {
15
+ return {
16
+ code: "provider_unavailable",
17
+ message: "MobileRun is configured but the provider health check failed.",
18
+ provider: "mobilerun",
19
+ provider_error: health.error,
20
+ operator_action: "Validate or rotate MOBILERUN_API_KEY on the API deployment, redeploy, then retry.",
21
+ ...(result.devices ? { cached_devices: result.devices } : {}),
22
+ };
23
+ }
24
+ return undefined;
25
+ }
26
+ function requireMobileHealth(action, data) {
27
+ const issue = mobileHealthIssue(data);
28
+ if (issue) {
29
+ agentError({
30
+ action,
31
+ error: issue,
32
+ recovery_steps: [
33
+ {
34
+ command: "naive mobile status",
35
+ description: issue.code === "feature_not_configured"
36
+ ? "Re-check after the deployment operator configures MobileRun"
37
+ : "Re-check provider health",
38
+ },
39
+ ],
40
+ });
41
+ }
42
+ }
43
+ export const mobileCmd = new Command("mobile")
44
+ .description("Mobile — provision, control & display cloud mobile emulators/devices via Mobilerun")
45
+ .addHelpText("after", `
46
+ Phones are billed PER MINUTE from your credits: the phone provisions
47
+ immediately and the meter runs until you terminate it (there is NO upstream
48
+ auto-stop — running out of credits auto-terminates the phone).
49
+
50
+ Subcommands:
51
+ naive mobile status Integration status + your phone count
52
+ naive mobile devices List your phones (alias: phones)
53
+ naive mobile provision Create a phone (alias: create-phone)
54
+ naive mobile device <id> Show a device's live details
55
+ naive mobile stream <id> Get the live stream URL/token (to display)
56
+ naive mobile reboot <id> Reboot a device
57
+ naive mobile reset <id> Reset a device to a fresh state
58
+ naive mobile terminate <id> Release a device (stops the per-minute meter)
59
+ naive mobile wait <id> [--timeout <secs>] Block until a device is ready
60
+ naive mobile proxy <id> Show the device's proxy attachment
61
+ naive mobile proxy-set <id> --host ... Attach a SOCKS5 proxy (residential IP)
62
+ naive mobile proxy-remove <id> Detach the proxy (back to datacenter IP)
63
+ naive mobile run "<task>" [--device <id>] Run an agent task on a device
64
+ naive mobile tasks List agent tasks
65
+ naive mobile task <id> Show a task's status/result
66
+ naive mobile stop <id> Cancel a running task
67
+ naive mobile screenshots <id> List a task's screenshots
68
+ naive mobile trajectory <id> Show a task's trajectory
69
+ naive mobile apps List apps in the Mobilerun library
70
+ naive mobile upload-app <name> Create a signed upload URL for an app
71
+ naive mobile search "<query>" Search the Mobilerun API catalog (wildcard)
72
+ naive mobile call <operationId> ... Call ANY Mobilerun operation (wildcard)
73
+
74
+ Governance:
75
+ Provisioning, reboot/reset/terminate, proxy changes, running/stopping tasks,
76
+ uploading apps, and mutating wildcard calls are SENSITIVE and may require
77
+ human approval depending on the Account Kit (status "pending_approval").
78
+
79
+ Examples:
80
+ $ naive mobile provision --country US
81
+ $ naive mobile run "Open Settings and enable dark mode" --device <id> --vision
82
+ $ naive mobile stream <id>
83
+ $ naive mobile terminate <id>
84
+ $ naive mobile call take-screenshot --path deviceId=<id>
85
+ `);
86
+ mobileCmd
87
+ .command("status", { isDefault: true })
88
+ .description("Show mobile integration status + your device count")
89
+ .action(async () => {
90
+ const resp = await apiRequest("GET", "/v1/mobile/status");
91
+ handleApiError("mobile.status", resp);
92
+ requireMobileHealth("mobile.status", resp.data);
93
+ agentOutput({ action: "mobile.status", result: resp.data, next_steps: [] });
94
+ });
95
+ mobileCmd
96
+ .command("devices")
97
+ .alias("phones")
98
+ .description("List your phones (cloud mobile devices) with status")
99
+ .option("--state <state>", "Filter by state, e.g. ready")
100
+ .option("--type <type>", "Filter by device type")
101
+ .option("--country <country>", "Filter by country")
102
+ .action(async (opts) => {
103
+ const params = new URLSearchParams();
104
+ if (opts.state)
105
+ params.set("state", opts.state);
106
+ if (opts.type)
107
+ params.set("type", opts.type);
108
+ if (opts.country)
109
+ params.set("country", opts.country);
110
+ const qs = params.toString();
111
+ const resp = await apiRequest("GET", `/v1/mobile/devices${qs ? `?${qs}` : ""}`);
112
+ handleApiError("mobile.devices", resp);
113
+ requireMobileHealth("mobile.devices", resp.data);
114
+ agentOutput({ action: "mobile.devices", result: resp.data, next_steps: [] });
115
+ });
116
+ mobileCmd
117
+ .command("provision")
118
+ .alias("create-phone")
119
+ .description("Create a phone — provisions immediately, billed per minute from your credits")
120
+ .option("--type <type>", "Device type (default: dedicated_premium_device — the minute-billed cloud phone)")
121
+ .option("--country <country>", "Country code")
122
+ .option("--profile <id>", "Device profile id")
123
+ .option("--name <name>", "Phone name")
124
+ .action(async (opts) => {
125
+ const body = {
126
+ type: opts.type,
127
+ country: opts.country,
128
+ profile_id: opts.profile,
129
+ name: opts.name,
130
+ };
131
+ const resp = await apiRequest("POST", "/v1/mobile/devices", body);
132
+ if (handlePendingApproval("mobile.provision", resp))
133
+ return;
134
+ handleApiError("mobile.provision", resp);
135
+ const data = resp.data;
136
+ agentOutput({
137
+ action: "mobile.provision",
138
+ result: resp.data,
139
+ next_steps: data.phone?.device_id
140
+ ? [
141
+ { command: `naive mobile wait ${data.phone.device_id}`, description: "Block until the device is ready" },
142
+ { command: `naive mobile terminate ${data.phone.device_id}`, description: "Terminate when done (stops the per-minute meter)" },
143
+ ]
144
+ : [],
145
+ hints: [
146
+ `Billed ${data.credits_per_minute ?? "a few"} credits/min from your balance until terminated — running out of credits auto-terminates the phone.`,
147
+ ],
148
+ });
149
+ });
150
+ mobileCmd
151
+ .command("device <id>")
152
+ .description("Show a device's live details")
153
+ .action(async (id) => {
154
+ const resp = await apiRequest("GET", `/v1/mobile/devices/${id}`);
155
+ handleApiError("mobile.device", resp);
156
+ agentOutput({ action: "mobile.device", result: resp.data, next_steps: [] });
157
+ });
158
+ mobileCmd
159
+ .command("stream <id>")
160
+ .description("Get the live stream URL + token (to display the device screen)")
161
+ .action(async (id) => {
162
+ const resp = await apiRequest("GET", `/v1/mobile/devices/${id}/stream`);
163
+ handleApiError("mobile.stream", resp);
164
+ agentOutput({ action: "mobile.stream", result: resp.data, next_steps: [] });
165
+ });
166
+ for (const verb of ["reboot", "reset"]) {
167
+ mobileCmd
168
+ .command(`${verb} <id>`)
169
+ .description(verb === "reboot" ? "Reboot a device" : "Reset a device to a fresh state")
170
+ .action(async (id) => {
171
+ const resp = await apiRequest("POST", `/v1/mobile/devices/${id}/${verb}`);
172
+ if (handlePendingApproval(`mobile.${verb}`, resp))
173
+ return;
174
+ handleApiError(`mobile.${verb}`, resp);
175
+ agentOutput({ action: `mobile.${verb}`, result: resp.data, next_steps: [] });
176
+ });
177
+ }
178
+ mobileCmd
179
+ .command("terminate <id>")
180
+ .description("Terminate (release) a device")
181
+ .action(async (id) => {
182
+ const resp = await apiRequest("DELETE", `/v1/mobile/devices/${id}`);
183
+ if (handlePendingApproval("mobile.terminate", resp))
184
+ return;
185
+ handleApiError("mobile.terminate", resp);
186
+ agentOutput({ action: "mobile.terminate", result: resp.data, next_steps: [] });
187
+ });
188
+ mobileCmd
189
+ .command("wait <id>")
190
+ .description("Block until a device is ready")
191
+ .option("--timeout <secs>", "Timeout in seconds")
192
+ .action(async (id, opts) => {
193
+ const body = opts.timeout ? { timeout_seconds: Number(opts.timeout) } : {};
194
+ const resp = await apiRequest("POST", `/v1/mobile/devices/${id}/wait`, body);
195
+ handleApiError("mobile.wait", resp);
196
+ agentOutput({ action: "mobile.wait", result: resp.data, next_steps: [] });
197
+ });
198
+ mobileCmd
199
+ .command("proxy <id>")
200
+ .description("Show a device's proxy attachment (devices default to a datacenter IP)")
201
+ .action(async (id) => {
202
+ const resp = await apiRequest("GET", `/v1/mobile/devices/${id}/proxy`);
203
+ handleApiError("mobile.proxy", resp);
204
+ agentOutput({ action: "mobile.proxy", result: resp.data, next_steps: [] });
205
+ });
206
+ mobileCmd
207
+ .command("proxy-set <id>")
208
+ .description("Attach a SOCKS5 proxy to a device (residential / country-specific IP)")
209
+ .requiredOption("--host <host>", "Proxy host")
210
+ .requiredOption("--port <port>", "Proxy port")
211
+ .option("--user <user>", "Proxy username")
212
+ .option("--password <password>", "Proxy password")
213
+ .option("--no-smart-ip", "Disable smart IP rotation handling")
214
+ .action(async (id, opts) => {
215
+ const resp = await apiRequest("POST", `/v1/mobile/devices/${id}/proxy`, {
216
+ host: opts.host,
217
+ port: Number(opts.port),
218
+ user: opts.user,
219
+ password: opts.password,
220
+ smart_ip: opts.smartIp,
221
+ });
222
+ if (handlePendingApproval("mobile.set_proxy", resp))
223
+ return;
224
+ handleApiError("mobile.set_proxy", resp);
225
+ agentOutput({ action: "mobile.set_proxy", result: resp.data, next_steps: [] });
226
+ });
227
+ mobileCmd
228
+ .command("proxy-remove <id>")
229
+ .description("Detach the proxy from a device (back to the datacenter IP)")
230
+ .action(async (id) => {
231
+ const resp = await apiRequest("DELETE", `/v1/mobile/devices/${id}/proxy`);
232
+ if (handlePendingApproval("mobile.remove_proxy", resp))
233
+ return;
234
+ handleApiError("mobile.remove_proxy", resp);
235
+ agentOutput({ action: "mobile.remove_proxy", result: resp.data, next_steps: [] });
236
+ });
237
+ mobileCmd
238
+ .command("run <task>")
239
+ .description("Run an agent task on one of your phones with a natural-language instruction")
240
+ .requiredOption("--device <id>", "Target phone (device) id — required")
241
+ .option("--model <model>", "LLM model id")
242
+ .option("--vision", "Enable vision (screenshots)")
243
+ .option("--reasoning", "Enable multi-step planning")
244
+ .option("--steps <n>", "Max execution steps")
245
+ .action(async (task, opts) => {
246
+ const body = {
247
+ task,
248
+ device_id: opts.device,
249
+ model: opts.model,
250
+ vision: opts.vision || undefined,
251
+ reasoning: opts.reasoning || undefined,
252
+ steps: opts.steps ? Number(opts.steps) : undefined,
253
+ };
254
+ const resp = await apiRequest("POST", "/v1/mobile/tasks", body);
255
+ if (handlePendingApproval("mobile.run", resp))
256
+ return;
257
+ handleApiError("mobile.run", resp);
258
+ agentOutput({ action: "mobile.run", result: resp.data, next_steps: [] });
259
+ });
260
+ mobileCmd
261
+ .command("tasks")
262
+ .description("List agent tasks")
263
+ .option("--device <id>", "Filter by device id")
264
+ .option("--status <status>", "Filter by status")
265
+ .action(async (opts) => {
266
+ const params = new URLSearchParams();
267
+ if (opts.device)
268
+ params.set("device_id", opts.device);
269
+ if (opts.status)
270
+ params.set("status", opts.status);
271
+ const qs = params.toString();
272
+ const resp = await apiRequest("GET", `/v1/mobile/tasks${qs ? `?${qs}` : ""}`);
273
+ handleApiError("mobile.tasks", resp);
274
+ agentOutput({ action: "mobile.tasks", result: resp.data, next_steps: [] });
275
+ });
276
+ mobileCmd
277
+ .command("task <id>")
278
+ .description("Show a task's status/result")
279
+ .action(async (id) => {
280
+ const resp = await apiRequest("GET", `/v1/mobile/tasks/${id}`);
281
+ handleApiError("mobile.task", resp);
282
+ agentOutput({ action: "mobile.task", result: resp.data, next_steps: [] });
283
+ });
284
+ mobileCmd
285
+ .command("stop <id>")
286
+ .description("Cancel a running task")
287
+ .action(async (id) => {
288
+ const resp = await apiRequest("POST", `/v1/mobile/tasks/${id}/stop`);
289
+ if (handlePendingApproval("mobile.stop", resp))
290
+ return;
291
+ handleApiError("mobile.stop", resp);
292
+ agentOutput({ action: "mobile.stop", result: resp.data, next_steps: [] });
293
+ });
294
+ mobileCmd
295
+ .command("screenshots <id>")
296
+ .description("List a task's screenshot URLs")
297
+ .action(async (id) => {
298
+ const resp = await apiRequest("GET", `/v1/mobile/tasks/${id}/screenshots`);
299
+ handleApiError("mobile.screenshots", resp);
300
+ agentOutput({ action: "mobile.screenshots", result: resp.data, next_steps: [] });
301
+ });
302
+ mobileCmd
303
+ .command("trajectory <id>")
304
+ .description("Show a task's step-by-step trajectory")
305
+ .action(async (id) => {
306
+ const resp = await apiRequest("GET", `/v1/mobile/tasks/${id}/trajectory`);
307
+ handleApiError("mobile.trajectory", resp);
308
+ agentOutput({ action: "mobile.trajectory", result: resp.data, next_steps: [] });
309
+ });
310
+ mobileCmd
311
+ .command("apps")
312
+ .description("List apps in the Mobilerun library")
313
+ .action(async () => {
314
+ const resp = await apiRequest("GET", "/v1/mobile/apps");
315
+ handleApiError("mobile.apps", resp);
316
+ agentOutput({ action: "mobile.apps", result: resp.data, next_steps: [] });
317
+ });
318
+ mobileCmd
319
+ .command("upload-app <name>")
320
+ .description("Create a signed upload URL to add an app (APK) to the library")
321
+ .option("--file <name>", "File name of the APK")
322
+ .action(async (name, opts) => {
323
+ const resp = await apiRequest("POST", "/v1/mobile/apps", { name, file_name: opts.file });
324
+ if (handlePendingApproval("mobile.upload_app", resp))
325
+ return;
326
+ handleApiError("mobile.upload_app", resp);
327
+ agentOutput({ action: "mobile.upload_app", result: resp.data, next_steps: [] });
328
+ });
329
+ mobileCmd
330
+ .command("search [query]")
331
+ .description("Search the Mobilerun API catalog (wildcard discovery)")
332
+ .option("--tag <tag>", "Filter by API group, e.g. Devices, Tasks, Tools")
333
+ .action(async (query, opts) => {
334
+ const params = new URLSearchParams();
335
+ if (query)
336
+ params.set("q", query);
337
+ if (opts.tag)
338
+ params.set("tag", opts.tag);
339
+ const qs = params.toString();
340
+ const resp = await apiRequest("GET", `/v1/mobile/methods${qs ? `?${qs}` : ""}`);
341
+ handleApiError("mobile.search", resp);
342
+ agentOutput({ action: "mobile.search", result: resp.data, next_steps: [] });
343
+ });
344
+ mobileCmd
345
+ .command("call <operationId>")
346
+ .description("Call ANY Mobilerun operation by operationId (wildcard)")
347
+ .option("--path <kv...>", "Path params KEY=VALUE (repeatable), e.g. deviceId=<id>")
348
+ .option("--query <kv...>", "Query params KEY=VALUE (repeatable)")
349
+ .option("--body <json>", "JSON request body")
350
+ .action(async (operationId, opts) => {
351
+ const parseKv = (entries) => {
352
+ const out = {};
353
+ for (const kv of entries ?? []) {
354
+ const i = String(kv).indexOf("=");
355
+ if (i > 0)
356
+ out[String(kv).slice(0, i)] = String(kv).slice(i + 1);
357
+ }
358
+ return out;
359
+ };
360
+ let body;
361
+ if (opts.body) {
362
+ try {
363
+ body = JSON.parse(opts.body);
364
+ }
365
+ catch {
366
+ handleApiError("mobile.call", { status: 400, data: { error: { code: "invalid_input", message: "--body must be valid JSON" } } });
367
+ return;
368
+ }
369
+ }
370
+ const reqBody = {
371
+ operation_id: operationId,
372
+ path: parseKv(opts.path),
373
+ query: parseKv(opts.query),
374
+ ...(body !== undefined ? { body } : {}),
375
+ };
376
+ const resp = await apiRequest("POST", "/v1/mobile/call", reqBody);
377
+ if (handlePendingApproval("mobile.call", resp))
378
+ return;
379
+ handleApiError("mobile.call", resp);
380
+ agentOutput({ action: "mobile.call", result: resp.data, next_steps: [] });
381
+ });
382
+ //# sourceMappingURL=mobile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../src/commands/mobile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const paymentsCmd: Command;
@@ -0,0 +1,131 @@
1
+ import { Command } from "commander";
2
+ import { apiRequest, handleApiError } from "../client.js";
3
+ import { agentOutput } from "../output.js";
4
+ export const paymentsCmd = new Command("payments")
5
+ .description("Payments — pay for x402 resources with the agent's crypto wallet")
6
+ .addHelpText("after", `
7
+ Subcommands:
8
+ naive payments quote Probe an x402 URL for its price — no side effects
9
+ naive payments pay Pay for and fetch an x402 resource
10
+ naive payments receipts List payment receipts
11
+
12
+ How it works:
13
+ x402 is the HTTP 402 payment protocol. A paywalled resource answers with
14
+ 402 Payment Required and a 'payment-required' header describing what it
15
+ accepts. 'quote' reads that without paying. 'pay' signs a USDC payment from
16
+ the agent's wallet, retries the request with the payment attached, and returns
17
+ the resource body plus a receipt.
18
+
19
+ 'quote' first, then 'pay' — quote has ZERO side effects (no wallet is even
20
+ loaded), so it is the safe way to learn a price.
21
+
22
+ Spend control:
23
+ 'pay' is SENSITIVE — it spends real USDC. There is deliberately NO approval
24
+ queue: the cap is enforced inside the custody plane at signing time, which
25
+ survives a compromised runtime in a way an approval prompt would not. What
26
+ bounds a payment:
27
+ 1. The wallet balance (an agent cannot spend what isn't there).
28
+ 2. perTxMax — enforced at runtime AND as a static custody-plane policy.
29
+ 3. dailyBudget (optional) — a rolling runtime counter.
30
+ 4. --max-amount — a per-call ceiling you set on this one payment.
31
+ Set the policy with 'naive wallet policy'.
32
+
33
+ Examples:
34
+ $ naive use alice
35
+ $ naive payments quote --url https://api.example.com/report
36
+ $ naive payments pay --url https://api.example.com/report --max-amount 0.50
37
+ $ naive payments receipts --direction buy --limit 10
38
+ $ naive payments receipts --since 2026-07-01T00:00:00Z
39
+ `);
40
+ paymentsCmd
41
+ .command("quote")
42
+ .description("Probe an x402 URL for its price — zero side effects, no payment")
43
+ .requiredOption("--url <url>", "The x402 resource URL")
44
+ .option("--method <method>", "HTTP method to probe with (default: GET)")
45
+ .action(async (opts) => {
46
+ const resp = await apiRequest("POST", "/v1/payments/quote", {
47
+ url: opts.url,
48
+ ...(opts.method && { init: { method: opts.method } }),
49
+ });
50
+ handleApiError("payments.quote", resp);
51
+ const data = resp.data;
52
+ const first = data.accepts?.[0];
53
+ const atomic = first?.amount ?? first?.maxAmountRequired;
54
+ agentOutput({
55
+ action: "payments.quote",
56
+ result: resp.data,
57
+ next_steps: [{ command: `naive payments pay --url ${opts.url}`, description: "Pay for and fetch the resource" }],
58
+ hints: [
59
+ data.free
60
+ ? `This resource is not paywalled (HTTP ${data.status}) — fetch it normally, no payment needed.`
61
+ : first
62
+ ? `Priced at ${atomic ?? "?"} atomic units of ${first.asset ?? "?"} on ${first.network ?? "?"}, payable to ${first.payTo ?? "?"}. USDC has 6 decimals, so 500000 = 0.50 USDC.`
63
+ : "The resource returned 402 but advertised no acceptable payment method.",
64
+ "Quote does not touch the wallet — nothing was spent.",
65
+ "--max-amount on 'pay' is a DECIMAL amount (e.g. 0.50), not atomic units.",
66
+ ],
67
+ related_commands: ["naive payments pay", "naive wallet balance"],
68
+ });
69
+ });
70
+ paymentsCmd
71
+ .command("pay")
72
+ .description("Pay for and fetch an x402 resource — SENSITIVE, spends real USDC")
73
+ .requiredOption("--url <url>", "The x402 resource URL")
74
+ .option("--max-amount <amount>", "Refuse to pay more than this (decimal USDC) — a per-call ceiling")
75
+ .option("--method <method>", "HTTP method (default: GET)")
76
+ .action(async (opts) => {
77
+ const resp = await apiRequest("POST", "/v1/payments/pay", {
78
+ url: opts.url,
79
+ ...(opts.maxAmount && { max_amount: opts.maxAmount }),
80
+ ...(opts.method && { init: { method: opts.method } }),
81
+ });
82
+ handleApiError("payments.pay", resp);
83
+ const data = resp.data;
84
+ agentOutput({
85
+ action: "payments.pay",
86
+ result: resp.data,
87
+ next_steps: [{ command: "naive payments receipts --direction buy", description: "See the receipt" }],
88
+ hints: [
89
+ data.paid
90
+ ? `Paid ${data.receipt?.amount ?? "?"} USDC. Settlement tx: ${data.receipt?.txHash ?? "?"}.`
91
+ : `No payment was made — the resource returned HTTP ${data.status ?? "?"} (it may be free, or the request failed).`,
92
+ ...(opts.maxAmount ? [] : ["Tip: pass --max-amount to cap this specific payment on top of the wallet's perTxMax."]),
93
+ ],
94
+ related_commands: ["naive payments receipts", "naive wallet balance"],
95
+ });
96
+ });
97
+ paymentsCmd
98
+ .command("receipts")
99
+ .description("List x402 payment receipts")
100
+ .option("--direction <direction>", "buy (paid out) | sell (received)")
101
+ .option("--origin <origin>", "Filter to one resource origin")
102
+ .option("--since <iso>", "Only receipts at/after an ISO-8601 timestamp")
103
+ .option("--limit <n>", "Max receipts to return")
104
+ .action(async (opts) => {
105
+ const params = new URLSearchParams();
106
+ if (opts.direction)
107
+ params.set("direction", opts.direction);
108
+ if (opts.origin)
109
+ params.set("origin", opts.origin);
110
+ if (opts.since)
111
+ params.set("since", opts.since);
112
+ if (opts.limit)
113
+ params.set("limit", String(opts.limit));
114
+ const qs = params.toString();
115
+ const resp = await apiRequest("GET", `/v1/payments/receipts${qs ? `?${qs}` : ""}`);
116
+ handleApiError("payments.receipts", resp);
117
+ // payReceipts returns a bare row array (not { receipts: [...] }).
118
+ const receipts = Array.isArray(resp.data) ? resp.data : [];
119
+ agentOutput({
120
+ action: "payments.receipts",
121
+ result: resp.data,
122
+ next_steps: [{ command: "naive wallet balance", description: "Read the remaining balance" }],
123
+ hints: [
124
+ receipts.length === 0
125
+ ? "No receipts match. This agent has not paid for anything yet."
126
+ : `${receipts.length} receipt(s). Every settled x402 payment is recorded here.`,
127
+ ],
128
+ related_commands: ["naive payments pay", "naive wallet balance"],
129
+ });
130
+ });
131
+ //# sourceMappingURL=payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/commands/payments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const peopleCmd: Command;