@vm0/cli 9.241.11 → 9.242.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 (94) hide show
  1. package/{agent-5TLH3FMD.js → agent-XLGDAD6T.js} +5 -5
  2. package/{banking-NEAT4R24.js → banking-2BV2JGRD.js} +3 -3
  3. package/{chat-F5Y4Y6W5.js → chat-TPLHZ57Z.js} +4 -4
  4. package/{chunk-6IPI5G2W.js → chunk-242B44RQ.js} +2 -2
  5. package/{chunk-PAGGGOFZ.js → chunk-53FHPUUO.js} +2 -2
  6. package/{chunk-IEMQM5BQ.js → chunk-BWNGRHYH.js} +2 -2
  7. package/{chunk-IEMQM5BQ.js.map → chunk-BWNGRHYH.js.map} +1 -1
  8. package/{chunk-XMPEXKMZ.js → chunk-HPWJFTMP.js} +16 -3
  9. package/chunk-HPWJFTMP.js.map +1 -0
  10. package/{chunk-ICKIMZYL.js → chunk-K3B3HC7K.js} +4 -4
  11. package/{chunk-YWMCF6SQ.js → chunk-KLDX2GMD.js} +58 -58
  12. package/{chunk-YWMCF6SQ.js.map → chunk-KLDX2GMD.js.map} +1 -1
  13. package/{chunk-NTHQBG2C.js → chunk-KYE3HWDY.js} +2 -2
  14. package/{chunk-JRH7ZD2I.js → chunk-XQ4J3JPB.js} +2 -2
  15. package/{chunk-7D6TPEG2.js → chunk-YDT6Y4N7.js} +4 -4
  16. package/{chunk-SP77SLW3.js → chunk-ZCQAX54V.js} +3 -3
  17. package/{computer-use-FEAAE6TT.js → computer-use-S7NJKH4V.js} +3 -3
  18. package/{connector-CM3CYVJ2.js → connector-B2H7VPC3.js} +214 -60
  19. package/connector-B2H7VPC3.js.map +1 -0
  20. package/{credit-W2JFXIEE.js → credit-ABSGJLTU.js} +4 -4
  21. package/{developer-support-3SNDQLPM.js → developer-support-3ODZ4POS.js} +3 -3
  22. package/{doctor-JZIBQ63P.js → doctor-MWBZVNQX.js} +3 -3
  23. package/{generate-VMDERMRQ.js → generate-NAC3XSCH.js} +4 -4
  24. package/{github-IAAPK3LA.js → github-TS5LCLTS.js} +3 -3
  25. package/{goal-IYAHG7OD.js → goal-6SCBC6VR.js} +3 -3
  26. package/{host-Y6II7XUE.js → host-AXFGIEEZ.js} +3 -3
  27. package/index.js +12 -12
  28. package/index.js.map +1 -1
  29. package/{logs-BPDKBOIG.js → logs-N4PPK4RJ.js} +5 -5
  30. package/{mail-O6HOSHJN.js → mail-3B4I7A6Y.js} +24 -13
  31. package/mail-3B4I7A6Y.js.map +1 -0
  32. package/{maps-N3INUZF2.js → maps-SMZOEFW2.js} +3 -3
  33. package/{model-NOMWYJFY.js → model-6WYS72Q5.js} +4 -4
  34. package/{model-provider-RZDEASD3.js → model-provider-6H2IOOJG.js} +4 -4
  35. package/{org-47E2LF2E.js → org-TO64CFO2.js} +3 -3
  36. package/package.json +1 -1
  37. package/{phone-EZSBFUQY.js → phone-RU4WI2KY.js} +3 -3
  38. package/{preference-3U5KKXQ5.js → preference-5X3XQBOD.js} +3 -3
  39. package/{resource-FHIP3W3L.js → resource-O6VJPSP6.js} +3 -3
  40. package/{scrape-5LAKGGQN.js → scrape-AVM4L2YU.js} +3 -3
  41. package/{search-3TJZAERR.js → search-6FRTRK4U.js} +5 -5
  42. package/{secret-CZE2VOBQ.js → secret-KWQQPVQL.js} +3 -3
  43. package/{slack-XG2XYZD4.js → slack-MAZYVYC2.js} +3 -3
  44. package/{teams-SHZAOOYC.js → teams-CGTFKOU7.js} +3 -3
  45. package/{telegram-5APDUFXW.js → telegram-PUV4N736.js} +3 -3
  46. package/{variable-CJIIWMIX.js → variable-QAN5LMCV.js} +3 -3
  47. package/{video-BFST4YFU.js → video-MOABW5LF.js} +2 -2
  48. package/{web-6H5BRLZF.js → web-WY6DU7ER.js} +3 -3
  49. package/{web-search-WTPWZGHE.js → web-search-IIHHOCT3.js} +3 -3
  50. package/{whoami-KY2VJFW7.js → whoami-ZYEF2BSF.js} +5 -5
  51. package/{workflow-L5Z6BS5N.js → workflow-T4ED2JYW.js} +3 -3
  52. package/zero.js +35 -35
  53. package/zero.js.map +1 -1
  54. package/chunk-XMPEXKMZ.js.map +0 -1
  55. package/connector-CM3CYVJ2.js.map +0 -1
  56. package/mail-O6HOSHJN.js.map +0 -1
  57. /package/{agent-5TLH3FMD.js.map → agent-XLGDAD6T.js.map} +0 -0
  58. /package/{banking-NEAT4R24.js.map → banking-2BV2JGRD.js.map} +0 -0
  59. /package/{chat-F5Y4Y6W5.js.map → chat-TPLHZ57Z.js.map} +0 -0
  60. /package/{chunk-6IPI5G2W.js.map → chunk-242B44RQ.js.map} +0 -0
  61. /package/{chunk-PAGGGOFZ.js.map → chunk-53FHPUUO.js.map} +0 -0
  62. /package/{chunk-ICKIMZYL.js.map → chunk-K3B3HC7K.js.map} +0 -0
  63. /package/{chunk-NTHQBG2C.js.map → chunk-KYE3HWDY.js.map} +0 -0
  64. /package/{chunk-JRH7ZD2I.js.map → chunk-XQ4J3JPB.js.map} +0 -0
  65. /package/{chunk-7D6TPEG2.js.map → chunk-YDT6Y4N7.js.map} +0 -0
  66. /package/{chunk-SP77SLW3.js.map → chunk-ZCQAX54V.js.map} +0 -0
  67. /package/{computer-use-FEAAE6TT.js.map → computer-use-S7NJKH4V.js.map} +0 -0
  68. /package/{credit-W2JFXIEE.js.map → credit-ABSGJLTU.js.map} +0 -0
  69. /package/{developer-support-3SNDQLPM.js.map → developer-support-3ODZ4POS.js.map} +0 -0
  70. /package/{doctor-JZIBQ63P.js.map → doctor-MWBZVNQX.js.map} +0 -0
  71. /package/{generate-VMDERMRQ.js.map → generate-NAC3XSCH.js.map} +0 -0
  72. /package/{github-IAAPK3LA.js.map → github-TS5LCLTS.js.map} +0 -0
  73. /package/{goal-IYAHG7OD.js.map → goal-6SCBC6VR.js.map} +0 -0
  74. /package/{host-Y6II7XUE.js.map → host-AXFGIEEZ.js.map} +0 -0
  75. /package/{logs-BPDKBOIG.js.map → logs-N4PPK4RJ.js.map} +0 -0
  76. /package/{maps-N3INUZF2.js.map → maps-SMZOEFW2.js.map} +0 -0
  77. /package/{model-NOMWYJFY.js.map → model-6WYS72Q5.js.map} +0 -0
  78. /package/{model-provider-RZDEASD3.js.map → model-provider-6H2IOOJG.js.map} +0 -0
  79. /package/{org-47E2LF2E.js.map → org-TO64CFO2.js.map} +0 -0
  80. /package/{phone-EZSBFUQY.js.map → phone-RU4WI2KY.js.map} +0 -0
  81. /package/{preference-3U5KKXQ5.js.map → preference-5X3XQBOD.js.map} +0 -0
  82. /package/{resource-FHIP3W3L.js.map → resource-O6VJPSP6.js.map} +0 -0
  83. /package/{scrape-5LAKGGQN.js.map → scrape-AVM4L2YU.js.map} +0 -0
  84. /package/{search-3TJZAERR.js.map → search-6FRTRK4U.js.map} +0 -0
  85. /package/{secret-CZE2VOBQ.js.map → secret-KWQQPVQL.js.map} +0 -0
  86. /package/{slack-XG2XYZD4.js.map → slack-MAZYVYC2.js.map} +0 -0
  87. /package/{teams-SHZAOOYC.js.map → teams-CGTFKOU7.js.map} +0 -0
  88. /package/{telegram-5APDUFXW.js.map → telegram-PUV4N736.js.map} +0 -0
  89. /package/{variable-CJIIWMIX.js.map → variable-QAN5LMCV.js.map} +0 -0
  90. /package/{video-BFST4YFU.js.map → video-MOABW5LF.js.map} +0 -0
  91. /package/{web-6H5BRLZF.js.map → web-WY6DU7ER.js.map} +0 -0
  92. /package/{web-search-WTPWZGHE.js.map → web-search-IIHHOCT3.js.map} +0 -0
  93. /package/{whoami-KY2VJFW7.js.map → whoami-ZYEF2BSF.js.map} +0 -0
  94. /package/{workflow-L5Z6BS5N.js.map → workflow-T4ED2JYW.js.map} +0 -0
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  MODEL_PROVIDER_TYPES
6
- } from "./chunk-IEMQM5BQ.js";
6
+ } from "./chunk-BWNGRHYH.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -40,4 +40,4 @@ export {
40
40
  formatModelProviderRoute,
