@vm0/cli 9.267.0 → 9.269.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/{agent-OMZZFFOX.js → agent-VK7PFHFX.js} +11 -11
  2. package/agent-VK7PFHFX.js.map +1 -0
  3. package/{banking-BVCIXQ5N.js → banking-GD4YJ7QA.js} +4 -4
  4. package/{browser-MZYVERXT.js → browser-T44LR4CD.js} +4 -4
  5. package/{chat-XAIEMJJJ.js → chat-GC5PXDMC.js} +5 -5
  6. package/{chunk-PYNAJYFD.js → chunk-3ZIEOU43.js} +46 -38
  7. package/chunk-3ZIEOU43.js.map +1 -0
  8. package/{chunk-TNDBFUFP.js → chunk-4WDDMKO6.js} +1 -6
  9. package/chunk-4WDDMKO6.js.map +1 -0
  10. package/{chunk-RU2TI2U2.js → chunk-5WCJ4YK2.js} +2 -2
  11. package/{chunk-LYI45KHY.js → chunk-73DZG6Q7.js} +138 -57
  12. package/chunk-73DZG6Q7.js.map +1 -0
  13. package/{chunk-3AYDKKKU.js → chunk-C6ZDYQZB.js} +2 -2
  14. package/{chunk-GU4ZJECC.js → chunk-HWHNQPKS.js} +92 -6
  15. package/chunk-HWHNQPKS.js.map +1 -0
  16. package/{chunk-FLF6ZMKJ.js → chunk-NGXH4WMD.js} +29 -34
  17. package/chunk-NGXH4WMD.js.map +1 -0
  18. package/chunk-PNFIYMDN.js +22 -0
  19. package/chunk-PNFIYMDN.js.map +1 -0
  20. package/{chunk-5TMLTATP.js → chunk-Q4PS674D.js} +2 -2
  21. package/{chunk-GTGI6NWJ.js → chunk-X24DXUXC.js} +2 -2
  22. package/{computer-use-OMUCKEH4.js → computer-use-K56KV7VB.js} +4 -4
  23. package/{connector-DZ5RLANA.js → connector-QQWAHPS4.js} +119 -59
  24. package/connector-QQWAHPS4.js.map +1 -0
  25. package/{credit-ZTZPYLHJ.js → credit-ROARDLCA.js} +5 -5
  26. package/{developer-support-VWUHT7BY.js → developer-support-UDMUZCE3.js} +4 -4
  27. package/{doctor-WTSDGI5C.js → doctor-RGYXFZHU.js} +5 -5
  28. package/{feishu-CWVMYPJJ.js → feishu-OBNUWOA2.js} +4 -4
  29. package/{finance-67XW3BDK.js → finance-F6O6Y6PV.js} +4 -4
  30. package/{generate-5BFGTIYQ.js → generate-MUXDMLOJ.js} +10 -10
  31. package/generate-MUXDMLOJ.js.map +1 -0
  32. package/{github-D2WOKACM.js → github-2C7AOKI4.js} +4 -4
  33. package/{goal-PB5PPIKK.js → goal-W3LM6XZV.js} +4 -4
  34. package/{host-SKUS46EY.js → host-P7D2E62D.js} +4 -4
  35. package/{logs-UVEMZZGC.js → logs-BAHOQLAE.js} +6 -6
  36. package/{mail-NIXLTFM2.js → mail-VKEHKTZI.js} +6 -6
  37. package/{maps-O4EJGJGI.js → maps-NZTI34NQ.js} +4 -4
  38. package/{model-CYLLV5SU.js → model-IR6ZDEE2.js} +5 -5
  39. package/{model-provider-VDFCPVGR.js → model-provider-DFX4CPKT.js} +5 -5
  40. package/{org-EKZ5TZ6C.js → org-XVM6CZTT.js} +4 -4
  41. package/package.json +1 -1
  42. package/{people-search-SXKWISQC.js → people-search-IV3H5OUA.js} +4 -4
  43. package/{phone-KQUWXL2F.js → phone-HUY6BIZX.js} +4 -4
  44. package/{preference-ZUT6YDYU.js → preference-HMVK2L5M.js} +4 -4
  45. package/{resource-WLJIYIAG.js → resource-5UIGWAZD.js} +4 -4
  46. package/{scrape-RBI7L7OI.js → scrape-OYG3NWYJ.js} +4 -4
  47. package/{search-N4HHOYG3.js → search-NRTKXEOM.js} +6 -6
  48. package/{secret-M3JN4ILK.js → secret-3AIMSGWX.js} +4 -4
  49. package/{slack-RKIRNUMX.js → slack-SBHKIKCI.js} +4 -4
  50. package/{teams-EOQH4NSD.js → teams-Y7RWSTVP.js} +4 -4
  51. package/{telegram-TKIUQBRV.js → telegram-MVCNV2KP.js} +4 -4
  52. package/{upgrade-Z46EJ6LM.js → upgrade-2SNSYI66.js} +3 -3
  53. package/{variable-4MKDDCMH.js → variable-ZUQ7J3X2.js} +4 -4
  54. package/{video-L5EPZEBJ.js → video-TDGGCC4I.js} +3 -3
  55. package/{weather-WBTWM2L3.js → weather-CVL343M4.js} +4 -4
  56. package/{web-OI25YJCD.js → web-M5AW34U4.js} +4 -4
  57. package/{web-search-55JR4DFQ.js → web-search-C2BOORHI.js} +4 -4
  58. package/{whoami-5B24JEWY.js → whoami-TWCA5HMI.js} +13 -13
  59. package/whoami-TWCA5HMI.js.map +1 -0
  60. package/{workflow-F2DNCBSD.js → workflow-QAMRYA5T.js} +99 -8
  61. package/workflow-QAMRYA5T.js.map +1 -0
  62. package/zero.js +43 -43
  63. package/agent-OMZZFFOX.js.map +0 -1
  64. package/chunk-FLF6ZMKJ.js.map +0 -1
  65. package/chunk-GU4ZJECC.js.map +0 -1
  66. package/chunk-LYI45KHY.js.map +0 -1
  67. package/chunk-PYNAJYFD.js.map +0 -1
  68. package/chunk-TNDBFUFP.js.map +0 -1
  69. package/chunk-TX5E4N6E.js +0 -97
  70. package/chunk-TX5E4N6E.js.map +0 -1
  71. package/connector-DZ5RLANA.js.map +0 -1
  72. package/generate-5BFGTIYQ.js.map +0 -1
  73. package/whoami-5B24JEWY.js.map +0 -1
  74. package/workflow-F2DNCBSD.js.map +0 -1
  75. /package/{banking-BVCIXQ5N.js.map → banking-GD4YJ7QA.js.map} +0 -0
  76. /package/{browser-MZYVERXT.js.map → browser-T44LR4CD.js.map} +0 -0
  77. /package/{chat-XAIEMJJJ.js.map → chat-GC5PXDMC.js.map} +0 -0
  78. /package/{chunk-RU2TI2U2.js.map → chunk-5WCJ4YK2.js.map} +0 -0
  79. /package/{chunk-3AYDKKKU.js.map → chunk-C6ZDYQZB.js.map} +0 -0
  80. /package/{chunk-5TMLTATP.js.map → chunk-Q4PS674D.js.map} +0 -0
  81. /package/{chunk-GTGI6NWJ.js.map → chunk-X24DXUXC.js.map} +0 -0
  82. /package/{computer-use-OMUCKEH4.js.map → computer-use-K56KV7VB.js.map} +0 -0
  83. /package/{credit-ZTZPYLHJ.js.map → credit-ROARDLCA.js.map} +0 -0
  84. /package/{developer-support-VWUHT7BY.js.map → developer-support-UDMUZCE3.js.map} +0 -0
  85. /package/{doctor-WTSDGI5C.js.map → doctor-RGYXFZHU.js.map} +0 -0
  86. /package/{feishu-CWVMYPJJ.js.map → feishu-OBNUWOA2.js.map} +0 -0
  87. /package/{finance-67XW3BDK.js.map → finance-F6O6Y6PV.js.map} +0 -0
  88. /package/{github-D2WOKACM.js.map → github-2C7AOKI4.js.map} +0 -0
  89. /package/{goal-PB5PPIKK.js.map → goal-W3LM6XZV.js.map} +0 -0
  90. /package/{host-SKUS46EY.js.map → host-P7D2E62D.js.map} +0 -0
  91. /package/{logs-UVEMZZGC.js.map → logs-BAHOQLAE.js.map} +0 -0
  92. /package/{mail-NIXLTFM2.js.map → mail-VKEHKTZI.js.map} +0 -0
  93. /package/{maps-O4EJGJGI.js.map → maps-NZTI34NQ.js.map} +0 -0
  94. /package/{model-CYLLV5SU.js.map → model-IR6ZDEE2.js.map} +0 -0
  95. /package/{model-provider-VDFCPVGR.js.map → model-provider-DFX4CPKT.js.map} +0 -0
  96. /package/{org-EKZ5TZ6C.js.map → org-XVM6CZTT.js.map} +0 -0
  97. /package/{people-search-SXKWISQC.js.map → people-search-IV3H5OUA.js.map} +0 -0
  98. /package/{phone-KQUWXL2F.js.map → phone-HUY6BIZX.js.map} +0 -0
  99. /package/{preference-ZUT6YDYU.js.map → preference-HMVK2L5M.js.map} +0 -0
  100. /package/{resource-WLJIYIAG.js.map → resource-5UIGWAZD.js.map} +0 -0
  101. /package/{scrape-RBI7L7OI.js.map → scrape-OYG3NWYJ.js.map} +0 -0
  102. /package/{search-N4HHOYG3.js.map → search-NRTKXEOM.js.map} +0 -0
  103. /package/{secret-M3JN4ILK.js.map → secret-3AIMSGWX.js.map} +0 -0
  104. /package/{slack-RKIRNUMX.js.map → slack-SBHKIKCI.js.map} +0 -0
  105. /package/{teams-EOQH4NSD.js.map → teams-Y7RWSTVP.js.map} +0 -0
  106. /package/{telegram-TKIUQBRV.js.map → telegram-MVCNV2KP.js.map} +0 -0
  107. /package/{upgrade-Z46EJ6LM.js.map → upgrade-2SNSYI66.js.map} +0 -0
  108. /package/{variable-4MKDDCMH.js.map → variable-ZUQ7J3X2.js.map} +0 -0
  109. /package/{video-L5EPZEBJ.js.map → video-TDGGCC4I.js.map} +0 -0
  110. /package/{weather-WBTWM2L3.js.map → weather-CVL343M4.js.map} +0 -0
  111. /package/{web-OI25YJCD.js.map → web-M5AW34U4.js.map} +0 -0
  112. /package/{web-search-55JR4DFQ.js.map → web-search-C2BOORHI.js.map} +0 -0
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ source_default
6
+ } from "./chunk-Q4PS674D.js";
7
+ import {
8
+ init_esm_shims
9
+ } from "./chunk-GPYQ24DR.js";
10
+
11
+ // src/lib/utils/format-utils.ts
12
+ init_esm_shims();
13
+ function policyIcon(policy) {
14
+ if (policy === "allow") return source_default.green("\u2713");
15
+ if (policy === "ask") return source_default.yellow("?");
16
+ return source_default.dim("\u2717");
17
+ }
18
+
19
+ export {
20
+ policyIcon
21
+ };
22
+ //# sourceMappingURL=chunk-PNFIYMDN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils/format-utils.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport type { FirewallPolicyValue } from \"@vm0/connectors/firewall-types\";\n\nexport function policyIcon(policy: FirewallPolicyValue): string {\n if (policy === \"allow\") return chalk.green(\"✓\");\n if (policy === \"ask\") return chalk.yellow(\"?\");\n return chalk.dim(\"✗\");\n}\n"],"mappings":";;;;;;;;;;;AAAA;AAGO,SAAS,WAAW,QAAqC;AAC9D,MAAI,WAAW,QAAS,QAAO,eAAM,MAAM,QAAG;AAC9C,MAAI,WAAW,MAAO,QAAO,eAAM,OAAO,GAAG;AAC7C,SAAO,eAAM,IAAI,QAAG;AACtB;","names":[]}
@@ -15391,7 +15391,7 @@ function createCliClientHeaderInjector(options) {
15391
15391
  }
