@vm0/cli 9.254.2 → 9.255.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/{agent-NSQIRPVB.js → agent-YXVPOZDT.js} +7 -7
- package/{banking-IQ7MX2B4.js → banking-K734DGW4.js} +5 -5
- package/browser-GMLGBTV7.js +186 -0
- package/browser-GMLGBTV7.js.map +1 -0
- package/{chat-SC5PGHDZ.js → chat-I2URW23Z.js} +6 -6
- package/{chunk-F6JKPYD2.js → chunk-24QJ7H5R.js} +2 -2
- package/{chunk-X6PT2M2I.js → chunk-45FQJCB2.js} +2 -2
- package/{chunk-SXD7ESWU.js → chunk-7PFY5Y77.js} +82 -151
- package/chunk-7PFY5Y77.js.map +1 -0
- package/{chunk-UUKFGXX5.js → chunk-BKR7J5QP.js} +2 -2
- package/{chunk-MNHYBPQB.js → chunk-BYD553JQ.js} +4 -4
- package/{chunk-TV6RSLOX.js → chunk-DQB537B5.js} +3 -3
- package/{chunk-D4OTAABD.js → chunk-H4LRAOOF.js} +6 -1
- package/chunk-H4LRAOOF.js.map +1 -0
- package/{chunk-7OBI7V4O.js → chunk-MDKQRZ7S.js} +581 -511
- package/chunk-MDKQRZ7S.js.map +1 -0
- package/{chunk-4MPNBXFO.js → chunk-RKXDWJW5.js} +2 -2
- package/{chunk-BSFDG7MC.js → chunk-UKQRMBLJ.js} +2 -2
- package/{chunk-OTH23BP4.js → chunk-ZLP3TODB.js} +84 -2
- package/chunk-ZLP3TODB.js.map +1 -0
- package/{computer-use-C7D4GLBU.js → computer-use-OVYDVFLM.js} +5 -5
- package/{connector-FW3TFVAJ.js → connector-ZJ4GNXOR.js} +15 -83
- package/connector-ZJ4GNXOR.js.map +1 -0
- package/{credit-YDQVARRO.js → credit-5F56FMHI.js} +7 -7
- package/{developer-support-NPRGXXF2.js → developer-support-DMN7JGPX.js} +5 -5
- package/{doctor-D7DAFSV3.js → doctor-Y724BLON.js} +7 -7
- package/{feishu-UDSN4AVE.js → feishu-T5ZIWV53.js} +5 -5
- package/{finance-O7WTSZ7W.js → finance-4ZRCXMFS.js} +5 -5
- package/{generate-ERHBA3S5.js → generate-JFRB6NBZ.js} +7 -7
- package/{github-LFJ6JXXJ.js → github-ZXWGL5Q6.js} +5 -5
- package/{goal-GFUDKA42.js → goal-22N3CH3F.js} +5 -5
- package/{host-4NPMKE4M.js → host-I7S5PYUY.js} +5 -5
- package/{logs-IAMPNPZU.js → logs-4HV44EMA.js} +6 -6
- package/{mail-KZJLXDSP.js → mail-U5LPAC7X.js} +67 -17
- package/mail-U5LPAC7X.js.map +1 -0
- package/{maps-QC6LW3XN.js → maps-PF5WHYEC.js} +5 -5
- package/{model-ZCBZUROI.js → model-JMQSUUFJ.js} +6 -6
- package/{model-provider-KHT4TJAD.js → model-provider-AJCWCCNB.js} +6 -6
- package/{org-PGERW5HL.js → org-7Q3J66NB.js} +5 -5
- package/package.json +1 -1
- package/{people-search-KOWVJQ7J.js → people-search-GUIJICYT.js} +5 -5
- package/{phone-UDZRVU4K.js → phone-6U27VFNC.js} +5 -5
- package/{preference-CW4D6H22.js → preference-BFLHPME6.js} +5 -5
- package/{resource-UTBKHQYI.js → resource-C3PAGM7Y.js} +5 -5
- package/{scrape-HSJGZHJP.js → scrape-5XL47HZY.js} +5 -5
- package/{search-E3XYG3EQ.js → search-B2V6NTUP.js} +6 -6
- package/{secret-FHYLUY5C.js → secret-QORKNSMC.js} +5 -5
- package/{slack-KNNFCXQL.js → slack-MD6HYUDE.js} +5 -5
- package/{teams-SE2UBCFO.js → teams-LO3PPNA2.js} +5 -5
- package/{telegram-MBCYOZOW.js → telegram-BZUBR4QS.js} +5 -5
- package/{upgrade-HCODAAIE.js → upgrade-63B4TM4E.js} +4 -4
- package/{variable-VK42DTQ3.js → variable-FW7F63SB.js} +5 -5
- package/{video-5HT4OTPO.js → video-RWCQZ4XP.js} +4 -4
- package/{weather-JYVT7MJV.js → weather-ST6CIHV4.js} +5 -5
- package/{web-4ZYLQGTN.js → web-GBSYVVYF.js} +5 -5
- package/{web-search-BUSZ7LN5.js → web-search-AZXILILB.js} +5 -5
- package/{whoami-DD32L4F2.js → whoami-UI67766P.js} +7 -7
- package/{workflow-SW7Q4HHX.js → workflow-CXWRSWUP.js} +5 -5
- package/zero.js +54 -44
- package/zero.js.map +1 -1
- package/chunk-7OBI7V4O.js.map +0 -1
- package/chunk-D4OTAABD.js.map +0 -1
- package/chunk-OTH23BP4.js.map +0 -1
- package/chunk-SXD7ESWU.js.map +0 -1
- package/connector-FW3TFVAJ.js.map +0 -1
- package/mail-KZJLXDSP.js.map +0 -1
- /package/{agent-NSQIRPVB.js.map → agent-YXVPOZDT.js.map} +0 -0
- /package/{banking-IQ7MX2B4.js.map → banking-K734DGW4.js.map} +0 -0
- /package/{chat-SC5PGHDZ.js.map → chat-I2URW23Z.js.map} +0 -0
- /package/{chunk-F6JKPYD2.js.map → chunk-24QJ7H5R.js.map} +0 -0
- /package/{chunk-X6PT2M2I.js.map → chunk-45FQJCB2.js.map} +0 -0
- /package/{chunk-UUKFGXX5.js.map → chunk-BKR7J5QP.js.map} +0 -0
- /package/{chunk-MNHYBPQB.js.map → chunk-BYD553JQ.js.map} +0 -0
- /package/{chunk-TV6RSLOX.js.map → chunk-DQB537B5.js.map} +0 -0
- /package/{chunk-4MPNBXFO.js.map → chunk-RKXDWJW5.js.map} +0 -0
- /package/{chunk-BSFDG7MC.js.map → chunk-UKQRMBLJ.js.map} +0 -0
- /package/{computer-use-C7D4GLBU.js.map → computer-use-OVYDVFLM.js.map} +0 -0
- /package/{credit-YDQVARRO.js.map → credit-5F56FMHI.js.map} +0 -0
- /package/{developer-support-NPRGXXF2.js.map → developer-support-DMN7JGPX.js.map} +0 -0
- /package/{doctor-D7DAFSV3.js.map → doctor-Y724BLON.js.map} +0 -0
- /package/{feishu-UDSN4AVE.js.map → feishu-T5ZIWV53.js.map} +0 -0
- /package/{finance-O7WTSZ7W.js.map → finance-4ZRCXMFS.js.map} +0 -0
- /package/{generate-ERHBA3S5.js.map → generate-JFRB6NBZ.js.map} +0 -0
- /package/{github-LFJ6JXXJ.js.map → github-ZXWGL5Q6.js.map} +0 -0
- /package/{goal-GFUDKA42.js.map → goal-22N3CH3F.js.map} +0 -0
- /package/{host-4NPMKE4M.js.map → host-I7S5PYUY.js.map} +0 -0
- /package/{logs-IAMPNPZU.js.map → logs-4HV44EMA.js.map} +0 -0
- /package/{maps-QC6LW3XN.js.map → maps-PF5WHYEC.js.map} +0 -0
- /package/{model-ZCBZUROI.js.map → model-JMQSUUFJ.js.map} +0 -0
- /package/{model-provider-KHT4TJAD.js.map → model-provider-AJCWCCNB.js.map} +0 -0
- /package/{org-PGERW5HL.js.map → org-7Q3J66NB.js.map} +0 -0
- /package/{people-search-KOWVJQ7J.js.map → people-search-GUIJICYT.js.map} +0 -0
- /package/{phone-UDZRVU4K.js.map → phone-6U27VFNC.js.map} +0 -0
- /package/{preference-CW4D6H22.js.map → preference-BFLHPME6.js.map} +0 -0
- /package/{resource-UTBKHQYI.js.map → resource-C3PAGM7Y.js.map} +0 -0
- /package/{scrape-HSJGZHJP.js.map → scrape-5XL47HZY.js.map} +0 -0
- /package/{search-E3XYG3EQ.js.map → search-B2V6NTUP.js.map} +0 -0
- /package/{secret-FHYLUY5C.js.map → secret-QORKNSMC.js.map} +0 -0
- /package/{slack-KNNFCXQL.js.map → slack-MD6HYUDE.js.map} +0 -0
- /package/{teams-SE2UBCFO.js.map → teams-LO3PPNA2.js.map} +0 -0
- /package/{telegram-MBCYOZOW.js.map → telegram-BZUBR4QS.js.map} +0 -0
- /package/{upgrade-HCODAAIE.js.map → upgrade-63B4TM4E.js.map} +0 -0
- /package/{variable-VK42DTQ3.js.map → variable-FW7F63SB.js.map} +0 -0
- /package/{video-5HT4OTPO.js.map → video-RWCQZ4XP.js.map} +0 -0
- /package/{weather-JYVT7MJV.js.map → weather-ST6CIHV4.js.map} +0 -0
- /package/{web-4ZYLQGTN.js.map → web-GBSYVVYF.js.map} +0 -0
- /package/{web-search-BUSZ7LN5.js.map → web-search-AZXILILB.js.map} +0 -0
- /package/{whoami-DD32L4F2.js.map → whoami-UI67766P.js.map} +0 -0
- /package/{workflow-SW7Q4HHX.js.map → workflow-CXWRSWUP.js.map} +0 -0
|
@@ -4,14 +4,14 @@ const require = __createRequire(import.meta.url);
|
|
|
4
4
|
import {
|
|
5
5
|
loadConnectorPermissionInfos,
|
|
6
6
|
policyIcon
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BYD553JQ.js";
|
|
8
8
|
import {
|
|
9
9
|
isInteractive,
|
|
10
10
|
promptConfirm
|
|
11
11
|
} from "./chunk-X2545RBX.js";
|
|
12
12
|
import {
|
|
13
13
|
permissionGrantsToFirewallPolicies
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-45FQJCB2.js";
|
|
15
15
|
import {
|
|
16
16
|
createZeroAgent,
|
|
17
17
|
deleteZeroAgent,
|
|
@@ -23,14 +23,14 @@ import {
|
|
|
23
23
|
listZeroUserPermissionGrants,
|
|
24
24
|
updateZeroAgent,
|
|
25
25
|
updateZeroAgentInstructions
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
} from "./chunk-MDKQRZ7S.js";
|
|
27
|
+
import "./chunk-RKXDWJW5.js";
|
|
28
28
|
import "./chunk-SB7EZ2ZO.js";
|
|
29
29
|
import {
|
|
30
30
|
source_default,
|
|
31
31
|
withErrorHandler
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-DQB537B5.js";
|
|
33
|
+
import "./chunk-H4LRAOOF.js";
|
|
34
34
|
import {
|
|
35
35
|
Command
|
|
36
36
|
} from "./chunk-LD4ZVU4O.js";
|
|
@@ -594,4 +594,4 @@ Notes:
|
|
|
594
594
|
export {
|
|
595
595
|
zeroAgentCommand
|
|
596
596
|
};
|
|
597
|
-
//# sourceMappingURL=agent-
|
|
597
|
+
//# sourceMappingURL=agent-YXVPOZDT.js.map
|
|
@@ -3,14 +3,14 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
callZeroBanking
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-MDKQRZ7S.js";
|
|
7
|
+
import "./chunk-RKXDWJW5.js";
|
|
8
8
|
import "./chunk-SB7EZ2ZO.js";
|
|
9
9
|
import {
|
|
10
10
|
source_default,
|
|
11
11
|
withErrorHandler
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-DQB537B5.js";
|
|
13
|
+
import "./chunk-H4LRAOOF.js";
|
|
14
14
|
import {
|
|
15
15
|
Command,
|
|
16
16
|
InvalidArgumentError
|
|
@@ -114,4 +114,4 @@ Notes:
|
|
|
114
114
|
export {
|
|
115
115
|
zeroBankingCommand
|
|
116
116
|
};
|
|
117
|
-
//# sourceMappingURL=banking-
|
|
117
|
+
//# sourceMappingURL=banking-K734DGW4.js.map
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from "node:module";
|
|
3
|
+
const require = __createRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
ZERO_BROWSER_DEFAULT_MAX_CREDITS,
|
|
6
|
+
ZERO_BROWSER_DEFAULT_TIMEOUT_MINUTES,
|
|
7
|
+
ZERO_BROWSER_MAX_CREDITS,
|
|
8
|
+
ZERO_BROWSER_MAX_TIMEOUT_MINUTES,
|
|
9
|
+
createZeroBrowser,
|
|
10
|
+
getCurrentZeroBrowser,
|
|
11
|
+
resumeZeroBrowser,
|
|
12
|
+
zeroBrowserCreateRequestSchema
|
|
13
|
+
} from "./chunk-MDKQRZ7S.js";
|
|
14
|
+
import "./chunk-RKXDWJW5.js";
|
|
15
|
+
import "./chunk-SB7EZ2ZO.js";
|
|
16
|
+
import {
|
|
17
|
+
source_default,
|
|
18
|
+
withErrorHandler
|
|
19
|
+
} from "./chunk-DQB537B5.js";
|
|
20
|
+
import "./chunk-H4LRAOOF.js";
|
|
21
|
+
import {
|
|
22
|
+
Command,
|
|
23
|
+
InvalidArgumentError,
|
|
24
|
+
Option
|
|
25
|
+
} from "./chunk-LD4ZVU4O.js";
|
|
26
|
+
import {
|
|
27
|
+
init_esm_shims
|
|
28
|
+
} from "./chunk-3VVCUQPB.js";
|
|
29
|
+
|
|
30
|
+
// src/commands/zero/browser/index.ts
|
|
31
|
+
init_esm_shims();
|
|
32
|
+
import { spawnSync } from "child_process";
|
|
33
|
+
var DEFAULT_AGENT_BROWSER_SESSION = "zero-browser";
|
|
34
|
+
function positiveInteger(label, maximum) {
|
|
35
|
+
return (value) => {
|
|
36
|
+
if (!/^\d+$/u.test(value)) {
|
|
37
|
+
throw new InvalidArgumentError(
|
|
38
|
+
`${label} must be an integer from 1 to ${maximum}`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
const parsed = Number(value);
|
|
42
|
+
if (parsed < 1 || parsed > maximum) {
|
|
43
|
+
throw new InvalidArgumentError(
|
|
44
|
+
`${label} must be an integer from 1 to ${maximum}`
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
return parsed;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function parseCountry(value) {
|
|
51
|
+
const normalized = value.trim().toLowerCase();
|
|
52
|
+
if (!/^[a-z]{2}$/u.test(normalized)) {
|
|
53
|
+
throw new InvalidArgumentError("country must be a two-letter country code");
|
|
54
|
+
}
|
|
55
|
+
return normalized;
|
|
56
|
+
}
|
|
57
|
+
function parseAgentSession(value) {
|
|
58
|
+
if (!/^[a-zA-Z0-9_-]{1,64}$/u.test(value)) {
|
|
59
|
+
throw new InvalidArgumentError(
|
|
60
|
+
"agent-session must contain only letters, numbers, underscores, or hyphens"
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function browserJson(browser) {
|
|
66
|
+
const { liveUrl: _liveUrl, ...safeBrowser } = browser;
|
|
67
|
+
return safeBrowser;
|
|
68
|
+
}
|
|
69
|
+
function connectAgentBrowser(cdpUrl, sessionName) {
|
|
70
|
+
const result = spawnSync(
|
|
71
|
+
"agent-browser",
|
|
72
|
+
["--session", sessionName, "connect", cdpUrl],
|
|
73
|
+
{ stdio: "ignore" }
|
|
74
|
+
);
|
|
75
|
+
if (result.error) {
|
|
76
|
+
throw new Error("Could not start agent-browser", {
|
|
77
|
+
cause: result.error
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (result.status !== 0) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`agent-browser connect exited with status ${result.status ?? "unknown"}`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function renderBrowser(browser) {
|
|
87
|
+
console.log(`${browser.name} \xB7 ${browser.status}`);
|
|
88
|
+
console.log(source_default.dim(` ID: ${browser.id}`));
|
|
89
|
+
console.log(
|
|
90
|
+
source_default.dim(
|
|
91
|
+
` Credits: ${browser.creditsCharged} charged / ${browser.maxCredits} budget`
|
|
92
|
+
)
|
|
93
|
+
);
|
|
94
|
+
console.log(source_default.dim(` Per-run timeout: ${browser.timeoutMinutes}m`));
|
|
95
|
+
console.log(` ${browser.viewerUrl}`);
|
|
96
|
+
}
|
|
97
|
+
async function connectResponse(response, options) {
|
|
98
|
+
const sessionName = options.agentSession ?? DEFAULT_AGENT_BROWSER_SESSION;
|
|
99
|
+
connectAgentBrowser(response.cdpUrl, sessionName);
|
|
100
|
+
if (options.json) {
|
|
101
|
+
console.log(
|
|
102
|
+
JSON.stringify({
|
|
103
|
+
browser: browserJson(response.browser),
|
|
104
|
+
agentBrowserSession: sessionName
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
console.log(source_default.green("\u2713 Managed browser ready"));
|
|
110
|
+
console.log(source_default.dim(` agent-browser session: ${sessionName}`));
|
|
111
|
+
console.log(`[Open live browser](${response.browser.viewerUrl})`);
|
|
112
|
+
}
|
|
113
|
+
var resumeCommand = new Command().name("resume").description(
|
|
114
|
+
"Resume the current thread browser and attach it to agent-browser"
|
|
115
|
+
).addOption(
|
|
116
|
+
new Option(
|
|
117
|
+
"--agent-session <name>",
|
|
118
|
+
"Named agent-browser session"
|
|
119
|
+
).argParser(parseAgentSession)
|
|
120
|
+
).option("--json", "Print machine-readable output without connection secrets").action(
|
|
121
|
+
withErrorHandler(async (options) => {
|
|
122
|
+
await connectResponse(await resumeZeroBrowser(), options);
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
var newCommand = new Command().name("new").description(
|
|
126
|
+
"Create a new thread browser with the shared user profile and attach it to agent-browser"
|
|
127
|
+
).addOption(new Option("--name <name>", "Browser name").default("browser")).addOption(
|
|
128
|
+
new Option(
|
|
129
|
+
"--country <code>",
|
|
130
|
+
"Residential proxy country; omitted uses lower-cost proxyless egress"
|
|
131
|
+
).argParser(parseCountry)
|
|
132
|
+
).addOption(
|
|
133
|
+
new Option("--timeout <minutes>", "Provider lifetime for this run").default(ZERO_BROWSER_DEFAULT_TIMEOUT_MINUTES).argParser(positiveInteger("timeout", ZERO_BROWSER_MAX_TIMEOUT_MINUTES))
|
|
134
|
+
).addOption(
|
|
135
|
+
new Option("--max-credits <credits>", "Logical browser credit budget").default(ZERO_BROWSER_DEFAULT_MAX_CREDITS).argParser(positiveInteger("max-credits", ZERO_BROWSER_MAX_CREDITS))
|
|
136
|
+
).addOption(
|
|
137
|
+
new Option(
|
|
138
|
+
"--agent-session <name>",
|
|
139
|
+
"Named agent-browser session"
|
|
140
|
+
).argParser(parseAgentSession)
|
|
141
|
+
).option("--json", "Print machine-readable output without connection secrets").action(
|
|
142
|
+
withErrorHandler(async (options) => {
|
|
143
|
+
const request = zeroBrowserCreateRequestSchema.parse({
|
|
144
|
+
name: options.name,
|
|
145
|
+
proxyCountryCode: options.country ?? null,
|
|
146
|
+
timeoutMinutes: options.timeout,
|
|
147
|
+
maxCredits: options.maxCredits
|
|
148
|
+
});
|
|
149
|
+
await connectResponse(await createZeroBrowser(request), options);
|
|
150
|
+
})
|
|
151
|
+
);
|
|
152
|
+
var statusCommand = new Command().name("status").description("Show the current thread browser status").option("--json", "Print machine-readable output").action(
|
|
153
|
+
withErrorHandler(async (options) => {
|
|
154
|
+
const browser = await getCurrentZeroBrowser();
|
|
155
|
+
if (options.json) {
|
|
156
|
+
console.log(JSON.stringify({ browser: browserJson(browser) }));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
renderBrowser(browser);
|
|
160
|
+
})
|
|
161
|
+
);
|
|
162
|
+
var viewCommand = new Command().name("view").description("Print the current thread browser's authenticated viewer link").action(
|
|
163
|
+
withErrorHandler(async () => {
|
|
164
|
+
console.log((await getCurrentZeroBrowser()).viewerUrl);
|
|
165
|
+
})
|
|
166
|
+
);
|
|
167
|
+
var zeroBrowserCommand = new Command().name("browser").description("Use a managed remote browser through agent-browser").addCommand(resumeCommand).addCommand(newCommand).addCommand(statusCommand).addCommand(viewCommand).addHelpText(
|
|
168
|
+
"after",
|
|
169
|
+
`
|
|
170
|
+
Examples:
|
|
171
|
+
Resume this thread: zero browser resume
|
|
172
|
+
Create another browser: zero browser new --name booking --country us
|
|
173
|
+
Use the browser: agent-browser --session zero-browser open https://example.com
|
|
174
|
+
Share live view: zero browser view
|
|
175
|
+
|
|
176
|
+
Notes:
|
|
177
|
+
- Zero stops and settles the provider instance automatically when the run ends
|
|
178
|
+
- There are no manual stop or suspend commands
|
|
179
|
+
- Browser Use credentials and connection URLs are never printed
|
|
180
|
+
- Threads for the same user and organization share one login profile
|
|
181
|
+
- Threads can use the shared profile in parallel`
|
|
182
|
+
);
|
|
183
|
+
export {
|
|
184
|
+
zeroBrowserCommand
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=browser-GMLGBTV7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/browser/index.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\n\nimport chalk from \"chalk\";\nimport { Command, InvalidArgumentError, Option } from \"commander\";\nimport {\n ZERO_BROWSER_DEFAULT_MAX_CREDITS,\n ZERO_BROWSER_DEFAULT_TIMEOUT_MINUTES,\n ZERO_BROWSER_MAX_CREDITS,\n ZERO_BROWSER_MAX_TIMEOUT_MINUTES,\n zeroBrowserCreateRequestSchema,\n type ZeroBrowserSession,\n} from \"@vm0/api-contracts/contracts/zero-browser\";\n\nimport {\n createZeroBrowser,\n getCurrentZeroBrowser,\n resumeZeroBrowser,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst DEFAULT_AGENT_BROWSER_SESSION = \"zero-browser\";\n\ninterface NewOptions {\n readonly name: string;\n readonly country?: string;\n readonly timeout: number;\n readonly maxCredits: number;\n readonly agentSession?: string;\n readonly json?: boolean;\n}\n\ninterface ConnectionOptions {\n readonly agentSession?: string;\n readonly json?: boolean;\n}\n\ninterface OutputOptions {\n readonly json?: boolean;\n}\n\nfunction positiveInteger(\n label: string,\n maximum: number,\n): (value: string) => number {\n return (value) => {\n if (!/^\\d+$/u.test(value)) {\n throw new InvalidArgumentError(\n `${label} must be an integer from 1 to ${maximum}`,\n );\n }\n const parsed = Number(value);\n if (parsed < 1 || parsed > maximum) {\n throw new InvalidArgumentError(\n `${label} must be an integer from 1 to ${maximum}`,\n );\n }\n return parsed;\n };\n}\n\nfunction parseCountry(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[a-z]{2}$/u.test(normalized)) {\n throw new InvalidArgumentError(\"country must be a two-letter country code\");\n }\n return normalized;\n}\n\nfunction parseAgentSession(value: string): string {\n if (!/^[a-zA-Z0-9_-]{1,64}$/u.test(value)) {\n throw new InvalidArgumentError(\n \"agent-session must contain only letters, numbers, underscores, or hyphens\",\n );\n }\n return value;\n}\n\nfunction browserJson(\n browser: ZeroBrowserSession,\n): Omit<ZeroBrowserSession, \"liveUrl\"> {\n const { liveUrl: _liveUrl, ...safeBrowser } = browser;\n return safeBrowser;\n}\n\nfunction connectAgentBrowser(cdpUrl: string, sessionName: string): void {\n const result = spawnSync(\n \"agent-browser\",\n [\"--session\", sessionName, \"connect\", cdpUrl],\n { stdio: \"ignore\" },\n );\n if (result.error) {\n throw new Error(\"Could not start agent-browser\", {\n cause: result.error,\n });\n }\n if (result.status !== 0) {\n throw new Error(\n `agent-browser connect exited with status ${result.status ?? \"unknown\"}`,\n );\n }\n}\n\nfunction renderBrowser(browser: ZeroBrowserSession): void {\n console.log(`${browser.name} · ${browser.status}`);\n console.log(chalk.dim(` ID: ${browser.id}`));\n console.log(\n chalk.dim(\n ` Credits: ${browser.creditsCharged} charged / ${browser.maxCredits} budget`,\n ),\n );\n console.log(chalk.dim(` Per-run timeout: ${browser.timeoutMinutes}m`));\n console.log(` ${browser.viewerUrl}`);\n}\n\nasync function connectResponse(\n response: {\n readonly browser: ZeroBrowserSession;\n readonly cdpUrl: string;\n },\n options: ConnectionOptions,\n): Promise<void> {\n const sessionName = options.agentSession ?? DEFAULT_AGENT_BROWSER_SESSION;\n connectAgentBrowser(response.cdpUrl, sessionName);\n if (options.json) {\n console.log(\n JSON.stringify({\n browser: browserJson(response.browser),\n agentBrowserSession: sessionName,\n }),\n );\n return;\n }\n console.log(chalk.green(\"✓ Managed browser ready\"));\n console.log(chalk.dim(` agent-browser session: ${sessionName}`));\n console.log(`[Open live browser](${response.browser.viewerUrl})`);\n}\n\nconst resumeCommand = new Command()\n .name(\"resume\")\n .description(\n \"Resume the current thread browser and attach it to agent-browser\",\n )\n .addOption(\n new Option(\n \"--agent-session <name>\",\n \"Named agent-browser session\",\n ).argParser(parseAgentSession),\n )\n .option(\"--json\", \"Print machine-readable output without connection secrets\")\n .action(\n withErrorHandler(async (options: ConnectionOptions) => {\n await connectResponse(await resumeZeroBrowser(), options);\n }),\n );\n\nconst newCommand = new Command()\n .name(\"new\")\n .description(\n \"Create a new thread browser with the shared user profile and attach it to agent-browser\",\n )\n .addOption(new Option(\"--name <name>\", \"Browser name\").default(\"browser\"))\n .addOption(\n new Option(\n \"--country <code>\",\n \"Residential proxy country; omitted uses lower-cost proxyless egress\",\n ).argParser(parseCountry),\n )\n .addOption(\n new Option(\"--timeout <minutes>\", \"Provider lifetime for this run\")\n .default(ZERO_BROWSER_DEFAULT_TIMEOUT_MINUTES)\n .argParser(positiveInteger(\"timeout\", ZERO_BROWSER_MAX_TIMEOUT_MINUTES)),\n )\n .addOption(\n new Option(\"--max-credits <credits>\", \"Logical browser credit budget\")\n .default(ZERO_BROWSER_DEFAULT_MAX_CREDITS)\n .argParser(positiveInteger(\"max-credits\", ZERO_BROWSER_MAX_CREDITS)),\n )\n .addOption(\n new Option(\n \"--agent-session <name>\",\n \"Named agent-browser session\",\n ).argParser(parseAgentSession),\n )\n .option(\"--json\", \"Print machine-readable output without connection secrets\")\n .action(\n withErrorHandler(async (options: NewOptions) => {\n const request = zeroBrowserCreateRequestSchema.parse({\n name: options.name,\n proxyCountryCode: options.country ?? null,\n timeoutMinutes: options.timeout,\n maxCredits: options.maxCredits,\n });\n await connectResponse(await createZeroBrowser(request), options);\n }),\n );\n\nconst statusCommand = new Command()\n .name(\"status\")\n .description(\"Show the current thread browser status\")\n .option(\"--json\", \"Print machine-readable output\")\n .action(\n withErrorHandler(async (options: OutputOptions) => {\n const browser = await getCurrentZeroBrowser();\n if (options.json) {\n console.log(JSON.stringify({ browser: browserJson(browser) }));\n return;\n }\n renderBrowser(browser);\n }),\n );\n\nconst viewCommand = new Command()\n .name(\"view\")\n .description(\"Print the current thread browser's authenticated viewer link\")\n .action(\n withErrorHandler(async () => {\n console.log((await getCurrentZeroBrowser()).viewerUrl);\n }),\n );\n\nexport const zeroBrowserCommand = new Command()\n .name(\"browser\")\n .description(\"Use a managed remote browser through agent-browser\")\n .addCommand(resumeCommand)\n .addCommand(newCommand)\n .addCommand(statusCommand)\n .addCommand(viewCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Resume this thread: zero browser resume\n Create another browser: zero browser new --name booking --country us\n Use the browser: agent-browser --session zero-browser open https://example.com\n Share live view: zero browser view\n\nNotes:\n - Zero stops and settles the provider instance automatically when the run ends\n - There are no manual stop or suspend commands\n - Browser Use credentials and connection URLs are never printed\n - Threads for the same user and organization share one login profile\n - Threads can use the shared profile in parallel`,\n );\n"],"mappings":"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","names":[]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-B6ELBBRJ.js";
|
|
9
9
|
import {
|
|
10
10
|
formatModelProviderRoute
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UKQRMBLJ.js";
|
|
12
12
|
import {
|
|
13
13
|
chatThreadEventSchema,
|
|
14
14
|
chatThreadSnapshotProjectionSchema,
|
|
@@ -18,17 +18,17 @@ import {
|
|
|
18
18
|
listZeroModelPolicies,
|
|
19
19
|
renameZeroChatThread,
|
|
20
20
|
updateZeroChatThreadModelSelection
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-MDKQRZ7S.js";
|
|
22
|
+
import "./chunk-RKXDWJW5.js";
|
|
23
23
|
import "./chunk-SB7EZ2ZO.js";
|
|
24
24
|
import {
|
|
25
25
|
getApiUrl,
|
|
26
26
|
source_default,
|
|
27
27
|
withErrorHandler
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-DQB537B5.js";
|
|
29
29
|
import {
|
|
30
30
|
decodeZeroTokenPayload
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-H4LRAOOF.js";
|
|
32
32
|
import {
|
|
33
33
|
Command
|
|
34
34
|
} from "./chunk-LD4ZVU4O.js";
|
|
@@ -619,4 +619,4 @@ Examples:
|
|
|
619
619
|
export {
|
|
620
620
|
zeroChatCommand
|
|
621
621
|
};
|
|
622
|
-
//# sourceMappingURL=chat-
|
|
622
|
+
//# sourceMappingURL=chat-I2URW23Z.js.map
|
|
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
getApiUrl
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DQB537B5.js";
|
|
7
7
|
import {
|
|
8
8
|
init_esm_shims
|
|
9
9
|
} from "./chunk-3VVCUQPB.js";
|
|
@@ -42,4 +42,4 @@ export {
|
|
|
42
42
|
toPlatformUrl,
|
|
43
43
|
getPlatformOrigin
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-24QJ7H5R.js.map
|
|
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
UNKNOWN_PERMISSION_GRANT
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MDKQRZ7S.js";
|
|
7
7
|
import {
|
|
8
8
|
init_esm_shims
|
|
9
9
|
} from "./chunk-3VVCUQPB.js";
|
|
@@ -130,4 +130,4 @@ export {
|
|
|
130
130
|
resolveFirewallMetadataPolicies,
|
|
131
131
|
permissionGrantsToFirewallPolicies
|
|
132
132
|
};
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-45FQJCB2.js.map
|