41
41
  formatModelPolicyStatus
42
42
  };
43
- //# sourceMappingURL=chunk-NTHQBG2C.js.map
43
+ //# sourceMappingURL=chunk-KYE3HWDY.js.map
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getZeroAgent,
6
6
  getZeroAgentUserConnectors
7
- } from "./chunk-YWMCF6SQ.js";
7
+ } from "./chunk-KLDX2GMD.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-DIRAZ3YX.js";
@@ -265,4 +265,4 @@ export {
265
265
  resolveManualGrantAuthMethod,
266
266
  resolveAgentContext
267
267
  };
268
- //# sourceMappingURL=chunk-JRH7ZD2I.js.map
268
+ //# sourceMappingURL=chunk-XQ4J3JPB.js.map
@@ -10,14 +10,14 @@ import {
10
10
  parseBoundedLogCount,
11
11
  parseSearchQuery,
12
12
  parseTime
13
- } from "./chunk-XMPEXKMZ.js";
13
+ } from "./chunk-HPWJFTMP.js";
14
14
  import {
15
15
  searchZeroLogs
16
- } from "./chunk-YWMCF6SQ.js";
16
+ } from "./chunk-KLDX2GMD.js";
17
17
  import {
18
18
  source_default,
19
19
  withErrorHandler
20
- } from "./chunk-IEMQM5BQ.js";
20
+ } from "./chunk-BWNGRHYH.js";
21
21
  import {
22
22
  Command
23
23
  } from "./chunk-B3W2RUBP.js";