15392
15392
  var addDefaultCliClientHeaders = createCliClientHeaderInjector({
15393
15393
  clientVersion: addClientCapabilityToVersion(
15394
- "9.267.0",
15394
+ "9.269.0",
15395
15395
  CLIENT_CAPABILITY_CONNECTOR_SLUG_IDENTITIES
15396
15396
  )
15397
15397
  });
@@ -16784,4 +16784,4 @@ export {
16784
16784
  apiErrorSchema,
16785
16785
  withErrorHandler
16786
16786
  };
16787
- //# sourceMappingURL=chunk-5TMLTATP.js.map
16787
+ //# sourceMappingURL=chunk-Q4PS674D.js.map
@@ -6,7 +6,7 @@ import {
6
6
  getActiveToken,
7
7
  getBaseUrl,
8
8
  headersWithCliClientHeaders
9
- } from "./chunk-5TMLTATP.js";
9
+ } from "./chunk-Q4PS674D.js";
10
10
  import {
11
11
  init_esm_shims
12
12
  } from "./chunk-GPYQ24DR.js";
@@ -648,4 +648,4 @@ export {
648
648
  generateWebVideo,
649
649
  transcribeAudio
650
650
  };
651
- //# sourceMappingURL=chunk-GTGI6NWJ.js.map
651
+ //# sourceMappingURL=chunk-X24DXUXC.js.map
@@ -12,12 +12,12 @@ import {
12
12
  fetchComputerUseScreenshot,
13
13
  getComputerUseCommand,
14
14
  listComputerUseHosts
15
- } from "./chunk-LYI45KHY.js";
16
- import "./chunk-GTGI6NWJ.js";
15
+ } from "./chunk-73DZG6Q7.js";
16
+ import "./chunk-X24DXUXC.js";
17
17
  import {
18
18
  ApiRequestError,
19
19
  withErrorHandler
20
- } from "./chunk-5TMLTATP.js";
20
+ } from "./chunk-Q4PS674D.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-OMUCKEH4.js.map
973
+ //# sourceMappingURL=computer-use-K56KV7VB.js.map
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
- findFirewallMetadataPermission
6
- } from "./chunk-GU4ZJECC.js";
5
+ hasConnectorFirewallMetadataPermission
6
+ } from "./chunk-HWHNQPKS.js";
7
7
  import {
8
8
  CALLBACK_PROMPT_PLACEHOLDER,
9
9
  addRequestedCallbackSearchParams,
@@ -15,9 +15,10 @@ import {
15
15
  printCallbackActionUrlExample,
16
16
  printCallbackTurnInstruction,
17
17
  resolveAgentContext,
18
+ resolveConnectorDiscoveryAgentContext,
18
19
  resolveManualGrantAuthMethod,
19
- searchPublicConnectorCatalog
20
- } from "./chunk-PYNAJYFD.js";
20
+ searchConnectorCatalog
21
+ } from "./chunk-3ZIEOU43.js";
21
22
  import {
22
23
  UNKNOWN_PERMISSION_GRANT,
23
24
  connectZeroConnectorManualGrant,
@@ -33,19 +34,19 @@ import {
33
34
  getZeroCustomConnector,
34
35
  listZeroConnectorCatalogStatus,
35
36
  listZeroCustomConnectors
36
- } from "./chunk-LYI45KHY.js";
37
- import "./chunk-GTGI6NWJ.js";
37
+ } from "./chunk-73DZG6Q7.js";
38
+ import "./chunk-X24DXUXC.js";
38
39
  import {
39
40
  getPlatformOrigin,
40
41
  toPlatformUrl
41
- } from "./chunk-RU2TI2U2.js";
42
+ } from "./chunk-5WCJ4YK2.js";
42
43
  import "./chunk-MA22KQYU.js";
