@vm0/cli 9.274.9 → 9.274.11

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 (107) hide show
  1. package/{agent-FSTGZDJZ.js → agent-USNP3PYH.js} +7 -9
  2. package/{agent-FSTGZDJZ.js.map → agent-USNP3PYH.js.map} +1 -1
  3. package/{banking-DUYVDT7L.js → banking-PNOHSE7S.js} +4 -4
  4. package/{browser-DBAYVQXB.js → browser-UFNJUITM.js} +4 -4
  5. package/{chat-G2QKUGOY.js → chat-PH6OB3OG.js} +5 -5
  6. package/{chunk-NC5R52GN.js → chunk-54VZ2OFE.js} +2 -2
  7. package/{chunk-RVSHE5GT.js → chunk-D4PDPVTM.js} +2 -2
  8. package/{chunk-J6H722WP.js → chunk-HC3VQTS3.js} +2 -2
  9. package/{chunk-7WB4KVQE.js → chunk-M5RWSMAU.js} +19 -35
  10. package/chunk-M5RWSMAU.js.map +1 -0
  11. package/{chunk-IVOKTJ7O.js → chunk-MKNW7UHN.js} +25 -2
  12. package/{chunk-IVOKTJ7O.js.map → chunk-MKNW7UHN.js.map} +1 -1
  13. package/{chunk-NGHHPHNV.js → chunk-NMIHJQMF.js} +2 -2
  14. package/{chunk-IETGRCZK.js → chunk-TRNUF7VD.js} +15 -12
  15. package/chunk-TRNUF7VD.js.map +1 -0
  16. package/{chunk-EZ73R7HD.js → chunk-VMLNVQNL.js} +9 -4
  17. package/chunk-VMLNVQNL.js.map +1 -0
  18. package/{chunk-ZYLDUHM5.js → chunk-ZXORJITW.js} +2 -2
  19. package/{computer-use-KNP76TLJ.js → computer-use-5PW5SAJF.js} +4 -4
  20. package/{connector-YFQAQMMS.js → connector-YYS3STGN.js} +167 -46
  21. package/connector-YYS3STGN.js.map +1 -0
  22. package/{credit-4LUCEGXB.js → credit-2637AQL3.js} +5 -5
  23. package/{developer-support-6DV3TJ7X.js → developer-support-KBUVSNAA.js} +4 -4
  24. package/{doctor-2Z47KQPA.js → doctor-TJ7JVKRQ.js} +5 -5
  25. package/{feishu-7KCTSMGF.js → feishu-B7N3BCO7.js} +4 -4
  26. package/{finance-I5VANJ6K.js → finance-NU4A2BXT.js} +4 -4
  27. package/{generate-G6EQUDEM.js → generate-M5QSAIFQ.js} +6 -6
  28. package/{github-CJ4363DX.js → github-3PJHTYHL.js} +4 -4
  29. package/{goal-ROXTX3LK.js → goal-SHSDGEO3.js} +4 -4
  30. package/{host-G4AJ5EWK.js → host-FXDE5PCN.js} +4 -4
  31. package/{logs-M4VAB52U.js → logs-UD7ZAI25.js} +6 -6
  32. package/{mail-QWXL2VT5.js → mail-TZ34KKXR.js} +6 -6
  33. package/{maps-XDH6Z75J.js → maps-G6IPODR4.js} +4 -4
  34. package/{model-KG2WL2PA.js → model-ISADGL5J.js} +5 -5
  35. package/{model-provider-PVYEO2FV.js → model-provider-ORRJ7SXI.js} +5 -5
  36. package/{org-5QIO72BX.js → org-XCAALI32.js} +4 -4
  37. package/package.json +1 -1
  38. package/{people-search-BYTQOOVP.js → people-search-Z63U5HNN.js} +4 -4
  39. package/{phone-KCISIXPA.js → phone-RMOTPP5V.js} +4 -4
  40. package/{preference-6XLVBPKU.js → preference-PGQGECCP.js} +4 -4
  41. package/{recognize-IHDKJ3XF.js → recognize-SETED4XT.js} +4 -4
  42. package/{resource-BHVESFE5.js → resource-K4TIHMWH.js} +4 -4
  43. package/{scrape-CXFVBFEE.js → scrape-U62OMMH3.js} +4 -4
  44. package/{search-WEXVWW7M.js → search-JGPAJXRI.js} +6 -6
  45. package/{secret-KFE2N7B2.js → secret-OIOVF2AF.js} +4 -4
  46. package/{slack-GVMWOROK.js → slack-P5RMUUGS.js} +4 -4
  47. package/{teams-FPFYLHRU.js → teams-H24JJYGW.js} +4 -4
  48. package/{telegram-QKVPAY66.js → telegram-UVKQG75J.js} +4 -4
  49. package/{upgrade-NJG4QIAE.js → upgrade-EV2FKEUC.js} +3 -3
  50. package/{variable-A3ITP47R.js → variable-RJ4GNVSZ.js} +4 -4
  51. package/{video-KAF6LTMC.js → video-W3WRSDXS.js} +3 -3
  52. package/{weather-NVRVKQRD.js → weather-OXS6ZSGW.js} +4 -4
  53. package/{web-UDRHNY2O.js → web-GGTCDO2E.js} +4 -4
  54. package/{web-search-KECYKFK5.js → web-search-3AFE6F4E.js} +4 -4
  55. package/{whoami-NBHB3NWY.js → whoami-L6ML7JM3.js} +7 -9
  56. package/{whoami-NBHB3NWY.js.map → whoami-L6ML7JM3.js.map} +1 -1
  57. package/{workflow-53UXJQ3D.js → workflow-BLP3CMIO.js} +5 -5
  58. package/zero.js +44 -44
  59. package/zero.js.map +1 -1
  60. package/chunk-7WB4KVQE.js.map +0 -1
  61. package/chunk-EZ73R7HD.js.map +0 -1
  62. package/chunk-IETGRCZK.js.map +0 -1
  63. package/chunk-M4SU5I2A.js +0 -22
  64. package/chunk-M4SU5I2A.js.map +0 -1
  65. package/connector-YFQAQMMS.js.map +0 -1
  66. /package/{banking-DUYVDT7L.js.map → banking-PNOHSE7S.js.map} +0 -0
  67. /package/{browser-DBAYVQXB.js.map → browser-UFNJUITM.js.map} +0 -0
  68. /package/{chat-G2QKUGOY.js.map → chat-PH6OB3OG.js.map} +0 -0
  69. /package/{chunk-NC5R52GN.js.map → chunk-54VZ2OFE.js.map} +0 -0
  70. /package/{chunk-RVSHE5GT.js.map → chunk-D4PDPVTM.js.map} +0 -0
  71. /package/{chunk-J6H722WP.js.map → chunk-HC3VQTS3.js.map} +0 -0
  72. /package/{chunk-NGHHPHNV.js.map → chunk-NMIHJQMF.js.map} +0 -0
  73. /package/{chunk-ZYLDUHM5.js.map → chunk-ZXORJITW.js.map} +0 -0
  74. /package/{computer-use-KNP76TLJ.js.map → computer-use-5PW5SAJF.js.map} +0 -0
  75. /package/{credit-4LUCEGXB.js.map → credit-2637AQL3.js.map} +0 -0
  76. /package/{developer-support-6DV3TJ7X.js.map → developer-support-KBUVSNAA.js.map} +0 -0
  77. /package/{doctor-2Z47KQPA.js.map → doctor-TJ7JVKRQ.js.map} +0 -0
  78. /package/{feishu-7KCTSMGF.js.map → feishu-B7N3BCO7.js.map} +0 -0
  79. /package/{finance-I5VANJ6K.js.map → finance-NU4A2BXT.js.map} +0 -0
  80. /package/{generate-G6EQUDEM.js.map → generate-M5QSAIFQ.js.map} +0 -0
  81. /package/{github-CJ4363DX.js.map → github-3PJHTYHL.js.map} +0 -0
  82. /package/{goal-ROXTX3LK.js.map → goal-SHSDGEO3.js.map} +0 -0
  83. /package/{host-G4AJ5EWK.js.map → host-FXDE5PCN.js.map} +0 -0
  84. /package/{logs-M4VAB52U.js.map → logs-UD7ZAI25.js.map} +0 -0
  85. /package/{mail-QWXL2VT5.js.map → mail-TZ34KKXR.js.map} +0 -0
  86. /package/{maps-XDH6Z75J.js.map → maps-G6IPODR4.js.map} +0 -0
  87. /package/{model-KG2WL2PA.js.map → model-ISADGL5J.js.map} +0 -0
  88. /package/{model-provider-PVYEO2FV.js.map → model-provider-ORRJ7SXI.js.map} +0 -0
  89. /package/{org-5QIO72BX.js.map → org-XCAALI32.js.map} +0 -0
  90. /package/{people-search-BYTQOOVP.js.map → people-search-Z63U5HNN.js.map} +0 -0
  91. /package/{phone-KCISIXPA.js.map → phone-RMOTPP5V.js.map} +0 -0
  92. /package/{preference-6XLVBPKU.js.map → preference-PGQGECCP.js.map} +0 -0
  93. /package/{recognize-IHDKJ3XF.js.map → recognize-SETED4XT.js.map} +0 -0
  94. /package/{resource-BHVESFE5.js.map → resource-K4TIHMWH.js.map} +0 -0
  95. /package/{scrape-CXFVBFEE.js.map → scrape-U62OMMH3.js.map} +0 -0
  96. /package/{search-WEXVWW7M.js.map → search-JGPAJXRI.js.map} +0 -0
  97. /package/{secret-KFE2N7B2.js.map → secret-OIOVF2AF.js.map} +0 -0
  98. /package/{slack-GVMWOROK.js.map → slack-P5RMUUGS.js.map} +0 -0
  99. /package/{teams-FPFYLHRU.js.map → teams-H24JJYGW.js.map} +0 -0
  100. /package/{telegram-QKVPAY66.js.map → telegram-UVKQG75J.js.map} +0 -0
  101. /package/{upgrade-NJG4QIAE.js.map → upgrade-EV2FKEUC.js.map} +0 -0
  102. /package/{variable-A3ITP47R.js.map → variable-RJ4GNVSZ.js.map} +0 -0
  103. /package/{video-KAF6LTMC.js.map → video-W3WRSDXS.js.map} +0 -0
  104. /package/{weather-NVRVKQRD.js.map → weather-OXS6ZSGW.js.map} +0 -0
  105. /package/{web-UDRHNY2O.js.map → web-GGTCDO2E.js.map} +0 -0
  106. /package/{web-search-KECYKFK5.js.map → web-search-3AFE6F4E.js.map} +0 -0
  107. /package/{workflow-53UXJQ3D.js.map → workflow-BLP3CMIO.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  getZeroAgent,
6
6
  getZeroAgentCustomConnectors,
7
7
  getZeroAgentUserConnectors
8
- } from "./chunk-IVOKTJ7O.js";
8
+ } from "./chunk-MKNW7UHN.js";
9
9
  import {
10
10
  init_esm_shims
11
11
  } from "./chunk-JKOHADWB.js";