@@ -174,4 +174,4 @@ export {
174
174
  runLogsSearch,
175
175
  searchCommand
176
176
  };
177
- //# sourceMappingURL=chunk-7D6TPEG2.js.map
177
+ //# sourceMappingURL=chunk-YDT6Y4N7.js.map
@@ -50,7 +50,7 @@ if (DSN) {
50
50
  Sentry.init({
51
51
  dsn: DSN,
52
52
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
53
- release: "9.241.11",
53
+ release: "9.242.0",
54
54
  sendDefaultPii: false,
55
55
  tracesSampleRate: 0,
56
56
  shutdownTimeout: 500,
@@ -69,7 +69,7 @@ if (DSN) {
69
69
  }
70
70
  });
71
71
  Sentry.setContext("cli", {
72
- version: "9.241.11",
72
+ version: "9.242.0",
73
73
  command: process.argv.slice(2).join(" ")
74
74
  });
75
75
  Sentry.setContext("runtime", {
@@ -146,4 +146,4 @@ async function configureGlobalProxyFromEnv() {
146
146
  export {
147
147
  configureGlobalProxyFromEnv
148
148
  };
149
- //# sourceMappingURL=chunk-SP77SLW3.js.map
149
+ //# sourceMappingURL=chunk-ZCQAX54V.js.map
@@ -12,11 +12,11 @@ import {
12
12
  fetchComputerUseScreenshot,
13
13
  getComputerUseCommand,
14
14
  listComputerUseHosts
15
- } from "./chunk-YWMCF6SQ.js";
15
+ } from "./chunk-KLDX2GMD.js";
16
16
  import {
17
17
  ApiRequestError,
18
18
  withErrorHandler
19
- } from "./chunk-IEMQM5BQ.js";
19
+ } from "./chunk-BWNGRHYH.js";
20
20
  import "./chunk-LRHXR7JT.js";
21
21
  import {
22
22
  Command
@@ -969,4 +969,4 @@ export {
969
969
  formatComputerUseResultForConsole,
970
970
  zeroComputerUseCommand
971
971
  };
972
- //# sourceMappingURL=computer-use-FEAAE6TT.js.map
972
+ //# sourceMappingURL=computer-use-S7NJKH4V.js.map
@@ -3,18 +3,18 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  findFirewallMetadataPermission
6
- } from "./chunk-6IPI5G2W.js";
6
+ } from "./chunk-242B44RQ.js";
7
7
  import {
8
8
  availableConnectorRefs,
9
9
  findConnectorStatusItem,
10
10
  resolveAgentContext,
11
11
  resolveManualGrantAuthMethod,
12
12
  searchPublicConnectorCatalog
13
- } from "./chunk-JRH7ZD2I.js";
13
+ } from "./chunk-XQ4J3JPB.js";
14
14
  import {
15
15
  getPlatformOrigin,
16
16
  toPlatformUrl
17
- } from "./chunk-PAGGGOFZ.js";
17
+ } from "./chunk-53FHPUUO.js";
18
18
  import {
19
19
  UNKNOWN_PERMISSION_GRANT,
20
20
  connectZeroConnectorManualGrant,
@@ -29,14 +29,14 @@ import {
29
29
  getZeroCustomConnector,
30
30
  listZeroConnectorCatalogStatus,
31
31
  listZeroCustomConnectors
32
- } from "./chunk-YWMCF6SQ.js";
32
+ } from "./chunk-KLDX2GMD.js";
33
33
  import "./chunk-LTDQISD7.js";
