@usenaive-sdk/cli 0.4.2 → 0.5.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/dist/client.d.ts +2 -1
- package/dist/client.js +28 -2
- package/dist/client.js.map +1 -1
- package/dist/commands/browser.d.ts +2 -0
- package/dist/commands/browser.js +351 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/commands/connections.js +1 -1
- package/dist/commands/connections.js.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export declare function setActiveUserOverride(userId?: string): void;
|
|
2
2
|
/** Resolve the active subject user id (override > config). */
|
|
3
3
|
export declare function activeUserId(): string | undefined;
|
|
4
|
-
export declare function apiRequest(method: string,
|
|
4
|
+
export declare function apiRequest(method: string, rawPath: string, body?: Record<string, unknown>, opts?: {
|
|
5
5
|
noAuth?: boolean;
|
|
6
6
|
userId?: string;
|
|
7
|
+
headers?: Record<string, string>;
|
|
7
8
|
}): Promise<{
|
|
8
9
|
status: number;
|
|
9
10
|
data: unknown;
|
package/dist/client.js
CHANGED
|
@@ -10,12 +10,34 @@ export function setActiveUserOverride(userId) {
|
|
|
10
10
|
export function activeUserId() {
|
|
11
11
|
return _userOverride ?? loadConfig().active_user_id;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Native primitives that have per-user path routes (/v1/users/:id/<prim>).
|
|
15
|
+
* When an active subject user is set, legacy company-level calls
|
|
16
|
+
* (/v1/<prim>/...) are rewritten to the path-scoped form so the CLI's
|
|
17
|
+
* `use`/`--user` selection actually isolates data and enforces the
|
|
18
|
+
* AccountKit — matching the SDK and dashboard. The legacy routes don't run
|
|
19
|
+
* the subject middleware, so without this the header was silently ignored.
|
|
20
|
+
*/
|
|
21
|
+
const PER_USER_PRIMITIVES = new Set(["cards", "email", "domains", "verification", "formation", "social"]);
|
|
22
|
+
function scopePathToUser(path, subject) {
|
|
23
|
+
if (!subject)
|
|
24
|
+
return path; // solo flow (no active user) keeps legacy behavior
|
|
25
|
+
if (path.startsWith("/v1/users/"))
|
|
26
|
+
return path; // already user-scoped
|
|
27
|
+
const m = path.match(/^\/v1\/([^/?]+)(.*)$/);
|
|
28
|
+
if (!m)
|
|
29
|
+
return path;
|
|
30
|
+
if (!PER_USER_PRIMITIVES.has(m[1]))
|
|
31
|
+
return path;
|
|
32
|
+
return `/v1/users/${subject}/${m[1]}${m[2]}`;
|
|
33
|
+
}
|
|
34
|
+
export async function apiRequest(method, rawPath, body, opts) {
|
|
14
35
|
const config = loadConfig();
|
|
15
|
-
const url = `${config.base_url}${path}`;
|
|
16
36
|
const headers = {
|
|
17
37
|
"Content-Type": "application/json",
|
|
38
|
+
...(opts?.headers ?? {}),
|
|
18
39
|
};
|
|
40
|
+
let path = rawPath;
|
|
19
41
|
if (!opts?.noAuth) {
|
|
20
42
|
headers["Authorization"] = `Bearer ${getApiKey()}`;
|
|
21
43
|
// Scope to a specific tenant_user when set. The server validates the id
|
|
@@ -23,7 +45,11 @@ export async function apiRequest(method, path, body, opts) {
|
|
|
23
45
|
const subject = opts?.userId ?? activeUserId();
|
|
24
46
|
if (subject)
|
|
25
47
|
headers["X-Naive-User-Id"] = subject;
|
|
48
|
+
// Native primitives only isolate via their per-user path routes, so rewrite
|
|
49
|
+
// legacy paths to the path-scoped form when a subject is active.
|
|
50
|
+
path = scopePathToUser(path, subject);
|
|
26
51
|
}
|
|
52
|
+
const url = `${config.base_url}${path}`;
|
|
27
53
|
const resp = await fetch(url, {
|
|
28
54
|
method,
|
|
29
55
|
headers,
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,8EAA8E;AAC9E,0EAA0E;AAC1E,IAAI,aAAiC,CAAC;AACtC,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,IAAI,UAAU,EAAE,CAAC,cAAc,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { apiRequest, handleApiError, handlePendingApproval, activeUserId } from "../client.js";
|
|
4
|
+
import { agentOutput } from "../output.js";
|
|
5
|
+
/**
|
|
6
|
+
* Browser is a per-tenant-user primitive: routes live under /v1/users/:id/browser. Use the
|
|
7
|
+
* active subject user (from `naive use` / --user) or the "default" sentinel, which the API
|
|
8
|
+
* resolves to the company's default tenant_user.
|
|
9
|
+
*/
|
|
10
|
+
function browserBase() {
|
|
11
|
+
return `/v1/users/${activeUserId() ?? "default"}/browser`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Browser primitive CLI (Phase 2A, Tier A). Mirrors `commands/video.ts` + the
|
|
15
|
+
* AgentOutput shape: every action prints { success, action, result, next_steps, hints }.
|
|
16
|
+
*
|
|
17
|
+
* act/navigate carry a STABLE Idempotency-Key (a hash of session_id+action+instruction,
|
|
18
|
+
* NOT Date.now()) so a retried logical step dedupes against the per-process API cache
|
|
19
|
+
* rather than double-submitting a form / double-billing.
|
|
20
|
+
*/
|
|
21
|
+
/** Deterministic per-logical-action idempotency key. */
|
|
22
|
+
function stableKey(parts) {
|
|
23
|
+
return `br_${createHash("sha256").update(parts.join("\0")).digest("hex").slice(0, 32)}`;
|
|
24
|
+
}
|
|
25
|
+
export const browserCmd = new Command("browser")
|
|
26
|
+
.description("Drive a live cloud browser session step-by-step (navigate, act, extract)")
|
|
27
|
+
.addHelpText("after", `
|
|
28
|
+
Subcommands:
|
|
29
|
+
naive browser session create Open a live browser session (returns session_id)
|
|
30
|
+
naive browser session status <id> Check a session's status (safe view)
|
|
31
|
+
naive browser session close <id> Close a session and release the browser
|
|
32
|
+
naive browser navigate <id> <url> Navigate the session to a URL
|
|
33
|
+
naive browser act <id> <instruction> Perform a natural-language action (click/fill/etc)
|
|
34
|
+
naive browser extract <id> <instruction> Extract structured data from the current page
|
|
35
|
+
naive browser observe <id> <instruction> List candidate actions/elements on the page
|
|
36
|
+
naive browser screenshot <id> Capture the page (short-lived signed URL)
|
|
37
|
+
naive browser signup <service> <url> Autonomously sign up (generates + vaults a password)
|
|
38
|
+
naive browser login <service> <url> Autonomously log in using the vaulted credential
|
|
39
|
+
naive browser context save <id> Persist a completed human login as a saved context
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
$ naive browser session create --allowed-domains example.com --timeout 15
|
|
43
|
+
$ naive browser navigate <session_id> https://example.com
|
|
44
|
+
$ naive browser act <session_id> "click the search button"
|
|
45
|
+
$ naive browser extract <session_id> "the list of product names and prices"
|
|
46
|
+
$ naive browser session close <session_id>
|
|
47
|
+
$ naive browser signup figma.com https://www.figma.com/signup
|
|
48
|
+
$ naive browser login figma.com https://www.figma.com/login
|
|
49
|
+
|
|
50
|
+
Cost:
|
|
51
|
+
- Open session: 0 credits (a time floor is charged at close)
|
|
52
|
+
- navigate: 2 · act: 5 · extract: 3 · observe: 1 · screenshot: 1 · signup: 15 · login: 10 credits
|
|
53
|
+
- Always close sessions when done — idle sessions still bill a time floor.
|
|
54
|
+
|
|
55
|
+
Safety:
|
|
56
|
+
- Sessions MUST be domain-scoped: pass --allowed-domains (default-deny) or --allowed-domains '*'
|
|
57
|
+
to browse unrestricted (not recommended). SSRF-guarded either way.
|
|
58
|
+
- Write/destructive act() instructions are rejected unless --allow-writes was set at create.
|
|
59
|
+
- Never put passwords or secrets in an act/extract instruction.
|
|
60
|
+
`);
|
|
61
|
+
// ── session create | status | close ─────────────────────────────────────
|
|
62
|
+
const sessionCmd = new Command("session").description("Manage browser sessions");
|
|
63
|
+
sessionCmd
|
|
64
|
+
.command("create")
|
|
65
|
+
.description("Open a live browser session (charges 0 credits)")
|
|
66
|
+
.option("--timeout <minutes>", "Hard session TTL in minutes (default 15, max 30)")
|
|
67
|
+
.option("--allowed-domains <list>", "REQUIRED. Comma-separated domain allowlist (default-deny). Use '*' to browse unrestricted (not recommended)")
|
|
68
|
+
.option("--allow-writes", "Permit write/destructive act() instructions (default off)")
|
|
69
|
+
.option("--context-name <name>", "Reopen a SAVED LOGIN by name (opens already logged-in; requires a grant)")
|
|
70
|
+
.option("--human-login", "Open a human first-login session (agents are locked out until save-login)")
|
|
71
|
+
.option("--allow-extract", "On a saved-login session, permit extract/observe/screenshot (default off)")
|
|
72
|
+
.option("--proxy", "Route egress through a residential proxy (requires --allowed-domains; not allowed with context/login)")
|
|
73
|
+
.action(async (opts) => {
|
|
74
|
+
const body = {};
|
|
75
|
+
if (opts.timeout)
|
|
76
|
+
body.timeout_minutes = parseInt(opts.timeout, 10);
|
|
77
|
+
if (opts.allowedDomains) {
|
|
78
|
+
body.allowed_domains = String(opts.allowedDomains)
|
|
79
|
+
.split(",")
|
|
80
|
+
.map((d) => d.trim())
|
|
81
|
+
.filter(Boolean);
|
|
82
|
+
}
|
|
83
|
+
if (opts.allowWrites)
|
|
84
|
+
body.allow_writes = true;
|
|
85
|
+
if (opts.contextName)
|
|
86
|
+
body.context_name = opts.contextName;
|
|
87
|
+
if (opts.humanLogin)
|
|
88
|
+
body.human_login = true;
|
|
89
|
+
if (opts.allowExtract)
|
|
90
|
+
body.allow_extract = true;
|
|
91
|
+
if (opts.proxy)
|
|
92
|
+
body.proxy = true;
|
|
93
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions`, body);
|
|
94
|
+
handleApiError("browser.session.create", resp);
|
|
95
|
+
const data = resp.data;
|
|
96
|
+
agentOutput({
|
|
97
|
+
action: "browser.session.create",
|
|
98
|
+
result: resp.data,
|
|
99
|
+
next_steps: [
|
|
100
|
+
{ command: `naive browser navigate ${data.session_id} https://example.com`, description: "Navigate the session to a URL" },
|
|
101
|
+
{ command: `naive browser act ${data.session_id} "click the login button"`, description: "Perform an action" },
|
|
102
|
+
{ command: `naive browser session close ${data.session_id}`, description: "Close the session when done" },
|
|
103
|
+
],
|
|
104
|
+
hints: [
|
|
105
|
+
"Opening a session costs 0 credits; a time floor is charged at close.",
|
|
106
|
+
"Always close sessions when finished — idle sessions still bill the vendor browser-hour.",
|
|
107
|
+
],
|
|
108
|
+
related_commands: ["naive browser navigate", "naive browser act", "naive browser session status"],
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
sessionCmd
|
|
112
|
+
.command("status <session_id>")
|
|
113
|
+
.description("Check a browser session's status (safe view — no internal URLs)")
|
|
114
|
+
.action(async (sessionId) => {
|
|
115
|
+
const resp = await apiRequest("GET", `${browserBase()}/sessions/${sessionId}`);
|
|
116
|
+
handleApiError("browser.session.status", resp);
|
|
117
|
+
const data = resp.data;
|
|
118
|
+
agentOutput({
|
|
119
|
+
action: "browser.session.status",
|
|
120
|
+
result: resp.data,
|
|
121
|
+
next_steps: [
|
|
122
|
+
...(data.status === "active"
|
|
123
|
+
? [{ command: `naive browser act ${sessionId} "your instruction"`, description: "Drive the session" }]
|
|
124
|
+
: []),
|
|
125
|
+
{ command: `naive browser session close ${sessionId}`, description: "Close the session" },
|
|
126
|
+
],
|
|
127
|
+
hints: [`Session status: ${data.status}`],
|
|
128
|
+
related_commands: ["naive browser navigate", "naive browser act", "naive browser extract"],
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
sessionCmd
|
|
132
|
+
.command("close <session_id>")
|
|
133
|
+
.description("Close a browser session and release the browser (idempotent)")
|
|
134
|
+
.action(async (sessionId) => {
|
|
135
|
+
const resp = await apiRequest("DELETE", `${browserBase()}/sessions/${sessionId}`);
|
|
136
|
+
handleApiError("browser.session.close", resp);
|
|
137
|
+
agentOutput({
|
|
138
|
+
action: "browser.session.close",
|
|
139
|
+
result: resp.data,
|
|
140
|
+
next_steps: [
|
|
141
|
+
{ command: "naive browser session create", description: "Open a new session" },
|
|
142
|
+
],
|
|
143
|
+
hints: [
|
|
144
|
+
"Session closed. A time-floor top-up may have been charged if usage was below the minimum.",
|
|
145
|
+
"Close is idempotent — calling it again on a closed session is safe.",
|
|
146
|
+
],
|
|
147
|
+
related_commands: ["naive browser session create"],
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
browserCmd.addCommand(sessionCmd);
|
|
151
|
+
// ── navigate ─────────────────────────────────────────────────────────────
|
|
152
|
+
browserCmd
|
|
153
|
+
.command("navigate <session_id> <url>")
|
|
154
|
+
.description("Navigate the session to a URL (2 credits)")
|
|
155
|
+
.action(async (sessionId, url) => {
|
|
156
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/navigate`, { url }, {
|
|
157
|
+
headers: { "Idempotency-Key": stableKey([sessionId, "navigate", url]) },
|
|
158
|
+
});
|
|
159
|
+
handleApiError("browser.navigate", resp);
|
|
160
|
+
agentOutput({
|
|
161
|
+
action: "browser.navigate",
|
|
162
|
+
result: resp.data,
|
|
163
|
+
next_steps: [
|
|
164
|
+
{ command: `naive browser extract ${sessionId} "the main content"`, description: "Extract data from the page" },
|
|
165
|
+
{ command: `naive browser act ${sessionId} "click the first result"`, description: "Act on the page" },
|
|
166
|
+
],
|
|
167
|
+
hints: ["Navigation enforces the session's domain allowlist and an SSRF denylist."],
|
|
168
|
+
related_commands: ["naive browser act", "naive browser extract"],
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
// ── act ──────────────────────────────────────────────────────────────────
|
|
172
|
+
browserCmd
|
|
173
|
+
.command("act <session_id> <instruction>")
|
|
174
|
+
.description("Perform a natural-language action in the session (5 credits)")
|
|
175
|
+
.action(async (sessionId, instruction) => {
|
|
176
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/act`, { instruction }, {
|
|
177
|
+
headers: { "Idempotency-Key": stableKey([sessionId, "act", instruction]) },
|
|
178
|
+
});
|
|
179
|
+
handleApiError("browser.act", resp);
|
|
180
|
+
agentOutput({
|
|
181
|
+
action: "browser.act",
|
|
182
|
+
result: resp.data,
|
|
183
|
+
next_steps: [
|
|
184
|
+
{ command: `naive browser extract ${sessionId} "the result"`, description: "Read the outcome" },
|
|
185
|
+
{ command: `naive browser session close ${sessionId}`, description: "Close when done" },
|
|
186
|
+
],
|
|
187
|
+
hints: [
|
|
188
|
+
"Write/destructive actions are rejected unless the session was created with --allow-writes.",
|
|
189
|
+
"Never include passwords or secrets in an instruction.",
|
|
190
|
+
],
|
|
191
|
+
related_commands: ["naive browser navigate", "naive browser extract"],
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
// ── extract ────────────────────────────────────────────────────────────────
|
|
195
|
+
browserCmd
|
|
196
|
+
.command("extract <session_id> <instruction>")
|
|
197
|
+
.description("Extract structured data from the current page (3 credits, read-only)")
|
|
198
|
+
.action(async (sessionId, instruction) => {
|
|
199
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/extract`, { instruction });
|
|
200
|
+
handleApiError("browser.extract", resp);
|
|
201
|
+
agentOutput({
|
|
202
|
+
action: "browser.extract",
|
|
203
|
+
result: resp.data,
|
|
204
|
+
next_steps: [
|
|
205
|
+
{ command: `naive browser act ${sessionId} "next action"`, description: "Continue driving the session" },
|
|
206
|
+
{ command: `naive browser session close ${sessionId}`, description: "Close when done" },
|
|
207
|
+
],
|
|
208
|
+
hints: ["extract is read-only — it returns structured data from the current page."],
|
|
209
|
+
related_commands: ["naive browser navigate", "naive browser act"],
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
// ── observe ──────────────────────────────────────────────────────────────────
|
|
213
|
+
browserCmd
|
|
214
|
+
.command("observe <session_id> <instruction>")
|
|
215
|
+
.description("List candidate actions/elements on the current page (1 credit, read-only)")
|
|
216
|
+
.action(async (sessionId, instruction) => {
|
|
217
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/observe`, { instruction });
|
|
218
|
+
handleApiError("browser.observe", resp);
|
|
219
|
+
agentOutput({
|
|
220
|
+
action: "browser.observe",
|
|
221
|
+
result: resp.data,
|
|
222
|
+
next_steps: [
|
|
223
|
+
{ command: `naive browser act ${sessionId} "click the first result"`, description: "Act on a candidate" },
|
|
224
|
+
],
|
|
225
|
+
hints: [
|
|
226
|
+
"observe is read-only; on a saved-login session it is disabled unless opened with --allow-extract.",
|
|
227
|
+
],
|
|
228
|
+
related_commands: ["naive browser act", "naive browser extract"],
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
// ── screenshot ─────────────────────────────────────────────────────────────
|
|
232
|
+
browserCmd
|
|
233
|
+
.command("screenshot <session_id>")
|
|
234
|
+
.description("Capture a screenshot; returns a short-lived (5-minute) URL (1 credit)")
|
|
235
|
+
.action(async (sessionId) => {
|
|
236
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/screenshot`, {});
|
|
237
|
+
handleApiError("browser.screenshot", resp);
|
|
238
|
+
agentOutput({
|
|
239
|
+
action: "browser.screenshot",
|
|
240
|
+
result: resp.data,
|
|
241
|
+
next_steps: [
|
|
242
|
+
{ command: `naive browser session close ${sessionId}`, description: "Close when done" },
|
|
243
|
+
],
|
|
244
|
+
hints: [
|
|
245
|
+
"The URL expires in 5 minutes — fetch it promptly. On a saved-login session this requires --allow-extract.",
|
|
246
|
+
],
|
|
247
|
+
related_commands: ["naive browser extract", "naive browser observe"],
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
// ── autonomous signup / login ────────────────────────────────────────────────
|
|
251
|
+
browserCmd
|
|
252
|
+
.command("signup <service> <url>")
|
|
253
|
+
.description("Autonomously sign up for a service (generates + vaults a password). May require approval.")
|
|
254
|
+
.option("--allowed-domains <list>", "Override session allowlist (comma-separated; defaults to the url host)")
|
|
255
|
+
.option("--timeout <minutes>", "Hard session TTL in minutes (default 15, max 30)")
|
|
256
|
+
.action(async (service, url, opts) => {
|
|
257
|
+
const body = { service, url };
|
|
258
|
+
if (opts.allowedDomains) {
|
|
259
|
+
body.allowed_domains = String(opts.allowedDomains).split(",").map((d) => d.trim()).filter(Boolean);
|
|
260
|
+
}
|
|
261
|
+
if (opts.timeout)
|
|
262
|
+
body.timeout_minutes = parseInt(opts.timeout, 10);
|
|
263
|
+
const resp = await apiRequest("POST", `${browserBase()}/signup`, body);
|
|
264
|
+
if (handlePendingApproval("browser.signup", resp))
|
|
265
|
+
return;
|
|
266
|
+
handleApiError("browser.signup", resp);
|
|
267
|
+
agentOutput({
|
|
268
|
+
action: "browser.signup",
|
|
269
|
+
result: resp.data,
|
|
270
|
+
next_steps: [
|
|
271
|
+
{ command: `naive browser login ${service} ${url}`, description: "Log back in later using the saved credential" },
|
|
272
|
+
{ command: `naive vault list`, description: "See the saved credential entry (value masked)" },
|
|
273
|
+
],
|
|
274
|
+
hints: [
|
|
275
|
+
"A strong password was generated and saved to the user's vault (you never see it).",
|
|
276
|
+
"Re-login anytime with `naive browser login` — it pulls the credential from the vault.",
|
|
277
|
+
],
|
|
278
|
+
related_commands: ["naive browser login", "naive vault list"],
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
browserCmd
|
|
282
|
+
.command("login <service> <url>")
|
|
283
|
+
.description("Autonomously log in to a service using the vault-stored credential")
|
|
284
|
+
.option("--allowed-domains <list>", "Override session allowlist (comma-separated; defaults to the url host)")
|
|
285
|
+
.option("--timeout <minutes>", "Hard session TTL in minutes (default 15, max 30)")
|
|
286
|
+
.action(async (service, url, opts) => {
|
|
287
|
+
const body = { service, url };
|
|
288
|
+
if (opts.allowedDomains) {
|
|
289
|
+
body.allowed_domains = String(opts.allowedDomains).split(",").map((d) => d.trim()).filter(Boolean);
|
|
290
|
+
}
|
|
291
|
+
if (opts.timeout)
|
|
292
|
+
body.timeout_minutes = parseInt(opts.timeout, 10);
|
|
293
|
+
const resp = await apiRequest("POST", `${browserBase()}/login`, body);
|
|
294
|
+
handleApiError("browser.login", resp);
|
|
295
|
+
agentOutput({
|
|
296
|
+
action: "browser.login",
|
|
297
|
+
result: resp.data,
|
|
298
|
+
next_steps: [],
|
|
299
|
+
hints: [
|
|
300
|
+
"Logged in using the credential stored at signup (pulled from the vault server-side).",
|
|
301
|
+
"If this errors with not_found, run `naive browser signup` first.",
|
|
302
|
+
],
|
|
303
|
+
related_commands: ["naive browser signup"],
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
// ── save-login / context ─────────────────────────────────────────────────────
|
|
307
|
+
const contextCmd = new Command("context").description("Manage reusable saved logins");
|
|
308
|
+
contextCmd
|
|
309
|
+
.command("save <session_id>")
|
|
310
|
+
.description("Persist a completed human login into a reusable saved login")
|
|
311
|
+
.action(async (sessionId) => {
|
|
312
|
+
const resp = await apiRequest("POST", `${browserBase()}/sessions/${sessionId}/context`, {});
|
|
313
|
+
handleApiError("browser.context.save", resp);
|
|
314
|
+
agentOutput({
|
|
315
|
+
action: "browser.context.save",
|
|
316
|
+
result: resp.data,
|
|
317
|
+
next_steps: [
|
|
318
|
+
{ command: `naive browser session close ${sessionId}`, description: "Close to flush the login into the encrypted context" },
|
|
319
|
+
],
|
|
320
|
+
hints: [
|
|
321
|
+
"Saving releases the human lock. Close the session to persist the cookies.",
|
|
322
|
+
"Reopen later: naive browser session create --context-name <name>",
|
|
323
|
+
],
|
|
324
|
+
related_commands: ["naive browser session create"],
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
// NOTE: there is intentionally NO agent-facing `context revoke` command. Revoke is an
|
|
328
|
+
// irreversible destroy that affects every grantee of a shared login, so it is a HUMAN-only
|
|
329
|
+
// action on the session-auth surface (use ≠ destroy) — exposed via the dashboard/Studio,
|
|
330
|
+
// not the agent CLI (which authenticates with an agent API key, not a human session).
|
|
331
|
+
contextCmd
|
|
332
|
+
.command("grant <name>")
|
|
333
|
+
.description("HUMAN-ONLY: grant an agent or role access to a saved login (requires a logged-in session)")
|
|
334
|
+
.requiredOption("--type <type>", "Grantee type: 'agent' or 'role'")
|
|
335
|
+
.requiredOption("--id <id>", "Agent UUID (type=agent) or role name (type=role)")
|
|
336
|
+
.action(async (name, opts) => {
|
|
337
|
+
const resp = await apiRequest("POST", `${browserBase()}/contexts/${encodeURIComponent(name)}/grants`, { grantee_type: opts.type, grantee_id: opts.id });
|
|
338
|
+
handleApiError("browser.context.grant", resp);
|
|
339
|
+
agentOutput({
|
|
340
|
+
action: "browser.context.grant",
|
|
341
|
+
result: resp.data,
|
|
342
|
+
next_steps: [],
|
|
343
|
+
hints: [
|
|
344
|
+
"Grant creation is human-only (session auth). An agent API key cannot create grants.",
|
|
345
|
+
"Prefer granting a ROLE (e.g. 'ops') — it survives agent rotation.",
|
|
346
|
+
],
|
|
347
|
+
related_commands: ["naive browser session create"],
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
browserCmd.addCommand(contextCmd);
|
|
351
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ function userPath(user) {
|
|
|
6
6
|
}
|
|
7
7
|
export const connectionsCmd = new Command("connections")
|
|
8
8
|
.alias("integrations") // back-compat alias
|
|
9
|
-
.description("3rd-party connections
|
|
9
|
+
.description("3rd-party connections — connect Gmail, Slack, GitHub, and 1,000+ apps per user");
|
|
10
10
|
connectionsCmd
|
|
11
11
|
.command("list")
|
|
12
12
|
.description("List available toolkits + connection status (filtered by the user's AccountKit)")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/commands/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,SAAS,QAAQ,CAAC,IAAa;IAC7B,OAAO,aAAa,IAAI,IAAI,YAAY,EAAE,IAAI,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KACrD,KAAK,CAAC,cAAc,CAAC,CAAC,oBAAoB;KAC1C,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/commands/connections.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
3
6
|
import { registerCmd } from "./commands/register.js";
|
|
4
7
|
import { loginCmd } from "./commands/login.js";
|
|
5
8
|
import { linkCmd, verifyCmd } from "./commands/link.js";
|
|
@@ -40,6 +43,16 @@ import { vaultCmd } from "./commands/vault.js";
|
|
|
40
43
|
import { logsCmd } from "./commands/logs.js";
|
|
41
44
|
import { connectionsCmd } from "./commands/connections.js";
|
|
42
45
|
import { approvalsCmd } from "./commands/approvals.js";
|
|
46
|
+
import { browserCmd } from "./commands/browser.js";
|
|
47
|
+
function readVersion() {
|
|
48
|
+
try {
|
|
49
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
50
|
+
return JSON.parse(readFileSync(join(here, "..", "package.json"), "utf8")).version ?? "0.0.0";
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return "0.0.0";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
43
56
|
const program = new Command();
|
|
44
57
|
program
|
|
45
58
|
.name("naive")
|
|
@@ -47,7 +60,7 @@ program
|
|
|
47
60
|
|
|
48
61
|
Built for agentic use: every command returns structured JSON with result data,
|
|
49
62
|
next steps, and contextual guidance for autonomous operation.`)
|
|
50
|
-
.version(
|
|
63
|
+
.version(readVersion())
|
|
51
64
|
.addHelpText("after", `
|
|
52
65
|
Getting Started:
|
|
53
66
|
$ naive register --name "My Agent" --email me@example.com --password mypassword
|
|
@@ -82,6 +95,7 @@ Orchestration:
|
|
|
82
95
|
Primitives:
|
|
83
96
|
email Send/receive email via provisioned inboxes
|
|
84
97
|
search Web search, URL extraction, deep research
|
|
98
|
+
browser Live cloud browser sessions — navigate, act, extract
|
|
85
99
|
seo SEO tools — keywords, backlinks, competitive intelligence
|
|
86
100
|
app-data Mobile app data — Google Play, Apple App Store
|
|
87
101
|
business Business data — Google, Trustpilot, TripAdvisor, Social
|
|
@@ -144,6 +158,7 @@ program.addCommand(employeesCmd);
|
|
|
144
158
|
program.addCommand(cronCmd);
|
|
145
159
|
program.addCommand(memoryCmd);
|
|
146
160
|
program.addCommand(appsCmd);
|
|
161
|
+
program.addCommand(browserCmd);
|
|
147
162
|
// Multi-tenant v2
|
|
148
163
|
program.addCommand(useCmd);
|
|
149
164
|
program.addCommand(usersCmd);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|