@vm0/cli 9.254.1 → 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.
Files changed (109) hide show
  1. package/{agent-CDMQ3BO4.js → agent-YXVPOZDT.js} +7 -7
  2. package/{banking-M5CIVLRH.js → banking-K734DGW4.js} +5 -5
  3. package/browser-GMLGBTV7.js +186 -0
  4. package/browser-GMLGBTV7.js.map +1 -0
  5. package/{chat-TRK5KDSP.js → chat-I2URW23Z.js} +6 -6
  6. package/{chunk-BL37FBZF.js → chunk-24QJ7H5R.js} +2 -2
  7. package/{chunk-7NYMO54N.js → chunk-45FQJCB2.js} +2 -2
  8. package/{chunk-JLEBJUMI.js → chunk-7PFY5Y77.js} +84 -219
  9. package/chunk-7PFY5Y77.js.map +1 -0
  10. package/{chunk-UUKFGXX5.js → chunk-BKR7J5QP.js} +2 -2
  11. package/{chunk-BXVXXD3E.js → chunk-BYD553JQ.js} +4 -4
  12. package/{chunk-5QLT6M5N.js → chunk-DQB537B5.js} +3 -3
  13. package/{chunk-D4OTAABD.js → chunk-H4LRAOOF.js} +6 -1
  14. package/chunk-H4LRAOOF.js.map +1 -0
  15. package/{chunk-R23NULE7.js → chunk-MDKQRZ7S.js} +656 -495
  16. package/chunk-MDKQRZ7S.js.map +1 -0
  17. package/{chunk-TBBXBBFT.js → chunk-RKXDWJW5.js} +2 -2
  18. package/{chunk-JXYKIW37.js → chunk-UKQRMBLJ.js} +2 -2
  19. package/{chunk-XBX4JTXR.js → chunk-ZLP3TODB.js} +84 -2
  20. package/chunk-ZLP3TODB.js.map +1 -0
  21. package/{computer-use-K7ULCJNC.js → computer-use-OVYDVFLM.js} +5 -5
  22. package/{connector-JFE4GTW4.js → connector-ZJ4GNXOR.js} +15 -83
  23. package/connector-ZJ4GNXOR.js.map +1 -0
  24. package/{credit-QVY2XIPE.js → credit-5F56FMHI.js} +7 -7
  25. package/{developer-support-EJOQWXKB.js → developer-support-DMN7JGPX.js} +5 -5
  26. package/{doctor-7YEA3BYV.js → doctor-Y724BLON.js} +7 -7
  27. package/{feishu-KCN4UME3.js → feishu-T5ZIWV53.js} +5 -5
  28. package/{finance-TOKK5DCK.js → finance-4ZRCXMFS.js} +5 -5
  29. package/{generate-6E23MDCE.js → generate-JFRB6NBZ.js} +7 -7
  30. package/{github-LJMT5D7D.js → github-ZXWGL5Q6.js} +5 -5
  31. package/{goal-OJ4J7OCD.js → goal-22N3CH3F.js} +5 -5
  32. package/{host-KX5G666N.js → host-I7S5PYUY.js} +5 -5
  33. package/{logs-IDABHTFA.js → logs-4HV44EMA.js} +6 -6
  34. package/{mail-U6JQDKN3.js → mail-U5LPAC7X.js} +67 -17
  35. package/mail-U5LPAC7X.js.map +1 -0
  36. package/{maps-Y7PIXKLP.js → maps-PF5WHYEC.js} +5 -5
  37. package/{model-PXWGKXUA.js → model-JMQSUUFJ.js} +6 -6
  38. package/{model-provider-LNVO4LHA.js → model-provider-AJCWCCNB.js} +6 -6
  39. package/{org-G46VCLIF.js → org-7Q3J66NB.js} +5 -5
  40. package/package.json +1 -1
  41. package/{people-search-TZBJNLYY.js → people-search-GUIJICYT.js} +5 -5
  42. package/{phone-KEHX5BEJ.js → phone-6U27VFNC.js} +5 -5
  43. package/{preference-5KLKA6DR.js → preference-BFLHPME6.js} +5 -5
  44. package/{resource-W2PYM3GG.js → resource-C3PAGM7Y.js} +5 -5
  45. package/{scrape-27OBJPNR.js → scrape-5XL47HZY.js} +5 -5
  46. package/{search-23XNHEE5.js → search-B2V6NTUP.js} +6 -6
  47. package/{secret-IRLST7ZX.js → secret-QORKNSMC.js} +5 -5
  48. package/{slack-U3YX4HK7.js → slack-MD6HYUDE.js} +5 -5
  49. package/{teams-2BPJ3VT4.js → teams-LO3PPNA2.js} +5 -5
  50. package/{telegram-B7JBB6M2.js → telegram-BZUBR4QS.js} +5 -5
  51. package/{upgrade-SFFQF2QF.js → upgrade-63B4TM4E.js} +4 -4
  52. package/{variable-ZZ7OX5PU.js → variable-FW7F63SB.js} +5 -5
  53. package/{video-PEACIVNU.js → video-RWCQZ4XP.js} +4 -4
  54. package/{weather-4SC7E3OZ.js → weather-ST6CIHV4.js} +5 -5
  55. package/{web-2O6V5RRP.js → web-GBSYVVYF.js} +5 -5
  56. package/{web-search-KOU476ZM.js → web-search-AZXILILB.js} +5 -5
  57. package/{whoami-VGNKLROW.js → whoami-UI67766P.js} +7 -7
  58. package/{workflow-3GXAC4BP.js → workflow-CXWRSWUP.js} +5 -5
  59. package/zero.js +54 -44
  60. package/zero.js.map +1 -1
  61. package/chunk-D4OTAABD.js.map +0 -1
  62. package/chunk-JLEBJUMI.js.map +0 -1
  63. package/chunk-R23NULE7.js.map +0 -1
  64. package/chunk-XBX4JTXR.js.map +0 -1
  65. package/connector-JFE4GTW4.js.map +0 -1
  66. package/mail-U6JQDKN3.js.map +0 -1
  67. /package/{agent-CDMQ3BO4.js.map → agent-YXVPOZDT.js.map} +0 -0
  68. /package/{banking-M5CIVLRH.js.map → banking-K734DGW4.js.map} +0 -0
  69. /package/{chat-TRK5KDSP.js.map → chat-I2URW23Z.js.map} +0 -0
  70. /package/{chunk-BL37FBZF.js.map → chunk-24QJ7H5R.js.map} +0 -0
  71. /package/{chunk-7NYMO54N.js.map → chunk-45FQJCB2.js.map} +0 -0
  72. /package/{chunk-UUKFGXX5.js.map → chunk-BKR7J5QP.js.map} +0 -0
  73. /package/{chunk-BXVXXD3E.js.map → chunk-BYD553JQ.js.map} +0 -0
  74. /package/{chunk-5QLT6M5N.js.map → chunk-DQB537B5.js.map} +0 -0
  75. /package/{chunk-TBBXBBFT.js.map → chunk-RKXDWJW5.js.map} +0 -0
  76. /package/{chunk-JXYKIW37.js.map → chunk-UKQRMBLJ.js.map} +0 -0
  77. /package/{computer-use-K7ULCJNC.js.map → computer-use-OVYDVFLM.js.map} +0 -0
  78. /package/{credit-QVY2XIPE.js.map → credit-5F56FMHI.js.map} +0 -0
  79. /package/{developer-support-EJOQWXKB.js.map → developer-support-DMN7JGPX.js.map} +0 -0
  80. /package/{doctor-7YEA3BYV.js.map → doctor-Y724BLON.js.map} +0 -0
  81. /package/{feishu-KCN4UME3.js.map → feishu-T5ZIWV53.js.map} +0 -0
  82. /package/{finance-TOKK5DCK.js.map → finance-4ZRCXMFS.js.map} +0 -0
  83. /package/{generate-6E23MDCE.js.map → generate-JFRB6NBZ.js.map} +0 -0
  84. /package/{github-LJMT5D7D.js.map → github-ZXWGL5Q6.js.map} +0 -0
  85. /package/{goal-OJ4J7OCD.js.map → goal-22N3CH3F.js.map} +0 -0
  86. /package/{host-KX5G666N.js.map → host-I7S5PYUY.js.map} +0 -0
  87. /package/{logs-IDABHTFA.js.map → logs-4HV44EMA.js.map} +0 -0
  88. /package/{maps-Y7PIXKLP.js.map → maps-PF5WHYEC.js.map} +0 -0
  89. /package/{model-PXWGKXUA.js.map → model-JMQSUUFJ.js.map} +0 -0
  90. /package/{model-provider-LNVO4LHA.js.map → model-provider-AJCWCCNB.js.map} +0 -0
  91. /package/{org-G46VCLIF.js.map → org-7Q3J66NB.js.map} +0 -0
  92. /package/{people-search-TZBJNLYY.js.map → people-search-GUIJICYT.js.map} +0 -0
  93. /package/{phone-KEHX5BEJ.js.map → phone-6U27VFNC.js.map} +0 -0
  94. /package/{preference-5KLKA6DR.js.map → preference-BFLHPME6.js.map} +0 -0
  95. /package/{resource-W2PYM3GG.js.map → resource-C3PAGM7Y.js.map} +0 -0
  96. /package/{scrape-27OBJPNR.js.map → scrape-5XL47HZY.js.map} +0 -0
  97. /package/{search-23XNHEE5.js.map → search-B2V6NTUP.js.map} +0 -0
  98. /package/{secret-IRLST7ZX.js.map → secret-QORKNSMC.js.map} +0 -0
  99. /package/{slack-U3YX4HK7.js.map → slack-MD6HYUDE.js.map} +0 -0
  100. /package/{teams-2BPJ3VT4.js.map → teams-LO3PPNA2.js.map} +0 -0
  101. /package/{telegram-B7JBB6M2.js.map → telegram-BZUBR4QS.js.map} +0 -0
  102. /package/{upgrade-SFFQF2QF.js.map → upgrade-63B4TM4E.js.map} +0 -0
  103. /package/{variable-ZZ7OX5PU.js.map → variable-FW7F63SB.js.map} +0 -0
  104. /package/{video-PEACIVNU.js.map → video-RWCQZ4XP.js.map} +0 -0
  105. /package/{weather-4SC7E3OZ.js.map → weather-ST6CIHV4.js.map} +0 -0
  106. /package/{web-2O6V5RRP.js.map → web-GBSYVVYF.js.map} +0 -0
  107. /package/{web-search-KOU476ZM.js.map → web-search-AZXILILB.js.map} +0 -0
  108. /package/{whoami-VGNKLROW.js.map → whoami-UI67766P.js.map} +0 -0
  109. /package/{workflow-3GXAC4BP.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-BXVXXD3E.js";
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-7NYMO54N.js";
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-R23NULE7.js";
27
- import "./chunk-TBBXBBFT.js";
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-5QLT6M5N.js";
33
- import "./chunk-D4OTAABD.js";
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-CDMQ3BO4.js.map
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-R23NULE7.js";
7
- import "./chunk-TBBXBBFT.js";
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-5QLT6M5N.js";
13
- import "./chunk-D4OTAABD.js";
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-M5CIVLRH.js.map
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,iBAAiB;AAoB1B,IAAM,gCAAgC;AAoBtC,SAAS,gBACP,OACA,SAC2B;AAC3B,SAAO,CAAC,UAAU;AAChB,QAAI,CAAC,SAAS,KAAK,KAAK,GAAG;AACzB,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,iCAAiC,OAAO;AAAA,MAClD;AAAA,IACF;AACA,UAAM,SAAS,OAAO,KAAK;AAC3B,QAAI,SAAS,KAAK,SAAS,SAAS;AAClC,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,iCAAiC,OAAO;AAAA,MAClD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAuB;AAC3C,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,CAAC,cAAc,KAAK,UAAU,GAAG;AACnC,UAAM,IAAI,qBAAqB,2CAA2C;AAAA,EAC5E;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAuB;AAChD,MAAI,CAAC,yBAAyB,KAAK,KAAK,GAAG;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YACP,SACqC;AACrC,QAAM,EAAE,SAAS,UAAU,GAAG,YAAY,IAAI;AAC9C,SAAO;AACT;AAEA,SAAS,oBAAoB,QAAgB,aAA2B;AACtE,QAAM,SAAS;AAAA,IACb;AAAA,IACA,CAAC,aAAa,aAAa,WAAW,MAAM;AAAA,IAC5C,EAAE,OAAO,SAAS;AAAA,EACpB;AACA,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI,MAAM,iCAAiC;AAAA,MAC/C,OAAO,OAAO;AAAA,IAChB,CAAC;AAAA,EACH;AACA,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI;AAAA,MACR,4CAA4C,OAAO,UAAU,SAAS;AAAA,IACxE;AAAA,EACF;AACF;AAEA,SAAS,cAAc,SAAmC;AACxD,UAAQ,IAAI,GAAG,QAAQ,IAAI,SAAM,QAAQ,MAAM,EAAE;AACjD,UAAQ,IAAI,eAAM,IAAI,SAAS,QAAQ,EAAE,EAAE,CAAC;AAC5C,UAAQ;AAAA,IACN,eAAM;AAAA,MACJ,cAAc,QAAQ,cAAc,cAAc,QAAQ,UAAU;AAAA,IACtE;AAAA,EACF;AACA,UAAQ,IAAI,eAAM,IAAI,sBAAsB,QAAQ,cAAc,GAAG,CAAC;AACtE,UAAQ,IAAI,KAAK,QAAQ,SAAS,EAAE;AACtC;AAEA,eAAe,gBACb,UAIA,SACe;AACf,QAAM,cAAc,QAAQ,gBAAgB;AAC5C,sBAAoB,SAAS,QAAQ,WAAW;AAChD,MAAI,QAAQ,MAAM;AAChB,YAAQ;AAAA,MACN,KAAK,UAAU;AAAA,QACb,SAAS,YAAY,SAAS,OAAO;AAAA,QACrC,qBAAqB;AAAA,MACvB,CAAC;AAAA,IACH;AACA;AAAA,EACF;AACA,UAAQ,IAAI,eAAM,MAAM,8BAAyB,CAAC;AAClD,UAAQ,IAAI,eAAM,IAAI,4BAA4B,WAAW,EAAE,CAAC;AAChE,UAAQ,IAAI,uBAAuB,SAAS,QAAQ,SAAS,GAAG;AAClE;AAEA,IAAM,gBAAgB,IAAI,QAAQ,EAC/B,KAAK,QAAQ,EACb;AAAA,EACC;AACF,EACC;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,UAAU,iBAAiB;AAC/B,EACC,OAAO,UAAU,0DAA0D,EAC3E;AAAA,EACC,iBAAiB,OAAO,YAA+B;AACrD,UAAM,gBAAgB,MAAM,kBAAkB,GAAG,OAAO;AAAA,EAC1D,CAAC;AACH;AAEF,IAAM,aAAa,IAAI,QAAQ,EAC5B,KAAK,KAAK,EACV;AAAA,EACC;AACF,EACC,UAAU,IAAI,OAAO,iBAAiB,cAAc,EAAE,QAAQ,SAAS,CAAC,EACxE;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,UAAU,YAAY;AAC1B,EACC;AAAA,EACC,IAAI,OAAO,uBAAuB,gCAAgC,EAC/D,QAAQ,oCAAoC,EAC5C,UAAU,gBAAgB,WAAW,gCAAgC,CAAC;AAC3E,EACC;AAAA,EACC,IAAI,OAAO,2BAA2B,+BAA+B,EAClE,QAAQ,gCAAgC,EACxC,UAAU,gBAAgB,eAAe,wBAAwB,CAAC;AACvE,EACC;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,UAAU,iBAAiB;AAC/B,EACC,OAAO,UAAU,0DAA0D,EAC3E;AAAA,EACC,iBAAiB,OAAO,YAAwB;AAC9C,UAAM,UAAU,+BAA+B,MAAM;AAAA,MACnD,MAAM,QAAQ;AAAA,MACd,kBAAkB,QAAQ,WAAW;AAAA,MACrC,gBAAgB,QAAQ;AAAA,MACxB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,UAAM,gBAAgB,MAAM,kBAAkB,OAAO,GAAG,OAAO;AAAA,EACjE,CAAC;AACH;AAEF,IAAM,gBAAgB,IAAI,QAAQ,EAC/B,KAAK,QAAQ,EACb,YAAY,wCAAwC,EACpD,OAAO,UAAU,+BAA+B,EAChD;AAAA,EACC,iBAAiB,OAAO,YAA2B;AACjD,UAAM,UAAU,MAAM,sBAAsB;AAC5C,QAAI,QAAQ,MAAM;AAChB,cAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,YAAY,OAAO,EAAE,CAAC,CAAC;AAC7D;AAAA,IACF;AACA,kBAAc,OAAO;AAAA,EACvB,CAAC;AACH;AAEF,IAAM,cAAc,IAAI,QAAQ,EAC7B,KAAK,MAAM,EACX,YAAY,8DAA8D,EAC1E;AAAA,EACC,iBAAiB,YAAY;AAC3B,YAAQ,KAAK,MAAM,sBAAsB,GAAG,SAAS;AAAA,EACvD,CAAC;AACH;AAEK,IAAM,qBAAqB,IAAI,QAAQ,EAC3C,KAAK,SAAS,EACd,YAAY,oDAAoD,EAChE,WAAW,aAAa,EACxB,WAAW,UAAU,EACrB,WAAW,aAAa,EACxB,WAAW,WAAW,EACtB;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaF;","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-B6ELBBRJ.js";
9
9
  import {
10
10
  formatModelProviderRoute
11
- } from "./chunk-JXYKIW37.js";
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-R23NULE7.js";
22
- import "./chunk-TBBXBBFT.js";
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-5QLT6M5N.js";
28
+ } from "./chunk-DQB537B5.js";
29
29
  import {
30
30
  decodeZeroTokenPayload
31
- } from "./chunk-D4OTAABD.js";
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-TRK5KDSP.js.map
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-5QLT6M5N.js";
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-BL37FBZF.js.map
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-R23NULE7.js";
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-7NYMO54N.js.map
133
+ //# sourceMappingURL=chunk-45FQJCB2.js.map