34
34
  import {
35
35
  ApiRequestError,
36
36
  getApiUrl,
37
37
  source_default,
38
38
  withErrorHandler
39
- } from "./chunk-IEMQM5BQ.js";
39
+ } from "./chunk-BWNGRHYH.js";
40
40
  import "./chunk-LRHXR7JT.js";
41
41
  import {
42
42
  Command,
@@ -74,6 +74,93 @@ function printComputerUsePermissionGuidance() {
74
74
  );
75
75
  }
76
76
 
77
+ // src/commands/zero/connector/action-url.ts
78
+ init_esm_shims();
79
+ var CALLBACK_PROMPT_PLACEHOLDER = "SOMETHING_AGENT_WANT_TO_BE_CALLBACK";
80
+ var CONNECTOR_ACTION_CALLBACK_ENABLED_ENV = "ZERO_CONNECTOR_ACTION_CALLBACK_ENABLED";
81
+ function connectorActionCallbackFeatureEnabled() {
82
+ return process.env[CONNECTOR_ACTION_CALLBACK_ENABLED_ENV] === "1";
83
+ }
84
+ function connectorActionCallbackEnabled() {
85
+ return connectorActionCallbackFeatureEnabled() && Boolean(process.env.ZERO_CHAT_THREAD_ID?.trim());
86
+ }
87
+ function currentChatThreadId(agentId) {
88
+ if (!connectorActionCallbackFeatureEnabled()) {
89
+ return null;
90
+ }
91
+ const threadId = process.env.ZERO_CHAT_THREAD_ID?.trim();
92
+ const currentAgentId = process.env.ZERO_AGENT_ID?.trim();
93
+ if (!threadId || !currentAgentId || agentId !== currentAgentId) {
94
+ return null;
95
+ }
96
+ return threadId;
97
+ }
98
+ function currentChatSupportsActionCallback(agentId) {
99
+ return currentChatThreadId(agentId) !== null;
100
+ }
101
+ function addCallbackSearchParams(params, threadId, callbackPrompt) {
102
+ params.set("threadId", threadId);
103
+ params.set("callbackPrompt", callbackPrompt);
104
+ }
105
+ function addRequestedCallbackSearchParams(params, callbackPrompt, agentId) {
106
+ if (callbackPrompt === void 0) {
107
+ return;
108
+ }
109
+ if (!connectorActionCallbackFeatureEnabled()) {
110
+ throw new Error(
111
+ "--callback-prompt is not available in the current workspace"
112
+ );
113
+ }
114
+ const normalizedPrompt = callbackPrompt.trim();
115
+ if (!normalizedPrompt) {
116
+ throw new Error("--callback-prompt cannot be empty");
117
+ }
118
+ const threadId = currentChatThreadId(agentId);
119
+ if (!threadId) {
120
+ throw new Error(
121
+ "--callback-prompt can only target the current Zero web chat thread and agent"
122
+ );
123
+ }
124
+ addCallbackSearchParams(params, threadId, normalizedPrompt);
125
+ }
126
+ function connectorActionUrl(args) {
127
+ const url = new URL(args.path, args.origin);
128
+ if (args.agentId) {
129
+ url.searchParams.set("agentId", args.agentId);
130
+ }
131
+ return url.toString();
132
+ }
133
+ function callbackActionUrlExample(actionUrl, agentId) {
134
+ const threadId = currentChatThreadId(agentId);
135
+ if (!threadId) {
136
+ return null;
137
+ }
138
+ const url = new URL(actionUrl);
139
+ addCallbackSearchParams(
140
+ url.searchParams,
141
+ threadId,
142
+ CALLBACK_PROMPT_PLACEHOLDER
143
+ );
144
+ return url.toString();
145
+ }
146
+ function printCallbackActionUrlExample(actionUrl, agentId) {
147
+ const callbackUrl = callbackActionUrlExample(actionUrl, agentId);
148
+ if (!callbackUrl) {
149
+ return;
150
+ }
151
+ console.log("");
152
+ console.log(
153
+ "Or, if this is the only connector or permission action needed, use the callback URL below. After the user completes this action, Zero will automatically start the next round with the callback prompt:"
154
+ );
155
+ console.log(callbackUrl);
156
+ }
157
+ function printCallbackTurnInstruction() {
158
+ console.log("");
159
+ console.log(
160
+ "After sharing this callback URL, end the current turn. When the user completes the action, Zero will automatically start the next round with the callback prompt."
161
+ );
162
+ }
163
+
77
164
  // src/commands/zero/connector/check.ts
