@vm0/cli 9.272.3 → 9.272.5

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 (108) hide show
  1. package/{agent-F64C2ATY.js → agent-F7F3KM3B.js} +6 -6
  2. package/{banking-5KPGIHH6.js → banking-Y2JIG3JF.js} +4 -4
  3. package/{browser-2QHUTBEC.js → browser-TABNG7ZN.js} +4 -4
  4. package/{chat-N535BKBW.js → chat-M3XVQGDJ.js} +5 -5
  5. package/{chunk-PQ4CD7RN.js → chunk-2D4YK5MB.js} +6 -13
  6. package/chunk-2D4YK5MB.js.map +1 -0
  7. package/{chunk-MO5N6DLH.js → chunk-FRY7RS3B.js} +4 -4
  8. package/chunk-FRY7RS3B.js.map +1 -0
  9. package/{chunk-3P5LSOOY.js → chunk-G7HGHBG7.js} +2 -2
  10. package/{chunk-E4425LE5.js → chunk-I3CP2OUW.js} +10 -23
  11. package/chunk-I3CP2OUW.js.map +1 -0
  12. package/{chunk-E7OSQSSO.js → chunk-IPXIHHOL.js} +22 -28
  13. package/chunk-IPXIHHOL.js.map +1 -0
  14. package/{chunk-QBONSSC2.js → chunk-IY4OMWHD.js} +2 -2
  15. package/{chunk-FAKZNGMW.js → chunk-Q3UIEGE5.js} +2 -2
  16. package/{chunk-EJP3XA5L.js → chunk-TDK3LW6K.js} +2 -2
  17. package/{chunk-6EVGCQBA.js → chunk-V2OXQR2E.js} +1 -6
  18. package/chunk-V2OXQR2E.js.map +1 -0
  19. package/{chunk-GPZP2KSC.js → chunk-VKBLJ52A.js} +2 -2
  20. package/{chunk-AEXSBI4X.js → chunk-Y45ZWVQI.js} +2 -2
  21. package/{computer-use-5CZADQE7.js → computer-use-TIJIZFTW.js} +4 -4
  22. package/{connector-WTBJ2ZAE.js → connector-MV4W2TL3.js} +7 -7
  23. package/{credit-W2U4AVQC.js → credit-TFFLQJ4B.js} +5 -5
  24. package/{developer-support-6PHDMLFR.js → developer-support-ISES5JUK.js} +4 -4
  25. package/{doctor-T5PIALKR.js → doctor-INXB5N7P.js} +5 -5
  26. package/{feishu-BI5P7WS6.js → feishu-NU46JSRH.js} +4 -4
  27. package/{finance-NBFOYANP.js → finance-BRRDCIM7.js} +4 -4
  28. package/{generate-K2EL2AWV.js → generate-5GWWO5AC.js} +6 -12
  29. package/generate-5GWWO5AC.js.map +1 -0
  30. package/{github-M7IVQ7E2.js → github-5M2RPPAF.js} +4 -4
  31. package/{goal-RHGHUVAZ.js → goal-366JCEZF.js} +4 -4
  32. package/{host-6EZNVYXK.js → host-2PW2BBJ7.js} +4 -4
  33. package/{logs-JAQ3UY73.js → logs-IZ5XKEF7.js} +7 -7
  34. package/{mail-CONS7YLP.js → mail-2SVI6SYB.js} +6 -6
  35. package/{maps-IP5PYXOG.js → maps-CL3R7Q6C.js} +4 -4
  36. package/{model-EH3FH7JE.js → model-QVUHZ6II.js} +5 -5
  37. package/{model-provider-73ZSONFY.js → model-provider-A645NSWD.js} +5 -5
  38. package/{org-KHY6YKHO.js → org-I2U7ZAUE.js} +4 -4
  39. package/package.json +1 -1
  40. package/{people-search-C4PKDB3B.js → people-search-23KPL2H5.js} +4 -4
  41. package/{phone-MCDYKFPI.js → phone-L6OSBGCW.js} +4 -4
  42. package/{preference-CCUWDRU2.js → preference-X6YKDMP6.js} +4 -4
  43. package/{resource-HTSS7I77.js → resource-BIXVRVVH.js} +5 -5
  44. package/{scrape-U67KM4JI.js → scrape-GDKZGREN.js} +4 -4
  45. package/{search-MO2UNRCL.js → search-JZVPSX5Q.js} +7 -7
  46. package/{secret-K6MYNKSW.js → secret-RSI5UHKQ.js} +4 -4
  47. package/{slack-F73N2OCS.js → slack-WEEKZY6Y.js} +4 -4
  48. package/{teams-JLMKYH34.js → teams-77B556LR.js} +4 -4
  49. package/{telegram-4XAUJHQV.js → telegram-DB7XHFWN.js} +4 -4
  50. package/{upgrade-4Q76V7VY.js → upgrade-NJYXFKAA.js} +3 -3
  51. package/{variable-PEZTUIJ2.js → variable-MP3KMM4Q.js} +4 -4
  52. package/{video-YHZ4Y7BW.js → video-DGITYEHG.js} +3 -3
  53. package/{weather-4ITYJTCK.js → weather-G45LEI52.js} +4 -4
  54. package/{web-XU757UB4.js → web-YFPEWYIY.js} +4 -4
  55. package/{web-search-I54LUMYE.js → web-search-4SB63KNV.js} +4 -4
  56. package/{whoami-A4ZDSNID.js → whoami-MCELWKLL.js} +6 -6
  57. package/{workflow-KGKEZHTW.js → workflow-SQECJ4GO.js} +5 -5
  58. package/zero.js +43 -43
  59. package/chunk-6EVGCQBA.js.map +0 -1
  60. package/chunk-E4425LE5.js.map +0 -1
  61. package/chunk-E7OSQSSO.js.map +0 -1
  62. package/chunk-MO5N6DLH.js.map +0 -1
  63. package/chunk-PQ4CD7RN.js.map +0 -1
  64. package/generate-K2EL2AWV.js.map +0 -1
  65. /package/{agent-F64C2ATY.js.map → agent-F7F3KM3B.js.map} +0 -0
  66. /package/{banking-5KPGIHH6.js.map → banking-Y2JIG3JF.js.map} +0 -0
  67. /package/{browser-2QHUTBEC.js.map → browser-TABNG7ZN.js.map} +0 -0
  68. /package/{chat-N535BKBW.js.map → chat-M3XVQGDJ.js.map} +0 -0
  69. /package/{chunk-3P5LSOOY.js.map → chunk-G7HGHBG7.js.map} +0 -0
  70. /package/{chunk-QBONSSC2.js.map → chunk-IY4OMWHD.js.map} +0 -0
  71. /package/{chunk-FAKZNGMW.js.map → chunk-Q3UIEGE5.js.map} +0 -0
  72. /package/{chunk-EJP3XA5L.js.map → chunk-TDK3LW6K.js.map} +0 -0
  73. /package/{chunk-GPZP2KSC.js.map → chunk-VKBLJ52A.js.map} +0 -0
  74. /package/{chunk-AEXSBI4X.js.map → chunk-Y45ZWVQI.js.map} +0 -0
  75. /package/{computer-use-5CZADQE7.js.map → computer-use-TIJIZFTW.js.map} +0 -0
  76. /package/{connector-WTBJ2ZAE.js.map → connector-MV4W2TL3.js.map} +0 -0
  77. /package/{credit-W2U4AVQC.js.map → credit-TFFLQJ4B.js.map} +0 -0
  78. /package/{developer-support-6PHDMLFR.js.map → developer-support-ISES5JUK.js.map} +0 -0
  79. /package/{doctor-T5PIALKR.js.map → doctor-INXB5N7P.js.map} +0 -0
  80. /package/{feishu-BI5P7WS6.js.map → feishu-NU46JSRH.js.map} +0 -0
  81. /package/{finance-NBFOYANP.js.map → finance-BRRDCIM7.js.map} +0 -0
  82. /package/{github-M7IVQ7E2.js.map → github-5M2RPPAF.js.map} +0 -0
  83. /package/{goal-RHGHUVAZ.js.map → goal-366JCEZF.js.map} +0 -0
  84. /package/{host-6EZNVYXK.js.map → host-2PW2BBJ7.js.map} +0 -0
  85. /package/{logs-JAQ3UY73.js.map → logs-IZ5XKEF7.js.map} +0 -0
  86. /package/{mail-CONS7YLP.js.map → mail-2SVI6SYB.js.map} +0 -0
  87. /package/{maps-IP5PYXOG.js.map → maps-CL3R7Q6C.js.map} +0 -0
  88. /package/{model-EH3FH7JE.js.map → model-QVUHZ6II.js.map} +0 -0
  89. /package/{model-provider-73ZSONFY.js.map → model-provider-A645NSWD.js.map} +0 -0
  90. /package/{org-KHY6YKHO.js.map → org-I2U7ZAUE.js.map} +0 -0
  91. /package/{people-search-C4PKDB3B.js.map → people-search-23KPL2H5.js.map} +0 -0
  92. /package/{phone-MCDYKFPI.js.map → phone-L6OSBGCW.js.map} +0 -0
  93. /package/{preference-CCUWDRU2.js.map → preference-X6YKDMP6.js.map} +0 -0
  94. /package/{resource-HTSS7I77.js.map → resource-BIXVRVVH.js.map} +0 -0
  95. /package/{scrape-U67KM4JI.js.map → scrape-GDKZGREN.js.map} +0 -0
  96. /package/{search-MO2UNRCL.js.map → search-JZVPSX5Q.js.map} +0 -0
  97. /package/{secret-K6MYNKSW.js.map → secret-RSI5UHKQ.js.map} +0 -0
  98. /package/{slack-F73N2OCS.js.map → slack-WEEKZY6Y.js.map} +0 -0
  99. /package/{teams-JLMKYH34.js.map → teams-77B556LR.js.map} +0 -0
  100. /package/{telegram-4XAUJHQV.js.map → telegram-DB7XHFWN.js.map} +0 -0
  101. /package/{upgrade-4Q76V7VY.js.map → upgrade-NJYXFKAA.js.map} +0 -0
  102. /package/{variable-PEZTUIJ2.js.map → variable-MP3KMM4Q.js.map} +0 -0
  103. /package/{video-YHZ4Y7BW.js.map → video-DGITYEHG.js.map} +0 -0
  104. /package/{weather-4ITYJTCK.js.map → weather-G45LEI52.js.map} +0 -0
  105. /package/{web-XU757UB4.js.map → web-YFPEWYIY.js.map} +0 -0
  106. /package/{web-search-I54LUMYE.js.map → web-search-4SB63KNV.js.map} +0 -0
  107. /package/{whoami-A4ZDSNID.js.map → whoami-MCELWKLL.js.map} +0 -0
  108. /package/{workflow-KGKEZHTW.js.map → workflow-SQECJ4GO.js.map} +0 -0