43
44
  import {
44
45
  ApiRequestError,
45
46
  getApiUrl,
46
47
  source_default,
47
48
  withErrorHandler
48
- } from "./chunk-5TMLTATP.js";
49
+ } from "./chunk-Q4PS674D.js";
49
50
  import "./chunk-MD3YWUKO.js";
50
51
  import {
51
52
  Command,
@@ -167,7 +168,7 @@ function buildDiagnosticRequest(opts, method) {
167
168
  mode: "url",
168
169
  method,
169
170
  url: stripUrlQueryAndFragment(opts.url),
170
- ...opts.connector !== void 0 ? { connectorRef: opts.connector } : {},
171
+ ...opts.connector !== void 0 ? { connectorSlug: opts.connector } : {},
171
172
  ...opts.envName !== void 0 ? { environmentName: opts.envName } : {}
172
173
  };
173
174
  }
@@ -211,24 +212,24 @@ function unsafeInputError(reason) {
211
212
  }
212
213
  function ambiguousConnectorError(request, result) {
213
214
  const candidates = [...result.candidates].sort((left, right) => {
214
- return left.connectorRef.localeCompare(right.connectorRef);
215
+ return left.connectorSlug.localeCompare(right.connectorSlug);
215
216
  });
216
217
  const commands = candidates.map((candidate) => {
217
- return ` ${connectorSelectionCommand(request.url, request.method, candidate.connectorRef)}`;
218
+ return ` ${connectorSelectionCommand(request.url, request.method, candidate.connectorSlug)}`;
218
219
  });
219
220
  return new Error(
220
221
  `Multiple connectors match ${request.method} ${request.url}: ${candidates.map((candidate) => {
221
- return candidate.connectorRef;
222
+ return candidate.connectorSlug;
222
223
  }).join(", ")}
223
224
  Select one explicitly:
224
225
  ${commands.join("\n")}`
225
226
  );
226
227
  }