78
165
  function stripUrlQueryAndFragment(url) {
79
166
  const queryIndex = url.indexOf("?");
@@ -316,18 +403,31 @@ function printConnectorConnectionStatus(ctx, isConnected, isExpired, hasPermissi
316
403
  } else if (!isConnected) {
317
404
  console.log(`The ${ctx.label} connector is not connected.`);
318
405
  if (ctx.agentId && hasPermission) {
319
- const connectUrl = `${ctx.platformOrigin}/connectors/${ctx.connectorRef}/connect?agentId=${ctx.agentId}`;
406
+ const connectUrl = connectorActionUrl({
407
+ origin: ctx.platformOrigin,
408
+ path: `/connectors/${ctx.connectorRef}/connect`,
409
+ agentId: ctx.agentId
410
+ });
320
411
  console.log(`Connect it at: [Connect ${ctx.label}](${connectUrl})`);
412
+ printCallbackActionUrlExample(connectUrl, ctx.agentId);
321
413
  } else if (!ctx.agentId) {
322
- const connectUrl = `${ctx.platformOrigin}/connectors/${ctx.connectorRef}/connect`;
414
+ const connectUrl = connectorActionUrl({
415
+ origin: ctx.platformOrigin,
416
+ path: `/connectors/${ctx.connectorRef}/connect`
417
+ });
323
418
  console.log(`Connect it at: [Connect ${ctx.label}](${connectUrl})`);
324
419
  }
325
420
  } else if (isExpired) {
326
- const url = `${ctx.platformOrigin}/connectors`;
421
+ const url = connectorActionUrl({
422
+ origin: ctx.platformOrigin,
423
+ path: `/connectors/${ctx.connectorRef}/connect`,
424
+ agentId: ctx.agentId
425
+ });
327
426
  console.log(
328
427
  `The ${ctx.label} connector is connected but has expired and needs to be reconnected.`
329
428
  );
330
429
  console.log(`Reconnect it at: [Reconnect ${ctx.label}](${url})`);
430
+ printCallbackActionUrlExample(url, ctx.agentId);
331
431
  } else {
332
432
  console.log(`The ${ctx.label} connector is connected and active.`);
333
433
  }
@@ -345,11 +445,16 @@ function printAgentAuthorizationStatus(ctx, isConnected, isExpired, hasPermissio
345
445
  isConnected ? `The ${ctx.label} connector is authorized for this agent.` : `The ${ctx.label} connector is authorized for this agent, but it is not connected.`
346
446
  );
347
447
  } else {
348
- const url = `${ctx.platformOrigin}/connectors/${ctx.connectorRef}/authorize?agentId=${ctx.agentId}`;
448
+ const url = connectorActionUrl({
449
+ origin: ctx.platformOrigin,
450
+ path: `/connectors/${ctx.connectorRef}/authorize`,
451
+ agentId: ctx.agentId
452
+ });
349
453
  console.log(
350
454
  isConnected ? `The ${ctx.label} connector is not authorized for this agent (${ctx.agentId}).` : `The ${ctx.label} connector needs to be connected and authorized for this agent (${ctx.agentId}).`
351
455
  );
352
456
  console.log(`Authorize it at: [Authorize ${ctx.label}](${url})`);
457
+ printCallbackActionUrlExample(url, ctx.agentId);
353
458
  }
354
459
  }
355
460
  function printConnectorAuthorizationStatus(ctx, isConnected, isExpired, hasPermission) {
@@ -480,7 +585,7 @@ function printUnavailablePolicy(policy) {
480
585
  return;
481
586
  }
482
587
  }
