@vm0/cli 9.266.0 → 9.268.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 (102) hide show
  1. package/{agent-WJBV6XSO.js → agent-4QRFYL6Q.js} +6 -6
  2. package/{banking-MZPWKMV2.js → banking-VKKVWIYX.js} +4 -4
  3. package/{browser-F4J54ATA.js → browser-VFBMLIUS.js} +4 -4
  4. package/{chat-OTLB5LYG.js → chat-KQRKGQKS.js} +5 -5
  5. package/{chunk-GHMW55CQ.js → chunk-4JA54Z75.js} +2 -2
  6. package/{chunk-JQDFMS4A.js → chunk-7I3P4REZ.js} +2 -2
  7. package/{chunk-UP5UOL6Z.js → chunk-C6KDTR5A.js} +6 -10
  8. package/{chunk-UP5UOL6Z.js.map → chunk-C6KDTR5A.js.map} +1 -1
  9. package/{chunk-4TODUWC7.js → chunk-CZA5MW3N.js} +33 -23
  10. package/chunk-CZA5MW3N.js.map +1 -0
  11. package/{chunk-MIZEZBG6.js → chunk-DTZW7RES.js} +10 -2
  12. package/chunk-DTZW7RES.js.map +1 -0
  13. package/{chunk-HHVHHEJ2.js → chunk-ISZ5CKJ3.js} +2 -2
  14. package/{chunk-SP2S4QWX.js → chunk-QSWNNYV4.js} +2 -2
  15. package/{chunk-WTB4K3Z6.js → chunk-VGPSGL5S.js} +149 -63
  16. package/chunk-VGPSGL5S.js.map +1 -0
  17. package/{chunk-M75EI7GB.js → chunk-ZL7WFWOC.js} +4 -4
  18. package/{computer-use-GMGAYWFF.js → computer-use-LTZEVHCS.js} +4 -4
  19. package/{connector-SPL5EGNH.js → connector-MY7K7RJN.js} +83 -22
  20. package/connector-MY7K7RJN.js.map +1 -0
  21. package/{credit-ANE66MN5.js → credit-LDEHJIJT.js} +5 -5
  22. package/{developer-support-WNWRPWM5.js → developer-support-ROATSWMP.js} +4 -4
  23. package/{doctor-YEBTJKXS.js → doctor-3P6KUY4D.js} +5 -5
  24. package/{feishu-X6HV3Z75.js → feishu-PHKR2Q36.js} +4 -4
  25. package/{finance-3SLPN5ZX.js → finance-3LM55SWD.js} +4 -4
  26. package/{generate-VK57QZTH.js → generate-23ZOL7AI.js} +5 -5
  27. package/{github-KHQGH7UJ.js → github-SC4AB2Q2.js} +4 -4
  28. package/{goal-NP7LA4H5.js → goal-FTWV2ADK.js} +4 -4
  29. package/{host-JSCRRZ3J.js → host-L4BEXBPB.js} +4 -4
  30. package/{logs-AEIWXRS6.js → logs-TICCUASU.js} +5 -5
  31. package/{mail-CMOTFJRW.js → mail-ZUBVNRJW.js} +6 -6
  32. package/{maps-WAWCF444.js → maps-UAKTZSO2.js} +4 -4
  33. package/{model-O3H5L3R4.js → model-3N3ZWLZM.js} +5 -5
  34. package/{model-provider-NWOG4WDP.js → model-provider-RI26N5OQ.js} +5 -5
  35. package/{org-H2KYZZHL.js → org-IEYB2WBO.js} +4 -4
  36. package/package.json +1 -1
  37. package/{people-search-OYHCUQQ5.js → people-search-5S4TV7RL.js} +4 -4
  38. package/{phone-XDTMDNGG.js → phone-XV2LWGQT.js} +4 -4
  39. package/{preference-JJG4RC3V.js → preference-6XHDDQUW.js} +4 -4
  40. package/{resource-QCPLW3RQ.js → resource-HXS7RGBP.js} +4 -4
  41. package/{scrape-NX44VHU6.js → scrape-NU6T5BQE.js} +4 -4
  42. package/{search-XMML4Q6A.js → search-FDG26NWA.js} +5 -5
  43. package/{secret-RYOMS4YU.js → secret-HN3R3V32.js} +4 -4
  44. package/{slack-WQ7G3WH7.js → slack-IWEZU6HY.js} +4 -4
  45. package/{teams-XL2GYS3H.js → teams-6VZAWVC6.js} +4 -4
  46. package/{telegram-E3ILARSU.js → telegram-UTCDO5ZB.js} +4 -4
  47. package/{upgrade-B2QEWNOR.js → upgrade-EX2F7BFJ.js} +3 -3
  48. package/{variable-I5TBQURO.js → variable-U67PHCBZ.js} +4 -4
  49. package/{video-B644TGB2.js → video-GTQQSN6W.js} +3 -3
  50. package/{weather-ZFYVIQQC.js → weather-NMEINAIZ.js} +4 -4
  51. package/{web-6YP4UZZS.js → web-YC7E327U.js} +4 -4
  52. package/{web-search-3ZBOMLOF.js → web-search-TCWP5NDJ.js} +4 -4
  53. package/{whoami-RCMC3HFF.js → whoami-KACAW67A.js} +6 -6
  54. package/{workflow-GZ66ZARR.js → workflow-TKJF2YY2.js} +4 -4
  55. package/zero.js +42 -42
  56. package/chunk-4TODUWC7.js.map +0 -1
  57. package/chunk-MIZEZBG6.js.map +0 -1
  58. package/chunk-WTB4K3Z6.js.map +0 -1
  59. package/connector-SPL5EGNH.js.map +0 -1
  60. /package/{agent-WJBV6XSO.js.map → agent-4QRFYL6Q.js.map} +0 -0
  61. /package/{banking-MZPWKMV2.js.map → banking-VKKVWIYX.js.map} +0 -0
  62. /package/{browser-F4J54ATA.js.map → browser-VFBMLIUS.js.map} +0 -0
  63. /package/{chat-OTLB5LYG.js.map → chat-KQRKGQKS.js.map} +0 -0
  64. /package/{chunk-GHMW55CQ.js.map → chunk-4JA54Z75.js.map} +0 -0
  65. /package/{chunk-JQDFMS4A.js.map → chunk-7I3P4REZ.js.map} +0 -0
  66. /package/{chunk-HHVHHEJ2.js.map → chunk-ISZ5CKJ3.js.map} +0 -0
  67. /package/{chunk-SP2S4QWX.js.map → chunk-QSWNNYV4.js.map} +0 -0
  68. /package/{chunk-M75EI7GB.js.map → chunk-ZL7WFWOC.js.map} +0 -0
  69. /package/{computer-use-GMGAYWFF.js.map → computer-use-LTZEVHCS.js.map} +0 -0
  70. /package/{credit-ANE66MN5.js.map → credit-LDEHJIJT.js.map} +0 -0
  71. /package/{developer-support-WNWRPWM5.js.map → developer-support-ROATSWMP.js.map} +0 -0
  72. /package/{doctor-YEBTJKXS.js.map → doctor-3P6KUY4D.js.map} +0 -0
  73. /package/{feishu-X6HV3Z75.js.map → feishu-PHKR2Q36.js.map} +0 -0
  74. /package/{finance-3SLPN5ZX.js.map → finance-3LM55SWD.js.map} +0 -0
  75. /package/{generate-VK57QZTH.js.map → generate-23ZOL7AI.js.map} +0 -0
  76. /package/{github-KHQGH7UJ.js.map → github-SC4AB2Q2.js.map} +0 -0
  77. /package/{goal-NP7LA4H5.js.map → goal-FTWV2ADK.js.map} +0 -0
  78. /package/{host-JSCRRZ3J.js.map → host-L4BEXBPB.js.map} +0 -0
  79. /package/{logs-AEIWXRS6.js.map → logs-TICCUASU.js.map} +0 -0
  80. /package/{mail-CMOTFJRW.js.map → mail-ZUBVNRJW.js.map} +0 -0
  81. /package/{maps-WAWCF444.js.map → maps-UAKTZSO2.js.map} +0 -0
  82. /package/{model-O3H5L3R4.js.map → model-3N3ZWLZM.js.map} +0 -0
  83. /package/{model-provider-NWOG4WDP.js.map → model-provider-RI26N5OQ.js.map} +0 -0
  84. /package/{org-H2KYZZHL.js.map → org-IEYB2WBO.js.map} +0 -0
  85. /package/{people-search-OYHCUQQ5.js.map → people-search-5S4TV7RL.js.map} +0 -0
  86. /package/{phone-XDTMDNGG.js.map → phone-XV2LWGQT.js.map} +0 -0
  87. /package/{preference-JJG4RC3V.js.map → preference-6XHDDQUW.js.map} +0 -0
  88. /package/{resource-QCPLW3RQ.js.map → resource-HXS7RGBP.js.map} +0 -0
  89. /package/{scrape-NX44VHU6.js.map → scrape-NU6T5BQE.js.map} +0 -0
  90. /package/{search-XMML4Q6A.js.map → search-FDG26NWA.js.map} +0 -0
  91. /package/{secret-RYOMS4YU.js.map → secret-HN3R3V32.js.map} +0 -0
  92. /package/{slack-WQ7G3WH7.js.map → slack-IWEZU6HY.js.map} +0 -0
  93. /package/{teams-XL2GYS3H.js.map → teams-6VZAWVC6.js.map} +0 -0
  94. /package/{telegram-E3ILARSU.js.map → telegram-UTCDO5ZB.js.map} +0 -0
  95. /package/{upgrade-B2QEWNOR.js.map → upgrade-EX2F7BFJ.js.map} +0 -0
  96. /package/{variable-I5TBQURO.js.map → variable-U67PHCBZ.js.map} +0 -0
  97. /package/{video-B644TGB2.js.map → video-GTQQSN6W.js.map} +0 -0
  98. /package/{weather-ZFYVIQQC.js.map → weather-NMEINAIZ.js.map} +0 -0
  99. /package/{web-6YP4UZZS.js.map → web-YC7E327U.js.map} +0 -0
  100. /package/{web-search-3ZBOMLOF.js.map → web-search-TCWP5NDJ.js.map} +0 -0
  101. /package/{whoami-RCMC3HFF.js.map → whoami-KACAW67A.js.map} +0 -0
  102. /package/{workflow-GZ66ZARR.js.map → workflow-TKJF2YY2.js.map} +0 -0
