@vm0/cli 9.264.6 → 9.264.8
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-NFKOUPGW.js → agent-4MCHGF7N.js} +20 -15
- package/{agent-NFKOUPGW.js.map → agent-4MCHGF7N.js.map} +1 -1
- package/{banking-WKLESFGH.js → banking-GXQ7POKU.js} +4 -4
- package/{browser-NN2XMVAB.js → browser-KSZXTUQA.js} +4 -4
- package/{chat-PLHTVSCS.js → chat-5WGKZHMB.js} +5 -5
- package/{chunk-TLQL2AEZ.js → chunk-2KEUNCZT.js} +2 -2
- package/{chunk-PS37YIUV.js → chunk-7WMNSSBC.js} +6 -6
- package/chunk-7WMNSSBC.js.map +1 -0
- package/{chunk-QSSPOZX4.js → chunk-AOHVC7EW.js} +3 -10
- package/chunk-AOHVC7EW.js.map +1 -0
- package/{chunk-BT3ABTGZ.js → chunk-B5VQCVCY.js} +29 -24
- package/chunk-B5VQCVCY.js.map +1 -0
- package/{chunk-SZKJGQN3.js → chunk-IYS3T6IA.js} +2 -2
- package/{chunk-TJCLIDBB.js → chunk-KCVBW7AC.js} +88 -56
- package/chunk-KCVBW7AC.js.map +1 -0
- package/{chunk-CQII6HHD.js → chunk-TCZ2FX3X.js} +2 -2
- package/{chunk-T2TA7M3V.js → chunk-WUJWUDPD.js} +9 -9
- package/{chunk-T2TA7M3V.js.map → chunk-WUJWUDPD.js.map} +1 -1
- package/{chunk-UXFHS4TN.js → chunk-XAVHX57D.js} +2 -2
- package/{chunk-ITMUR6VM.js → chunk-YV3LWRZZ.js} +26 -8
- package/{chunk-ITMUR6VM.js.map → chunk-YV3LWRZZ.js.map} +1 -1
- package/{computer-use-IBGH6OVN.js → computer-use-7IYJ2JNT.js} +4 -4
- package/{connector-CCER5CQL.js → connector-RUCYHNTI.js} +119 -108
- package/connector-RUCYHNTI.js.map +1 -0
- package/{credit-HSHPMXU3.js → credit-SWBRMGXY.js} +5 -5
- package/{developer-support-2CGBXFV4.js → developer-support-FTYPJJ6Q.js} +4 -4
- package/{doctor-R2IQKYEY.js → doctor-6AOKR5UU.js} +5 -5
- package/{feishu-SKYGH6QT.js → feishu-VHY2XR6D.js} +4 -4
- package/{finance-GE4FE6TN.js → finance-4ZD3LPNN.js} +4 -4
- package/{generate-RUJGAGFQ.js → generate-ULUL52MM.js} +31 -25
- package/generate-ULUL52MM.js.map +1 -0
- package/{github-W7KSXMZP.js → github-A3C3OGLD.js} +4 -4
- package/{goal-VXWY6C3V.js → goal-EB5VK2GK.js} +4 -4
- package/{host-O5EMPSHG.js → host-BYHZZN2I.js} +4 -4
- package/{logs-LFUSMYNU.js → logs-IFUUWA54.js} +6 -6
- package/{mail-SDSQJPCI.js → mail-YI5KA3CI.js} +15 -15
- package/mail-YI5KA3CI.js.map +1 -0
- package/{maps-BKUSG2LY.js → maps-KTC5S7FA.js} +4 -4
- package/{model-V6FQHH3J.js → model-AYKQFU7E.js} +5 -5
- package/{model-provider-2ZR7K6W4.js → model-provider-4MKVAZCR.js} +5 -5
- package/{org-ECIWP3L7.js → org-IZAWNWIE.js} +4 -4
- package/package.json +1 -1
- package/{people-search-GJJ5V7WA.js → people-search-J45HXJB3.js} +4 -4
- package/{phone-3M7R34MY.js → phone-YSGX6TYA.js} +4 -4
- package/{preference-GOHQTW4K.js → preference-O6URTHMQ.js} +4 -4
- package/{resource-SXBXSSPC.js → resource-FKEP5R3M.js} +4 -4
- package/{scrape-UPNZ7CMK.js → scrape-TO3EO4NH.js} +4 -4
- package/{search-J26P4FUR.js → search-PUZI5HRX.js} +6 -6
- package/{secret-RBN4W2ZK.js → secret-6PYNLRMC.js} +4 -4
- package/{slack-WMUDE7VL.js → slack-6TBB72IQ.js} +4 -4
- package/{teams-PUTH6RUN.js → teams-TCTUKRSH.js} +4 -4
- package/{telegram-S2SCMOFZ.js → telegram-PD2GOYYR.js} +4 -4
- package/{upgrade-VELUTFX5.js → upgrade-GOWPZRKS.js} +3 -3
- package/{variable-LCYRMKHM.js → variable-RNHRIK7S.js} +4 -4
- package/{video-SYOI42DX.js → video-HWANWKDT.js} +3 -3
- package/{weather-F7F2TFQY.js → weather-IWQDSXJG.js} +4 -4
- package/{web-WXR5ZZKB.js → web-5RDGLDVJ.js} +4 -4
- package/{web-search-3XU46YJ5.js → web-search-7SV3KXHO.js} +4 -4
- package/{whoami-YWISHB6R.js → whoami-CUHEGGL2.js} +12 -12
- package/whoami-CUHEGGL2.js.map +1 -0
- package/{workflow-JQ7JC62W.js → workflow-UGDNPUJG.js} +5 -5
- package/zero.js +43 -43
- package/chunk-BT3ABTGZ.js.map +0 -1
- package/chunk-PS37YIUV.js.map +0 -1
- package/chunk-QSSPOZX4.js.map +0 -1
- package/chunk-TJCLIDBB.js.map +0 -1
- package/connector-CCER5CQL.js.map +0 -1
- package/generate-RUJGAGFQ.js.map +0 -1
- package/mail-SDSQJPCI.js.map +0 -1
- package/whoami-YWISHB6R.js.map +0 -1
- /package/{banking-WKLESFGH.js.map → banking-GXQ7POKU.js.map} +0 -0
- /package/{browser-NN2XMVAB.js.map → browser-KSZXTUQA.js.map} +0 -0
- /package/{chat-PLHTVSCS.js.map → chat-5WGKZHMB.js.map} +0 -0
- /package/{chunk-TLQL2AEZ.js.map → chunk-2KEUNCZT.js.map} +0 -0
- /package/{chunk-SZKJGQN3.js.map → chunk-IYS3T6IA.js.map} +0 -0
- /package/{chunk-CQII6HHD.js.map → chunk-TCZ2FX3X.js.map} +0 -0
- /package/{chunk-UXFHS4TN.js.map → chunk-XAVHX57D.js.map} +0 -0
- /package/{computer-use-IBGH6OVN.js.map → computer-use-7IYJ2JNT.js.map} +0 -0
- /package/{credit-HSHPMXU3.js.map → credit-SWBRMGXY.js.map} +0 -0
- /package/{developer-support-2CGBXFV4.js.map → developer-support-FTYPJJ6Q.js.map} +0 -0
- /package/{doctor-R2IQKYEY.js.map → doctor-6AOKR5UU.js.map} +0 -0
- /package/{feishu-SKYGH6QT.js.map → feishu-VHY2XR6D.js.map} +0 -0
- /package/{finance-GE4FE6TN.js.map → finance-4ZD3LPNN.js.map} +0 -0
- /package/{github-W7KSXMZP.js.map → github-A3C3OGLD.js.map} +0 -0
- /package/{goal-VXWY6C3V.js.map → goal-EB5VK2GK.js.map} +0 -0
- /package/{host-O5EMPSHG.js.map → host-BYHZZN2I.js.map} +0 -0
- /package/{logs-LFUSMYNU.js.map → logs-IFUUWA54.js.map} +0 -0
- /package/{maps-BKUSG2LY.js.map → maps-KTC5S7FA.js.map} +0 -0
- /package/{model-V6FQHH3J.js.map → model-AYKQFU7E.js.map} +0 -0
- /package/{model-provider-2ZR7K6W4.js.map → model-provider-4MKVAZCR.js.map} +0 -0
- /package/{org-ECIWP3L7.js.map → org-IZAWNWIE.js.map} +0 -0
- /package/{people-search-GJJ5V7WA.js.map → people-search-J45HXJB3.js.map} +0 -0
- /package/{phone-3M7R34MY.js.map → phone-YSGX6TYA.js.map} +0 -0
- /package/{preference-GOHQTW4K.js.map → preference-O6URTHMQ.js.map} +0 -0
- /package/{resource-SXBXSSPC.js.map → resource-FKEP5R3M.js.map} +0 -0
- /package/{scrape-UPNZ7CMK.js.map → scrape-TO3EO4NH.js.map} +0 -0
- /package/{search-J26P4FUR.js.map → search-PUZI5HRX.js.map} +0 -0
- /package/{secret-RBN4W2ZK.js.map → secret-6PYNLRMC.js.map} +0 -0
- /package/{slack-WMUDE7VL.js.map → slack-6TBB72IQ.js.map} +0 -0
- /package/{teams-PUTH6RUN.js.map → teams-TCTUKRSH.js.map} +0 -0
- /package/{telegram-S2SCMOFZ.js.map → telegram-PD2GOYYR.js.map} +0 -0
- /package/{upgrade-VELUTFX5.js.map → upgrade-GOWPZRKS.js.map} +0 -0
- /package/{variable-LCYRMKHM.js.map → variable-RNHRIK7S.js.map} +0 -0
- /package/{video-SYOI42DX.js.map → video-HWANWKDT.js.map} +0 -0
- /package/{weather-F7F2TFQY.js.map → weather-IWQDSXJG.js.map} +0 -0
- /package/{web-WXR5ZZKB.js.map → web-5RDGLDVJ.js.map} +0 -0
- /package/{web-search-3XU46YJ5.js.map → web-search-7SV3KXHO.js.map} +0 -0
- /package/{workflow-JQ7JC62W.js.map → workflow-UGDNPUJG.js.map} +0 -0
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
fetchComputerUseScreenshot,
|
|
13
13
|
getComputerUseCommand,
|
|
14
14
|
listComputerUseHosts
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
} from "./chunk-KCVBW7AC.js";
|
|
16
|
+
import "./chunk-TCZ2FX3X.js";
|
|
17
17
|
import {
|
|
18
18
|
ApiRequestError,
|
|
19
19
|
withErrorHandler
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-2KEUNCZT.js";
|
|
21
21
|
import "./chunk-MD3YWUKO.js";
|
|
22
22
|
import {
|
|
23
23
|
Command
|
|
@@ -970,4 +970,4 @@ export {
|
|
|
970
970
|
formatComputerUseResultForConsole,
|
|
971
971
|
zeroComputerUseCommand
|
|
972
972
|
};
|
|
973
|
-
//# sourceMappingURL=computer-use-
|
|
973
|
+
//# sourceMappingURL=computer-use-7IYJ2JNT.js.map
|
|
@@ -3,11 +3,11 @@ 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-7WMNSSBC.js";
|
|
7
7
|
import {
|
|
8
8
|
CALLBACK_PROMPT_PLACEHOLDER,
|
|
9
9
|
addRequestedCallbackSearchParams,
|
|
10
|
-
|
|
10
|
+
availableConnectorSlugs,
|
|
11
11
|
connectorActionCallbackAvailable,
|
|
12
12
|
connectorActionUrl,
|
|
13
13
|
currentChatSupportsActionCallback,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
resolveAgentContext,
|
|
18
18
|
resolveManualGrantAuthMethod,
|
|
19
19
|
searchPublicConnectorCatalog
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-WUJWUDPD.js";
|
|
21
21
|
import {
|
|
22
22
|
UNKNOWN_PERMISSION_GRANT,
|
|
23
23
|
connectZeroConnectorManualGrant,
|
|
@@ -33,19 +33,19 @@ import {
|
|
|
33
33
|
getZeroCustomConnector,
|
|
34
34
|
listZeroConnectorCatalogStatus,
|
|
35
35
|
listZeroCustomConnectors
|
|
36
|
-
} from "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
} from "./chunk-KCVBW7AC.js";
|
|
37
|
+
import "./chunk-TCZ2FX3X.js";
|
|
38
38
|
import {
|
|
39
39
|
getPlatformOrigin,
|
|
40
40
|
toPlatformUrl
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-IYS3T6IA.js";
|
|
42
42
|
import "./chunk-MA22KQYU.js";
|
|
43
43
|
import {
|
|
44
44
|
ApiRequestError,
|
|
45
45
|
getApiUrl,
|
|
46
46
|
source_default,
|
|
47
47
|
withErrorHandler
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-2KEUNCZT.js";
|
|
49
49
|
import "./chunk-MD3YWUKO.js";
|
|
50
50
|
import {
|
|
51
51
|
Command,
|
|
@@ -63,12 +63,12 @@ init_esm_shims();
|
|
|
63
63
|
|
|
64
64
|
// src/commands/zero/connector/computer-use-guidance.ts
|
|
65
65
|
init_esm_shims();
|
|
66
|
-
var
|
|
66
|
+
var COMPUTER_USE_CONNECTOR_SLUG = "computer-use";
|
|
67
67
|
var COMPUTER_USE_CAPABILITY = "computer-use:write";
|
|
68
68
|
var COMPUTER_USE_PATH_PREFIX = "/computer-use";
|
|
69
69
|
var COMPUTER_USE_PATH_PREFIX_WITH_SLASH = `${COMPUTER_USE_PATH_PREFIX}/`;
|
|
70
70
|
function isComputerUsePermissionTarget(target) {
|
|
71
|
-
return target.
|
|
71
|
+
return target.connectorSlug === COMPUTER_USE_CONNECTOR_SLUG || target.permission === COMPUTER_USE_CAPABILITY || target.path === COMPUTER_USE_PATH_PREFIX || target.path?.startsWith(COMPUTER_USE_PATH_PREFIX_WITH_SLASH) === true;
|
|
72
72
|
}
|
|
73
73
|
function printComputerUsePermissionGuidance() {
|
|
74
74
|
console.log("Computer Use access is not managed as a connector permission.");
|
|
@@ -108,10 +108,10 @@ function rawUrlAuthorityHasUserinfo(url) {
|
|
|
108
108
|
function shellQuoteArg(value) {
|
|
109
109
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
110
110
|
}
|
|
111
|
-
function connectorSelectionCommand(url, method,
|
|
111
|
+
function connectorSelectionCommand(url, method, connectorSlug) {
|
|
112
112
|
const args = [
|
|
113
113
|
`--url ${shellQuoteArg(url)}`,
|
|
114
|
-
`--connector ${shellQuoteArg(
|
|
114
|
+
`--connector ${shellQuoteArg(connectorSlug)}`
|
|
115
115
|
];
|
|
116
116
|
if (method !== "GET") {
|
|
117
117
|
args.push(`--method ${shellQuoteArg(method)}`);
|
|
@@ -127,7 +127,7 @@ function rawPathFromUrl(url) {
|
|
|
127
127
|
}
|
|
128
128
|
function isComputerUseCheckTarget(opts) {
|
|
129
129
|
return isComputerUsePermissionTarget({
|
|
130
|
-
|
|
130
|
+
connectorSlug: opts.connector ?? "",
|
|
131
131
|
path: opts.url === void 0 ? void 0 : rawPathFromUrl(opts.url),
|
|
132
132
|
permission: opts.checkPermission
|
|
133
133
|
});
|
|
@@ -239,9 +239,9 @@ function noMatchError(result) {
|
|
|
239
239
|
);
|
|
240
240
|
}
|
|
241
241
|
function connectorMismatchError(request, result) {
|
|
242
|
-
const
|
|
242
|
+
const requestedSlug = request.connectorRef ?? "the requested connector";
|
|
243
243
|
return new Error(
|
|
244
|
-
`Connector ${
|
|
244
|
+
`Connector ${requestedSlug} does not own ${request.method} ${request.url}; the matching connector is ${result.connector.connectorRef}
|
|
245
245
|
Run: ${connectorSelectionCommand(request.url, request.method, result.connector.connectorRef)}`
|
|
246
246
|
);
|
|
247
247
|
}
|
|
@@ -327,7 +327,7 @@ function printConnectorConnectionStatus(ctx, isConnected, isExpired, hasPermissi
|
|
|
327
327
|
if (ctx.agentId && hasPermission) {
|
|
328
328
|
const connectUrl = connectorActionUrl({
|
|
329
329
|
origin: ctx.platformOrigin,
|
|
330
|
-
path: `/connectors/${ctx.
|
|
330
|
+
path: `/connectors/${ctx.connectorSlug}/connect`,
|
|
331
331
|
agentId: ctx.agentId
|
|
332
332
|
});
|
|
333
333
|
console.log(`Connect it at: [Connect ${ctx.label}](${connectUrl})`);
|
|
@@ -335,14 +335,14 @@ function printConnectorConnectionStatus(ctx, isConnected, isExpired, hasPermissi
|
|
|
335
335
|
} else if (!ctx.agentId) {
|
|
336
336
|
const connectUrl = connectorActionUrl({
|
|
337
337
|
origin: ctx.platformOrigin,
|
|
338
|
-
path: `/connectors/${ctx.
|
|
338
|
+
path: `/connectors/${ctx.connectorSlug}/connect`
|
|
339
339
|
});
|
|
340
340
|
console.log(`Connect it at: [Connect ${ctx.label}](${connectUrl})`);
|
|
341
341
|
}
|
|
342
342
|
} else if (isExpired) {
|
|
343
343
|
const url = connectorActionUrl({
|
|
344
344
|
origin: ctx.platformOrigin,
|
|
345
|
-
path: `/connectors/${ctx.
|
|
345
|
+
path: `/connectors/${ctx.connectorSlug}/connect`,
|
|
346
346
|
agentId: ctx.agentId
|
|
347
347
|
});
|
|
348
348
|
console.log(
|
|
@@ -369,7 +369,7 @@ function printAgentAuthorizationStatus(ctx, isConnected, isExpired, hasPermissio
|
|
|
369
369
|
} else {
|
|
370
370
|
const url = connectorActionUrl({
|
|
371
371
|
origin: ctx.platformOrigin,
|
|
372
|
-
path: `/connectors/${ctx.
|
|
372
|
+
path: `/connectors/${ctx.connectorSlug}/authorize`,
|
|
373
373
|
agentId: ctx.agentId
|
|
374
374
|
});
|
|
375
375
|
console.log(
|
|
@@ -439,13 +439,13 @@ async function checkConnectorStatus(ctx) {
|
|
|
439
439
|
"A Connector holds the real credentials (OAuth tokens or API keys) for an external service. These credentials are never injected into the sandbox. Instead, when the sandbox sends an HTTP request to a base URL registered by the Connector, the network boundary intercepts the request and replaces the auth headers with real credentials. For this to work, three conditions must be met:"
|
|
440
440
|
);
|
|
441
441
|
console.log("");
|
|
442
|
-
const [connector,
|
|
443
|
-
getZeroConnector(ctx.
|
|
442
|
+
const [connector, enabledConnectorSlugs] = await Promise.all([
|
|
443
|
+
getZeroConnector(ctx.connectorSlug),
|
|
444
444
|
ctx.agentId ? getZeroAgentUserConnectors(ctx.agentId) : Promise.resolve(null)
|
|
445
445
|
]);
|
|
446
446
|
const isConnected = connector !== null;
|
|
447
447
|
const isExpired = connector?.connectionStatus === "reconnect-required";
|
|
448
|
-
const hasPermission =
|
|
448
|
+
const hasPermission = enabledConnectorSlugs !== null && enabledConnectorSlugs.includes(ctx.connectorSlug);
|
|
449
449
|
printConnectorConnectionStatus(ctx, isConnected, isExpired, hasPermission);
|
|
450
450
|
printConnectorAuthorizationStatus(ctx, isConnected, isExpired, hasPermission);
|
|
451
451
|
return { isConnected, isExpired, hasPermission };
|
|
@@ -507,7 +507,7 @@ function printUnavailablePolicy(policy) {
|
|
|
507
507
|
return;
|
|
508
508
|
}
|
|
509
509
|
}
|
|
510
|
-
function printNamedPolicyResult(
|
|
510
|
+
function printNamedPolicyResult(connectorSlug, permission, policy, agentId) {
|
|
511
511
|
switch (policy.outcome) {
|
|
512
512
|
case "allow": {
|
|
513
513
|
switch (policy.basis) {
|
|
@@ -539,7 +539,7 @@ function printNamedPolicyResult(connectorRef, permission, policy, agentId) {
|
|
|
539
539
|
policy.basis === "deny-list" ? `Result: "${permission}" is in the deny list \u2014 denied.` : `Result: The unknown-endpoint policy denies "${permission}".`
|
|
540
540
|
);
|
|
541
541
|
printPermissionRequestCommands(
|
|
542
|
-
|
|
542
|
+
connectorSlug,
|
|
543
543
|
permission,
|
|
544
544
|
agentId,
|
|
545
545
|
"To request this permission, run"
|
|
@@ -550,7 +550,7 @@ function printNamedPolicyResult(connectorRef, permission, policy, agentId) {
|
|
|
550
550
|
policy.basis === "ask-list" ? `Result: "${permission}" is in the ask list \u2014 blocked until approval.` : `Result: The unknown-endpoint policy blocks "${permission}" until approval.`
|
|
551
551
|
);
|
|
552
552
|
printPermissionRequestCommands(
|
|
553
|
-
|
|
553
|
+
connectorSlug,
|
|
554
554
|
permission,
|
|
555
555
|
agentId,
|
|
556
556
|
"To request this permission, run"
|
|
@@ -561,11 +561,11 @@ function printNamedPolicyResult(connectorRef, permission, policy, agentId) {
|
|
|
561
561
|
return;
|
|
562
562
|
}
|
|
563
563
|
}
|
|
564
|
-
function permissionRequestCommand(
|
|
565
|
-
return `zero connector permission-request ${
|
|
564
|
+
function permissionRequestCommand(connectorSlug, permission) {
|
|
565
|
+
return `zero connector permission-request ${connectorSlug} --permission ${permission}`;
|
|
566
566
|
}
|
|
567
|
-
function printPermissionRequestCommands(
|
|
568
|
-
const command = permissionRequestCommand(
|
|
567
|
+
function printPermissionRequestCommands(connectorSlug, permission, agentId, introduction) {
|
|
568
|
+
const command = permissionRequestCommand(connectorSlug, permission);
|
|
569
569
|
console.log(`${introduction}: ${command}`);
|
|
570
570
|
if (!currentChatSupportsActionCallback(agentId)) {
|
|
571
571
|
return;
|
|
@@ -576,7 +576,7 @@ function printPermissionRequestCommands(connectorRef, permission, agentId, intro
|
|
|
576
576
|
);
|
|
577
577
|
console.log(`${command} --callback-prompt "${CALLBACK_PROMPT_PLACEHOLDER}"`);
|
|
578
578
|
}
|
|
579
|
-
function printUnknownEndpointPolicy(
|
|
579
|
+
function printUnknownEndpointPolicy(connectorSlug, policy, agentId) {
|
|
580
580
|
switch (policy.outcome) {
|
|
581
581
|
case "allow":
|
|
582
582
|
console.log(
|
|
@@ -588,7 +588,7 @@ function printUnknownEndpointPolicy(connectorRef, policy, agentId) {
|
|
|
588
588
|
"Result: No permission matched. The unknown endpoint policy denies this request."
|
|
589
589
|
);
|
|
590
590
|
printPermissionRequestCommands(
|
|
591
|
-
|
|
591
|
+
connectorSlug,
|
|
592
592
|
"__unknown__",
|
|
593
593
|
agentId,
|
|
594
594
|
"To request access to unknown endpoints, run"
|
|
@@ -599,7 +599,7 @@ function printUnknownEndpointPolicy(connectorRef, policy, agentId) {
|
|
|
599
599
|
"Result: No permission matched. The unknown endpoint policy requires approval."
|
|
600
600
|
);
|
|
601
601
|
printPermissionRequestCommands(
|
|
602
|
-
|
|
602
|
+
connectorSlug,
|
|
603
603
|
"__unknown__",
|
|
604
604
|
agentId,
|
|
605
605
|
"To request access to unknown endpoints, run"
|
|
@@ -704,6 +704,7 @@ var checkConnectorCommand = new Command().name("check").description(
|
|
|
704
704
|
"A full URL to diagnose \u2014 matches connector ownership, route environment names, and permission (e.g. https://api.github.com/repos/owner/repo)"
|
|
705
705
|
)
|
|
706
706
|
).addOption(
|
|
707
|
+
// TODO(#23619): Rename this stable CLI option value label in the CLI rollout.
|
|
707
708
|
new Option(
|
|
708
709
|
"--connector <type>",
|
|
709
710
|
"Select the connector when multiple connectors own the same URL route"
|
|
@@ -751,7 +752,7 @@ How connectors work:
|
|
|
751
752
|
const platformUrl = toPlatformUrl(await getApiUrl());
|
|
752
753
|
const ctx = {
|
|
753
754
|
environmentNames: diagnosticEnvironmentNames(result),
|
|
754
|
-
|
|
755
|
+
connectorSlug: result.connector.connectorRef,
|
|
755
756
|
label: result.connector.label,
|
|
756
757
|
connectorAvailable: result.connector.visibility === "available",
|
|
757
758
|
credentialResolution: result.connector.credentialResolution,
|
|
@@ -822,17 +823,17 @@ var connectCommand = new Command().name("connect").description("Connect a connec
|
|
|
822
823
|
collectValue,
|
|
823
824
|
[]
|
|
824
825
|
).option("--json", "Print the connector response as JSON").action(
|
|
825
|
-
withErrorHandler(async (
|
|
826
|
+
withErrorHandler(async (connectorSlug, options) => {
|
|
826
827
|
const values = parseConnectorValues(options.value);
|
|
827
828
|
const catalog = await listZeroConnectorCatalogStatus();
|
|
828
829
|
const connectorMetadata = findConnectorStatusItem(
|
|
829
830
|
catalog.connectors,
|
|
830
|
-
|
|
831
|
+
connectorSlug
|
|
831
832
|
);
|
|
832
833
|
if (!connectorMetadata) {
|
|
833
|
-
throw new Error(`Unknown or unavailable connector: ${
|
|
834
|
+
throw new Error(`Unknown or unavailable connector: ${connectorSlug}`, {
|
|
834
835
|
cause: new Error(
|
|
835
|
-
`Available connectors: ${
|
|
836
|
+
`Available connectors: ${availableConnectorSlugs(catalog.connectors)}`
|
|
836
837
|
)
|
|
837
838
|
});
|
|
838
839
|
}
|
|
@@ -899,13 +900,13 @@ var listCommand = new Command().name("list").alias("ls").description("List all c
|
|
|
899
900
|
listZeroConnectorCatalogStatus(),
|
|
900
901
|
resolveAgentContext(options.agent)
|
|
901
902
|
]);
|
|
902
|
-
const
|
|
903
|
+
const connectorSlugs = connectors.map((connector) => {
|
|
903
904
|
return connector.connectorRef;
|
|
904
905
|
});
|
|
905
|
-
const
|
|
906
|
+
const connectorSlugWidth = Math.max(
|
|
906
907
|
4,
|
|
907
|
-
...
|
|
908
|
-
return
|
|
908
|
+
...connectorSlugs.map((connectorSlug) => {
|
|
909
|
+
return connectorSlug.length;
|
|
909
910
|
})
|
|
910
911
|
);
|
|
911
912
|
const connectedAsHeader = "CONNECTED AS";
|
|
@@ -920,18 +921,18 @@ var listCommand = new Command().name("list").alias("ls").description("List all c
|
|
|
920
921
|
);
|
|
921
922
|
const authorizedHeader = agentCtx ? `AUTHORIZED FOR ${agentCtx.displayName}` : null;
|
|
922
923
|
const headerParts = [
|
|
923
|
-
"TYPE".padEnd(
|
|
924
|
+
"TYPE".padEnd(connectorSlugWidth),
|
|
924
925
|
connectedAsHeader.padEnd(connectedAsWidth)
|
|
925
926
|
];
|
|
926
927
|
if (authorizedHeader) headerParts.push(authorizedHeader);
|
|
927
928
|
console.log(source_default.dim(headerParts.join(" ")));
|
|
928
|
-
for (let i = 0; i <
|
|
929
|
-
const
|
|
929
|
+
for (let i = 0; i < connectorSlugs.length; i++) {
|
|
930
|
+
const connectorSlug = connectorSlugs[i];
|
|
930
931
|
const connectedCell = padEndAnsi(connectedCells[i], connectedAsWidth);
|
|
931
|
-
const parts = [
|
|
932
|
+
const parts = [connectorSlug.padEnd(connectorSlugWidth), connectedCell];
|
|
932
933
|
if (agentCtx) {
|
|
933
934
|
parts.push(
|
|
934
|
-
agentCtx.
|
|
935
|
+
agentCtx.authorizedConnectorSlugs.has(connectorSlug) ? source_default.green("\u2713") : source_default.dim("-")
|
|
935
936
|
);
|
|
936
937
|
}
|
|
937
938
|
console.log(parts.join(" "));
|
|
@@ -985,13 +986,13 @@ var searchCommand = new Command().name("search").description(
|
|
|
985
986
|
if (total > options.limit) {
|
|
986
987
|
console.log(`Too many results (top ${options.limit} of ${total}):`);
|
|
987
988
|
}
|
|
988
|
-
const
|
|
989
|
+
const connectorSlugHeader = "TYPE";
|
|
989
990
|
const connectedAsHeader = "CONNECTED AS";
|
|
990
991
|
const connectedCells = results.map((r) => {
|
|
991
992
|
return renderConnectedAsCell(r.connector);
|
|
992
993
|
});
|
|
993
|
-
const
|
|
994
|
-
|
|
994
|
+
const connectorSlugWidth = Math.max(
|
|
995
|
+
connectorSlugHeader.length,
|
|
995
996
|
...results.map((r) => {
|
|
996
997
|
return r.connector.connectorRef.length;
|
|
997
998
|
})
|
|
@@ -1003,7 +1004,7 @@ var searchCommand = new Command().name("search").description(
|
|
|
1003
1004
|
})
|
|
1004
1005
|
);
|
|
1005
1006
|
const headerParts = [
|
|
1006
|
-
|
|
1007
|
+
connectorSlugHeader.padEnd(connectorSlugWidth),
|
|
1007
1008
|
connectedAsHeader.padEnd(connectedAsWidth)
|
|
1008
1009
|
];
|
|
1009
1010
|
if (agentCtx) {
|
|
@@ -1013,12 +1014,14 @@ var searchCommand = new Command().name("search").description(
|
|
|
1013
1014
|
for (let i = 0; i < results.length; i++) {
|
|
1014
1015
|
const result = results[i];
|
|
1015
1016
|
const parts = [
|
|
1016
|
-
result.connector.connectorRef.padEnd(
|
|
1017
|
+
result.connector.connectorRef.padEnd(connectorSlugWidth),
|
|
1017
1018
|
padEndAnsi(connectedCells[i], connectedAsWidth)
|
|
1018
1019
|
];
|
|
1019
1020
|
if (agentCtx) {
|
|
1020
1021
|
parts.push(
|
|
1021
|
-
agentCtx.
|
|
1022
|
+
agentCtx.authorizedConnectorSlugs.has(
|
|
1023
|
+
result.connector.connectorRef
|
|
1024
|
+
) ? source_default.green("\u2713") : source_default.dim("-")
|
|
1022
1025
|
);
|
|
1023
1026
|
}
|
|
1024
1027
|
console.log(parts.join(" "));
|
|
@@ -1066,8 +1069,8 @@ function printConnectorDetails(connector) {
|
|
|
1066
1069
|
}
|
|
1067
1070
|
}
|
|
1068
1071
|
async function printAgentAction(connector, agentCtx) {
|
|
1069
|
-
const
|
|
1070
|
-
const authorized = agentCtx.
|
|
1072
|
+
const connectorSlug = connector.connectorRef;
|
|
1073
|
+
const authorized = agentCtx.authorizedConnectorSlugs.has(connectorSlug);
|
|
1071
1074
|
const isConnected = connector.connected;
|
|
1072
1075
|
const needsReconnect = connector.connectionStatus === "reconnect-required";
|
|
1073
1076
|
const agentLabel = agentCtx.displayName === agentCtx.agentId ? agentCtx.agentId : `${agentCtx.displayName} (${agentCtx.agentId})`;
|
|
@@ -1076,60 +1079,60 @@ async function printAgentAction(connector, agentCtx) {
|
|
|
1076
1079
|
const origin = await getPlatformOrigin();
|
|
1077
1080
|
const url = connectorActionUrl({
|
|
1078
1081
|
origin,
|
|
1079
|
-
path: `/connectors/${
|
|
1082
|
+
path: `/connectors/${connectorSlug}/connect`,
|
|
1080
1083
|
agentId: agentCtx.agentId
|
|
1081
1084
|
});
|
|
1082
1085
|
console.log(
|
|
1083
|
-
`The ${
|
|
1086
|
+
`The ${connectorSlug} connector is connected but needs to be reconnected before agent ${agentLabel} can use it.`
|
|
1084
1087
|
);
|
|
1085
|
-
console.log(`Reconnect it at: [Reconnect ${
|
|
1088
|
+
console.log(`Reconnect it at: [Reconnect ${connectorSlug}](${url})`);
|
|
1086
1089
|
printCallbackActionUrlExample(url, agentCtx.agentId);
|
|
1087
1090
|
} else if (authorized && !isConnected) {
|
|
1088
1091
|
const origin = await getPlatformOrigin();
|
|
1089
1092
|
const url = connectorActionUrl({
|
|
1090
1093
|
origin,
|
|
1091
|
-
path: `/connectors/${
|
|
1094
|
+
path: `/connectors/${connectorSlug}/connect`,
|
|
1092
1095
|
agentId: agentCtx.agentId
|
|
1093
1096
|
});
|
|
1094
1097
|
console.log(
|
|
1095
|
-
`The ${
|
|
1098
|
+
`The ${connectorSlug} connector is authorized for agent ${agentLabel}, but it is not connected.`
|
|
1096
1099
|
);
|
|
1097
|
-
console.log(`Connect it at: [Connect ${
|
|
1100
|
+
console.log(`Connect it at: [Connect ${connectorSlug}](${url})`);
|
|
1098
1101
|
printCallbackActionUrlExample(url, agentCtx.agentId);
|
|
1099
1102
|
} else if (authorized) {
|
|
1100
1103
|
console.log(
|
|
1101
|
-
`The ${
|
|
1104
|
+
`The ${connectorSlug} connector is authorized for agent ${agentLabel}.`
|
|
1102
1105
|
);
|
|
1103
1106
|
} else if (!isConnected) {
|
|
1104
1107
|
const origin = await getPlatformOrigin();
|
|
1105
1108
|
const url = connectorActionUrl({
|
|
1106
1109
|
origin,
|
|
1107
|
-
path: `/connectors/${
|
|
1110
|
+
path: `/connectors/${connectorSlug}/connect`,
|
|
1108
1111
|
agentId: agentCtx.agentId
|
|
1109
1112
|
});
|
|
1110
1113
|
console.log(
|
|
1111
|
-
`The ${
|
|
1114
|
+
`The ${connectorSlug} connector is not connected. Once connected, it will be authorized for agent ${agentLabel}.`
|
|
1112
1115
|
);
|
|
1113
1116
|
console.log(
|
|
1114
|
-
`Connect and authorize it at: [Connect ${
|
|
1117
|
+
`Connect and authorize it at: [Connect ${connectorSlug}](${url})`
|
|
1115
1118
|
);
|
|
1116
1119
|
printCallbackActionUrlExample(url, agentCtx.agentId);
|
|
1117
1120
|
} else {
|
|
1118
1121
|
const origin = await getPlatformOrigin();
|
|
1119
1122
|
const url = connectorActionUrl({
|
|
1120
1123
|
origin,
|
|
1121
|
-
path: `/connectors/${
|
|
1124
|
+
path: `/connectors/${connectorSlug}/authorize`,
|
|
1122
1125
|
agentId: agentCtx.agentId
|
|
1123
1126
|
});
|
|
1124
1127
|
console.log(
|
|
1125
|
-
`The ${
|
|
1128
|
+
`The ${connectorSlug} connector is not authorized for agent ${agentLabel}.`
|
|
1126
1129
|
);
|
|
1127
|
-
console.log(`Authorize it at: [Authorize ${
|
|
1130
|
+
console.log(`Authorize it at: [Authorize ${connectorSlug}](${url})`);
|
|
1128
1131
|
printCallbackActionUrlExample(url, agentCtx.agentId);
|
|
1129
1132
|
}
|
|
1130
1133
|
}
|
|
1131
1134
|
async function printStandaloneAction(connector) {
|
|
1132
|
-
const
|
|
1135
|
+
const connectorSlug = connector.connectorRef;
|
|
1133
1136
|
if (connector.connectionStatus === "connected" || connector.connectionStatus === "scope-mismatch") {
|
|
1134
1137
|
return;
|
|
1135
1138
|
}
|
|
@@ -1138,37 +1141,45 @@ async function printStandaloneAction(connector) {
|
|
|
1138
1141
|
if (connector.connectionStatus === "reconnect-required") {
|
|
1139
1142
|
const url = `${origin}/connectors`;
|
|
1140
1143
|
console.log(
|
|
1141
|
-
`The ${
|
|
1144
|
+
`The ${connectorSlug} connector is connected but needs to be reconnected.`
|
|
1142
1145
|
);
|
|
1143
|
-
console.log(`Reconnect it at: [Reconnect ${
|
|
1146
|
+
console.log(`Reconnect it at: [Reconnect ${connectorSlug}](${url})`);
|
|
1144
1147
|
} else {
|
|
1145
|
-
const url = `${origin}/connectors/${
|
|
1146
|
-
console.log(`Connect it at: [Connect ${
|
|
1148
|
+
const url = `${origin}/connectors/${connectorSlug}/connect`;
|
|
1149
|
+
console.log(`Connect it at: [Connect ${connectorSlug}](${url})`);
|
|
1147
1150
|
}
|
|
1148
1151
|
}
|
|
1149
1152
|
var statusCommand = new Command().name("status").description("Show detailed status of a connector").argument("<type>", "Connector type (e.g., github)").option("--agent <id>", "Show authorization state for the given agent").action(
|
|
1150
|
-
withErrorHandler(
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1153
|
+
withErrorHandler(
|
|
1154
|
+
async (connectorSlug, options) => {
|
|
1155
|
+
const [catalog, agentCtx] = await Promise.all([
|
|
1156
|
+
listZeroConnectorCatalogStatus(),
|
|
1157
|
+
resolveAgentContext(options.agent)
|
|
1158
|
+
]);
|
|
1159
|
+
const connector = findConnectorStatusItem(
|
|
1160
|
+
catalog.connectors,
|
|
1161
|
+
connectorSlug
|
|
1162
|
+
);
|
|
1163
|
+
if (!connector) {
|
|
1164
|
+
throw new Error(
|
|
1165
|
+
`Unknown or unavailable connector: ${connectorSlug}`,
|
|
1166
|
+
{
|
|
1167
|
+
cause: new Error(
|
|
1168
|
+
`Available connectors: ${availableConnectorSlugs(catalog.connectors)}`
|
|
1169
|
+
)
|
|
1170
|
+
}
|
|
1171
|
+
);
|
|
1172
|
+
}
|
|
1173
|
+
console.log(`Connector: ${source_default.cyan(connector.connectorRef)}`);
|
|
1174
|
+
console.log();
|
|
1175
|
+
printConnectorDetails(connector);
|
|
1176
|
+
if (agentCtx) {
|
|
1177
|
+
await printAgentAction(connector, agentCtx);
|
|
1178
|
+
} else {
|
|
1179
|
+
await printStandaloneAction(connector);
|
|
1180
|
+
}
|
|
1170
1181
|
}
|
|
1171
|
-
|
|
1182
|
+
)
|
|
1172
1183
|
);
|
|
1173
1184
|
|
|
1174
1185
|
// src/commands/zero/connector/custom/index.ts
|
|
@@ -1325,10 +1336,10 @@ init_esm_shims();
|
|
|
1325
1336
|
|
|
1326
1337
|
// src/commands/zero/connector/browser-guidance.ts
|
|
1327
1338
|
init_esm_shims();
|
|
1328
|
-
var
|
|
1339
|
+
var BROWSER_CONNECTOR_SLUG = "browser";
|
|
1329
1340
|
var BROWSER_WRITE_CAPABILITY = "browser:write";
|
|
1330
1341
|
function isBrowserPermissionTarget(args) {
|
|
1331
|
-
return args.
|
|
1342
|
+
return args.connectorSlug === BROWSER_CONNECTOR_SLUG || args.permission === BROWSER_WRITE_CAPABILITY;
|
|
1332
1343
|
}
|
|
1333
1344
|
function printBrowserPermissionGuidance() {
|
|
1334
1345
|
console.log(
|
|
@@ -1343,8 +1354,8 @@ function printBrowserPermissionGuidance() {
|
|
|
1343
1354
|
function permissionDescription(permission) {
|
|
1344
1355
|
return permission === UNKNOWN_PERMISSION_GRANT ? "unknown endpoints" : `the "${permission}" permission`;
|
|
1345
1356
|
}
|
|
1346
|
-
function printSensitivePermissionGuidance(
|
|
1347
|
-
if (
|
|
1357
|
+
function printSensitivePermissionGuidance(connectorSlug, permission) {
|
|
1358
|
+
if (connectorSlug === "slack" && permission === "chat:write") {
|
|
1348
1359
|
console.log("");
|
|
1349
1360
|
console.log(
|
|
1350
1361
|
"IMPORTANT: Granting chat:write allows sending messages AS THE USER's identity, not as a bot."
|
|
@@ -1357,7 +1368,7 @@ function printSensitivePermissionGuidance(connectorRef, permission) {
|
|
|
1357
1368
|
);
|
|
1358
1369
|
console.log("");
|
|
1359
1370
|
}
|
|
1360
|
-
if (
|
|
1371
|
+
if (connectorSlug === "gmail" && (permission === "messages.send" || permission === "drafts.send")) {
|
|
1361
1372
|
console.log("");
|
|
1362
1373
|
console.log(
|
|
1363
1374
|
"IMPORTANT: Granting Gmail send permissions allows the agent to send emails directly as the user."
|
|
@@ -1445,17 +1456,17 @@ async function printBrowserPermissionRequestMessage() {
|
|
|
1445
1456
|
printBrowserPermissionGuidance();
|
|
1446
1457
|
}
|
|
1447
1458
|
}
|
|
1448
|
-
async function outputPermissionRequestMessage(
|
|
1459
|
+
async function outputPermissionRequestMessage(connectorSlug, label, permission, agentId, callbackPrompt) {
|
|
1449
1460
|
const platformOrigin = await getPlatformOrigin();
|
|
1450
1461
|
const urlParams = new URLSearchParams({
|
|
1451
|
-
ref:
|
|
1462
|
+
ref: connectorSlug,
|
|
1452
1463
|
permission,
|
|
1453
1464
|
action: "allow"
|
|
1454
1465
|
});
|
|
1455
1466
|
addRequestedCallbackSearchParams(urlParams, callbackPrompt, agentId);
|
|
1456
1467
|
const pagePath = agentId ? `/agents/${agentId}/permissions` : "/agents";
|
|
1457
1468
|
const url = `${platformOrigin}${pagePath}?${urlParams.toString()}`;
|
|
1458
|
-
printSensitivePermissionGuidance(
|
|
1469
|
+
printSensitivePermissionGuidance(connectorSlug, permission);
|
|
1459
1470
|
printPermissionRequestMessage({
|
|
1460
1471
|
permission,
|
|
1461
1472
|
label,
|
|
@@ -1503,9 +1514,9 @@ Notes:
|
|
|
1503
1514
|
${callbackPromptNotes} - Permission requests update the current user's connector grants after confirmation`
|
|
1504
1515
|
).action(
|
|
1505
1516
|
withErrorHandler(
|
|
1506
|
-
async (
|
|
1517
|
+
async (connectorSlug, opts) => {
|
|
1507
1518
|
if (isBrowserPermissionTarget({
|
|
1508
|
-
|
|
1519
|
+
connectorSlug,
|
|
1509
1520
|
permission: opts.permission
|
|
1510
1521
|
})) {
|
|
1511
1522
|
if (opts.callbackPrompt !== void 0) {
|
|
@@ -1517,7 +1528,7 @@ ${callbackPromptNotes} - Permission requests update the current user's connecto
|
|
|
1517
1528
|
return;
|
|
1518
1529
|
}
|
|
1519
1530
|
if (isComputerUsePermissionTarget({
|
|
1520
|
-
|
|
1531
|
+
connectorSlug,
|
|
1521
1532
|
permission: opts.permission
|
|
1522
1533
|
})) {
|
|
1523
1534
|
if (opts.callbackPrompt !== void 0) {
|
|
@@ -1529,17 +1540,17 @@ ${callbackPromptNotes} - Permission requests update the current user's connecto
|
|
|
1529
1540
|
return;
|
|
1530
1541
|
}
|
|
1531
1542
|
const agentId = opts.agent ?? process.env.ZERO_AGENT_ID;
|
|
1532
|
-
const metadata = await getZeroConnectorCatalogPermissions(
|
|
1543
|
+
const metadata = await getZeroConnectorCatalogPermissions(connectorSlug);
|
|
1533
1544
|
if (!metadata) {
|
|
1534
|
-
throw new Error(`Unknown connector type: ${
|
|
1545
|
+
throw new Error(`Unknown connector type: ${connectorSlug}`);
|
|
1535
1546
|
}
|
|
1536
1547
|
if (opts.permission !== UNKNOWN_PERMISSION_GRANT && !findFirewallMetadataPermission(metadata, opts.permission)) {
|
|
1537
1548
|
throw new Error(
|
|
1538
|
-
`Unknown permission "${opts.permission}" for ${
|
|
1549
|
+
`Unknown permission "${opts.permission}" for ${connectorSlug}`
|
|
1539
1550
|
);
|
|
1540
1551
|
}
|
|
1541
1552
|
await outputPermissionRequestMessage(
|
|
1542
|
-
|
|
1553
|
+
connectorSlug,
|
|
1543
1554
|
metadata.label,
|
|
1544
1555
|
opts.permission,
|
|
1545
1556
|
agentId,
|
|
@@ -1554,4 +1565,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Manage a
|
|
|
1554
1565
|
export {
|
|
1555
1566
|
zeroConnectorCommand
|
|
1556
1567
|
};
|
|
1557
|
-
//# sourceMappingURL=connector-
|
|
1568
|
+
//# sourceMappingURL=connector-RUCYHNTI.js.map
|