@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.
- package/{agent-5TLH3FMD.js → agent-XLGDAD6T.js} +5 -5
- package/{banking-NEAT4R24.js → banking-2BV2JGRD.js} +3 -3
- package/{chat-F5Y4Y6W5.js → chat-TPLHZ57Z.js} +4 -4
- package/{chunk-6IPI5G2W.js → chunk-242B44RQ.js} +2 -2
- package/{chunk-PAGGGOFZ.js → chunk-53FHPUUO.js} +2 -2
- package/{chunk-IEMQM5BQ.js → chunk-BWNGRHYH.js} +2 -2
- package/{chunk-IEMQM5BQ.js.map → chunk-BWNGRHYH.js.map} +1 -1
- package/{chunk-XMPEXKMZ.js → chunk-HPWJFTMP.js} +16 -3
- package/chunk-HPWJFTMP.js.map +1 -0
- package/{chunk-ICKIMZYL.js → chunk-K3B3HC7K.js} +4 -4
- package/{chunk-YWMCF6SQ.js → chunk-KLDX2GMD.js} +58 -58
- package/{chunk-YWMCF6SQ.js.map → chunk-KLDX2GMD.js.map} +1 -1
- package/{chunk-NTHQBG2C.js → chunk-KYE3HWDY.js} +2 -2
- package/{chunk-JRH7ZD2I.js → chunk-XQ4J3JPB.js} +2 -2
- package/{chunk-7D6TPEG2.js → chunk-YDT6Y4N7.js} +4 -4
- package/{chunk-SP77SLW3.js → chunk-ZCQAX54V.js} +3 -3
- package/{computer-use-FEAAE6TT.js → computer-use-S7NJKH4V.js} +3 -3
- package/{connector-CM3CYVJ2.js → connector-B2H7VPC3.js} +214 -60
- package/connector-B2H7VPC3.js.map +1 -0
- package/{credit-W2JFXIEE.js → credit-ABSGJLTU.js} +4 -4
- package/{developer-support-3SNDQLPM.js → developer-support-3ODZ4POS.js} +3 -3
- package/{doctor-JZIBQ63P.js → doctor-MWBZVNQX.js} +3 -3
- package/{generate-VMDERMRQ.js → generate-NAC3XSCH.js} +4 -4
- package/{github-IAAPK3LA.js → github-TS5LCLTS.js} +3 -3
- package/{goal-IYAHG7OD.js → goal-6SCBC6VR.js} +3 -3
- package/{host-Y6II7XUE.js → host-AXFGIEEZ.js} +3 -3
- package/index.js +12 -12
- package/index.js.map +1 -1
- package/{logs-BPDKBOIG.js → logs-N4PPK4RJ.js} +5 -5
- package/{mail-O6HOSHJN.js → mail-3B4I7A6Y.js} +24 -13
- package/mail-3B4I7A6Y.js.map +1 -0
- package/{maps-N3INUZF2.js → maps-SMZOEFW2.js} +3 -3
- package/{model-NOMWYJFY.js → model-6WYS72Q5.js} +4 -4
- package/{model-provider-RZDEASD3.js → model-provider-6H2IOOJG.js} +4 -4
- package/{org-47E2LF2E.js → org-TO64CFO2.js} +3 -3
- package/package.json +1 -1
- package/{phone-EZSBFUQY.js → phone-RU4WI2KY.js} +3 -3
- package/{preference-3U5KKXQ5.js → preference-5X3XQBOD.js} +3 -3
- package/{resource-FHIP3W3L.js → resource-O6VJPSP6.js} +3 -3
- package/{scrape-5LAKGGQN.js → scrape-AVM4L2YU.js} +3 -3
- package/{search-3TJZAERR.js → search-6FRTRK4U.js} +5 -5
- package/{secret-CZE2VOBQ.js → secret-KWQQPVQL.js} +3 -3
- package/{slack-XG2XYZD4.js → slack-MAZYVYC2.js} +3 -3
- package/{teams-SHZAOOYC.js → teams-CGTFKOU7.js} +3 -3
- package/{telegram-5APDUFXW.js → telegram-PUV4N736.js} +3 -3
- package/{variable-CJIIWMIX.js → variable-QAN5LMCV.js} +3 -3
- package/{video-BFST4YFU.js → video-MOABW5LF.js} +2 -2
- package/{web-6H5BRLZF.js → web-WY6DU7ER.js} +3 -3
- package/{web-search-WTPWZGHE.js → web-search-IIHHOCT3.js} +3 -3
- package/{whoami-KY2VJFW7.js → whoami-ZYEF2BSF.js} +5 -5
- package/{workflow-L5Z6BS5N.js → workflow-T4ED2JYW.js} +3 -3
- package/zero.js +35 -35
- package/zero.js.map +1 -1
- package/chunk-XMPEXKMZ.js.map +0 -1
- package/connector-CM3CYVJ2.js.map +0 -1
- package/mail-O6HOSHJN.js.map +0 -1
- /package/{agent-5TLH3FMD.js.map → agent-XLGDAD6T.js.map} +0 -0
- /package/{banking-NEAT4R24.js.map → banking-2BV2JGRD.js.map} +0 -0
- /package/{chat-F5Y4Y6W5.js.map → chat-TPLHZ57Z.js.map} +0 -0
- /package/{chunk-6IPI5G2W.js.map → chunk-242B44RQ.js.map} +0 -0
- /package/{chunk-PAGGGOFZ.js.map → chunk-53FHPUUO.js.map} +0 -0
- /package/{chunk-ICKIMZYL.js.map → chunk-K3B3HC7K.js.map} +0 -0
- /package/{chunk-NTHQBG2C.js.map → chunk-KYE3HWDY.js.map} +0 -0
- /package/{chunk-JRH7ZD2I.js.map → chunk-XQ4J3JPB.js.map} +0 -0
- /package/{chunk-7D6TPEG2.js.map → chunk-YDT6Y4N7.js.map} +0 -0
- /package/{chunk-SP77SLW3.js.map → chunk-ZCQAX54V.js.map} +0 -0
- /package/{computer-use-FEAAE6TT.js.map → computer-use-S7NJKH4V.js.map} +0 -0
- /package/{credit-W2JFXIEE.js.map → credit-ABSGJLTU.js.map} +0 -0
- /package/{developer-support-3SNDQLPM.js.map → developer-support-3ODZ4POS.js.map} +0 -0
- /package/{doctor-JZIBQ63P.js.map → doctor-MWBZVNQX.js.map} +0 -0
- /package/{generate-VMDERMRQ.js.map → generate-NAC3XSCH.js.map} +0 -0
- /package/{github-IAAPK3LA.js.map → github-TS5LCLTS.js.map} +0 -0
- /package/{goal-IYAHG7OD.js.map → goal-6SCBC6VR.js.map} +0 -0
- /package/{host-Y6II7XUE.js.map → host-AXFGIEEZ.js.map} +0 -0
- /package/{logs-BPDKBOIG.js.map → logs-N4PPK4RJ.js.map} +0 -0
- /package/{maps-N3INUZF2.js.map → maps-SMZOEFW2.js.map} +0 -0
- /package/{model-NOMWYJFY.js.map → model-6WYS72Q5.js.map} +0 -0
- /package/{model-provider-RZDEASD3.js.map → model-provider-6H2IOOJG.js.map} +0 -0
- /package/{org-47E2LF2E.js.map → org-TO64CFO2.js.map} +0 -0
- /package/{phone-EZSBFUQY.js.map → phone-RU4WI2KY.js.map} +0 -0
- /package/{preference-3U5KKXQ5.js.map → preference-5X3XQBOD.js.map} +0 -0
- /package/{resource-FHIP3W3L.js.map → resource-O6VJPSP6.js.map} +0 -0
- /package/{scrape-5LAKGGQN.js.map → scrape-AVM4L2YU.js.map} +0 -0
- /package/{search-3TJZAERR.js.map → search-6FRTRK4U.js.map} +0 -0
- /package/{secret-CZE2VOBQ.js.map → secret-KWQQPVQL.js.map} +0 -0
- /package/{slack-XG2XYZD4.js.map → slack-MAZYVYC2.js.map} +0 -0
- /package/{teams-SHZAOOYC.js.map → teams-CGTFKOU7.js.map} +0 -0
- /package/{telegram-5APDUFXW.js.map → telegram-PUV4N736.js.map} +0 -0
- /package/{variable-CJIIWMIX.js.map → variable-QAN5LMCV.js.map} +0 -0
- /package/{video-BFST4YFU.js.map → video-MOABW5LF.js.map} +0 -0
- /package/{web-6H5BRLZF.js.map → web-WY6DU7ER.js.map} +0 -0
- /package/{web-search-WTPWZGHE.js.map → web-search-IIHHOCT3.js.map} +0 -0
- /package/{whoami-KY2VJFW7.js.map → whoami-ZYEF2BSF.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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-
|
|
268
|
+
//# sourceMappingURL=chunk-XQ4J3JPB.js.map
|
|
@@ -10,14 +10,14 @@ import {
|
|
|
10
10
|
parseBoundedLogCount,
|
|
11
11
|
parseSearchQuery,
|
|
12
12
|
parseTime
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-HPWJFTMP.js";
|
|
14
14
|
import {
|
|
15
15
|
searchZeroLogs
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KLDX2GMD.js";
|
|
17
17
|
import {
|
|
18
18
|
source_default,
|
|
19
19
|
withErrorHandler
|
|
20
|
-
} from "./chunk-
|
|
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-
|
|
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.
|
|
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.
|
|
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-
|
|
149
|
+
//# sourceMappingURL=chunk-ZCQAX54V.js.map
|
|
@@ -12,11 +12,11 @@ import {
|
|
|
12
12
|
fetchComputerUseScreenshot,
|
|
13
13
|
getComputerUseCommand,
|
|
14
14
|
listComputerUseHosts
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-KLDX2GMD.js";
|
|
16
16
|
import {
|
|
17
17
|
ApiRequestError,
|
|
18
18
|
withErrorHandler
|
|
19
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
13
|
+
} from "./chunk-XQ4J3JPB.js";
|
|
14
14
|
import {
|
|
15
15
|
getPlatformOrigin,
|
|
16
16
|
toPlatformUrl
|
|
17
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
515
|
-
|
|
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
|
-
|
|
523
|
-
|
|
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}
|
|
643
|
+
return `zero connector permission-request ${connectorRef} --permission ${permission}`;
|
|
533
644
|
}
|
|
534
|
-
function
|
|
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
|
-
|
|
546
|
-
|
|
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
|
-
|
|
554
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
|
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
|
-
-
|
|
1380
|
-
-
|
|
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
|
-
|
|
1406
|
-
opts.
|
|
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-
|
|
1571
|
+
//# sourceMappingURL=connector-B2H7VPC3.js.map
|