227
228
  function unknownConnectorError(request) {
228
- if (request.mode === "url" && request.connectorRef !== void 0) {
229
+ if (request.mode === "url" && request.connectorSlug !== void 0) {
229
230
  return new Error(
230
- `Unknown connector type: ${request.connectorRef}
231
- Run: zero connector search ${shellQuoteArg(request.connectorRef)}`
231
+ `Unknown connector slug: ${request.connectorSlug}
232
+ Run: zero connector search ${shellQuoteArg(request.connectorSlug)}`
232
233
  );
233
234
  }
234
235
  return new Error("The requested connector is unknown.");
@@ -239,10 +240,10 @@ function noMatchError(result) {
239
240
  );
240
241
  }
241
242
  function connectorMismatchError(request, result) {
242
- const requestedSlug = request.connectorRef ?? "the requested connector";
243
+ const requestedSlug = request.connectorSlug ?? "the requested connector";
243
244
  return new Error(
244
- `Connector ${requestedSlug} does not own ${request.method} ${request.url}; the matching connector is ${result.connector.connectorRef}
245
- Run: ${connectorSelectionCommand(request.url, request.method, result.connector.connectorRef)}`
245
+ `Connector ${requestedSlug} does not own ${request.method} ${request.url}; the matching connector is ${result.connector.connectorSlug}
246
+ Run: ${connectorSelectionCommand(request.url, request.method, result.connector.connectorSlug)}`
246
247
  );
247
248
  }
248
249
  function environmentNotOwnedError(request, result) {
@@ -281,7 +282,7 @@ function resolvedDiagnostic(request, result) {
281
282
  throw environmentNotUsedError(request, result);
282
283
  case "unresolved-dynamic-base":
283
284
  throw new Error(
284
- `No authoritative ${result.connector.label} base URL is available for this diagnostic. Verify the ${result.connector.connectorRef} connector configuration for the affected context and retry.`
285
+ `No authoritative ${result.connector.label} base URL is available for this diagnostic. Verify the ${result.connector.connectorSlug} connector configuration for the affected context and retry.`
285
286
  );
286
287
  case "run-context-unavailable":
287
288
  throw new Error(
@@ -293,7 +294,7 @@ function printDiagnosticSummary(request, result) {
293
294
  if (result.mode === "url") {
294
295
  const urlRequest = requireUrlRequest(request);
295
296
  console.log(
296
- `URL ${urlRequest.url} matches the ${result.connector.label} connector (type: ${result.connector.connectorRef}).`
297
+ `URL ${urlRequest.url} matches the ${result.connector.label} connector (slug: ${result.connector.connectorSlug}).`
297
298
  );
298
299
  console.log(` Matched base URL: ${result.base}`);
299
300
  console.log(` Relative path: ${result.relativePath}`);
@@ -307,7 +308,7 @@ function printDiagnosticSummary(request, result) {
307
308
  return;
308
309
  }
309
310
  console.log(
310
- `${result.environmentName} is managed by the ${result.connector.label} connector (type: ${result.connector.connectorRef}).`
311
+ `${result.environmentName} is managed by the ${result.connector.label} connector (slug: ${result.connector.connectorSlug}).`
311
312
  );
312
313
  }
313
314
  function diagnosticEnvironmentNames(result) {
@@ -626,7 +627,7 @@ function printUrlPermissionDiagnostic(result, agentId) {
626
627
  console.log("");
627
628
  for (const permission of result.permission.permissions) {
628
629
  printNamedPolicyResult(
629
- result.connector.connectorRef,
630
+ result.connector.connectorSlug,
630
631
  permission.name,
631
632
  permission.policy,
632
633
  agentId
@@ -638,7 +639,7 @@ function printUrlPermissionDiagnostic(result, agentId) {
638
639
  );
639
640
  console.log("");
640
641
  printUnknownEndpointPolicy(
641
- result.connector.connectorRef,
642
+ result.connector.connectorSlug,
642
643
  result.permission.policy,
643
644
  agentId
644
645
  );
@@ -661,7 +662,7 @@ function printEnvironmentPermissionDiagnostic(result, permissionName, agentId) {
661
662
  );
662
663
  console.log("");
663
664
  printNamedPolicyResult(
664
- result.connector.connectorRef,
665
+ result.connector.connectorSlug,
665
666
  permissionName,
666
667
  result.permission,
667
668
  agentId
@@ -704,9 +705,8 @@ var checkConnectorCommand = new Command().name("check").description(
704
705
  "A full URL to diagnose \u2014 matches connector ownership, route environment names, and permission (e.g. https://api.github.com/repos/owner/repo)"
705
706
  )
706
707
  ).addOption(
707
- // TODO(#23619): Rename this stable CLI option value label in the CLI rollout.
708
708
  new Option(
709
- "--connector <type>",
709
+ "--connector <slug>",
710
710
  "Select the connector when multiple connectors own the same URL route"
711
711
  )
712
712
  ).addOption(
@@ -752,7 +752,7 @@ How connectors work:
752
752
  const platformUrl = toPlatformUrl(await getApiUrl());
753
753
  const ctx = {
754
754
  environmentNames: diagnosticEnvironmentNames(result),
755
- connectorSlug: result.connector.connectorRef,
755
+ connectorSlug: result.connector.connectorSlug,
756
756
  label: result.connector.label,
757
757
  connectorAvailable: result.connector.visibility === "available",
758
758
  credentialResolution: result.connector.credentialResolution,
@@ -817,7 +817,7 @@ function parseConnectorValues(rawValues) {
817
817
  }
818
818
  return values;
819
819
  }
820
- var connectCommand = new Command().name("connect").description("Connect a connector with manual grant values").argument("<type>", "Connector type (e.g., zendesk)").option("--auth-method <method>", "Connector auth method to use").option(
820
+ var connectCommand = new Command().name("connect").description("Connect a connector with manual grant values").argument("<slug>", "Connector slug (e.g., zendesk)").option("--auth-method <method>", "Connector auth method to use").option(
821
821
  "--value <name=value>",
822
822
  "Connector field value; repeat for multiple fields",
823
823
  collectValue,
@@ -842,7 +842,7 @@ var connectCommand = new Command().name("connect").description("Connect a connec
842
842
  options.authMethod
843
843
  );
844
844
  const connector = await connectZeroConnectorManualGrant(
845
- connectorMetadata.connectorRef,
845
+ connectorMetadata.slug,
846
846
  authMethod.id,
847
847
  values
848
848
  );
@@ -851,9 +851,9 @@ var connectCommand = new Command().name("connect").description("Connect a connec
851
851
  return;
852
852
  }
853
853
  console.log(source_default.green(`\u2713 ${connectorMetadata.label} connected`));
854
- console.log(source_default.dim(` Type: ${connector.type}`));
854
+ console.log(source_default.dim(` Slug: ${connector.slug}`));
855
855
  console.log(source_default.dim(` Auth Method: ${connector.authMethod}`));
856
- console.log(source_default.dim(` Run: zero connector status ${connector.type}`));
856
+ console.log(source_default.dim(` Run: zero connector status ${connector.slug}`));
857
857
  })
858
858
  );
859
859
 
@@ -893,15 +893,75 @@ function padEndAnsi(s, width) {
893
893
  return s + " ".repeat(Math.max(0, width - visible));
894
894
  }
895
895
 
896
+ // src/commands/zero/connector/discovery.ts
897
+ init_esm_shims();
898
+ function connectorDiscoveryItems(catalogConnectors, customConnectors) {
899
+ return [
900
+ ...catalogConnectors.map((connector) => {
901
+ return {
902
+ kind: "catalog",
903
+ slug: connector.slug,
904
+ label: connector.label,
905
+ description: connector.description,
906
+ category: connector.category,
907
+ tags: connector.tags,
908
+ generation: connector.generation,
909
+ authMethods: connector.authMethods,
910
+ catalogConnector: connector
911
+ };
912
+ }),
913
+ ...customConnectors.map((connector) => {
914
+ return {
915
+ kind: "custom",
916
+ slug: connector.slug,
917
+ label: connector.displayName,
918
+ description: "",
919
+ category: "custom",
920
+ tags: [],
921
+ generation: [],
922
+ authMethods: [],
923
+ customConnector: connector
924
+ };
925
+ })
926
+ ];
927
+ }
928
+ function renderConnectorDiscoveryConnectedAsCell(connector) {
929
+ if (connector.kind === "catalog") {
930
+ return renderConnectedAsCell(connector.catalogConnector);
931
+ }
932
+ if (connector.customConnector.connected) {
933
+ return source_default.green("connected");
934
+ }
935
+ if (connector.customConnector.missingRequiredFields.length === 0) {
936
+ return source_default.dim("(not connected)");
937
+ }
938
+ return source_default.yellow(
939
+ `missing ${connector.customConnector.missingRequiredFields.join(", ")}`
940
+ );
941
+ }
942
+ function isConnectorDiscoveryAuthorized(connector, agentContext) {
943
+ if (connector.kind === "catalog") {
944
+ return agentContext.authorizedConnectorSlugs.has(connector.slug);
945
+ }
946
+ return agentContext.authorizedCustomConnectorIds.has(
947
+ connector.customConnector.id
948
+ );
949
+ }
950
+
896
951
  // src/commands/zero/connector/list.ts
897
952
  var listCommand = new Command().name("list").alias("ls").description("List all connectors and their status").option("--agent <id>", "Show per-agent authorization column").action(
898
953
  withErrorHandler(async (options) => {
899
- const [{ connectors }, agentCtx] = await Promise.all([
954
+ const [{ connectors }, customConnectors, agentCtx] = await Promise.all([
900
955
  listZeroConnectorCatalogStatus(),
901
- resolveAgentContext(options.agent)
956
+ listZeroCustomConnectors(),
957
+ resolveConnectorDiscoveryAgentContext(options.agent)
902
958
  ]);
903
- const connectorSlugs = connectors.map((connector) => {
904
- return connector.connectorRef;
959
+ const discoveredConnectors = connectorDiscoveryItems(
960
+ connectors,
961
+ customConnectors
962
+ );
963
+ const connectorSlugs = discoveredConnectors.map((connector) => {
964
+ return connector.slug;
905
965
  });
906
966
  const connectorSlugWidth = Math.max(
907
967
  4,
@@ -910,8 +970,8 @@ var listCommand = new Command().name("list").alias("ls").description("List all c
910
970
  })
911
971
  );
912
972
  const connectedAsHeader = "CONNECTED AS";
913
- const connectedCells = connectors.map((connector) => {
914
- return renderConnectedAsCell(connector);
973
+ const connectedCells = discoveredConnectors.map((connector) => {
974
+ return renderConnectorDiscoveryConnectedAsCell(connector);
915
975
  });
916
976
  const connectedAsWidth = Math.max(
917
977
  connectedAsHeader.length,
@@ -921,18 +981,19 @@ var listCommand = new Command().name("list").alias("ls").description("List all c
921
981
  );
922
982
  const authorizedHeader = agentCtx ? `AUTHORIZED FOR ${agentCtx.displayName}` : null;
923
983
  const headerParts = [
924
- "TYPE".padEnd(connectorSlugWidth),
984
+ "SLUG".padEnd(connectorSlugWidth),
925
985
  connectedAsHeader.padEnd(connectedAsWidth)
926
986
  ];
927
987
  if (authorizedHeader) headerParts.push(authorizedHeader);
928
988
  console.log(source_default.dim(headerParts.join(" ")));
929
989
  for (let i = 0; i < connectorSlugs.length; i++) {
990
+ const connector = discoveredConnectors[i];
930
991
  const connectorSlug = connectorSlugs[i];
931
992
  const connectedCell = padEndAnsi(connectedCells[i], connectedAsWidth);
932
993
  const parts = [connectorSlug.padEnd(connectorSlugWidth), connectedCell];
933
994
  if (agentCtx) {
934
995
  parts.push(
935
- agentCtx.authorizedConnectorSlugs.has(connectorSlug) ? source_default.green("\u2713") : source_default.dim("-")
996
+ isConnectorDiscoveryAuthorized(connector, agentCtx) ? source_default.green("\u2713") : source_default.dim("-")
936
997
  );
937
998
  }
938
999
  console.log(parts.join(" "));
@@ -953,7 +1014,7 @@ function parseLimit(raw) {
953
1014
  return n;
954
1015
  }
955
1016
  var searchCommand = new Command().name("search").description(
956
- "Search connectors by type, label, category, generation type, or tag"
1017
+ "Search connectors by slug, label, category, generation type, or tag"
957
1018
  ).argument("<keyword>", "Search keyword (case-insensitive)").option("--agent <id>", "Show per-agent authorization column").option(
958
1019
  "--limit <n>",
959
1020
  `Maximum number of results to display (default ${DEFAULT_LIMIT})`,
@@ -966,12 +1027,13 @@ var searchCommand = new Command().name("search").description(
966
1027
  if (!trimmed) {
967
1028
  throw new Error("Keyword cannot be empty.");
968
1029
  }
969
- const [{ connectors }, agentCtx] = await Promise.all([
1030
+ const [{ connectors }, customConnectors, agentCtx] = await Promise.all([
970
1031
  listZeroConnectorCatalogStatus(),
971
- resolveAgentContext(options.agent)
1032
+ listZeroCustomConnectors(),
1033
+ resolveConnectorDiscoveryAgentContext(options.agent)
972
1034
  ]);
973
- const { results, total } = searchPublicConnectorCatalog(
974
- connectors,
1035
+ const { results, total } = searchConnectorCatalog(
1036
+ connectorDiscoveryItems(connectors, customConnectors),
975
1037
  trimmed,
976
1038
  options.limit
977
1039
  );
@@ -986,15 +1048,15 @@ var searchCommand = new Command().name("search").description(
986
1048
  if (total > options.limit) {
987
1049
  console.log(`Too many results (top ${options.limit} of ${total}):`);
988
1050
  }
989
- const connectorSlugHeader = "TYPE";
1051
+ const connectorSlugHeader = "SLUG";
990
1052
  const connectedAsHeader = "CONNECTED AS";
991
1053
  const connectedCells = results.map((r) => {
992
- return renderConnectedAsCell(r.connector);
1054
+ return renderConnectorDiscoveryConnectedAsCell(r.connector);
993
1055
  });
994
1056
  const connectorSlugWidth = Math.max(
995
1057
  connectorSlugHeader.length,
996
1058
  ...results.map((r) => {
997
- return r.connector.connectorRef.length;
1059
+ return r.connector.slug.length;
998
1060
  })
999
1061
  );
1000
1062
  const connectedAsWidth = Math.max(
@@ -1014,14 +1076,12 @@ var searchCommand = new Command().name("search").description(
1014
1076
  for (let i = 0; i < results.length; i++) {
1015
1077
  const result = results[i];
1016
1078
  const parts = [
1017
- result.connector.connectorRef.padEnd(connectorSlugWidth),
1079
+ result.connector.slug.padEnd(connectorSlugWidth),
1018
1080
  padEndAnsi(connectedCells[i], connectedAsWidth)
1019
1081
  ];
1020
1082
  if (agentCtx) {
1021
1083
  parts.push(
1022
- agentCtx.authorizedConnectorSlugs.has(
1023
- result.connector.connectorRef
1024
- ) ? source_default.green("\u2713") : source_default.dim("-")
1084
+ isConnectorDiscoveryAuthorized(result.connector, agentCtx) ? source_default.green("\u2713") : source_default.dim("-")
1025
1085
  );
1026
1086
  }
1027
1087
  console.log(parts.join(" "));
@@ -1069,7 +1129,7 @@ function printConnectorDetails(connector) {
1069
1129
  }
1070
1130
  }
1071
1131
  async function printAgentAction(connector, agentCtx) {
1072
- const connectorSlug = connector.connectorRef;
1132
+ const connectorSlug = connector.slug;
1073
1133
  const authorized = agentCtx.authorizedConnectorSlugs.has(connectorSlug);
1074
1134
  const isConnected = connector.connected;
1075
1135
  const needsReconnect = connector.connectionStatus === "reconnect-required";
@@ -1132,7 +1192,7 @@ async function printAgentAction(connector, agentCtx) {
1132
1192
  }
1133
1193
  }
1134
1194
  async function printStandaloneAction(connector) {
1135
- const connectorSlug = connector.connectorRef;
1195
+ const connectorSlug = connector.slug;
1136
1196
  if (connector.connectionStatus === "connected" || connector.connectionStatus === "scope-mismatch") {
1137
1197
  return;
1138
1198
  }
@@ -1149,7 +1209,7 @@ async function printStandaloneAction(connector) {
1149
1209
  console.log(`Connect it at: [Connect ${connectorSlug}](${url})`);
1150
1210
  }
1151
1211
  }
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(
1212
+ var statusCommand = new Command().name("status").description("Show detailed status of a connector").argument("<slug>", "Connector slug (e.g., github)").option("--agent <id>", "Show authorization state for the given agent").action(
1153
1213
  withErrorHandler(
1154
1214
  async (connectorSlug, options) => {
1155
1215
  const [catalog, agentCtx] = await Promise.all([
@@ -1170,7 +1230,7 @@ var statusCommand = new Command().name("status").description("Show detailed stat
1170
1230
  }
1171
1231
  );
1172
1232
  }
1173
- console.log(`Connector: ${source_default.cyan(connector.connectorRef)}`);
1233
+ console.log(`Connector: ${source_default.cyan(connector.slug)}`);
1174
1234
  console.log();
1175
1235
  printConnectorDetails(connector);
1176
1236
  if (agentCtx) {
@@ -1486,7 +1546,7 @@ if (!callbackPromptAvailable) {
1486
1546
  }
1487
1547
  var callbackPromptExample = callbackPromptAvailable ? ' zero connector permission-request github --permission contents:write --callback-prompt "Re-check the permission, then continue the previous task"\n' : "";
1488
1548
  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" : "";
1489
- 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(
1549
+ var permissionRequestCommand2 = new Command().name("permission-request").description("Request permission to use a connector capability").argument("<slug>", "The connector slug (e.g. github)").addOption(
1490
1550
  new Option(
1491
1551
  "--permission <name>",
1492
1552
  "The permission name to request"
@@ -1542,9 +1602,9 @@ ${callbackPromptNotes} - Permission requests update the current user's connecto
1542
1602
  const agentId = opts.agent ?? process.env.ZERO_AGENT_ID;
1543
1603
  const metadata = await getZeroConnectorCatalogPermissions(connectorSlug);
1544
1604
  if (!metadata) {
1545
- throw new Error(`Unknown connector type: ${connectorSlug}`);
1605
+ throw new Error(`Unknown connector slug: ${connectorSlug}`);
1546
1606
  }
1547
- if (opts.permission !== UNKNOWN_PERMISSION_GRANT && !findFirewallMetadataPermission(metadata, opts.permission)) {
1607
+ if (opts.permission !== UNKNOWN_PERMISSION_GRANT && !hasConnectorFirewallMetadataPermission(metadata, opts.permission)) {
1548
1608
  throw new Error(
1549
1609
  `Unknown permission "${opts.permission}" for ${connectorSlug}`
1550
1610
  );
@@ -1565,4 +1625,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Manage a
1565
1625
  export {
1566
1626
  zeroConnectorCommand
1567
1627
  };
1568
- //# sourceMappingURL=connector-DZ5RLANA.js.map
1628
+ //# sourceMappingURL=connector-QQWAHPS4.js.map