@@ -355,4 +355,4 @@ export {
355
355
  resolveAgentContext,
356
356
  resolveConnectorDiscoveryAgentContext
357
357
  };
358
- //# sourceMappingURL=chunk-NGHHPHNV.js.map
358
+ //# sourceMappingURL=chunk-NMIHJQMF.js.map
@@ -4,11 +4,22 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  UNKNOWN_PERMISSION_GRANT,
6
6
  getZeroConnectorCatalogPermissions
7
- } from "./chunk-IVOKTJ7O.js";
7
+ } from "./chunk-MKNW7UHN.js";
8
+ import {
9
+ source_default
10
+ } from "./chunk-D4PDPVTM.js";
8
11
  import {
9
12
  init_esm_shims
10
13
  } from "./chunk-JKOHADWB.js";
11
14
 
15
+ // src/lib/utils/format-utils.ts
16
+ init_esm_shims();
17
+ function policyIcon(policy) {
18
+ if (policy === "allow") return source_default.green("\u2713");
19
+ if (policy === "ask") return source_default.yellow("?");
20
+ return source_default.dim("\u2717");
21
+ }
22
+
12
23
  // src/commands/zero/shared/firewall-permissions.ts
13
24
  init_esm_shims();
14
25
 
@@ -88,11 +99,6 @@ function expandFirewallMetadataDefaultPolicy(metadata) {
88
99
  unknownPolicy: resolver.unknown()
89
100
  };
