@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.
- package/README.md +76 -5
- package/dist/client.d.ts +74 -1
- package/dist/client.js +351 -17
- package/dist/client.js.map +1 -1
- package/dist/commands/aeo.js +69 -27
- package/dist/commands/aeo.js.map +1 -1
- package/dist/commands/app-data.js +29 -11
- package/dist/commands/app-data.js.map +1 -1
- package/dist/commands/apps.d.ts +7 -0
- package/dist/commands/apps.js +255 -18
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/audio.d.ts +9 -0
- package/dist/commands/audio.js +391 -0
- package/dist/commands/audio.js.map +1 -0
- package/dist/commands/auth.d.ts +31 -0
- package/dist/commands/auth.js +403 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/billing.js +12 -12
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/brain.d.ts +2 -0
- package/dist/commands/brain.js +1255 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/browser.js +35 -8
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/business.js +117 -16
- package/dist/commands/business.js.map +1 -1
- package/dist/commands/clone.d.ts +2 -0
- package/dist/commands/clone.js +203 -0
- package/dist/commands/clone.js.map +1 -0
- package/dist/commands/companies.d.ts +8 -0
- package/dist/commands/companies.js +137 -47
- package/dist/commands/companies.js.map +1 -1
- package/dist/commands/company-data.d.ts +2 -0
- package/dist/commands/company-data.js +168 -0
- package/dist/commands/company-data.js.map +1 -0
- package/dist/commands/compute.js +10 -3
- package/dist/commands/compute.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +36 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connections.d.ts +6 -0
- package/dist/commands/connections.js +29 -1
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/domains.js +1 -1
- package/dist/commands/ecommerce.js +19 -9
- package/dist/commands/ecommerce.js.map +1 -1
- package/dist/commands/email.js +56 -9
- package/dist/commands/email.js.map +1 -1
- package/dist/commands/env.d.ts +3 -3
- package/dist/commands/env.js +68 -4
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/formation.js +3 -3
- package/dist/commands/identity.js +4 -3
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/images.js +87 -13
- package/dist/commands/images.js.map +1 -1
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.js +39 -36
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.js +1 -0
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/keys.js +26 -3
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/legacy-auth.d.ts +27 -0
- package/dist/commands/legacy-auth.js +64 -0
- package/dist/commands/legacy-auth.js.map +1 -0
- package/dist/commands/llm.js +13 -0
- package/dist/commands/llm.js.map +1 -1
- package/dist/commands/login.js +2 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/loops.d.ts +2 -0
- package/dist/commands/loops.js +260 -0
- package/dist/commands/loops.js.map +1 -0
- package/dist/commands/media.js +3 -3
- package/dist/commands/media.js.map +1 -1
- package/dist/commands/mobile.d.ts +4 -0
- package/dist/commands/mobile.js +382 -0
- package/dist/commands/mobile.js.map +1 -0
- package/dist/commands/payments.d.ts +2 -0
- package/dist/commands/payments.js +131 -0
- package/dist/commands/payments.js.map +1 -0
- package/dist/commands/people.d.ts +2 -0
- package/dist/commands/people.js +193 -0
- package/dist/commands/people.js.map +1 -0
- package/dist/commands/phone.js +3 -3
- package/dist/commands/phone.js.map +1 -1
- package/dist/commands/projects.d.ts +13 -0
- package/dist/commands/projects.js +220 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/register.js +16 -8
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/sandbox.d.ts +2 -0
- package/dist/commands/sandbox.js +245 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/search.js +26 -12
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/seo.js +16 -8
- package/dist/commands/seo.js.map +1 -1
- package/dist/commands/sessions.d.ts +6 -0
- package/dist/commands/sessions.js +109 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/social-data.d.ts +2 -0
- package/dist/commands/social-data.js +244 -0
- package/dist/commands/social-data.js.map +1 -0
- package/dist/commands/social.js +8 -6
- package/dist/commands/social.js.map +1 -1
- package/dist/commands/teams.d.ts +69 -0
- package/dist/commands/teams.js +503 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/up.d.ts +150 -0
- package/dist/commands/up.js +415 -15
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/usage.js +15 -4
- package/dist/commands/usage.js.map +1 -1
- package/dist/commands/use.d.ts +9 -0
- package/dist/commands/use.js +76 -11
- package/dist/commands/use.js.map +1 -1
- package/dist/commands/users.d.ts +8 -0
- package/dist/commands/users.js +28 -9
- package/dist/commands/users.js.map +1 -1
- package/dist/commands/vault.js +28 -1
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/video.js +190 -270
- package/dist/commands/video.js.map +1 -1
- package/dist/commands/voice.d.ts +2 -0
- package/dist/commands/voice.js +516 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/commands/wallet.d.ts +2 -0
- package/dist/commands/wallet.js +244 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/commands/whoami.js +17 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts +24 -1
- package/dist/config.js +36 -7
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +290 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/brain-select.d.ts +193 -0
- package/dist/lib/brain-select.js +403 -0
- package/dist/lib/brain-select.js.map +1 -0
- package/dist/lib/cli-validation.d.ts +12 -0
- package/dist/lib/cli-validation.js +46 -0
- package/dist/lib/cli-validation.js.map +1 -0
- package/dist/lib/deprecation.d.ts +158 -0
- package/dist/lib/deprecation.js +140 -0
- package/dist/lib/deprecation.js.map +1 -0
- package/dist/lib/duration.d.ts +8 -0
- package/dist/lib/duration.js +11 -0
- package/dist/lib/duration.js.map +1 -0
- package/dist/lib/http-response.d.ts +11 -0
- package/dist/lib/http-response.js +96 -0
- package/dist/lib/http-response.js.map +1 -0
- package/dist/lib/pricing.d.ts +132 -0
- package/dist/lib/pricing.js +148 -0
- package/dist/lib/pricing.js.map +1 -0
- package/dist/lib/stream-frames.d.ts +114 -0
- package/dist/lib/stream-frames.js +169 -0
- package/dist/lib/stream-frames.js.map +1 -0
- package/dist/lib/teams-catalog.d.ts +141 -0
- package/dist/lib/teams-catalog.js +765 -0
- package/dist/lib/teams-catalog.js.map +1 -0
- package/dist/lib/unknown-command.d.ts +57 -0
- package/dist/lib/unknown-command.js +93 -0
- package/dist/lib/unknown-command.js.map +1 -0
- package/dist/lib/version-check.d.ts +26 -0
- package/dist/lib/version-check.js +21 -0
- package/dist/lib/version-check.js.map +1 -0
- package/dist/output.d.ts +119 -10
- package/dist/output.js +309 -15
- package/dist/output.js.map +1 -1
- package/dist/prompt.d.ts +17 -0
- package/dist/prompt.js +70 -0
- package/dist/prompt.js.map +1 -0
- package/package.json +11 -6
- package/dist/commands/billing-client.d.ts +0 -2
- package/dist/commands/billing-client.js +0 -271
- package/dist/commands/billing-client.js.map +0 -1
- package/dist/commands/crm-app.d.ts +0 -2
- package/dist/commands/crm-app.js +0 -306
- package/dist/commands/crm-app.js.map +0 -1
- package/dist/commands/crm.d.ts +0 -2
- package/dist/commands/crm.js +0 -319
- package/dist/commands/crm.js.map +0 -1
- package/dist/commands/integrations.d.ts +0 -2
- package/dist/commands/integrations.js +0 -199
- package/dist/commands/integrations.js.map +0 -1
- package/dist/commands/link.d.ts +0 -3
- package/dist/commands/link.js +0 -91
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/operators.d.ts +0 -11
- package/dist/commands/operators.js +0 -120
- 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,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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"}
|