@vm0/cli 9.274.10 → 9.274.12
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-FLAWLBHS.js → agent-SJPXFCY2.js} +7 -9
- package/{agent-FLAWLBHS.js.map → agent-SJPXFCY2.js.map} +1 -1
- package/{banking-YAVKAKZG.js → banking-JFQN7LVP.js} +4 -4
- package/{browser-TQCR4QO2.js → browser-Y45XHNLP.js} +4 -4
- package/{chat-FHJ2ISVP.js → chat-VGV4X4P6.js} +5 -5
- package/{chunk-55OOIO3Y.js → chunk-3C4OVVAG.js} +2 -2
- package/{chunk-SS35GZL5.js → chunk-FCA3SHQR.js} +15 -12
- package/chunk-FCA3SHQR.js.map +1 -0
- package/{chunk-2T64ACFV.js → chunk-GNT5CELD.js} +7 -21
- package/chunk-GNT5CELD.js.map +1 -0
- package/{chunk-T7KKAPXV.js → chunk-NU4QI6YS.js} +2 -2
- package/{chunk-U4SI4F5E.js → chunk-O4QQXFOU.js} +2 -2
- package/{chunk-WHGCJQBT.js → chunk-PTH6CS2U.js} +2 -2
- package/{chunk-EUZGV3TS.js → chunk-R6YSBKNW.js} +2 -2
- package/{chunk-TFNZKFHF.js → chunk-UMJS5E7A.js} +16 -4
- package/{chunk-TFNZKFHF.js.map → chunk-UMJS5E7A.js.map} +1 -1
- package/{chunk-Y7RLOQPB.js → chunk-UST46T62.js} +13 -5
- package/{chunk-Y7RLOQPB.js.map → chunk-UST46T62.js.map} +1 -1
- package/{computer-use-RQFEXMNN.js → computer-use-EX7NUHO6.js} +4 -4
- package/{connector-6X7OUT7E.js → connector-CJAQUQ2Y.js} +167 -46
- package/connector-CJAQUQ2Y.js.map +1 -0
- package/{credit-2EDFXE7L.js → credit-5E3T27Q5.js} +5 -5
- package/{developer-support-4VTZP26I.js → developer-support-A4QV7VNK.js} +4 -4
- package/{doctor-X6VYBUMF.js → doctor-QVV4Y2R7.js} +5 -5
- package/{feishu-ZAJ6DMM2.js → feishu-2JGDX7Y2.js} +4 -4
- package/{finance-CQCJPGEN.js → finance-H5IQQC6J.js} +4 -4
- package/{generate-IENVOMAL.js → generate-DV6USGFJ.js} +6 -6
- package/{github-PW7YAJWN.js → github-XLESF6RQ.js} +4 -4
- package/{goal-KRA6TDDS.js → goal-ZPC7PCZJ.js} +4 -4
- package/{host-LVFXSZXE.js → host-IFEXU6CT.js} +4 -4
- package/{logs-EVEAQBQS.js → logs-LWVYA5M5.js} +6 -6
- package/{mail-VIFM7OQC.js → mail-S4TY6S5F.js} +6 -6
- package/{maps-M3QEVTF7.js → maps-MF5TNF3I.js} +4 -4
- package/{model-JRYQATDZ.js → model-N7BJ6UJZ.js} +5 -5
- package/{model-provider-CECCURPK.js → model-provider-DOGJE3JW.js} +5 -5
- package/{org-HRQLRSLW.js → org-FY4AJSGQ.js} +4 -4
- package/package.json +1 -1
- package/{people-search-HCJ57TUJ.js → people-search-WOZJFEK5.js} +4 -4
- package/{phone-I34UAINK.js → phone-XHAJ2AES.js} +4 -4
- package/{preference-KUNORDNU.js → preference-R5UX5KBL.js} +4 -4
- package/{recognize-GP5GEFH2.js → recognize-BIGJNW5H.js} +4 -4
- package/{resource-PDE7V6KO.js → resource-O42P5MLK.js} +4 -4
- package/{scrape-GLPSOR2T.js → scrape-K4T4EMPC.js} +4 -4
- package/{search-OJFN36GD.js → search-YKKUZUGO.js} +6 -6
- package/{secret-JNBSMTLG.js → secret-CN4PPKFG.js} +4 -4
- package/{slack-EWNDIJ6E.js → slack-2C32JESK.js} +4 -4
- package/{teams-OEF65MIB.js → teams-QAFZ4V7H.js} +4 -4
- package/{telegram-6S3DYPVD.js → telegram-L73T7GI2.js} +4 -4
- package/{upgrade-JTWU4NHS.js → upgrade-CCRFWNS2.js} +3 -3
- package/{variable-NCKBKGFF.js → variable-UK6VNJOX.js} +4 -4
- package/{video-A5CSCJUP.js → video-PTYXK3VC.js} +3 -3
- package/{weather-SQVSJWS6.js → weather-TMQGK6VE.js} +4 -4
- package/{web-XRD3IC4O.js → web-IQN3B5EF.js} +4 -4
- package/{web-search-DZYEO7UD.js → web-search-CQOCUSUM.js} +4 -4
- package/{whoami-BP4VAGA7.js → whoami-ZITONHAH.js} +7 -9
- package/{whoami-BP4VAGA7.js.map → whoami-ZITONHAH.js.map} +1 -1
- package/{workflow-2ZO3HLD6.js → workflow-G474Q6PL.js} +5 -5
- package/zero.js +44 -44
- package/chunk-2T64ACFV.js.map +0 -1
- package/chunk-SS35GZL5.js.map +0 -1
- package/chunk-TAY6RIUI.js +0 -22
- package/chunk-TAY6RIUI.js.map +0 -1
- package/connector-6X7OUT7E.js.map +0 -1
- /package/{banking-YAVKAKZG.js.map → banking-JFQN7LVP.js.map} +0 -0
- /package/{browser-TQCR4QO2.js.map → browser-Y45XHNLP.js.map} +0 -0
- /package/{chat-FHJ2ISVP.js.map → chat-VGV4X4P6.js.map} +0 -0
- /package/{chunk-55OOIO3Y.js.map → chunk-3C4OVVAG.js.map} +0 -0
- /package/{chunk-T7KKAPXV.js.map → chunk-NU4QI6YS.js.map} +0 -0
- /package/{chunk-U4SI4F5E.js.map → chunk-O4QQXFOU.js.map} +0 -0
- /package/{chunk-WHGCJQBT.js.map → chunk-PTH6CS2U.js.map} +0 -0
- /package/{chunk-EUZGV3TS.js.map → chunk-R6YSBKNW.js.map} +0 -0
- /package/{computer-use-RQFEXMNN.js.map → computer-use-EX7NUHO6.js.map} +0 -0
- /package/{credit-2EDFXE7L.js.map → credit-5E3T27Q5.js.map} +0 -0
- /package/{developer-support-4VTZP26I.js.map → developer-support-A4QV7VNK.js.map} +0 -0
- /package/{doctor-X6VYBUMF.js.map → doctor-QVV4Y2R7.js.map} +0 -0
- /package/{feishu-ZAJ6DMM2.js.map → feishu-2JGDX7Y2.js.map} +0 -0
- /package/{finance-CQCJPGEN.js.map → finance-H5IQQC6J.js.map} +0 -0
- /package/{generate-IENVOMAL.js.map → generate-DV6USGFJ.js.map} +0 -0
- /package/{github-PW7YAJWN.js.map → github-XLESF6RQ.js.map} +0 -0
- /package/{goal-KRA6TDDS.js.map → goal-ZPC7PCZJ.js.map} +0 -0
- /package/{host-LVFXSZXE.js.map → host-IFEXU6CT.js.map} +0 -0
- /package/{logs-EVEAQBQS.js.map → logs-LWVYA5M5.js.map} +0 -0
- /package/{mail-VIFM7OQC.js.map → mail-S4TY6S5F.js.map} +0 -0
- /package/{maps-M3QEVTF7.js.map → maps-MF5TNF3I.js.map} +0 -0
- /package/{model-JRYQATDZ.js.map → model-N7BJ6UJZ.js.map} +0 -0
- /package/{model-provider-CECCURPK.js.map → model-provider-DOGJE3JW.js.map} +0 -0
- /package/{org-HRQLRSLW.js.map → org-FY4AJSGQ.js.map} +0 -0
- /package/{people-search-HCJ57TUJ.js.map → people-search-WOZJFEK5.js.map} +0 -0
- /package/{phone-I34UAINK.js.map → phone-XHAJ2AES.js.map} +0 -0
- /package/{preference-KUNORDNU.js.map → preference-R5UX5KBL.js.map} +0 -0
- /package/{recognize-GP5GEFH2.js.map → recognize-BIGJNW5H.js.map} +0 -0
- /package/{resource-PDE7V6KO.js.map → resource-O42P5MLK.js.map} +0 -0
- /package/{scrape-GLPSOR2T.js.map → scrape-K4T4EMPC.js.map} +0 -0
- /package/{search-OJFN36GD.js.map → search-YKKUZUGO.js.map} +0 -0
- /package/{secret-JNBSMTLG.js.map → secret-CN4PPKFG.js.map} +0 -0
- /package/{slack-EWNDIJ6E.js.map → slack-2C32JESK.js.map} +0 -0
- /package/{teams-OEF65MIB.js.map → teams-QAFZ4V7H.js.map} +0 -0
- /package/{telegram-6S3DYPVD.js.map → telegram-L73T7GI2.js.map} +0 -0
- /package/{upgrade-JTWU4NHS.js.map → upgrade-CCRFWNS2.js.map} +0 -0
- /package/{variable-NCKBKGFF.js.map → variable-UK6VNJOX.js.map} +0 -0
- /package/{video-A5CSCJUP.js.map → video-PTYXK3VC.js.map} +0 -0
- /package/{weather-SQVSJWS6.js.map → weather-TMQGK6VE.js.map} +0 -0
- /package/{web-XRD3IC4O.js.map → web-IQN3B5EF.js.map} +0 -0
- /package/{web-search-DZYEO7UD.js.map → web-search-CQOCUSUM.js.map} +0 -0
- /package/{workflow-2ZO3HLD6.js.map → workflow-G474Q6PL.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-UST46T62.js";
|
|
16
|
+
import "./chunk-NU4QI6YS.js";
|
|
17
17
|
import {
|
|
18
18
|
ApiRequestError,
|
|
19
19
|
withErrorHandler
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-R6YSBKNW.js";
|
|
21
21
|
import "./chunk-KLI6K4VO.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-EX7NUHO6.js.map
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __createRequire } from "node:module";
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
|
-
import {
|
|
5
|
-
hasConnectorFirewallMetadataPermission
|
|
6
|
-
} from "./chunk-SS35GZL5.js";
|
|
7
4
|
import {
|
|
8
5
|
CALLBACK_PROMPT_PLACEHOLDER,
|
|
9
6
|
addRequestedCallbackSearchParams,
|
|
@@ -18,7 +15,7 @@ import {
|
|
|
18
15
|
resolveConnectorDiscoveryAgentContext,
|
|
19
16
|
resolveManualGrantAuthMethod,
|
|
20
17
|
searchConnectorCatalog
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-PTH6CS2U.js";
|
|
22
19
|
import {
|
|
23
20
|
UNKNOWN_PERMISSION_GRANT,
|
|
24
21
|
addZeroAgentCustomConnector,
|
|
@@ -34,26 +31,25 @@ import {
|
|
|
34
31
|
getZeroAgentCustomConnectors,
|
|
35
32
|
getZeroAgentUserConnectors,
|
|
36
33
|
getZeroConnector,
|
|
37
|
-
getZeroConnectorCatalogPermissions,
|
|
38
34
|
getZeroCustomConnector,
|
|
39
35
|
listZeroConnectorCatalogStatus,
|
|
40
36
|
listZeroCustomConnectors,
|
|
41
37
|
setZeroCustomConnectorValues,
|
|
42
38
|
startZeroCustomConnectorOAuth2,
|
|
43
39
|
updateCustomConnectorBodySchema
|
|
44
|
-
} from "./chunk-
|
|
45
|
-
import "./chunk-
|
|
40
|
+
} from "./chunk-UST46T62.js";
|
|
41
|
+
import "./chunk-NU4QI6YS.js";
|
|
46
42
|
import {
|
|
47
43
|
getPlatformOrigin,
|
|
48
44
|
toPlatformUrl
|
|
49
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-3C4OVVAG.js";
|
|
50
46
|
import "./chunk-IPJJ6SPP.js";
|
|
51
47
|
import {
|
|
52
48
|
ApiRequestError,
|
|
53
49
|
getApiUrl,
|
|
54
50
|
source_default,
|
|
55
51
|
withErrorHandler
|
|
56
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-R6YSBKNW.js";
|
|
57
53
|
import {
|
|
58
54
|
decodeZeroTokenPayload
|
|
59
55
|
} from "./chunk-KLI6K4VO.js";
|
|
@@ -171,15 +167,26 @@ function validateCheckConnectorOptions(opts, command) {
|
|
|
171
167
|
);
|
|
172
168
|
}
|
|
173
169
|
}
|
|
170
|
+
function buildConnectorUrlDiagnosticRequest(args) {
|
|
171
|
+
if (rawUrlAuthorityHasUserinfo(args.url)) {
|
|
172
|
+
throw unsafeInputError("invalid-url");
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
mode: "url",
|
|
176
|
+
method: args.method.toUpperCase(),
|
|
177
|
+
url: stripUrlQueryAndFragment(args.url),
|
|
178
|
+
...args.connectorSlug !== void 0 ? { connectorSlug: args.connectorSlug } : {},
|
|
179
|
+
...args.environmentName !== void 0 ? { environmentName: args.environmentName } : {}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
174
182
|
function buildDiagnosticRequest(opts, method) {
|
|
175
183
|
if (opts.url !== void 0) {
|
|
176
|
-
return {
|
|
177
|
-
mode: "url",
|
|
184
|
+
return buildConnectorUrlDiagnosticRequest({
|
|
178
185
|
method,
|
|
179
|
-
url:
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
};
|
|
186
|
+
url: opts.url,
|
|
187
|
+
connectorSlug: opts.connector,
|
|
188
|
+
environmentName: opts.envName
|
|
189
|
+
});
|
|
183
190
|
}
|
|
184
191
|
return {
|
|
185
192
|
mode: "environment",
|
|
@@ -267,7 +274,7 @@ function environmentNotUsedError(request, result) {
|
|
|
267
274
|
`${environmentName} is not used by the matched API route. Expected one of: ${result.environmentNames.join(", ") || "none"}. Remove --env-name to use the matched route metadata.`
|
|
268
275
|
);
|
|
269
276
|
}
|
|
270
|
-
function
|
|
277
|
+
function resolveConnectorCheckDiagnostic(request, result) {
|
|
271
278
|
switch (result.outcome) {
|
|
272
279
|
case "resolved":
|
|
273
280
|
return result;
|
|
@@ -517,7 +524,7 @@ function printUnavailablePolicy(policy) {
|
|
|
517
524
|
return;
|
|
518
525
|
}
|
|
519
526
|
}
|
|
520
|
-
function printNamedPolicyResult(connectorSlug, permission, policy, agentId) {
|
|
527
|
+
function printNamedPolicyResult(connectorSlug, permission, policy, agentId, request) {
|
|
521
528
|
switch (policy.outcome) {
|
|
522
529
|
case "allow": {
|
|
523
530
|
switch (policy.basis) {
|
|
@@ -552,7 +559,8 @@ function printNamedPolicyResult(connectorSlug, permission, policy, agentId) {
|
|
|
552
559
|
connectorSlug,
|
|
553
560
|
permission,
|
|
554
561
|
agentId,
|
|
555
|
-
"To request this permission, run"
|
|
562
|
+
"To request this permission, run",
|
|
563
|
+
request
|
|
556
564
|
);
|
|
557
565
|
return;
|
|
558
566
|
case "ask":
|
|
@@ -563,7 +571,8 @@ function printNamedPolicyResult(connectorSlug, permission, policy, agentId) {
|
|
|
563
571
|
connectorSlug,
|
|
564
572
|
permission,
|
|
565
573
|
agentId,
|
|
566
|
-
"To request this permission, run"
|
|
574
|
+
"To request this permission, run",
|
|
575
|
+
request
|
|
567
576
|
);
|
|
568
577
|
return;
|
|
569
578
|
case "unavailable":
|
|
@@ -571,11 +580,17 @@ function printNamedPolicyResult(connectorSlug, permission, policy, agentId) {
|
|
|
571
580
|
return;
|
|
572
581
|
}
|
|
573
582
|
}
|
|
574
|
-
function permissionRequestCommand(connectorSlug, permission) {
|
|
575
|
-
return `zero connector permission-request ${connectorSlug} --permission ${permission}`;
|
|
583
|
+
function permissionRequestCommand(connectorSlug, permission, request) {
|
|
584
|
+
return `zero connector permission-request ${shellQuoteArg(connectorSlug)} --permission ${shellQuoteArg(permission)} --url ${shellQuoteArg(request.url)} --method ${shellQuoteArg(request.method)}`;
|
|
576
585
|
}
|
|
577
|
-
function printPermissionRequestCommands(connectorSlug, permission, agentId, introduction) {
|
|
578
|
-
|
|
586
|
+
function printPermissionRequestCommands(connectorSlug, permission, agentId, introduction, request) {
|
|
587
|
+
if (request === void 0) {
|
|
588
|
+
console.log(
|
|
589
|
+
"Diagnose the failed request with zero connector check --url <FAILED_URL> --method <METHOD> before requesting this permission."
|
|
590
|
+
);
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
const command = permissionRequestCommand(connectorSlug, permission, request);
|
|
579
594
|
console.log(`${introduction}: ${command}`);
|
|
580
595
|
if (!currentChatSupportsActionCallback(agentId)) {
|
|
581
596
|
return;
|
|
@@ -586,7 +601,7 @@ function printPermissionRequestCommands(connectorSlug, permission, agentId, intr
|
|
|
586
601
|
);
|
|
587
602
|
console.log(`${command} --callback-prompt "${CALLBACK_PROMPT_PLACEHOLDER}"`);
|
|
588
603
|
}
|
|
589
|
-
function printUnknownEndpointPolicy(connectorSlug, policy, agentId) {
|
|
604
|
+
function printUnknownEndpointPolicy(connectorSlug, policy, agentId, request) {
|
|
590
605
|
switch (policy.outcome) {
|
|
591
606
|
case "allow":
|
|
592
607
|
console.log(
|
|
@@ -601,7 +616,8 @@ function printUnknownEndpointPolicy(connectorSlug, policy, agentId) {
|
|
|
601
616
|
connectorSlug,
|
|
602
617
|
"__unknown__",
|
|
603
618
|
agentId,
|
|
604
|
-
"To request access to unknown endpoints, run"
|
|
619
|
+
"To request access to unknown endpoints, run",
|
|
620
|
+
request
|
|
605
621
|
);
|
|
606
622
|
return;
|
|
607
623
|
case "ask":
|
|
@@ -612,7 +628,8 @@ function printUnknownEndpointPolicy(connectorSlug, policy, agentId) {
|
|
|
612
628
|
connectorSlug,
|
|
613
629
|
"__unknown__",
|
|
614
630
|
agentId,
|
|
615
|
-
"To request access to unknown endpoints, run"
|
|
631
|
+
"To request access to unknown endpoints, run",
|
|
632
|
+
request
|
|
616
633
|
);
|
|
617
634
|
return;
|
|
618
635
|
case "unavailable":
|
|
@@ -620,7 +637,7 @@ function printUnknownEndpointPolicy(connectorSlug, policy, agentId) {
|
|
|
620
637
|
return;
|
|
621
638
|
}
|
|
622
639
|
}
|
|
623
|
-
function printUrlPermissionDiagnostic(result, agentId) {
|
|
640
|
+
function printUrlPermissionDiagnostic(request, result, agentId) {
|
|
624
641
|
console.log("## Step 3: Permission policy check (auto-detected from URL)");
|
|
625
642
|
console.log("");
|
|
626
643
|
console.log(
|
|
@@ -639,7 +656,8 @@ function printUrlPermissionDiagnostic(result, agentId) {
|
|
|
639
656
|
result.connector.connectorSlug,
|
|
640
657
|
permission.name,
|
|
641
658
|
permission.policy,
|
|
642
|
-
agentId
|
|
659
|
+
agentId,
|
|
660
|
+
request
|
|
643
661
|
);
|
|
644
662
|
}
|
|
645
663
|
} else {
|
|
@@ -650,7 +668,8 @@ function printUrlPermissionDiagnostic(result, agentId) {
|
|
|
650
668
|
printUnknownEndpointPolicy(
|
|
651
669
|
result.connector.connectorSlug,
|
|
652
670
|
result.permission.policy,
|
|
653
|
-
agentId
|
|
671
|
+
agentId,
|
|
672
|
+
request
|
|
654
673
|
);
|
|
655
674
|
}
|
|
656
675
|
console.log("");
|
|
@@ -674,7 +693,8 @@ function printEnvironmentPermissionDiagnostic(result, permissionName, agentId) {
|
|
|
674
693
|
result.connector.connectorSlug,
|
|
675
694
|
permissionName,
|
|
676
695
|
result.permission,
|
|
677
|
-
agentId
|
|
696
|
+
agentId,
|
|
697
|
+
void 0
|
|
678
698
|
);
|
|
679
699
|
console.log("");
|
|
680
700
|
}
|
|
@@ -755,7 +775,7 @@ How connectors work:
|
|
|
755
775
|
const method = opts.method.toUpperCase();
|
|
756
776
|
const request = buildDiagnosticRequest(opts, method);
|
|
757
777
|
const diagnostic = await diagnoseZeroConnectorCheck(request);
|
|
758
|
-
const result =
|
|
778
|
+
const result = resolveConnectorCheckDiagnostic(request, diagnostic);
|
|
759
779
|
printDiagnosticSummary(request, result);
|
|
760
780
|
console.log("");
|
|
761
781
|
const platformUrl = toPlatformUrl(await getApiUrl());
|
|
@@ -783,7 +803,11 @@ How connectors work:
|
|
|
783
803
|
}
|
|
784
804
|
console.log("");
|
|
785
805
|
if (result.mode === "url") {
|
|
786
|
-
printUrlPermissionDiagnostic(
|
|
806
|
+
printUrlPermissionDiagnostic(
|
|
807
|
+
requireUrlRequest(request),
|
|
808
|
+
result,
|
|
809
|
+
ctx.agentId
|
|
810
|
+
);
|
|
787
811
|
} else {
|
|
788
812
|
printEnvironmentPermissionDiagnostic(
|
|
789
813
|
result,
|
|
@@ -1634,6 +1658,74 @@ function printBrowserPermissionGuidance() {
|
|
|
1634
1658
|
function permissionDescription(permission) {
|
|
1635
1659
|
return permission === UNKNOWN_PERMISSION_GRANT ? "unknown endpoints" : `the "${permission}" permission`;
|
|
1636
1660
|
}
|
|
1661
|
+
function permissionPolicyForDiagnostic(args) {
|
|
1662
|
+
if (args.result.mode !== "url") {
|
|
1663
|
+
throw new Error(
|
|
1664
|
+
"Connector diagnostic returned an environment result for a URL request."
|
|
1665
|
+
);
|
|
1666
|
+
}
|
|
1667
|
+
if (args.permission === UNKNOWN_PERMISSION_GRANT) {
|
|
1668
|
+
if (args.result.permission.kind === "unknown-endpoint") {
|
|
1669
|
+
return args.result.permission.policy;
|
|
1670
|
+
}
|
|
1671
|
+
throw permissionMismatchError({
|
|
1672
|
+
permission: args.permission,
|
|
1673
|
+
method: args.method,
|
|
1674
|
+
url: args.url,
|
|
1675
|
+
matchedPermissions: args.result.permission.permissions.map(
|
|
1676
|
+
(permission) => {
|
|
1677
|
+
return permission.name;
|
|
1678
|
+
}
|
|
1679
|
+
)
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1682
|
+
if (args.result.permission.kind === "unknown-endpoint") {
|
|
1683
|
+
throw permissionMismatchError({
|
|
1684
|
+
permission: args.permission,
|
|
1685
|
+
method: args.method,
|
|
1686
|
+
url: args.url,
|
|
1687
|
+
matchedPermissions: [UNKNOWN_PERMISSION_GRANT]
|
|
1688
|
+
});
|
|
1689
|
+
}
|
|
1690
|
+
const matchedPermission = args.result.permission.permissions.find(
|
|
1691
|
+
(permission) => {
|
|
1692
|
+
return permission.name === args.permission;
|
|
1693
|
+
}
|
|
1694
|
+
);
|
|
1695
|
+
if (matchedPermission === void 0) {
|
|
1696
|
+
throw permissionMismatchError({
|
|
1697
|
+
permission: args.permission,
|
|
1698
|
+
method: args.method,
|
|
1699
|
+
url: args.url,
|
|
1700
|
+
matchedPermissions: args.result.permission.permissions.map(
|
|
1701
|
+
(permission) => {
|
|
1702
|
+
return permission.name;
|
|
1703
|
+
}
|
|
1704
|
+
)
|
|
1705
|
+
});
|
|
1706
|
+
}
|
|
1707
|
+
return matchedPermission.policy;
|
|
1708
|
+
}
|
|
1709
|
+
function permissionMismatchError(args) {
|
|
1710
|
+
return new Error(
|
|
1711
|
+
`Permission "${args.permission}" does not match ${args.method} ${args.url}. The request maps to: ${args.matchedPermissions.join(", ")}. Use the exact permission-request command printed by zero connector check; provider OAuth scopes and missing_scope/needed values cannot be granted here.`
|
|
1712
|
+
);
|
|
1713
|
+
}
|
|
1714
|
+
function assertRequestablePolicy(args) {
|
|
1715
|
+
switch (args.policy.outcome) {
|
|
1716
|
+
case "deny":
|
|
1717
|
+
case "ask":
|
|
1718
|
+
return;
|
|
1719
|
+
case "allow":
|
|
1720
|
+
throw new Error(
|
|
1721
|
+
`${permissionDescription(args.permission)} is already allowed by Zero for ${args.method} ${args.url}. Provider authorization failures cannot be fixed with a Zero permission request.`
|
|
1722
|
+
);
|
|
1723
|
+
case "unavailable":
|
|
1724
|
+
throw new Error(
|
|
1725
|
+
`Zero permission policy is unavailable for ${args.method} ${args.url}. Retry zero connector check from an active run before requesting access.`
|
|
1726
|
+
);
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1637
1729
|
function printSensitivePermissionGuidance(connectorSlug, permission) {
|
|
1638
1730
|
if (connectorSlug === "slack" && permission === "chat:write") {
|
|
1639
1731
|
console.log("");
|
|
@@ -1764,7 +1856,7 @@ var callbackPromptAvailable = connectorActionCallbackAvailable();
|
|
|
1764
1856
|
if (!callbackPromptAvailable) {
|
|
1765
1857
|
callbackPromptOption.hideHelp();
|
|
1766
1858
|
}
|
|
1767
|
-
var callbackPromptExample = callbackPromptAvailable ? ' zero connector permission-request github --permission contents:write --callback-prompt "Re-check the permission, then continue the previous task"\n' : "";
|
|
1859
|
+
var callbackPromptExample = callbackPromptAvailable ? ' zero connector permission-request github --permission contents:write --url https://api.github.com/repos/vm0-ai/vm0 --method POST --callback-prompt "Re-check the permission, then continue the previous task"\n' : "";
|
|
1768
1860
|
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" : "";
|
|
1769
1861
|
var permissionRequestCommand2 = new Command().name("permission-request").description("Request permission to use a connector capability").argument("<slug>", "The connector slug (e.g. github)").addOption(
|
|
1770
1862
|
new Option(
|
|
@@ -1776,18 +1868,29 @@ var permissionRequestCommand2 = new Command().name("permission-request").descrip
|
|
|
1776
1868
|
"--agent <id>",
|
|
1777
1869
|
"Agent ID whose permission page should be opened (defaults to ZERO_AGENT_ID)"
|
|
1778
1870
|
)
|
|
1871
|
+
).addOption(
|
|
1872
|
+
new Option(
|
|
1873
|
+
"--url <URL>",
|
|
1874
|
+
"The failed request URL reported to zero connector check"
|
|
1875
|
+
)
|
|
1876
|
+
).addOption(
|
|
1877
|
+
new Option("--method <METHOD>", "The failed request HTTP method").default(
|
|
1878
|
+
"GET"
|
|
1879
|
+
)
|
|
1779
1880
|
).addOption(callbackPromptOption).addHelpText(
|
|
1780
1881
|
"after",
|
|
1781
1882
|
`
|
|
1782
1883
|
Examples:
|
|
1783
|
-
zero connector permission-request github --permission contents:read
|
|
1784
|
-
${callbackPromptExample} zero connector permission-request gmail --permission messages.write --agent <agent-id>
|
|
1785
|
-
zero connector permission-request cloudflare --permission __unknown__
|
|
1884
|
+
zero connector permission-request github --permission contents:read --url https://api.github.com/repos/vm0-ai/vm0 --method GET
|
|
1885
|
+
${callbackPromptExample} zero connector permission-request gmail --permission messages.write --url https://gmail.googleapis.com/gmail/v1/users/me/messages --method POST --agent <agent-id>
|
|
1886
|
+
zero connector permission-request cloudflare --permission __unknown__ --url https://api.cloudflare.com/client/v4/example --method POST
|
|
1786
1887
|
zero connector permission-request computer-use --permission computer-use:write
|
|
1787
1888
|
zero connector permission-request browser --permission browser:write
|
|
1788
1889
|
|
|
1789
1890
|
Notes:
|
|
1790
|
-
-
|
|
1891
|
+
- First run zero connector check --url <FAILED_URL> --method <METHOD>
|
|
1892
|
+
- Use the exact permission-request command printed by connector check
|
|
1893
|
+
- A platform URL is output only when that request maps to a denied or approval-required permission
|
|
1791
1894
|
- Use --permission __unknown__ to request access to unknown endpoints
|
|
1792
1895
|
- Use --agent to request a permission for another agent; defaults to ZERO_AGENT_ID
|
|
1793
1896
|
- The user chooses the permission duration on the confirmation page
|
|
@@ -1820,18 +1923,36 @@ ${callbackPromptNotes} - Permission requests update the current user's connecto
|
|
|
1820
1923
|
return;
|
|
1821
1924
|
}
|
|
1822
1925
|
const agentId = opts.agent ?? process.env.ZERO_AGENT_ID;
|
|
1823
|
-
|
|
1824
|
-
if (!metadata) {
|
|
1825
|
-
throw new Error(`Unknown connector slug: ${connectorSlug}`);
|
|
1826
|
-
}
|
|
1827
|
-
if (opts.permission !== UNKNOWN_PERMISSION_GRANT && !hasConnectorFirewallMetadataPermission(metadata, opts.permission)) {
|
|
1926
|
+
if (opts.url === void 0) {
|
|
1828
1927
|
throw new Error(
|
|
1829
|
-
|
|
1928
|
+
"--url is required for connector permission requests. Run zero connector check --url <FAILED_URL> --method <METHOD> and use the permission-request command it prints."
|
|
1830
1929
|
);
|
|
1831
1930
|
}
|
|
1931
|
+
const diagnosticRequest = buildConnectorUrlDiagnosticRequest({
|
|
1932
|
+
url: opts.url,
|
|
1933
|
+
method: opts.method,
|
|
1934
|
+
connectorSlug
|
|
1935
|
+
});
|
|
1936
|
+
const diagnostic = await diagnoseZeroConnectorCheck(diagnosticRequest);
|
|
1937
|
+
const result = resolveConnectorCheckDiagnostic(
|
|
1938
|
+
diagnosticRequest,
|
|
1939
|
+
diagnostic
|
|
1940
|
+
);
|
|
1941
|
+
const policy = permissionPolicyForDiagnostic({
|
|
1942
|
+
result,
|
|
1943
|
+
permission: opts.permission,
|
|
1944
|
+
method: diagnosticRequest.method,
|
|
1945
|
+
url: diagnosticRequest.url
|
|
1946
|
+
});
|
|
1947
|
+
assertRequestablePolicy({
|
|
1948
|
+
policy,
|
|
1949
|
+
permission: opts.permission,
|
|
1950
|
+
method: diagnosticRequest.method,
|
|
1951
|
+
url: diagnosticRequest.url
|
|
1952
|
+
});
|
|
1832
1953
|
await outputPermissionRequestMessage(
|
|
1833
|
-
connectorSlug,
|
|
1834
|
-
|
|
1954
|
+
result.connector.connectorSlug,
|
|
1955
|
+
result.connector.label,
|
|
1835
1956
|
opts.permission,
|
|
1836
1957
|
agentId,
|
|
1837
1958
|
opts.callbackPrompt
|
|
@@ -1845,4 +1966,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Manage a
|
|
|
1845
1966
|
export {
|
|
1846
1967
|
zeroConnectorCommand
|
|
1847
1968
|
};
|
|
1848
|
-
//# sourceMappingURL=connector-
|
|
1969
|
+
//# sourceMappingURL=connector-CJAQUQ2Y.js.map
|