90
101
  }
91
- function findFirewallMetadataPermission(metadata, name) {
92
- return metadata.permissions.find((permission) => {
93
- return permission.name === name;
94
- }) ?? null;
95
- }
96
102
  function resolveFirewallMetadataPolicies(stored, metadata) {
97
103
  let resolved = stored;
98
104
  for (const detail of metadata) {
@@ -194,13 +200,10 @@ async function loadConnectorPermissionInfos(args) {
194
200
  function connectorPermissionGrantsToFirewallPolicies(grants) {
195
201
  return permissionGrantsToFirewallPolicies(grants);
196
202
  }
197
- function hasConnectorFirewallMetadataPermission(metadata, permission) {
198
- return findFirewallMetadataPermission(metadata, permission) !== null;
199
- }
200
203
 
201
204
  export {
205
+ policyIcon,
202
206
  loadConnectorPermissionInfos,
203
- connectorPermissionGrantsToFirewallPolicies,
204
- hasConnectorFirewallMetadataPermission
207
+ connectorPermissionGrantsToFirewallPolicies
205
208
  };
206
- //# sourceMappingURL=chunk-IETGRCZK.js.map
209
+ //# sourceMappingURL=chunk-TRNUF7VD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils/format-utils.ts","../src/commands/zero/shared/firewall-permissions.ts","../../../packages/connectors/src/firewall-metadata/policy.ts","../../../packages/connectors/src/firewall-metadata/policy-resolver.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","import {\n permissionGrantsToFirewallPolicies,\n resolveFirewallMetadataPolicies,\n} from \"@vm0/connectors/firewall-metadata/policy\";\nimport type {\n FirewallPolicies,\n FirewallPolicyValue,\n} from \"@vm0/connectors/firewall-types\";\nimport { getZeroConnectorCatalogPermissions } from \"../../../lib/api\";\nimport type { ZeroUserPermissionGrant } from \"../../../lib/api/domains/zero-agents\";\nimport type { ZeroConnectorCatalogPermissionDetail } from \"../../../lib/api/domains/zero-connectors\";\n\nexport interface ConnectorPermissionInfo {\n readonly connectorSlug: string;\n readonly hasPermissions: boolean;\n readonly hasPolicyEntry: boolean;\n readonly permissions: readonly ZeroConnectorCatalogPermissionDetail[\"permissions\"][number][];\n readonly policies: Readonly<Record<string, FirewallPolicyValue>> | null;\n readonly unknownPolicy: FirewallPolicyValue;\n readonly allowed: number;\n readonly total: number;\n}\n\ntype PermissionMetadataBySlug = Map<\n string,\n ZeroConnectorCatalogPermissionDetail | null\n>;\n\nasync function loadPermissionMetadataBySlug(\n connectorSlugs: readonly string[],\n): Promise<PermissionMetadataBySlug> {\n const uniqueConnectorSlugs = [...new Set(connectorSlugs)];\n const entries = await Promise.all(\n uniqueConnectorSlugs.map(async (connectorSlug) => {\n return [\n connectorSlug,\n await getZeroConnectorCatalogPermissions(connectorSlug),\n ] as const;\n }),\n );\n return new Map(entries);\n}\n\nfunction connectorPermissionInfo(args: {\n readonly connectorSlug: string;\n readonly metadata: ZeroConnectorCatalogPermissionDetail | null;\n readonly resolvedPolicies: FirewallPolicies | null;\n}): ConnectorPermissionInfo {\n if (!args.metadata) {\n return {\n connectorSlug: args.connectorSlug,\n hasPermissions: false,\n hasPolicyEntry: false,\n permissions: [],\n policies: null,\n unknownPolicy: \"allow\",\n allowed: 0,\n total: 0,\n };\n }\n\n const connectorPolicy = args.resolvedPolicies?.[args.metadata.connectorSlug];\n const policies =\n connectorPolicy && Object.keys(connectorPolicy.policies).length > 0\n ? connectorPolicy.policies\n : null;\n const total = args.metadata.permissions.length;\n const allowed = policies\n ? args.metadata.permissions.filter((permission) => {\n return policies[permission.name] === \"allow\";\n }).length\n : 0;\n\n return {\n connectorSlug: args.connectorSlug,\n hasPermissions: true,\n hasPolicyEntry: connectorPolicy !== undefined,\n permissions: args.metadata.permissions,\n policies,\n unknownPolicy: connectorPolicy?.unknownPolicy ?? \"allow\",\n allowed,\n total,\n };\n}\n\nexport async function loadConnectorPermissionInfos(args: {\n readonly displayConnectorSlugs: readonly string[];\n readonly defaultPolicyConnectorSlugs: readonly string[];\n readonly storedPolicies: FirewallPolicies | null;\n}): Promise<ConnectorPermissionInfo[]> {\n const metadataBySlug = await loadPermissionMetadataBySlug([\n ...args.displayConnectorSlugs,\n ...args.defaultPolicyConnectorSlugs,\n ]);\n const defaultPolicyMetadata = args.defaultPolicyConnectorSlugs.flatMap(\n (connectorSlug) => {\n const metadata = metadataBySlug.get(connectorSlug);\n return metadata ? [metadata] : [];\n },\n );\n const resolvedPolicies = resolveFirewallMetadataPolicies(\n args.storedPolicies,\n defaultPolicyMetadata,\n );\n\n return args.displayConnectorSlugs.map((connectorSlug) => {\n return connectorPermissionInfo({\n connectorSlug,\n metadata: metadataBySlug.get(connectorSlug) ?? null,\n resolvedPolicies,\n });\n });\n}\n\nexport function connectorPermissionGrantsToFirewallPolicies(\n grants: readonly ZeroUserPermissionGrant[],\n): FirewallPolicies | null {\n return permissionGrantsToFirewallPolicies(grants);\n}\n","import {\n UNKNOWN_PERMISSION_GRANT,\n type FirewallPolicies,\n type FirewallPolicy,\n type FirewallPolicyValue,\n} from \"../firewall-types\";\nimport { createFirewallMetadataPolicyResolver } from \"./policy-resolver\";\n\nexport type {\n FirewallMetadataPolicyListState,\n FirewallMetadataPolicyOverlay,\n FirewallMetadataPolicyResolver,\n} from \"./policy-resolver\";\n\nexport interface FirewallPermissionPolicyMetadataPermission {\n readonly name: string;\n readonly description?: string;\n}\n\nexport interface FirewallPermissionPolicyCategoryMetadata {\n readonly categories: Readonly<Record<string, string>>;\n readonly displayOrder: readonly string[];\n}\n\nexport type FirewallPermissionPolicyDefaultOverrides = Readonly<\n Partial<Record<FirewallPolicyValue, readonly string[]>>\n>;\n\nexport interface FirewallPermissionPolicyDefaultMetadata {\n readonly permissionDefault: FirewallPolicyValue;\n readonly permissionOverrides?: FirewallPermissionPolicyDefaultOverrides;\n readonly unknownPolicy: FirewallPolicyValue;\n}\n\ninterface FirewallPermissionPolicyMetadataBase {\n readonly label: string;\n readonly permissionCount: number;\n readonly permissions: readonly FirewallPermissionPolicyMetadataPermission[];\n readonly categories?: FirewallPermissionPolicyCategoryMetadata | null;\n readonly defaultPolicy: FirewallPermissionPolicyDefaultMetadata;\n}\n\nexport interface FirewallPermissionPolicyMetadata extends FirewallPermissionPolicyMetadataBase {\n readonly connectorSlug: string;\n}\n\nexport interface FirewallMetadataPermissionGroup<T extends { name: string }> {\n readonly category: string;\n readonly permissions: T[];\n}\n\nexport type FirewallPermissionGrantAction = Extract<\n FirewallPolicyValue,\n \"allow\" | \"deny\"\n>;\n\nexport interface FirewallPermissionGrant {\n readonly connectorSlug: string;\n readonly permission: string;\n readonly action: FirewallPermissionGrantAction;\n}\n\nexport { createFirewallMetadataPolicyResolver };\n\nexport function expandFirewallMetadataDefaultPolicy(\n metadata: FirewallPermissionPolicyMetadata,\n): FirewallPolicy {\n const resolver = createFirewallMetadataPolicyResolver(metadata);\n const policies: Record<string, FirewallPolicyValue> = {};\n\n for (const permission of metadata.permissions) {\n policies[permission.name] = resolver.permission(permission.name);\n }\n\n return {\n policies,\n unknownPolicy: resolver.unknown(),\n };\n}\n\nexport function findFirewallMetadataPermission(\n metadata: FirewallPermissionPolicyMetadata,\n name: string,\n): FirewallPermissionPolicyMetadata[\"permissions\"][number] | null {\n return (\n metadata.permissions.find((permission) => {\n return permission.name === name;\n }) ?? null\n );\n}\n\nexport function groupFirewallMetadataPermissionsByCategory<\n T extends { name: string },\n>(\n permissions: readonly T[],\n metadata: FirewallPermissionPolicyMetadata,\n): FirewallMetadataPermissionGroup<T>[] | null {\n if (!metadata.categories) {\n return null;\n }\n\n const grouped = new Map<string, T[]>();\n for (const category of metadata.categories.displayOrder) {\n grouped.set(category, []);\n }\n\n for (const permission of permissions) {\n const category = metadata.categories.categories[permission.name];\n if (!category) {\n continue;\n }\n grouped.get(category)?.push(permission);\n }\n\n return [...grouped.entries()]\n .filter(([, groupPermissions]) => {\n return groupPermissions.length > 0;\n })\n .map(([category, groupPermissions]) => {\n return { category, permissions: groupPermissions };\n });\n}\n\nexport function resolveFirewallMetadataPolicies(\n stored: FirewallPolicies | null,\n metadata: readonly FirewallPermissionPolicyMetadata[],\n): FirewallPolicies | null {\n let resolved: FirewallPolicies | null = stored;\n for (const detail of metadata) {\n const defaults = expandFirewallMetadataDefaultPolicy(detail);\n const existing = resolved?.[detail.connectorSlug];\n resolved = {\n ...resolved,\n [detail.connectorSlug]: {\n policies: { ...defaults.policies, ...existing?.policies },\n ...(existing?.unknownPolicy !== undefined\n ? { unknownPolicy: existing.unknownPolicy }\n : { unknownPolicy: defaults.unknownPolicy }),\n },\n };\n }\n return resolved;\n}\n\nexport function permissionGrantsToFirewallPolicies(\n grants: readonly FirewallPermissionGrant[],\n): FirewallPolicies | null {\n const policies: FirewallPolicies = {};\n for (const grant of grants) {\n const current = policies[grant.connectorSlug] ?? { policies: {} };\n if (grant.permission === UNKNOWN_PERMISSION_GRANT) {\n policies[grant.connectorSlug] = {\n ...current,\n unknownPolicy: grant.action,\n };\n continue;\n }\n current.policies[grant.permission] = grant.action;\n policies[grant.connectorSlug] = current;\n }\n return Object.keys(policies).length > 0 ? policies : null;\n}\n","import type { FirewallPolicyValue } from \"../firewall-types\";\n\ninterface FirewallMetadataPolicyResolverMetadata {\n readonly defaultPolicy: {\n readonly permissionDefault: FirewallPolicyValue;\n readonly permissionOverrides?: Readonly<\n Partial<Record<FirewallPolicyValue, readonly string[]>>\n >;\n readonly unknownPolicy: FirewallPolicyValue;\n };\n}\n\nexport interface FirewallMetadataPolicyOverlay {\n readonly permissionDefault?: FirewallPolicyValue;\n readonly permissionOverrides?: Readonly<Record<string, FirewallPolicyValue>>;\n readonly unknownPolicy?: FirewallPolicyValue;\n}\n\nexport type FirewallMetadataPolicyListState = FirewallPolicyValue | \"mixed\";\n\n/**\n * Resolves generated metadata defaults with an optional sparse policy overlay.\n * Permission name validation belongs to callers; unknown endpoints use unknown().\n */\nexport interface FirewallMetadataPolicyResolver {\n permission(name: string): FirewallPolicyValue;\n unknown(): FirewallPolicyValue;\n list(permissionNames: readonly string[]): FirewallMetadataPolicyListState;\n isPermissionOverridden(name: string): boolean;\n isUnknownOverridden(): boolean;\n}\n\nfunction buildMetadataOverrideLookup(\n metadata: FirewallMetadataPolicyResolverMetadata,\n): ReadonlyMap<string, FirewallPolicyValue> {\n const overrides = metadata.defaultPolicy.permissionOverrides;\n const lookup = new Map<string, FirewallPolicyValue>();\n if (!overrides) {\n return lookup;\n }\n\n for (const permission of overrides.allow ?? []) {\n lookup.set(permission, \"allow\");\n }\n for (const permission of overrides.deny ?? []) {\n lookup.set(permission, \"deny\");\n }\n for (const permission of overrides.ask ?? []) {\n lookup.set(permission, \"ask\");\n }\n\n return lookup;\n}\n\nfunction getOwnPermissionOverride(\n overrides: Readonly<Record<string, FirewallPolicyValue>> | undefined,\n name: string,\n): FirewallPolicyValue | undefined {\n if (!overrides || !Object.prototype.hasOwnProperty.call(overrides, name)) {\n return undefined;\n }\n return overrides[name];\n}\n\nexport function createFirewallMetadataPolicyResolver(\n metadata: FirewallMetadataPolicyResolverMetadata,\n overlay?: FirewallMetadataPolicyOverlay,\n): FirewallMetadataPolicyResolver {\n const metadataOverrides = buildMetadataOverrideLookup(metadata);\n\n function metadataPermission(name: string): FirewallPolicyValue {\n return (\n metadataOverrides.get(name) ?? metadata.defaultPolicy.permissionDefault\n );\n }\n\n function permission(name: string): FirewallPolicyValue {\n return (\n getOwnPermissionOverride(overlay?.permissionOverrides, name) ??\n overlay?.permissionDefault ??\n metadataPermission(name)\n );\n }\n\n return {\n permission,\n unknown: () => {\n return overlay?.unknownPolicy ?? metadata.defaultPolicy.unknownPolicy;\n },\n list: (permissionNames) => {\n let first: FirewallPolicyValue | null = null;\n for (const name of permissionNames) {\n const current = permission(name);\n if (first === null) {\n first = current;\n continue;\n }\n if (first !== current) {\n return \"mixed\";\n }\n }\n return first ?? \"mixed\";\n },\n isPermissionOverridden: (name) => {\n return permission(name) !== metadataPermission(name);\n },\n isUnknownOverridden: () => {\n return (\n (overlay?.unknownPolicy ?? metadata.defaultPolicy.unknownPolicy) !==\n metadata.defaultPolicy.unknownPolicy\n );\n },\n };\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;;;ACPA;;;ACAA;;;ACAA;AAgCA,SAAS,4BACP,UAC0C;AAC1C,QAAM,YAAY,SAAS,cAAc;AACzC,QAAM,SAAS,oBAAI,IAAiC;AACpD,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,aAAW,cAAc,UAAU,SAAS,CAAC,GAAG;AAC9C,WAAO,IAAI,YAAY,OAAO;AAAA,EAChC;AACA,aAAW,cAAc,UAAU,QAAQ,CAAC,GAAG;AAC7C,WAAO,IAAI,YAAY,MAAM;AAAA,EAC/B;AACA,aAAW,cAAc,UAAU,OAAO,CAAC,GAAG;AAC5C,WAAO,IAAI,YAAY,KAAK;AAAA,EAC9B;AAEA,SAAO;AACT;AAEA,SAAS,yBACP,WACA,MACiC;AACjC,MAAI,CAAC,aAAa,CAAC,OAAO,UAAU,eAAe,KAAK,WAAW,IAAI,GAAG;AACxE,WAAO;AAAA,EACT;AACA,SAAO,UAAU,IAAI;AACvB;AAEO,SAAS,qCACd,UACA,SACgC;AAChC,QAAM,oBAAoB,4BAA4B,QAAQ;AAE9D,WAAS,mBAAmB,MAAmC;AAC7D,WACE,kBAAkB,IAAI,IAAI,KAAK,SAAS,cAAc;AAAA,EAE1D;AAEA,WAAS,WAAW,MAAmC;AACrD,WACE,yBAAyB,SAAS,qBAAqB,IAAI,KAC3D,SAAS,qBACT,mBAAmB,IAAI;AAAA,EAE3B;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM;AACb,aAAO,SAAS,iBAAiB,SAAS,cAAc;AAAA,IAC1D;AAAA,IACA,MAAM,CAAC,oBAAoB;AACzB,UAAI,QAAoC;AACxC,iBAAW,QAAQ,iBAAiB;AAClC,cAAM,UAAU,WAAW,IAAI;AAC/B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AACR;AAAA,QACF;AACA,YAAI,UAAU,SAAS;AACrB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,wBAAwB,CAAC,SAAS;AAChC,aAAO,WAAW,IAAI,MAAM,mBAAmB,IAAI;AAAA,IACrD;AAAA,IACA,qBAAqB,MAAM;AACzB,cACG,SAAS,iBAAiB,SAAS,cAAc,mBAClD,SAAS,cAAc;AAAA,IAE3B;AAAA,EACF;AACF;;;ADjDO,SAAS,oCACd,UACgB;AAChB,QAAM,WAAW,qCAAqC,QAAQ;AAC9D,QAAM,WAAgD,CAAC;AAEvD,aAAW,cAAc,SAAS,aAAa;AAC7C,aAAS,WAAW,IAAI,IAAI,SAAS,WAAW,WAAW,IAAI;AAAA,EACjE;AAEA,SAAO;AAAA,IACL;AAAA,IACA,eAAe,SAAS,QAAQ;AAAA,EAClC;AACF;AA6CO,SAAS,gCACd,QACA,UACyB;AACzB,MAAI,WAAoC;AACxC,aAAW,UAAU,UAAU;AAC7B,UAAM,WAAW,oCAAoC,MAAM;AAC3D,UAAM,WAAW,WAAW,OAAO,aAAa;AAChD,eAAW;AAAA,MACT,GAAG;AAAA,MACH,CAAC,OAAO,aAAa,GAAG;AAAA,QACtB,UAAU,EAAE,GAAG,SAAS,UAAU,GAAG,UAAU,SAAS;AAAA,QACxD,GAAI,UAAU,kBAAkB,SAC5B,EAAE,eAAe,SAAS,cAAc,IACxC,EAAE,eAAe,SAAS,cAAc;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mCACd,QACyB;AACzB,QAAM,WAA6B,CAAC;AACpC,aAAW,SAAS,QAAQ;AAC1B,UAAM,UAAU,SAAS,MAAM,aAAa,KAAK,EAAE,UAAU,CAAC,EAAE;AAChE,QAAI,MAAM,eAAe,0BAA0B;AACjD,eAAS,MAAM,aAAa,IAAI;AAAA,QAC9B,GAAG;AAAA,QACH,eAAe,MAAM;AAAA,MACvB;AACA;AAAA,IACF;AACA,YAAQ,SAAS,MAAM,UAAU,IAAI,MAAM;AAC3C,aAAS,MAAM,aAAa,IAAI;AAAA,EAClC;AACA,SAAO,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,WAAW;AACvD;;;ADrIA,eAAe,6BACb,gBACmC;AACnC,QAAM,uBAAuB,CAAC,GAAG,IAAI,IAAI,cAAc,CAAC;AACxD,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,qBAAqB,IAAI,OAAO,kBAAkB;AAChD,aAAO;AAAA,QACL;AAAA,QACA,MAAM,mCAAmC,aAAa;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,IAAI,IAAI,OAAO;AACxB;AAEA,SAAS,wBAAwB,MAIL;AAC1B,MAAI,CAAC,KAAK,UAAU;AAClB,WAAO;AAAA,MACL,eAAe,KAAK;AAAA,MACpB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,aAAa,CAAC;AAAA,MACd,UAAU;AAAA,MACV,eAAe;AAAA,MACf,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,kBAAkB,KAAK,mBAAmB,KAAK,SAAS,aAAa;AAC3E,QAAM,WACJ,mBAAmB,OAAO,KAAK,gBAAgB,QAAQ,EAAE,SAAS,IAC9D,gBAAgB,WAChB;AACN,QAAM,QAAQ,KAAK,SAAS,YAAY;AACxC,QAAM,UAAU,WACZ,KAAK,SAAS,YAAY,OAAO,CAAC,eAAe;AAC/C,WAAO,SAAS,WAAW,IAAI,MAAM;AAAA,EACvC,CAAC,EAAE,SACH;AAEJ,SAAO;AAAA,IACL,eAAe,KAAK;AAAA,IACpB,gBAAgB;AAAA,IAChB,gBAAgB,oBAAoB;AAAA,IACpC,aAAa,KAAK,SAAS;AAAA,IAC3B;AAAA,IACA,eAAe,iBAAiB,iBAAiB;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,6BAA6B,MAIZ;AACrC,QAAM,iBAAiB,MAAM,6BAA6B;AAAA,IACxD,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,EACV,CAAC;AACD,QAAM,wBAAwB,KAAK,4BAA4B;AAAA,IAC7D,CAAC,kBAAkB;AACjB,YAAM,WAAW,eAAe,IAAI,aAAa;AACjD,aAAO,WAAW,CAAC,QAAQ,IAAI,CAAC;AAAA,IAClC;AAAA,EACF;AACA,QAAM,mBAAmB;AAAA,IACvB,KAAK;AAAA,IACL;AAAA,EACF;AAEA,SAAO,KAAK,sBAAsB,IAAI,CAAC,kBAAkB;AACvD,WAAO,wBAAwB;AAAA,MAC7B;AAAA,MACA,UAAU,eAAe,IAAI,aAAa,KAAK;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,4CACd,QACyB;AACzB,SAAO,mCAAmC,MAAM;AAClD;","names":[]}
@@ -19,7 +19,7 @@ import {
19
19
  searchZeroLogs,
20
20
  unifiedRunRequestSchema,
21
21
  zeroAgentVisibilitySchema
22
- } from "./chunk-IVOKTJ7O.js";
22
+ } from "./chunk-MKNW7UHN.js";
23
23
  import {
24
24
  apiErrorSchema,
25
25
  external_exports,
@@ -33,7 +33,7 @@ import {
33
33
  upsertModelProviderRequestSchema,
34
34
  upsertModelProviderResponseSchema,
35
35
  withErrorHandler
36
- } from "./chunk-RVSHE5GT.js";
36
+ } from "./chunk-D4PDPVTM.js";
37
37
  import {
38
38
  Command
39
39
  } from "./chunk-FR224MDH.js";
@@ -13409,7 +13409,12 @@ var featureSwitchesResponseSchema = external_exports.object({
13409
13409
  * Optional capability handshake for admin-defined model gateways.
13410
13410
  * Older API deployments omit this field.
13411
13411
  */
13412
- supportsCustomModelGateways: external_exports.boolean().optional()
13412
+ supportsCustomModelGateways: external_exports.boolean().optional(),
13413
+ /**
13414
+ * Optional capability handshake for managed image recognition.
13415
+ * Older API deployments omit this field.
13416
+ */
13417
+ supportsImageRecognition: external_exports.boolean().optional()
13413
13418
  });
13414
13419
  var updateFeatureSwitchesRequestSchema = external_exports.object({
13415
13420
  switches: external_exports.record(external_exports.string(), external_exports.boolean())
@@ -18148,4 +18153,4 @@ export {
18148
18153
  runLogsSearch,
18149
18154
  searchCommand
18150
18155
  };
18151
- //# sourceMappingURL=chunk-EZ73R7HD.js.map
18156
+ //# sourceMappingURL=chunk-VMLNVQNL.js.map