@@ -15385,7 +15385,7 @@ function createCliClientHeaderInjector(options) {
15385
15385
  };
15386
15386
  }
15387
15387
  var addDefaultCliClientHeaders = createCliClientHeaderInjector({
15388
- clientVersion: "9.272.3"
15388
+ clientVersion: "9.272.5"
15389
15389
  });
15390
15390
  function addCliClientHeaders(headers) {
15391
15391
  addDefaultCliClientHeaders(headers);
@@ -16805,4 +16805,4 @@ export {
16805
16805
  apiErrorSchema,
16806
16806
  withErrorHandler
16807
16807
  };
16808
- //# sourceMappingURL=chunk-3P5LSOOY.js.map
16808
+ //# sourceMappingURL=chunk-G7HGHBG7.js.map
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  UNKNOWN_PERMISSION_GRANT,
6
6
  getZeroConnectorCatalogPermissions
7
- } from "./chunk-E7OSQSSO.js";
7
+ } from "./chunk-IPXIHHOL.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-GPYQ24DR.js";
@@ -77,9 +77,6 @@ function createFirewallMetadataPolicyResolver(metadata, overlay) {
77
77
  }
78
78
 
79
79
  // ../../packages/connectors/src/firewall-metadata/policy.ts
80
- function metadataConnectorSlug(metadata) {
81
- return metadata.connectorRef ?? metadata.type;
82
- }
83
80
  function expandFirewallMetadataDefaultPolicy(metadata) {
84
81
  const resolver = createFirewallMetadataPolicyResolver(metadata);
85
82
  const policies = {};
@@ -99,12 +96,11 @@ function findFirewallMetadataPermission(metadata, name) {
99
96
  function resolveFirewallMetadataPolicies(stored, metadata) {
100
97
  let resolved = stored;
101
98
  for (const detail of metadata) {
102
- const connectorSlug = metadataConnectorSlug(detail);
103
99
  const defaults = expandFirewallMetadataDefaultPolicy(detail);
104
- const existing = resolved?.[connectorSlug];
100
+ const existing = resolved?.[detail.connectorSlug];
105
101
  resolved = {
106
102
  ...resolved,
107
- [connectorSlug]: {
103
+ [detail.connectorSlug]: {
108
104
  policies: { ...defaults.policies, ...existing?.policies },
109
105
  ...existing?.unknownPolicy !== void 0 ? { unknownPolicy: existing.unknownPolicy } : { unknownPolicy: defaults.unknownPolicy }
110
106
  }
@@ -115,16 +111,16 @@ function resolveFirewallMetadataPolicies(stored, metadata) {
115
111
  function permissionGrantsToFirewallPolicies(grants) {
116
112
  const policies = {};
117
113
  for (const grant of grants) {
118
- const current = policies[grant.connectorRef] ?? { policies: {} };
114
+ const current = policies[grant.connectorSlug] ?? { policies: {} };
119
115
  if (grant.permission === UNKNOWN_PERMISSION_GRANT) {
120
- policies[grant.connectorRef] = {
116
+ policies[grant.connectorSlug] = {
121
117
  ...current,
122
118
  unknownPolicy: grant.action
123
119
  };
124
120
  continue;
125
121
  }
126
122
  current.policies[grant.permission] = grant.action;
127
- policies[grant.connectorRef] = current;
123
+ policies[grant.connectorSlug] = current;
128
124
  }
129
125
  return Object.keys(policies).length > 0 ? policies : null;
130
126
  }
@@ -185,9 +181,7 @@ async function loadConnectorPermissionInfos(args) {
185
181
  );
186
182
  const resolvedPolicies = resolveFirewallMetadataPolicies(
187
183
  args.storedPolicies,
188
- defaultPolicyMetadata.map(({ connectorSlug, ...metadata }) => {
189
- return { ...metadata, connectorRef: connectorSlug };
190
- })
184
+ defaultPolicyMetadata
191
185
  );
192
186
  return args.displayConnectorSlugs.map((connectorSlug) => {
193
187
  return connectorPermissionInfo({
@@ -198,17 +192,10 @@ async function loadConnectorPermissionInfos(args) {
198
192
  });
199
193
  }
200
194
  function connectorPermissionGrantsToFirewallPolicies(grants) {
201
- return permissionGrantsToFirewallPolicies(
202
- grants.map(({ connectorSlug, ...grant }) => {
203
- return { ...grant, connectorRef: connectorSlug };
204
- })
205
- );
195
+ return permissionGrantsToFirewallPolicies(grants);
206
196
  }
207
197
  function hasConnectorFirewallMetadataPermission(metadata, permission) {
208
- return findFirewallMetadataPermission(
209
- { ...metadata, connectorRef: metadata.connectorSlug },
210
- permission
211
- ) !== null;
198
+ return findFirewallMetadataPermission(metadata, permission) !== null;
212
199
  }
213
200
 
214
201
  export {
@@ -216,4 +203,4 @@ export {
216
203
  connectorPermissionGrantsToFirewallPolicies,
217
204
  hasConnectorFirewallMetadataPermission
218
205
  };
219
- //# sourceMappingURL=chunk-E4425LE5.js.map
206
+ //# sourceMappingURL=chunk-I3CP2OUW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/zero/shared/firewall-permissions.ts","../../../packages/connectors/src/firewall-metadata/policy.ts","../../../packages/connectors/src/firewall-metadata/policy-resolver.ts"],"sourcesContent":["import {\n findFirewallMetadataPermission,\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\nexport function hasConnectorFirewallMetadataPermission(\n metadata: ZeroConnectorCatalogPermissionDetail,\n permission: string,\n): boolean {\n return findFirewallMetadataPermission(metadata, permission) !== null;\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;;;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;AAEO,SAAS,+BACd,UACA,MACgE;AAChE,SACE,SAAS,YAAY,KAAK,CAAC,eAAe;AACxC,WAAO,WAAW,SAAS;AAAA,EAC7B,CAAC,KAAK;AAEV;AAkCO,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;;;ADpIA,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;AAEO,SAAS,uCACd,UACA,YACS;AACT,SAAO,+BAA+B,UAAU,UAAU,MAAM;AAClE;","names":[]}
@@ -21,7 +21,7 @@ import {
21
21
  updateOrgModelPoliciesRequestSchema,
22
22
  upsertModelProviderRequestSchema,
23
23
  upsertModelProviderResponseSchema
24
- } from "./chunk-3P5LSOOY.js";
24
+ } from "./chunk-G7HGHBG7.js";
25
25
  import {
26
26
  __commonJS,
27
27
  __esm,
@@ -3527,6 +3527,10 @@ var workflowSnapshotSchema = external_exports.object({
3527
3527
  var goalSnapshotSchema = external_exports.object({
3528
3528
  objectiveBrief: external_exports.string().min(1)
3529
3529
  });
3530
+ var chatEventAnnotationSchema = external_exports.object({
3531
+ kind: external_exports.enum(["slack", "feishu", "teams", "telegram", "github"]),
3532
+ href: external_exports.string().url().optional()
3533
+ }).strict();
3530
3534
  var chatEventBaseSchema = external_exports.object({
3531
3535
  id: external_exports.string(),
3532
3536
  threadId: external_exports.string(),
@@ -3534,8 +3538,7 @@ var chatEventBaseSchema = external_exports.object({
3534
3538
  runId: external_exports.string().optional(),
3535
3539
  runGroupId: external_exports.string().optional(),
3536
3540
  triggerSource: triggerSourceSchema.optional(),
3537
- slackMessagePermalink: external_exports.string().url().optional(),
3538
- feishuChatOpenUrl: external_exports.string().url().optional(),
3541
+ annotation: chatEventAnnotationSchema.optional(),
3539
3542
  isGoalRun: external_exports.boolean().optional(),
3540
3543
  runEventId: external_exports.string().optional(),
3541
3544
  goalSnapshot: goalSnapshotSchema.optional(),
@@ -3582,8 +3585,7 @@ var inputGoalEventSchema = chatEventBaseSchema.extend({
3582
3585
  runId: external_exports.never().optional(),
3583
3586
  runGroupId: external_exports.never().optional(),
3584
3587
  triggerSource: external_exports.never().optional(),
3585
- slackMessagePermalink: external_exports.never().optional(),
3586
- feishuChatOpenUrl: external_exports.never().optional(),
3588
+ annotation: external_exports.never().optional(),
3587
3589
  isGoalRun: external_exports.never().optional(),
3588
3590
  runEventId: external_exports.never().optional(),
3589
3591
  goalSnapshot: goalSnapshotSchema,
@@ -3648,15 +3650,6 @@ var runCancelledEventSchema = chatEventBaseSchema.extend({
3648
3650
  error: external_exports.string().optional(),
3649
3651
  runLifecycleEvent: external_exports.literal("cancelled")
3650
3652
  }).strict();
3651
- var legacyQueueAutomationPausedEventSchema = chatEventBaseSchema.extend({
3652
- eventType: external_exports.literal("queue.automation_paused"),
3653
- content: external_exports.null(),
3654
- pauseReason: external_exports.string().nullable()
3655
- }).strict();
3656
- var legacyQueueAutomationResumedEventSchema = chatEventBaseSchema.extend({
3657
- eventType: external_exports.literal("queue.automation_resumed"),
3658
- content: external_exports.null()
3659
- }).strict();
3660
3653
  var controlInterruptEventSchema = chatEventBaseSchema.extend({
3661
3654
  eventType: external_exports.literal("control.interrupt"),
3662
3655
  content: external_exports.null(),
@@ -3707,11 +3700,6 @@ var chatEventSchema = external_exports.discriminatedUnion("eventType", [
3707
3700
  goalChangedEventSchema,
3708
3701
  usageRecordedEventSchema
3709
3702
  ]);
3710
- var chatEventResponseSchema = external_exports.discriminatedUnion("eventType", [
3711
- ...chatEventSchema.options,
3712
- legacyQueueAutomationPausedEventSchema,
3713
- legacyQueueAutomationResumedEventSchema
3714
- ]);
3715
3703
  if (CHAT_EVENT_TYPES.length !== chatEventSchema.options.length) {
3716
3704
  throw new Error(
3717
3705
  "ChatEvent schema must cover every registered event catalog leaf"
@@ -4315,7 +4303,7 @@ var chatThreadEventsContract = c12.router({
4315
4303
  }),
4316
4304
  responses: {
4317
4305
  200: external_exports.object({
4318
- events: external_exports.array(chatEventResponseSchema)
4306
+ events: external_exports.array(chatEventSchema)
4319
4307
  }),
4320
4308
  400: apiErrorSchema,
4321
4309
  401: apiErrorSchema,
@@ -4330,7 +4318,7 @@ var chatThreadEventsContract = c12.router({
4330
4318
  headers: authHeadersSchema,
4331
4319
  pathParams: chatThreadEventPathParamsSchema,
4332
4320
  responses: {
4333
- 200: chatEventResponseSchema,
4321
+ 200: chatEventSchema,
4334
4322
  401: apiErrorSchema,
4335
4323
  404: apiErrorSchema
4336
4324
  },
@@ -4435,9 +4423,6 @@ var artifactsContract = c12.router({
4435
4423
  summary: "Delete a resumable image artifact edit snapshot for the caller"
4436
4424
  }
4437
4425
  });
4438
- function isCanonicalChatEventResponse(event) {
4439
- return event.eventType !== "queue.automation_paused" && event.eventType !== "queue.automation_resumed";
4440
- }
4441
4426
 
4442
4427
  // ../../packages/api-contracts/src/contracts/zero-agents.ts
4443
4428
  var c13 = initContract();
@@ -5409,11 +5394,20 @@ var connectorCatalogCompatibilityReasonSchema = external_exports.enum([
5409
5394
  "missing-platform-configuration"
5410
5395
  ]);
5411
5396
  var connectorCatalogFilteredAuthMethodSchema = external_exports.object({
5412
- // TODO(#23619): Rename this diagnostics wire field after clients migrate.
5397
+ connectorSlug: connectorSlugSchema.optional(),
5398
+ // TODO(#24186): Remove after the prepared Platform receiver is required.
5413
5399
  connectorRef: connectorSlugSchema,
5414
5400
  authMethodId: connectorAuthMethodIdSchema,
5415
5401
  reasons: external_exports.array(connectorCatalogCompatibilityReasonSchema).min(1)
5416
- });
5402
+ }).refine(
5403
+ ({ connectorSlug, connectorRef }) => {
5404
+ return connectorSlug === void 0 || connectorSlug === connectorRef;
5405
+ },
5406
+ {
5407
+ message: "connectorSlug and connectorRef must match",
5408
+ path: ["connectorSlug"]
5409
+ }
5410
+ );
5417
5411
  var connectorCatalogFilteredAuthMethodsSchema = external_exports.array(
5418
5412
  connectorCatalogFilteredAuthMethodSchema
5419
5413
  );
@@ -8071,7 +8065,7 @@ async function listZeroChatEvents(options) {
8071
8065
  }
8072
8066
  });
8073
8067
  if (result.status === 200) {
8074
- return result.body.events.filter(isCanonicalChatEventResponse);
8068
+ return result.body.events;
8075
8069
  }
8076
8070
  handleError(result, "Failed to list chat events");
8077
8071
  }
@@ -13445,4 +13439,4 @@ export {
13445
13439
  getHostedSiteFiles,
13446
13440
  getHostedSiteDeployments
13447
13441
  };
13448
- //# sourceMappingURL=chunk-E7OSQSSO.js.map
13442
+ //# sourceMappingURL=chunk-IPXIHHOL.js.map