483
- function printNamedPolicyResult(connectorRef, permission, policy) {
588
+ function printNamedPolicyResult(connectorRef, permission, policy, agentId) {
484
589
  switch (policy.outcome) {
485
590
  case "allow": {
486
591
  switch (policy.basis) {
@@ -511,16 +616,22 @@ function printNamedPolicyResult(connectorRef, permission, policy) {
511
616
  console.log(
512
617
  policy.basis === "deny-list" ? `Result: "${permission}" is in the deny list \u2014 denied.` : `Result: The unknown-endpoint policy denies "${permission}".`
513
618
  );
514
- console.log(
515
- `To request this permission, run: ${permissionRequestCommand(connectorRef, permission)}`
619
+ printPermissionRequestCommands(
620
+ connectorRef,
621
+ permission,
622
+ agentId,
623
+ "To request this permission, run"
516
624
  );
517
625
  return;
518
626
  case "ask":
519
627
  console.log(
520
628
  policy.basis === "ask-list" ? `Result: "${permission}" is in the ask list \u2014 blocked until approval.` : `Result: The unknown-endpoint policy blocks "${permission}" until approval.`
521
629
  );
522
- console.log(
523
- `To request this permission, run: ${permissionRequestCommand(connectorRef, permission)}`
630
+ printPermissionRequestCommands(
631
+ connectorRef,
632
+ permission,
633
+ agentId,
634
+ "To request this permission, run"
524
635
  );
525
636
  return;
526
637
  case "unavailable":
@@ -529,9 +640,21 @@ function printNamedPolicyResult(connectorRef, permission, policy) {
529
640
  }
530
641
  }
531
642
  function permissionRequestCommand(connectorRef, permission) {
532
- return `zero connector permission-request ${connectorRef} --permission ${permission} --duration 1h`;
643
+ return `zero connector permission-request ${connectorRef} --permission ${permission}`;
533
644
  }
534
- function printUnknownEndpointPolicy(connectorRef, policy) {
645
+ function printPermissionRequestCommands(connectorRef, permission, agentId, introduction) {
646
+ const command = permissionRequestCommand(connectorRef, permission);
647
+ console.log(`${introduction}: ${command}`);
648
+ if (!currentChatSupportsActionCallback(agentId)) {
649
+ return;
650
+ }
651
+ console.log("");
652
+ console.log(
653
+ "Or, if this is the only connector or permission action needed, run the callback command below. After the user completes this action, Zero will automatically start the next round with the callback prompt:"
654
+ );
655
+ console.log(`${command} --callback-prompt "${CALLBACK_PROMPT_PLACEHOLDER}"`);
656
+ }
657
+ function printUnknownEndpointPolicy(connectorRef, policy, agentId) {
535
658
  switch (policy.outcome) {
536
659
  case "allow":
537
660
  console.log(
@@ -542,16 +665,22 @@ function printUnknownEndpointPolicy(connectorRef, policy) {
542
665
  console.log(
543
666
  "Result: No permission matched. The unknown endpoint policy denies this request."
544
667
  );
545
- console.log(
546
- `To request access to unknown endpoints, run: ${permissionRequestCommand(connectorRef, "__unknown__")}`
668
+ printPermissionRequestCommands(
669
+ connectorRef,
670
+ "__unknown__",
671
+ agentId,
672
+ "To request access to unknown endpoints, run"
547
673
  );
548
674
  return;
549
675
  case "ask":
550
676
  console.log(
551
677
  "Result: No permission matched. The unknown endpoint policy requires approval."
552
678
  );
553
- console.log(
554
- `To request access to unknown endpoints, run: ${permissionRequestCommand(connectorRef, "__unknown__")}`
679
+ printPermissionRequestCommands(
680
+ connectorRef,
681
+ "__unknown__",
682
+ agentId,
683
+ "To request access to unknown endpoints, run"
555
684
  );
556
685
  return;
557
686
  case "unavailable":
@@ -559,7 +688,7 @@ function printUnknownEndpointPolicy(connectorRef, policy) {
559
688
  return;
560
689
  }
561
690
  }
562
- function printUrlPermissionDiagnostic(result) {
691
+ function printUrlPermissionDiagnostic(result, agentId) {
563
692
  console.log("## Step 3: Permission policy check (auto-detected from URL)");
564
693
  console.log("");
565
694
  console.log(
@@ -577,7 +706,8 @@ function printUrlPermissionDiagnostic(result) {
577
706
  printNamedPolicyResult(
578
707
  result.connector.connectorRef,
579
708
  permission.name,
580
- permission.policy
709
+ permission.policy,
710
+ agentId
581
711
  );
582
712
  }
583
713
  } else {
@@ -587,12 +717,13 @@ function printUrlPermissionDiagnostic(result) {
587
717
  console.log("");
588
718
  printUnknownEndpointPolicy(
589
719
  result.connector.connectorRef,
590
- result.permission.policy
720
+ result.permission.policy,
721
+ agentId
591
722
  );
592
723
  }
593
724
  console.log("");
594
725
  }
595
- function printEnvironmentPermissionDiagnostic(result, permissionName) {
726
+ function printEnvironmentPermissionDiagnostic(result, permissionName, agentId) {
596
727
  if (result.permission === null) {
597
728
  return;
598
729
  }
@@ -610,7 +741,8 @@ function printEnvironmentPermissionDiagnostic(result, permissionName) {
610
741
  printNamedPolicyResult(
611
742
  result.connector.connectorRef,
612
743
  permissionName,
613
- result.permission
744
+ result.permission,
745
+ agentId
614
746
  );
615
747
  console.log("");
616
748
  }
@@ -719,11 +851,12 @@ How connectors work:
719
851
  }
720
852
  console.log("");
721
853
  if (result.mode === "url") {
722
- printUrlPermissionDiagnostic(result);
854
+ printUrlPermissionDiagnostic(result, ctx.agentId);
723
855
  } else {
724
856
  printEnvironmentPermissionDiagnostic(
725
857
  result,
726
- request.mode === "environment" ? request.permission : void 0
858
+ request.mode === "environment" ? request.permission : void 0,
859
+ ctx.agentId
727
860
  );
728
861
  }
729
862
  printRediagnoseHint(opts, method);
@@ -1019,38 +1152,58 @@ async function printAgentAction(connector, agentCtx) {
1019
1152
  console.log();
1020
1153
  if (needsReconnect) {
1021
1154
  const origin = await getPlatformOrigin();
1022
- const url = `${origin}/connectors`;
1155
+ const url = connectorActionUrl({
1156
+ origin,
1157
+ path: `/connectors/${connectorRef}/connect`,
1158
+ agentId: agentCtx.agentId
1159
+ });
1023
1160
  console.log(
1024
1161
  `The ${connectorRef} connector is connected but needs to be reconnected before agent ${agentLabel} can use it.`
1025
1162
  );
1026
1163
  console.log(`Reconnect it at: [Reconnect ${connectorRef}](${url})`);
1164
+ printCallbackActionUrlExample(url, agentCtx.agentId);
1027
1165
  } else if (authorized && !isConnected) {
1028
1166
  const origin = await getPlatformOrigin();
1029
- const url = `${origin}/connectors/${connectorRef}/connect?agentId=${agentCtx.agentId}`;
1167
+ const url = connectorActionUrl({
1168
+ origin,
1169
+ path: `/connectors/${connectorRef}/connect`,
1170
+ agentId: agentCtx.agentId
1171
+ });
1030
1172
  console.log(
1031
1173
  `The ${connectorRef} connector is authorized for agent ${agentLabel}, but it is not connected.`
1032
1174
  );
1033
1175
  console.log(`Connect it at: [Connect ${connectorRef}](${url})`);
1176
+ printCallbackActionUrlExample(url, agentCtx.agentId);
1034
1177
  } else if (authorized) {
1035
1178
  console.log(
1036
1179
  `The ${connectorRef} connector is authorized for agent ${agentLabel}.`
1037
1180
  );
1038
1181
  } else if (!isConnected) {
1039
1182
  const origin = await getPlatformOrigin();
1040
- const url = `${origin}/connectors/${connectorRef}/connect?agentId=${agentCtx.agentId}`;
1183
+ const url = connectorActionUrl({
1184
+ origin,
1185
+ path: `/connectors/${connectorRef}/connect`,
1186
+ agentId: agentCtx.agentId
1187
+ });
1041
1188
  console.log(
1042
1189
  `The ${connectorRef} connector is not connected. Once connected, it will be authorized for agent ${agentLabel}.`
1043
1190
  );
1044
1191
  console.log(
1045
1192
  `Connect and authorize it at: [Connect ${connectorRef}](${url})`
1046
1193
  );
1194
+ printCallbackActionUrlExample(url, agentCtx.agentId);
1047
1195
  } else {
1048
1196
  const origin = await getPlatformOrigin();
1049
- const url = `${origin}/connectors/${connectorRef}/authorize?agentId=${agentCtx.agentId}`;
1197
+ const url = connectorActionUrl({
1198
+ origin,
1199
+ path: `/connectors/${connectorRef}/authorize`,
1200
+ agentId: agentCtx.agentId
1201
+ });
1050
1202
  console.log(
1051
1203
  `The ${connectorRef} connector is not authorized for agent ${agentLabel}.`
1052
1204
  );
1053
1205
  console.log(`Authorize it at: [Authorize ${connectorRef}](${url})`);
1206
+ printCallbackActionUrlExample(url, agentCtx.agentId);
1054
1207
  }
1055
1208
  }
1056
1209
  async function printStandaloneAction(connector) {
@@ -1247,13 +1400,6 @@ var customConnectorCommand = new Command().name("custom").description("Inspect a
1247
1400
 
1248
1401
  // src/commands/zero/connector/permission-request.ts
1249
1402
  init_esm_shims();
1250
- var DEFAULT_PERMISSION_GRANT_DURATION = "1h";
1251
- var PERMISSION_GRANT_DURATIONS = [
1252
- "1h",
1253
- "24h",
1254
- "7d",
1255
- "always"
1256
- ];
1257
1403
  function permissionDescription(permission) {
1258
1404
  return permission === UNKNOWN_PERMISSION_GRANT ? "unknown endpoints" : `the "${permission}" permission`;
1259
1405
  }
@@ -1289,9 +1435,6 @@ function printPermissionRequestMessage(args) {
1289
1435
  console.log(
1290
1436
  `You can allow ${permissionDescription(args.permission)} for your connector access: [Manage ${args.label} permissions](${args.url})`
1291
1437
  );
1292
- console.log(
1293
- `Requested duration: ${args.duration}. Use --duration 1h|24h|7d|always to choose a different grant lifetime.`
1294
- );
1295
1438
  }
1296
1439
  function printComputerUseAuthorizationLink(args) {
1297
1440
  console.log(
@@ -1329,46 +1472,52 @@ async function printComputerUsePermissionRequestMessage() {
1329
1472
  printComputerUsePermissionGuidance();
1330
1473
  }
1331
1474
  }
1332
- async function outputPermissionRequestMessage(connectorRef, label, permission, duration, agentId) {
1475
+ async function outputPermissionRequestMessage(connectorRef, label, permission, agentId, callbackPrompt) {
1333
1476
  const platformOrigin = await getPlatformOrigin();
1334
1477
  const urlParams = new URLSearchParams({
1335
1478
  ref: connectorRef,
1336
1479
  permission,
1337
- action: "allow",
1338
- expiresIn: duration
1480
+ action: "allow"
1339
1481
  });
1482
+ addRequestedCallbackSearchParams(urlParams, callbackPrompt, agentId);
1340
1483
  const pagePath = agentId ? `/agents/${agentId}/permissions` : "/agents";
1341
1484
  const url = `${platformOrigin}${pagePath}?${urlParams.toString()}`;
1342
1485
  printSensitivePermissionGuidance(connectorRef, permission);
1343
1486
  printPermissionRequestMessage({
1344
1487
  permission,
1345
1488
  label,
1346
- url,
1347
- duration
1489
+ url
1348
1490
  });
1491
+ if (callbackPrompt !== void 0) {
1492
+ printCallbackTurnInstruction();
1493
+ }
1494
+ }
1495
+ var callbackPromptOption = new Option(
1496
+ "--callback-prompt <prompt>",
1497
+ "Start the next web chat round with this prompt after the permission is granted"
1498
+ );
1499
+ var callbackPromptAvailable = connectorActionCallbackEnabled();
1500
+ if (!callbackPromptAvailable) {
1501
+ callbackPromptOption.hideHelp();
1349
1502
  }
1503
+ var callbackPromptExample = callbackPromptAvailable ? ' zero connector permission-request github --permission contents:write --callback-prompt "Re-check the permission, then continue the previous task"\n' : "";
1504
+ var callbackPromptNotes = callbackPromptAvailable ? " - Use --callback-prompt only when this turn needs exactly one connector or permission action\n - Callback prompts are included in the URL; keep them concise and do not include secrets\n" : "";
1350
1505
  var permissionRequestCommand2 = new Command().name("permission-request").description("Request permission to use a connector capability").argument("<connector-ref>", "The connector type (e.g. github)").addOption(
1351
1506
  new Option(
1352
1507
  "--permission <name>",
1353
1508
  "The permission name to request"
1354
1509
  ).makeOptionMandatory()
1355
- ).addOption(
1356
- new Option(
1357
- "--duration <duration>",
1358
- "Requested allow duration: 1h, 24h, 7d, or always"
1359
- ).choices([...PERMISSION_GRANT_DURATIONS]).default(DEFAULT_PERMISSION_GRANT_DURATION)
1360
1510
  ).addOption(
1361
1511
  new Option(
1362
1512
  "--agent <id>",
1363
1513
  "Agent ID whose permission page should be opened (defaults to ZERO_AGENT_ID)"
1364
1514
  )
1365
- ).addHelpText(
1515
+ ).addOption(callbackPromptOption).addHelpText(
1366
1516
  "after",
1367
1517
  `
1368
1518
  Examples:
1369
1519
  zero connector permission-request github --permission contents:read
1370
- zero connector permission-request github --permission contents:write --duration 24h
1371
- zero connector permission-request gmail --permission messages.write --agent <agent-id>
1520
+ ${callbackPromptExample} zero connector permission-request gmail --permission messages.write --agent <agent-id>
1372
1521
  zero connector permission-request cloudflare --permission __unknown__
1373
1522
  zero connector permission-request computer-use --permission computer-use:write
1374
1523
 
@@ -1376,9 +1525,8 @@ Notes:
1376
1525
  - Outputs a platform URL for the user to allow the permission
1377
1526
  - Use --permission __unknown__ to request access to unknown endpoints
1378
1527
  - Use --agent to request a permission for another agent; defaults to ZERO_AGENT_ID
1379
- - Requests default to --duration 1h; use 24h or 7d for longer user-approved work
1380
- - Use --duration always only when the user explicitly asks for persistent access
1381
- - Permission requests update the current user's connector grants after confirmation`
1528
+ - The user chooses the permission duration on the confirmation page
1529
+ ${callbackPromptNotes} - Permission requests update the current user's connector grants after confirmation`
1382
1530
  ).action(
1383
1531
  withErrorHandler(
1384
1532
  async (connectorRef, opts) => {
@@ -1386,9 +1534,15 @@ Notes:
1386
1534
  connectorRef,
1387
1535
  permission: opts.permission
1388
1536
  })) {
1537
+ if (opts.callbackPrompt !== void 0) {
1538
+ throw new Error(
1539
+ "--callback-prompt is not supported for Computer Use authorization requests"
1540
+ );
1541
+ }
1389
1542
  await printComputerUsePermissionRequestMessage();
1390
1543
  return;
1391
1544
  }
1545
+ const agentId = opts.agent ?? process.env.ZERO_AGENT_ID;
1392
1546
  const metadata = await getZeroConnectorCatalogPermissions(connectorRef);
1393
1547
  if (!metadata) {
1394
1548
  throw new Error(`Unknown connector type: ${connectorRef}`);
@@ -1402,8 +1556,8 @@ Notes:
1402
1556
  connectorRef,
1403
1557
  metadata.label,
1404
1558
  opts.permission,
1405
- opts.duration,
1406
- opts.agent ?? process.env.ZERO_AGENT_ID
1559
+ agentId,
1560
+ opts.callbackPrompt
1407
1561
  );
1408
1562
  }
1409
1563
  )
@@ -1414,4 +1568,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Manage a
1414
1568
  export {
1415
1569
  zeroConnectorCommand
1416
1570
  };
1417
- //# sourceMappingURL=connector-CM3CYVJ2.js.map
1571
+ //# sourceMappingURL=connector-B2H7VPC3.js.map