@@ -3,8 +3,9 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getZeroAgent,
6
+ getZeroAgentCustomConnectors,
6
7
  getZeroAgentUserConnectors
7
- } from "./chunk-WTB4K3Z6.js";
8
+ } from "./chunk-VGPSGL5S.js";
8
9
  import {
9
10
  init_esm_shims
10
11
  } from "./chunk-GPYQ24DR.js";
@@ -222,29 +223,22 @@ function scoreConnector(keywordLower, keyword, keywordTokens, connector) {
222
223
  if (!hit || hit.score < MIN_SCORE) return null;
223
224
  return hit;
224
225
  }
225
- function searchPublicConnectorCatalog(connectors, keyword, limit) {
226
+ function searchConnectorCatalog(connectors, keyword, limit) {
226
227
  const trimmed = keyword.trim();
227
228
  if (!trimmed) return { results: [], total: 0 };
228
229
  const keywordLower = trimmed.toLowerCase();
229
230
  const keywordTokens = tokenize(trimmed);
230
- const hits = connectors.flatMap(
231
- (connector) => {
232
- const hit = scoreConnector(
233
- keywordLower,
234
- trimmed,
235
- keywordTokens,
236
- connector
237
- );
238
- if (!hit) return [];
239
- return [
240
- {
241
- connector,
242
- score: hit.score,
243
- matchedField: hit.matchedField
244
- }
245
- ];
246
- }
247
- );
231
+ const hits = connectors.flatMap((connector) => {
232
+ const hit = scoreConnector(keywordLower, trimmed, keywordTokens, connector);
233
+ if (!hit) return [];
234
+ return [
235
+ {
236
+ connector,
237
+ score: hit.score,
238
+ matchedField: hit.matchedField
239
+ }
240
+ ];
241
+ });
248
242
  hits.sort((a, b) => {
249
243
  if (b.score !== a.score) return b.score - a.score;
250
244
  return a.connector.connectorRef.localeCompare(b.connector.connectorRef);
@@ -332,6 +326,21 @@ async function resolveAgentContext(flagAgentId) {
332
326
  authorizedConnectorSlugs: new Set(enabledConnectorSlugs)
333
327
  };
334
328
  }
329
+ async function resolveConnectorDiscoveryAgentContext(flagAgentId) {
330
+ const agentId = flagAgentId ?? process.env.ZERO_AGENT_ID;
331
+ if (!agentId) return null;
332
+ const [agent, enabledConnectorSlugs, enabledCustomConnectorIds] = await Promise.all([
333
+ getZeroAgent(agentId),
334
+ getZeroAgentUserConnectors(agentId),
335
+ getZeroAgentCustomConnectors(agentId)
336
+ ]);
337
+ return {
338
+ agentId: agent.agentId,
339
+ displayName: agent.displayName ?? agent.agentId,
340
+ authorizedConnectorSlugs: new Set(enabledConnectorSlugs),
341
+ authorizedCustomConnectorIds: new Set(enabledCustomConnectorIds)
342
+ };
343
+ }
335
344
 
336
345
  export {
337
346
  CALLBACK_PROMPT_PLACEHOLDER,
@@ -341,10 +350,11 @@ export {
341
350
  connectorActionUrl,
342
351
  printCallbackActionUrlExample,
343
352
  printCallbackTurnInstruction,
344
- searchPublicConnectorCatalog,
353
+ searchConnectorCatalog,
345
354
  findConnectorStatusItem,
346
355
  availableConnectorSlugs,
347
356
  resolveManualGrantAuthMethod,
348
- resolveAgentContext
357
+ resolveAgentContext,
358
+ resolveConnectorDiscoveryAgentContext
349
359
  };
350
- //# sourceMappingURL=chunk-4TODUWC7.js.map
360
+ //# sourceMappingURL=chunk-CZA5MW3N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/zero/connector/action-url.ts","../src/commands/zero/connector/public-catalog.ts","../src/commands/zero/connector/agent-context.ts"],"sourcesContent":["export const CALLBACK_PROMPT_PLACEHOLDER =\n \"SOMETHING_AGENT_WANT_TO_BE_CALLBACK\";\n\nexport function connectorActionCallbackAvailable(): boolean {\n return Boolean(process.env.ZERO_CHAT_THREAD_ID?.trim());\n}\n\nfunction currentChatThreadId(agentId: string | undefined): string | null {\n const threadId = process.env.ZERO_CHAT_THREAD_ID?.trim();\n const currentAgentId = process.env.ZERO_AGENT_ID?.trim();\n if (!threadId || !currentAgentId || agentId !== currentAgentId) {\n return null;\n }\n return threadId;\n}\n\nexport function currentChatSupportsActionCallback(\n agentId: string | undefined,\n): boolean {\n return currentChatThreadId(agentId) !== null;\n}\n\nfunction addCallbackSearchParams(\n params: URLSearchParams,\n threadId: string,\n callbackPrompt: string,\n): void {\n params.set(\"threadId\", threadId);\n params.set(\"callbackPrompt\", callbackPrompt);\n}\n\nexport function addRequestedCallbackSearchParams(\n params: URLSearchParams,\n callbackPrompt: string | undefined,\n agentId: string | undefined,\n): void {\n if (callbackPrompt === undefined) {\n return;\n }\n\n const normalizedPrompt = callbackPrompt.trim();\n if (!normalizedPrompt) {\n throw new Error(\"--callback-prompt cannot be empty\");\n }\n\n const threadId = currentChatThreadId(agentId);\n if (!threadId) {\n throw new Error(\n \"--callback-prompt can only target the current Zero web chat thread and agent\",\n );\n }\n addCallbackSearchParams(params, threadId, normalizedPrompt);\n}\n\nexport function connectorActionUrl(args: {\n readonly origin: string;\n readonly path: string;\n readonly agentId?: string;\n}): string {\n const url = new URL(args.path, args.origin);\n if (args.agentId) {\n url.searchParams.set(\"agentId\", args.agentId);\n }\n return url.toString();\n}\n\nfunction callbackActionUrlExample(\n actionUrl: string,\n agentId: string | undefined,\n): string | null {\n const threadId = currentChatThreadId(agentId);\n if (!threadId) {\n return null;\n }\n\n const url = new URL(actionUrl);\n addCallbackSearchParams(\n url.searchParams,\n threadId,\n CALLBACK_PROMPT_PLACEHOLDER,\n );\n return url.toString();\n}\n\nexport function printCallbackActionUrlExample(\n actionUrl: string,\n agentId: string | undefined,\n): void {\n const callbackUrl = callbackActionUrlExample(actionUrl, agentId);\n if (!callbackUrl) {\n return;\n }\n\n console.log(\"\");\n console.log(\n \"Or, if this is the only connector or permission action needed, use the callback URL below. After the user completes this action, Zero will automatically start the next round with the callback prompt:\",\n );\n console.log(callbackUrl);\n}\n\nexport function printCallbackTurnInstruction(): void {\n console.log(\"\");\n console.log(\n \"After sharing this callback URL, end the current turn. When the user completes the action, Zero will automatically start the next round with the callback prompt.\",\n );\n}\n","import type {\n PublicConnectorCatalogAuthMethodDetail,\n PublicConnectorCatalogStatusItem,\n} from \"@vm0/api-contracts/contracts/zero-connector-catalog\";\n\nexport type PublicConnectorStatus = PublicConnectorCatalogStatusItem;\n\ninterface ConnectorSearchItem {\n readonly connectorRef: string;\n readonly label: string;\n readonly description: string;\n readonly category: string;\n readonly tags: readonly string[];\n readonly generation: readonly string[];\n readonly authMethods: readonly {\n readonly id: string;\n readonly label: string;\n readonly description: string | null;\n }[];\n}\n\ninterface ConnectorSearchResult<T extends ConnectorSearchItem> {\n readonly connector: T;\n readonly score: number;\n readonly matchedField: string;\n}\n\ninterface ConnectorSearchOutput<T extends ConnectorSearchItem> {\n readonly results: readonly ConnectorSearchResult<T>[];\n readonly total: number;\n}\n\nconst TOKEN_BOUNDARY = /[_\\-\\s]+/;\nconst CASE_BOUNDARY = /(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/;\nconst MIN_SCORE = 10;\n\nfunction tokenize(input: string): Set<string> {\n const tokens = new Set<string>();\n for (const chunk of input.split(TOKEN_BOUNDARY)) {\n if (!chunk) continue;\n for (const sub of chunk.split(CASE_BOUNDARY)) {\n const lower = sub.toLowerCase();\n if (lower) tokens.add(lower);\n }\n }\n return tokens;\n}\n\nfunction publicStrings(connector: ConnectorSearchItem): string[] {\n return [\n connector.connectorRef,\n connector.label,\n connector.description,\n connector.category,\n ...connector.tags,\n ...connector.generation,\n ...connector.authMethods.flatMap((authMethod) => {\n return [\n authMethod.id,\n authMethod.label,\n ...(authMethod.description ? [authMethod.description] : []),\n ];\n }),\n ];\n}\n\ntype ScoreHit = { score: number; matchedField: string };\n\nfunction best(candidates: readonly (ScoreHit | null)[]): ScoreHit | null {\n return candidates.reduce<ScoreHit | null>((bestHit, hit) => {\n if (!hit) return bestHit;\n if (!bestHit || hit.score > bestHit.score) return hit;\n return bestHit;\n }, null);\n}\n\nfunction scoreExact(\n keywordLower: string,\n skipPrivateIdentifierMatches: boolean,\n connector: ConnectorSearchItem,\n): ScoreHit | null {\n if (connector.connectorRef.toLowerCase() === keywordLower) {\n return { score: 100, matchedField: \"connectorRef\" };\n }\n if (connector.label.toLowerCase() === keywordLower) {\n return { score: 80, matchedField: \"label\" };\n }\n for (const tag of connector.tags) {\n if (skipPrivateIdentifierMatches && tag.includes(\"_\")) continue;\n if (tag.toLowerCase() === keywordLower) {\n return { score: 70, matchedField: `tag:${tag}` };\n }\n }\n for (const generationType of connector.generation) {\n if (generationType.toLowerCase() === keywordLower) {\n return { score: 65, matchedField: `generation:${generationType}` };\n }\n }\n for (const authMethod of connector.authMethods) {\n if (authMethod.id.toLowerCase() === keywordLower) {\n return { score: 60, matchedField: `auth-method:${authMethod.id}` };\n }\n if (authMethod.label.toLowerCase() === keywordLower) {\n return { score: 60, matchedField: `auth-method:${authMethod.label}` };\n }\n }\n if (connector.category.toLowerCase() === keywordLower) {\n return { score: 55, matchedField: \"category\" };\n }\n return null;\n}\n\nfunction scoreSubstring(\n keywordLower: string,\n skipPrivateIdentifierMatches: boolean,\n connector: ConnectorSearchItem,\n): ScoreHit | null {\n const candidates: ScoreHit[] = [];\n if (connector.connectorRef.toLowerCase().includes(keywordLower)) {\n candidates.push({ score: 50, matchedField: \"connectorRef\" });\n }\n if (connector.label.toLowerCase().includes(keywordLower)) {\n candidates.push({ score: 50, matchedField: \"label\" });\n }\n for (const tag of connector.tags) {\n if (skipPrivateIdentifierMatches && tag.includes(\"_\")) continue;\n if (tag.toLowerCase().includes(keywordLower)) {\n candidates.push({ score: 25, matchedField: `tag:${tag}` });\n }\n }\n for (const generationType of connector.generation) {\n if (generationType.toLowerCase().includes(keywordLower)) {\n candidates.push({\n score: 25,\n matchedField: `generation:${generationType}`,\n });\n }\n }\n for (const authMethod of connector.authMethods) {\n if (\n authMethod.id.toLowerCase().includes(keywordLower) ||\n authMethod.label.toLowerCase().includes(keywordLower)\n ) {\n candidates.push({\n score: 20,\n matchedField: `auth-method:${authMethod.id}`,\n });\n }\n }\n if (connector.category.toLowerCase().includes(keywordLower)) {\n candidates.push({ score: 20, matchedField: \"category\" });\n }\n if (connector.description.toLowerCase().includes(keywordLower)) {\n candidates.push({ score: 15, matchedField: \"description\" });\n }\n\n return best(candidates);\n}\n\nfunction scoreTokens(\n keywordTokens: ReadonlySet<string>,\n connector: ConnectorSearchItem,\n): ScoreHit | null {\n const candidateTokens = new Set<string>();\n for (const source of publicStrings(connector)) {\n for (const token of tokenize(source)) {\n candidateTokens.add(token);\n }\n }\n\n let intersection = 0;\n let firstCommon = \"\";\n for (const token of keywordTokens) {\n if (candidateTokens.has(token)) {\n intersection++;\n if (!firstCommon) firstCommon = token;\n }\n }\n if (intersection === 0) return null;\n return { score: 10 * intersection, matchedField: `token:${firstCommon}` };\n}\n\nfunction scoreConnector(\n keywordLower: string,\n keyword: string,\n keywordTokens: ReadonlySet<string>,\n connector: ConnectorSearchItem,\n): ScoreHit | null {\n const skipPrivateIdentifierMatches =\n /^[A-Za-z0-9_]+$/.test(keyword) && keyword.includes(\"_\");\n const tokenHit = skipPrivateIdentifierMatches\n ? null\n : scoreTokens(keywordTokens, connector);\n const hit = best([\n scoreExact(keywordLower, skipPrivateIdentifierMatches, connector),\n scoreSubstring(keywordLower, skipPrivateIdentifierMatches, connector),\n tokenHit,\n ]);\n if (!hit || hit.score < MIN_SCORE) return null;\n return hit;\n}\n\nexport function searchConnectorCatalog<T extends ConnectorSearchItem>(\n connectors: readonly T[],\n keyword: string,\n limit: number,\n): ConnectorSearchOutput<T> {\n const trimmed = keyword.trim();\n if (!trimmed) return { results: [], total: 0 };\n\n const keywordLower = trimmed.toLowerCase();\n const keywordTokens = tokenize(trimmed);\n const hits = connectors.flatMap((connector): ConnectorSearchResult<T>[] => {\n const hit = scoreConnector(keywordLower, trimmed, keywordTokens, connector);\n if (!hit) return [];\n return [\n {\n connector,\n score: hit.score,\n matchedField: hit.matchedField,\n },\n ];\n });\n\n hits.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return a.connector.connectorRef.localeCompare(b.connector.connectorRef);\n });\n\n return {\n results: hits.slice(0, limit),\n total: hits.length,\n };\n}\n\nexport function findConnectorStatusItem(\n connectors: readonly PublicConnectorStatus[],\n connectorSlug: string,\n): PublicConnectorStatus | null {\n const exact = connectors.find((connector) => {\n return connector.connectorRef === connectorSlug;\n });\n if (exact) return exact;\n\n const lower = connectorSlug.toLowerCase();\n return (\n connectors.find((connector) => {\n return connector.connectorRef.toLowerCase() === lower;\n }) ?? null\n );\n}\n\nexport function availableConnectorSlugs(\n connectors: readonly PublicConnectorStatus[],\n): string {\n return connectors\n .map((connector) => {\n return connector.connectorRef;\n })\n .join(\", \");\n}\n\nexport function resolveManualGrantAuthMethod(\n connector: PublicConnectorStatus,\n rawAuthMethod: string | undefined,\n): PublicConnectorCatalogAuthMethodDetail {\n if (rawAuthMethod) {\n const authMethod = connector.authMethods.find((method) => {\n return method.id === rawAuthMethod;\n });\n if (!authMethod) {\n throw new Error(\n `${connector.connectorRef} connector does not have ${rawAuthMethod} auth method`,\n {\n cause: new Error(\n `Available auth methods: ${connector.authMethods\n .map((method) => {\n return method.id;\n })\n .join(\", \")}`,\n ),\n },\n );\n }\n\n if (authMethod.grantKind === \"manual\") {\n return authMethod;\n }\n\n throw new Error(\n `${connector.connectorRef} ${authMethod.id} auth method does not use a manual grant`,\n );\n }\n\n const manualAuthMethods = connector.authMethods.filter((method) => {\n return method.grantKind === \"manual\";\n });\n const authMethod = manualAuthMethods[0];\n if (manualAuthMethods.length === 1 && authMethod) {\n return authMethod;\n }\n if (manualAuthMethods.length === 0) {\n throw new Error(\n `${connector.connectorRef} connector does not use a manual grant`,\n );\n }\n\n throw new Error(\n `${connector.connectorRef} connector has multiple manual grant auth methods`,\n {\n cause: new Error(\n `Pass --auth-method ${manualAuthMethods\n .map((method) => {\n return method.id;\n })\n .join(\"|\")}`,\n ),\n },\n );\n}\n","import {\n getZeroAgent,\n getZeroAgentCustomConnectors,\n getZeroAgentUserConnectors,\n} from \"../../../lib/api\";\n\ninterface AgentContext {\n agentId: string;\n displayName: string;\n authorizedConnectorSlugs: Set<string>;\n}\n\nexport interface ConnectorDiscoveryAgentContext extends AgentContext {\n authorizedCustomConnectorIds: Set<string>;\n}\n\nexport async function resolveAgentContext(\n flagAgentId: string | undefined,\n): Promise<AgentContext | null> {\n const agentId = flagAgentId ?? process.env.ZERO_AGENT_ID;\n if (!agentId) return null;\n\n const [agent, enabledConnectorSlugs] = await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n ]);\n\n return {\n agentId: agent.agentId,\n displayName: agent.displayName ?? agent.agentId,\n authorizedConnectorSlugs: new Set(enabledConnectorSlugs),\n };\n}\n\nexport async function resolveConnectorDiscoveryAgentContext(\n flagAgentId: string | undefined,\n): Promise<ConnectorDiscoveryAgentContext | null> {\n const agentId = flagAgentId ?? process.env.ZERO_AGENT_ID;\n if (!agentId) return null;\n\n const [agent, enabledConnectorSlugs, enabledCustomConnectorIds] =\n await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n getZeroAgentCustomConnectors(agentId),\n ]);\n\n return {\n agentId: agent.agentId,\n displayName: agent.displayName ?? agent.agentId,\n authorizedConnectorSlugs: new Set(enabledConnectorSlugs),\n authorizedCustomConnectorIds: new Set(enabledCustomConnectorIds),\n };\n}\n"],"mappings":"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","names":["authMethod"]}
@@ -542,7 +542,12 @@ var CLIENT_VERSION_HEADER = "X-Client-Version";
542
542
  var CLIENT_TYPE_HEADER = "X-Client-Type";
543
543
  var CLIENT_SESSION_ID_HEADER = "X-Client-Session-Id";
544
544
  var CLIENT_REQUEST_ID_HEADER = "X-Client-Request-Id";
545
+ var CLIENT_CAPABILITY_CONNECTOR_SLUG_IDENTITIES = "connector-slug-identities-v1";
545
546
  var CLIENT_TYPE_CLI = "CLI";
547
+ function addClientCapabilityToVersion(version2, capability) {
548
+ const separator = version2.includes("+") ? "." : "+";
549
+ return `${version2}${separator}${capability}`;
550
+ }
546
551
 
547
552
  // ../../packages/api-contracts/src/contracts/trpc-contract.ts
548
553
  init_esm_shims();
@@ -15385,7 +15390,10 @@ function createCliClientHeaderInjector(options) {
15385
15390
  };
15386
15391
  }
15387
15392
  var addDefaultCliClientHeaders = createCliClientHeaderInjector({
15388
- clientVersion: "9.266.0"
15393
+ clientVersion: addClientCapabilityToVersion(
15394
+ "9.268.0",
15395
+ CLIENT_CAPABILITY_CONNECTOR_SLUG_IDENTITIES
15396
+ )
15389
15397
  });
15390
15398
  function addCliClientHeaders(headers) {
15391
15399
  addDefaultCliClientHeaders(headers);
@@ -16776,4 +16784,4 @@ export {
16776
16784
  apiErrorSchema,
16777
16785
  withErrorHandler
16778
16786
  };
16779
- //# sourceMappingURL=chunk-MIZEZBG6.js.map
16787
+ //# sourceMappingURL=chunk-DTZW7RES.js.map