@opengeni/contracts 3.1.0-canary.2 → 3.1.2

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 (429) hide show
  1. package/dist/agent-authored-durable-text.d.ts +9 -9
  2. package/dist/agent-config.d.ts +971 -0
  3. package/dist/agent-instruction-changes.d.ts +0 -2
  4. package/dist/allowance-refusal.d.ts +9 -0
  5. package/dist/allowance-refusal.js +50 -0
  6. package/dist/allowance-refusal.js.map +1 -0
  7. package/dist/analytics-consent-report.d.ts +19 -0
  8. package/dist/analytics-consent-report.js +10 -0
  9. package/dist/analytics-consent-report.js.map +1 -0
  10. package/dist/api-key-presets.d.ts +19 -0
  11. package/dist/artifact-catalog.d.ts +188 -0
  12. package/dist/artifacts.d.ts +86 -0
  13. package/dist/atlassian-native-retirement.d.ts +16 -0
  14. package/dist/atlassian-native-retirement.js +30 -0
  15. package/dist/atlassian-native-retirement.js.map +1 -0
  16. package/dist/atlassian.d.ts +1 -0
  17. package/dist/atlassian.js +34 -19
  18. package/dist/browser-storage.d.ts +5 -0
  19. package/dist/browser-storage.js +9 -0
  20. package/dist/browser-storage.js.map +1 -0
  21. package/dist/bundled-skills.d.ts +24 -1
  22. package/dist/canonical-human-identities.js +2 -1
  23. package/dist/chunk-2ZIHHL72.js +153 -0
  24. package/dist/chunk-2ZIHHL72.js.map +1 -0
  25. package/dist/{chunk-5LYFSZ7O.js → chunk-352X6ENP.js} +31 -31
  26. package/dist/chunk-4JGHSSB7.js +11 -0
  27. package/dist/chunk-4JGHSSB7.js.map +1 -0
  28. package/dist/chunk-4QO6GJUX.js +85 -0
  29. package/dist/chunk-4QO6GJUX.js.map +1 -0
  30. package/dist/chunk-4VDMHLLL.js +49 -0
  31. package/dist/chunk-4VDMHLLL.js.map +1 -0
  32. package/dist/chunk-56SNIMDO.js +9 -0
  33. package/dist/chunk-56SNIMDO.js.map +1 -0
  34. package/dist/chunk-6C2HKFTU.js +207 -0
  35. package/dist/chunk-6C2HKFTU.js.map +1 -0
  36. package/dist/chunk-6IXO76Z6.js +72 -0
  37. package/dist/chunk-6IXO76Z6.js.map +1 -0
  38. package/dist/chunk-7272KVWZ.js +60 -0
  39. package/dist/chunk-7272KVWZ.js.map +1 -0
  40. package/dist/{chunk-7ABONTXE.js → chunk-E3GGUBHS.js} +49 -5
  41. package/dist/chunk-E3GGUBHS.js.map +1 -0
  42. package/dist/chunk-EFZYKUE2.js +767 -0
  43. package/dist/chunk-EFZYKUE2.js.map +1 -0
  44. package/dist/chunk-EKWNTOG3.js +154 -0
  45. package/dist/chunk-EKWNTOG3.js.map +1 -0
  46. package/dist/chunk-HABQ7ADB.js +234 -0
  47. package/dist/chunk-HABQ7ADB.js.map +1 -0
  48. package/dist/chunk-HRRU4QPI.js +91 -0
  49. package/dist/chunk-HRRU4QPI.js.map +1 -0
  50. package/dist/{chunk-3SIZGL3O.js → chunk-IK36LXKC.js} +18 -2
  51. package/dist/chunk-IK36LXKC.js.map +1 -0
  52. package/dist/{chunk-TXTQIYCV.js → chunk-ILJ72KPO.js} +56 -3
  53. package/dist/chunk-ILJ72KPO.js.map +1 -0
  54. package/dist/chunk-J4HQ3UKY.js +93 -0
  55. package/dist/chunk-J4HQ3UKY.js.map +1 -0
  56. package/dist/chunk-KHHZTBP7.js +11 -0
  57. package/dist/chunk-KHHZTBP7.js.map +1 -0
  58. package/dist/{chunk-WYBDERIY.js → chunk-LZ2LAHIX.js} +47 -41
  59. package/dist/chunk-LZ2LAHIX.js.map +1 -0
  60. package/dist/chunk-NDZHPTCL.js +400 -0
  61. package/dist/chunk-NDZHPTCL.js.map +1 -0
  62. package/dist/chunk-OF6OKOBF.js +54793 -0
  63. package/dist/chunk-OF6OKOBF.js.map +1 -0
  64. package/dist/chunk-OL23ARTF.js +94 -0
  65. package/dist/chunk-OL23ARTF.js.map +1 -0
  66. package/dist/chunk-PUIUXIOL.js +189 -0
  67. package/dist/chunk-PUIUXIOL.js.map +1 -0
  68. package/dist/{chunk-Y3KNXVTD.js → chunk-RMWXDZEO.js} +128 -21
  69. package/dist/chunk-RMWXDZEO.js.map +1 -0
  70. package/dist/{chunk-MRWYRAS5.js → chunk-SHO4YO4B.js} +27 -35
  71. package/dist/chunk-SHO4YO4B.js.map +1 -0
  72. package/dist/chunk-SWRN2DJ3.js +153 -0
  73. package/dist/chunk-SWRN2DJ3.js.map +1 -0
  74. package/dist/chunk-TCXCRBPF.js +267 -0
  75. package/dist/chunk-TCXCRBPF.js.map +1 -0
  76. package/dist/chunk-TLU3UEMD.js +324 -0
  77. package/dist/chunk-TLU3UEMD.js.map +1 -0
  78. package/dist/chunk-TSWWZMUS.js +186 -0
  79. package/dist/chunk-TSWWZMUS.js.map +1 -0
  80. package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
  81. package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
  82. package/dist/chunk-XDLAGX66.js +127 -0
  83. package/dist/chunk-XDLAGX66.js.map +1 -0
  84. package/dist/chunk-YKZ4WU4P.js +33 -0
  85. package/dist/chunk-YKZ4WU4P.js.map +1 -0
  86. package/dist/{chunk-O5LEQHDM.js → chunk-Z7WEVGCL.js} +3 -3
  87. package/dist/{chunk-YBW5JSA3.js → chunk-ZDCRWCGZ.js} +119 -101
  88. package/dist/chunk-ZDCRWCGZ.js.map +1 -0
  89. package/dist/claude-provider-account-authority.d.ts +18 -0
  90. package/dist/claude-subscription-oauth.d.ts +42 -0
  91. package/dist/claude-subscription-usage.d.ts +159 -0
  92. package/dist/client-error-report.d.ts +158 -0
  93. package/dist/client-error-report.js +164 -0
  94. package/dist/client-error-report.js.map +1 -0
  95. package/dist/code-search.d.ts +52 -0
  96. package/dist/code-search.js +40 -0
  97. package/dist/code-search.js.map +1 -0
  98. package/dist/codex-provider-account-authority.js +20 -12
  99. package/dist/codex-provider-account-authority.js.map +1 -1
  100. package/dist/company-profile.d.ts +144 -6
  101. package/dist/connect.d.ts +37 -0
  102. package/dist/connect.js +216 -159
  103. package/dist/connect.js.map +1 -1
  104. package/dist/connection-account-label.d.ts +2 -0
  105. package/dist/connection-account-label.js +35 -0
  106. package/dist/connection-account-label.js.map +1 -0
  107. package/dist/connection-authority.d.ts +9 -317
  108. package/dist/connection-authority.js +37 -42
  109. package/dist/connector-attachments.js +2 -1
  110. package/dist/connector-destinations.js +2 -1
  111. package/dist/connector-tool-permissions.d.ts +137 -0
  112. package/dist/cua-desktop-tools.d.ts +17 -0
  113. package/dist/define-schema.d.ts +8 -0
  114. package/dist/direct-model-provider.d.ts +36 -0
  115. package/dist/editable-artifact-codec-registry.js +5 -5
  116. package/dist/editable-artifact-committed-transaction.js +3 -2
  117. package/dist/editable-artifact-live.js +5 -5
  118. package/dist/editable-artifact-serialized-commit.js +6 -6
  119. package/dist/editable-artifact-versions.d.ts +7 -1
  120. package/dist/editable-artifact-versions.js +1 -1
  121. package/dist/editable-artifacts.js +62 -56
  122. package/dist/event-preview.d.ts +22 -0
  123. package/dist/external-identities.d.ts +138 -0
  124. package/dist/external-identities.js +9 -4
  125. package/dist/first-party-tool-authorization.d.ts +815 -0
  126. package/dist/github-repository-contracts.js +60 -43
  127. package/dist/github-repository-contracts.js.map +1 -1
  128. package/dist/google-drive.d.ts +2 -1
  129. package/dist/google-drive.js +305 -238
  130. package/dist/google-drive.js.map +1 -1
  131. package/dist/host-mcp-bindings.d.ts +5 -0
  132. package/dist/host-mcp-bindings.js +233 -170
  133. package/dist/host-mcp-bindings.js.map +1 -1
  134. package/dist/image-generation.d.ts +1 -0
  135. package/dist/index.d.ts +16761 -5946
  136. package/dist/index.js +1973 -260
  137. package/dist/insights-usage.d.ts +877 -0
  138. package/dist/insights-usage.js +559 -0
  139. package/dist/insights-usage.js.map +1 -0
  140. package/dist/interaction.d.ts +1176 -829
  141. package/dist/knowledge-entries.d.ts +81 -2
  142. package/dist/knowledge-preparation.d.ts +239 -0
  143. package/dist/managed-auth-session-sets.d.ts +7 -0
  144. package/dist/managed-auth-session-sets.js +198 -132
  145. package/dist/managed-auth-session-sets.js.map +1 -1
  146. package/dist/managed-sign-in-methods.d.ts +56 -0
  147. package/dist/managed-sign-in-methods.js +64 -0
  148. package/dist/managed-sign-in-methods.js.map +1 -0
  149. package/dist/mcp-catalog-limits.d.ts +2 -0
  150. package/dist/mcp-oauth.d.ts +2 -2
  151. package/dist/mcp-structured-content.d.ts +25 -0
  152. package/dist/modal-native-proof-v2.d.ts +587 -0
  153. package/dist/modal-native-proof-v2.js +38 -0
  154. package/dist/modal-native-proof-v2.js.map +1 -0
  155. package/dist/model-account-choice.d.ts +235 -0
  156. package/dist/model-account-settings.d.ts +422 -0
  157. package/dist/model-availability.d.ts +15 -0
  158. package/dist/model-connection-access.d.ts +13 -0
  159. package/dist/model-context-inspector.d.ts +98 -0
  160. package/dist/model-display.d.ts +43 -0
  161. package/dist/model-display.js +17 -0
  162. package/dist/model-display.js.map +1 -0
  163. package/dist/model-picker-order.d.ts +3 -1
  164. package/dist/model-picker-order.js +3 -0
  165. package/dist/model-picker-order.js.map +1 -1
  166. package/dist/organization-access.d.ts +412 -0
  167. package/dist/organization-access.js +39 -0
  168. package/dist/organization-access.js.map +1 -0
  169. package/dist/organization-integration-policy.d.ts +27 -0
  170. package/dist/organization-membership-lifecycle.d.ts +38 -0
  171. package/dist/organization-model-usage.d.ts +146 -0
  172. package/dist/organization-model-usage.js +78 -0
  173. package/dist/organization-model-usage.js.map +1 -0
  174. package/dist/organization-recovery.js +2 -1
  175. package/dist/organization-usage.d.ts +138 -0
  176. package/dist/permissions.d.ts +18 -0
  177. package/dist/personal-github.d.ts +1 -0
  178. package/dist/personal-github.js +199 -144
  179. package/dist/personal-github.js.map +1 -1
  180. package/dist/prepared-mcp-setup.d.ts +54 -0
  181. package/dist/prepared-mcp-setup.js +12 -0
  182. package/dist/prepared-mcp-setup.js.map +1 -0
  183. package/dist/product-analytics.d.ts +116 -0
  184. package/dist/product-lifecycle-facts.d.ts +73 -0
  185. package/dist/remember.d.ts +98 -6
  186. package/dist/retained-output.d.ts +8 -0
  187. package/dist/sandbox-file-artifacts.d.ts +1 -0
  188. package/dist/sandbox-provider-command.d.ts +91 -1
  189. package/dist/sandbox-recovery.d.ts +146 -0
  190. package/dist/secret-generator.d.ts +44 -0
  191. package/dist/secret-references.d.ts +90 -0
  192. package/dist/secret-resolution.d.ts +111 -0
  193. package/dist/secret-totp.d.ts +41 -0
  194. package/dist/session-final-reply.d.ts +6 -0
  195. package/dist/session-final-reply.js +9 -0
  196. package/dist/session-final-reply.js.map +1 -0
  197. package/dist/session-goal-reports.d.ts +21 -0
  198. package/dist/session-history-import.d.ts +1272 -0
  199. package/dist/session-list-entries.d.ts +4 -0
  200. package/dist/session-list-entries.js +56 -0
  201. package/dist/session-list-entries.js.map +1 -0
  202. package/dist/session-mcp-projections.d.ts +6 -0
  203. package/dist/session-mcp-tool-permissions.d.ts +62 -0
  204. package/dist/session-message-search.d.ts +68 -0
  205. package/dist/session-target.d.ts +18 -0
  206. package/dist/session-titles.d.ts +8 -0
  207. package/dist/session-titles.js +5 -1
  208. package/dist/session-usage-limit-refusal.d.ts +34 -0
  209. package/dist/session-usage-limit-refusal.js +15 -0
  210. package/dist/session-usage-limit-refusal.js.map +1 -0
  211. package/dist/session-usage-limits.d.ts +127 -0
  212. package/dist/session-usage-limits.js +41 -0
  213. package/dist/session-usage-limits.js.map +1 -0
  214. package/dist/signup-attribution.d.ts +39 -0
  215. package/dist/site-data.d.ts +286 -0
  216. package/dist/site-operations.d.ts +39 -0
  217. package/dist/site-publishing.d.ts +778 -0
  218. package/dist/site-session-http.d.ts +89 -4
  219. package/dist/site-session-http.js +25 -1
  220. package/dist/site-sql.d.ts +421 -0
  221. package/dist/skill-catalog-context.d.ts +7 -0
  222. package/dist/skill-files.d.ts +1 -1
  223. package/dist/skill-use.d.ts +61 -0
  224. package/dist/skills.d.ts +15 -0
  225. package/dist/slack-bot-scopes.d.ts +17 -12
  226. package/dist/slack-bot-scopes.js +10 -3
  227. package/dist/slack-rest-mcp.d.ts +36 -0
  228. package/dist/slack-rest-mcp.js +25 -0
  229. package/dist/slack-rest-mcp.js.map +1 -0
  230. package/dist/spreadsheet-artifact-commands.d.ts +14 -1
  231. package/dist/spreadsheet-artifact-commands.js +8 -2
  232. package/dist/spreadsheet-artifact-query.d.ts +13 -6
  233. package/dist/spreadsheet-artifact-query.js +3 -3
  234. package/dist/subscription-account-actions.d.ts +64 -0
  235. package/dist/subscription-account-pools.d.ts +292 -0
  236. package/dist/subscription-personal-authority-v2.d.ts +28 -0
  237. package/dist/subscription-personal-authority-v2.js +12 -0
  238. package/dist/subscription-personal-authority-v2.js.map +1 -0
  239. package/dist/tool-action-review.d.ts +132 -0
  240. package/dist/tool-catalog.d.ts +408 -0
  241. package/dist/tool-policy.d.ts +5 -0
  242. package/dist/tool-review-presentation.d.ts +12 -0
  243. package/dist/tool-review-presentation.js +17 -0
  244. package/dist/tool-review-presentation.js.map +1 -0
  245. package/dist/transcription-recordings.d.ts +21 -0
  246. package/dist/turn-serving-policy.d.ts +221 -0
  247. package/dist/usage-allowances.d.ts +314 -0
  248. package/dist/usage-allowances.js +52 -0
  249. package/dist/usage-allowances.js.map +1 -0
  250. package/dist/vaults.d.ts +1286 -0
  251. package/dist/video-generation.d.ts +3 -0
  252. package/dist/video-generation.js +2 -1
  253. package/dist/workspace-integration-wire.d.ts +36 -0
  254. package/dist/workspace-integration-wire.js +23 -0
  255. package/dist/workspace-integration-wire.js.map +1 -0
  256. package/dist/workspace-integrations.d.ts +1028 -0
  257. package/dist/xai-provider-account-authority.js +2 -1
  258. package/package.json +93 -5
  259. package/src/agent-authored-durable-text.ts +14 -11
  260. package/src/agent-config.ts +1698 -0
  261. package/src/agent-instruction-changes.ts +91 -74
  262. package/src/agent-learning.ts +94 -67
  263. package/src/agent-topology.ts +57 -52
  264. package/src/allowance-refusal.ts +81 -0
  265. package/src/analytics-consent-report.ts +20 -0
  266. package/src/api-key-presets.ts +28 -0
  267. package/src/artifact-catalog.ts +82 -0
  268. package/src/artifacts.ts +299 -227
  269. package/src/atlassian-native-retirement.ts +33 -0
  270. package/src/atlassian.ts +135 -108
  271. package/src/browser-storage.ts +10 -0
  272. package/src/bundled-skills.ts +60 -17
  273. package/src/canonical-human-identities.ts +60 -58
  274. package/src/claude-provider-account-authority.ts +12 -0
  275. package/src/claude-subscription-oauth.ts +73 -0
  276. package/src/claude-subscription-usage.ts +68 -0
  277. package/src/client-error-report.ts +343 -0
  278. package/src/code-search.ts +105 -0
  279. package/src/codex-provider-account-authority.ts +21 -16
  280. package/src/company-brain-governed-writes.ts +255 -233
  281. package/src/company-brain.ts +164 -153
  282. package/src/company-profile.ts +365 -292
  283. package/src/connect.ts +212 -173
  284. package/src/connection-account-label.ts +46 -0
  285. package/src/connection-authority.ts +183 -364
  286. package/src/connector-attachments.ts +137 -122
  287. package/src/connector-destinations.ts +46 -42
  288. package/src/connector-tool-permissions.ts +117 -0
  289. package/src/cua-desktop-tools.gen.json +6512 -0
  290. package/src/cua-desktop-tools.linux.gen.json +6600 -0
  291. package/src/cua-desktop-tools.ts +36 -0
  292. package/src/cua-desktop-tools.windows.gen.json +6353 -0
  293. package/src/define-schema.ts +10 -0
  294. package/src/direct-model-provider.ts +108 -0
  295. package/src/editable-artifact-committed-transaction.ts +17 -0
  296. package/src/editable-artifact-versions.ts +7 -1
  297. package/src/event-preview.ts +53 -3
  298. package/src/external-identities.ts +249 -176
  299. package/src/feedback.ts +43 -30
  300. package/src/first-party-tool-authorization.ts +356 -0
  301. package/src/github-repository-contracts.ts +78 -64
  302. package/src/google-drive.ts +285 -234
  303. package/src/governed-learning-activation.ts +152 -131
  304. package/src/governed-learning-evaluator.ts +140 -133
  305. package/src/host-mcp-bindings.ts +252 -198
  306. package/src/image-generation.ts +104 -95
  307. package/src/index.ts +13235 -8687
  308. package/src/insights-usage.ts +727 -0
  309. package/src/interaction.ts +3070 -2326
  310. package/src/knowledge-entries.ts +361 -276
  311. package/src/knowledge-preparation.ts +57 -0
  312. package/src/knowledge.ts +246 -213
  313. package/src/managed-auth-session-sets.ts +220 -144
  314. package/src/managed-sign-in-methods.ts +52 -0
  315. package/src/mcp-catalog-limits.ts +2 -0
  316. package/src/mcp-oauth.ts +43 -34
  317. package/src/mcp-receipts.ts +192 -192
  318. package/src/mcp-structured-content.ts +81 -0
  319. package/src/memory-slack-delivery.ts +171 -142
  320. package/src/modal-native-proof-v2.ts +429 -0
  321. package/src/model-account-choice.ts +177 -0
  322. package/src/model-account-settings.ts +210 -0
  323. package/src/model-availability.ts +22 -0
  324. package/src/model-connection-access.ts +61 -14
  325. package/src/model-context-inspector.ts +133 -99
  326. package/src/model-display.ts +221 -0
  327. package/src/model-picker-order.ts +12 -1
  328. package/src/organization-access.ts +217 -0
  329. package/src/organization-integration-policy.ts +63 -0
  330. package/src/organization-membership-lifecycle.ts +528 -382
  331. package/src/organization-model-usage.ts +81 -0
  332. package/src/organization-recovery.ts +147 -135
  333. package/src/organization-usage.ts +94 -0
  334. package/src/permissions.ts +88 -52
  335. package/src/personal-github.ts +210 -171
  336. package/src/preference-registry.ts +314 -258
  337. package/src/prepared-mcp-setup.ts +189 -0
  338. package/src/product-analytics.ts +261 -0
  339. package/src/product-lifecycle-facts.ts +122 -0
  340. package/src/remember.ts +181 -167
  341. package/src/retained-output.ts +194 -165
  342. package/src/sandbox-file-artifacts.ts +60 -47
  343. package/src/sandbox-provider-command.ts +88 -20
  344. package/src/sandbox-recovery.ts +129 -0
  345. package/src/scoped-knowledge.ts +61 -43
  346. package/src/secret-generator.ts +155 -0
  347. package/src/secret-references.ts +414 -0
  348. package/src/secret-resolution.ts +274 -0
  349. package/src/secret-totp.ts +188 -0
  350. package/src/session-final-reply.ts +16 -0
  351. package/src/session-goal-reports.ts +64 -0
  352. package/src/session-history-import.ts +177 -0
  353. package/src/session-list-entries.ts +96 -0
  354. package/src/session-mcp-projections.ts +11 -0
  355. package/src/session-mcp-tool-permissions.ts +108 -0
  356. package/src/session-message-search.ts +61 -0
  357. package/src/session-target.ts +57 -0
  358. package/src/session-titles.ts +80 -10
  359. package/src/session-topology-primitives.ts +19 -12
  360. package/src/session-usage-limit-refusal.ts +101 -0
  361. package/src/session-usage-limits.ts +171 -0
  362. package/src/signup-attribution.ts +86 -0
  363. package/src/site-data.ts +339 -0
  364. package/src/site-operations.ts +154 -0
  365. package/src/site-publishing.ts +876 -0
  366. package/src/site-session-http.ts +294 -16
  367. package/src/site-sql.ts +1123 -0
  368. package/src/skill-catalog-context.ts +50 -0
  369. package/src/skill-files.ts +3 -3
  370. package/src/skill-use.ts +80 -0
  371. package/src/skills.ts +82 -54
  372. package/src/slack-bot-scopes.ts +31 -39
  373. package/src/slack-rest-mcp.ts +222 -0
  374. package/src/slack-task-policy.ts +96 -73
  375. package/src/spreadsheet-artifact-commands.ts +73 -2
  376. package/src/spreadsheet-artifact-query.ts +187 -39
  377. package/src/subscription-account-actions.ts +84 -0
  378. package/src/subscription-account-pools.ts +53 -0
  379. package/src/subscription-personal-authority-v2.ts +66 -0
  380. package/src/task-notes.ts +55 -51
  381. package/src/tool-action-review.ts +258 -0
  382. package/src/tool-catalog.ts +609 -372
  383. package/src/tool-policy.ts +82 -0
  384. package/src/tool-result-spill.ts +12 -9
  385. package/src/tool-review-presentation.ts +385 -0
  386. package/src/transcription-recordings.ts +145 -131
  387. package/src/turn-serving-policy.ts +166 -0
  388. package/src/usage-allowances.ts +248 -0
  389. package/src/vaults.ts +850 -0
  390. package/src/video-generation.ts +385 -360
  391. package/src/work-claims.ts +173 -149
  392. package/src/workspace-instruction-policies.ts +349 -276
  393. package/src/workspace-integration-wire.ts +101 -0
  394. package/src/workspace-integrations.ts +724 -0
  395. package/src/workspace-learning-administration.ts +57 -44
  396. package/src/workspace-learning-policy.ts +127 -96
  397. package/src/workspace-state.ts +250 -220
  398. package/src/xai-provider-account-authority.ts +22 -17
  399. package/dist/chunk-2AC63F4S.js +0 -171
  400. package/dist/chunk-2AC63F4S.js.map +0 -1
  401. package/dist/chunk-3SIZGL3O.js.map +0 -1
  402. package/dist/chunk-7ABONTXE.js.map +0 -1
  403. package/dist/chunk-BCS7WHCK.js +0 -139
  404. package/dist/chunk-BCS7WHCK.js.map +0 -1
  405. package/dist/chunk-GRG7PHWQ.js +0 -25
  406. package/dist/chunk-GRG7PHWQ.js.map +0 -1
  407. package/dist/chunk-JUFK3T4Q.js +0 -80
  408. package/dist/chunk-JUFK3T4Q.js.map +0 -1
  409. package/dist/chunk-M5ZGRVIQ.js +0 -719
  410. package/dist/chunk-M5ZGRVIQ.js.map +0 -1
  411. package/dist/chunk-MRWYRAS5.js.map +0 -1
  412. package/dist/chunk-OVFORMPW.js +0 -348
  413. package/dist/chunk-OVFORMPW.js.map +0 -1
  414. package/dist/chunk-P3HLDT77.js +0 -59
  415. package/dist/chunk-P3HLDT77.js.map +0 -1
  416. package/dist/chunk-QQUJ6NPW.js +0 -23093
  417. package/dist/chunk-QQUJ6NPW.js.map +0 -1
  418. package/dist/chunk-TXTQIYCV.js.map +0 -1
  419. package/dist/chunk-WYBDERIY.js.map +0 -1
  420. package/dist/chunk-Y3KNXVTD.js.map +0 -1
  421. package/dist/chunk-YBW5JSA3.js.map +0 -1
  422. package/dist/chunk-YRXAWWCU.js +0 -45
  423. package/dist/chunk-YRXAWWCU.js.map +0 -1
  424. package/dist/host-mcp-resolvers.d.ts +0 -32
  425. package/dist/host-mcp-resolvers.js +0 -34
  426. package/dist/host-mcp-resolvers.js.map +0 -1
  427. package/src/host-mcp-resolvers.ts +0 -50
  428. /package/dist/{chunk-5LYFSZ7O.js.map → chunk-352X6ENP.js.map} +0 -0
  429. /package/dist/{chunk-O5LEQHDM.js.map → chunk-Z7WEVGCL.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/spreadsheet-artifact-query.ts"],"sourcesContent":["import { spreadsheetSheetId, type EditableArtifactStableId } from \"./spreadsheet-artifact-commands\";\nimport {\n canonicalSpreadsheetDateFromMilliseconds,\n canonicalSpreadsheetDateMilliseconds,\n} from \"./spreadsheet-artifact-date\";\nimport {\n SPREADSHEET_DEFAULT_ROW_HEIGHT,\n SPREADSHEET_DEFAULT_COLUMN_WIDTH,\n SPREADSHEET_MAX_DIMENSION_PIXELS,\n} from \"./spreadsheet-artifact-commands\";\n\n/** Canonical private kernel query/projection ABI shared by browser and native bindings. */\nexport const SPREADSHEET_ARTIFACT_QUERY_VERSION = 1 as const;\nexport const SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES = 68;\nexport const SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES = 8 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MAX_AREA = 1_048_576;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS = 262_144;\nexport const SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS = 10_000;\nexport const SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES = 4 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES = 92;\nexport const SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES = 48;\n\nconst QUERY_MAGIC = new TextEncoder().encode(\"OGAKQ001\");\nconst PROJECTION_MAGIC = new TextEncoder().encode(\"OGAKV001\");\nconst QUERY_HEADER_BYTES = 28;\nconst PROJECTION_HEADER_BYTES = 36;\nconst CHECKSUM_BYTES = 8;\nconst VIEWPORT_QUERY_PAYLOAD_BYTES = 32;\nconst VIEWPORT_PROJECTION_PREFIX_BYTES = 48;\nconst METADATA_PROJECTION_PREFIX_BYTES = 4;\nconst GENERATIONS_FLAG = 1;\nconst DIMENSIONS_FLAG = 2;\nconst DIMENSION_KEYS = [\n \"defaultRowHeight\",\n \"defaultColumnWidth\",\n \"rowHeights\",\n \"columnWidths\",\n] as const;\n\n/** Sparse absolute zero-based indices; omitted only in pre-dimension private projections. */\nexport type SpreadsheetArtifactDimensions = Readonly<{\n defaultRowHeight?: number;\n defaultColumnWidth?: number;\n rowHeights?: readonly (readonly [number, number])[];\n columnWidths?: readonly (readonly [number, number])[];\n}>;\nconst UINT32_MAX = 0xffff_ffff;\nconst UINT64_MAX = 0xffff_ffff_ffff_ffffn;\nconst FNV_OFFSET = 0xcbf29ce484222325n;\nconst FNV_PRIME = 0x100000001b3n;\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport type SpreadsheetArtifactViewportQuery = Readonly<{\n sheetId: EditableArtifactStableId;\n startRow: number;\n startColumn: number;\n rowCount: number;\n columnCount: number;\n maxCells: number;\n /** Entire OGAKV001 envelope, not merely its payload. */\n maxBytes: number;\n}>;\n\nexport type SpreadsheetArtifactMetadataQuery = Readonly<{\n maxSheets: number;\n /** Entire OGAKV001 envelope, not merely its payload. */\n maxBytes: number;\n}>;\n\nexport type SpreadsheetArtifactKernelQuery =\n | Readonly<{ kind: \"viewport\"; query: SpreadsheetArtifactViewportQuery }>\n | Readonly<{\n kind: \"workbook-metadata\";\n query: SpreadsheetArtifactMetadataQuery;\n }>;\n\nexport type SpreadsheetArtifactFormulaError =\n | \"null\"\n | \"divide_by_zero\"\n | \"value\"\n | \"reference\"\n | \"name\"\n | \"number\"\n | \"not_available\"\n | \"spill\"\n | \"calculation\"\n | Readonly<{ custom: string }>;\n\nexport type SpreadsheetArtifactProjectedCellValue =\n | Readonly<{ kind: \"empty\" }>\n | Readonly<{ kind: \"boolean\"; value: boolean }>\n | Readonly<{ kind: \"number\"; value: number }>\n | Readonly<{ kind: \"date\"; value: string }>\n | Readonly<{ kind: \"text\"; value: string }>\n | Readonly<{ kind: \"error\"; value: SpreadsheetArtifactFormulaError }>;\n\nexport type SpreadsheetArtifactProjectedCell = Readonly<{\n /** Absolute zero-based row, reconstructed from the relative wire coordinate. */\n row: number;\n /** Absolute zero-based column, reconstructed from the relative wire coordinate. */\n column: number;\n formula: string | null;\n value: SpreadsheetArtifactProjectedCellValue;\n}>;\n\n/** Complete and non-truncated. A limit breach is an error, never a partial response. */\nexport type SpreadsheetArtifactViewportProjection = SpreadsheetArtifactDimensions &\n Readonly<{\n revision: bigint;\n sheetId: EditableArtifactStableId;\n generationId: EditableArtifactStableId | null;\n startRow: number;\n startColumn: number;\n rowCount: number;\n columnCount: number;\n cells: readonly SpreadsheetArtifactProjectedCell[];\n }>;\n\nexport type SpreadsheetArtifactUsedBounds = Readonly<{\n startRow: number;\n startColumn: number;\n endRow: number;\n endColumn: number;\n}>;\n\nexport type SpreadsheetArtifactSheetMetadata = SpreadsheetArtifactDimensions &\n Readonly<{\n sheetId: EditableArtifactStableId;\n generationId: EditableArtifactStableId | null;\n name: string;\n usedBounds: SpreadsheetArtifactUsedBounds | null;\n }>;\n\n/**\n * Dimensions are carried under the explicit dimensions flag. Hidden state,\n * merges and styles remain unsupported. Pre-dimension private projections\n * carry dimensions=false and round-trip without inventing geometry.\n */\nexport type SpreadsheetArtifactModeledFeatures = Readonly<{\n dimensions: boolean;\n hidden: false;\n merges: false;\n}>;\n\n/** Complete ordered workbook catalog; never a truncated prefix. */\nexport type SpreadsheetArtifactMetadataProjection = Readonly<{\n revision: bigint;\n modeledFeatures: SpreadsheetArtifactModeledFeatures;\n sheets: readonly SpreadsheetArtifactSheetMetadata[];\n}>;\n\nexport type SpreadsheetArtifactKernelProjection =\n | Readonly<{\n kind: \"viewport\";\n projection: SpreadsheetArtifactViewportProjection;\n }>\n | Readonly<{\n kind: \"workbook-metadata\";\n projection: SpreadsheetArtifactMetadataProjection;\n }>;\n\nexport function encodeSpreadsheetViewportKernelQuery(\n input: SpreadsheetArtifactViewportQuery,\n): Uint8Array {\n const query = normalizeViewportQuery(input);\n const payload = new FixedWriter(VIEWPORT_QUERY_PAYLOAD_BYTES);\n payload.stableId(query.sheetId);\n payload.u32(query.startRow);\n payload.u32(query.startColumn);\n payload.u32(query.rowCount);\n payload.u32(query.columnCount);\n return encodeQueryFrame(0, query.maxCells, query.maxBytes, payload.finish());\n}\n\nexport function encodeSpreadsheetMetadataKernelQuery(\n input: SpreadsheetArtifactMetadataQuery,\n): Uint8Array {\n const query = normalizeMetadataQuery(input);\n return encodeQueryFrame(1, query.maxSheets, query.maxBytes, new Uint8Array());\n}\n\nexport function encodeSpreadsheetArtifactKernelQuery(\n input: SpreadsheetArtifactKernelQuery,\n): Uint8Array {\n const envelope = exactRecord(input, \"spreadsheet kernel query\");\n exactKeys(envelope, [\"kind\", \"query\"], \"spreadsheet kernel query\");\n if (envelope.kind === \"viewport\") {\n return encodeSpreadsheetViewportKernelQuery(envelope.query as SpreadsheetArtifactViewportQuery);\n }\n if (envelope.kind === \"workbook-metadata\") {\n return encodeSpreadsheetMetadataKernelQuery(envelope.query as SpreadsheetArtifactMetadataQuery);\n }\n throw queryError(\"unknown spreadsheet kernel query kind\");\n}\n\nexport function decodeSpreadsheetArtifactKernelQuery(\n bytes: Uint8Array,\n): SpreadsheetArtifactKernelQuery {\n const frame = decodeQueryFrame(bytes);\n if (frame.kind === 0) {\n if (frame.payload.byteLength < VIEWPORT_QUERY_PAYLOAD_BYTES) {\n throw queryError(\"spreadsheet viewport query is truncated\");\n }\n if (frame.payload.byteLength > VIEWPORT_QUERY_PAYLOAD_BYTES) {\n throw queryError(\"spreadsheet viewport query contains trailing bytes\");\n }\n const reader = new Reader(frame.payload);\n const query = normalizeViewportQuery({\n sheetId: reader.stableId(\"viewport sheet id\"),\n startRow: reader.u32(),\n startColumn: reader.u32(),\n rowCount: reader.u32(),\n columnCount: reader.u32(),\n maxCells: frame.maxItems,\n maxBytes: frame.maxBytes,\n });\n reader.done(\"spreadsheet viewport query contains trailing bytes\");\n return Object.freeze({ kind: \"viewport\", query });\n }\n if (frame.payload.byteLength !== 0) {\n throw queryError(\"spreadsheet metadata query contains trailing bytes\");\n }\n return Object.freeze({\n kind: \"workbook-metadata\",\n query: normalizeMetadataQuery({\n maxSheets: frame.maxItems,\n maxBytes: frame.maxBytes,\n }),\n });\n}\n\nexport function assertCanonicalSpreadsheetArtifactKernelQueryBytes(bytes: Uint8Array): Uint8Array {\n const canonical = encodeSpreadsheetArtifactKernelQuery(\n decodeSpreadsheetArtifactKernelQuery(bytes),\n );\n if (!equalBytes(bytes, canonical)) throw queryError(\"spreadsheet kernel query is not canonical\");\n return bytes;\n}\n\nexport function encodeSpreadsheetViewportKernelProjection(\n input: SpreadsheetArtifactViewportProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const projection = normalizeViewportProjection(input);\n const maximum = effectiveProjectionMaximum(\n maximumBytes,\n SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES,\n );\n const payload = new DynamicWriter(maximum - PROJECTION_HEADER_BYTES - CHECKSUM_BYTES);\n payload.stableId(projection.sheetId);\n payload.optionalStableId(projection.generationId);\n payload.u32(projection.startRow);\n payload.u32(projection.startColumn);\n payload.u32(projection.rowCount);\n payload.u32(projection.columnCount);\n const hasDimensions = projection.defaultRowHeight !== undefined;\n if (hasDimensions) writeDimensions(payload, projection);\n for (const cell of projection.cells) {\n payload.u32(cell.row - projection.startRow);\n payload.u32(cell.column - projection.startColumn);\n payload.cell(cell);\n }\n return encodeProjectionFrame(\n 0,\n projection.revision,\n (projection.generationId === null ? 0 : GENERATIONS_FLAG) |\n (hasDimensions ? DIMENSIONS_FLAG : 0),\n projection.cells.length,\n payload.finish(),\n maximum,\n );\n}\n\nexport function encodeSpreadsheetMetadataKernelProjection(\n input: SpreadsheetArtifactMetadataProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const projection = normalizeMetadataProjection(input);\n const maximum = effectiveProjectionMaximum(\n maximumBytes,\n SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES,\n );\n const payload = new DynamicWriter(maximum - PROJECTION_HEADER_BYTES - CHECKSUM_BYTES);\n payload.u32(projection.modeledFeatures.dimensions ? 1 : 0);\n for (const sheet of projection.sheets) {\n payload.stableId(sheet.sheetId);\n payload.optionalStableId(sheet.generationId);\n payload.string(sheet.name);\n if (sheet.usedBounds === null) {\n payload.u8(0);\n } else {\n payload.u8(1);\n payload.u32(sheet.usedBounds.startRow);\n payload.u32(sheet.usedBounds.startColumn);\n payload.u32(sheet.usedBounds.endRow);\n payload.u32(sheet.usedBounds.endColumn);\n }\n if (projection.modeledFeatures.dimensions) writeDimensions(payload, sheet);\n }\n const generations = projection.sheets.length > 0 && projection.sheets[0]!.generationId !== null;\n return encodeProjectionFrame(\n 1,\n projection.revision,\n (generations ? GENERATIONS_FLAG : 0) |\n (projection.modeledFeatures.dimensions ? DIMENSIONS_FLAG : 0),\n projection.sheets.length,\n payload.finish(),\n maximum,\n );\n}\n\nexport function encodeSpreadsheetArtifactKernelProjection(\n input: SpreadsheetArtifactKernelProjection,\n maximumBytes = SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n): Uint8Array {\n const envelope = exactRecord(input, \"spreadsheet kernel projection\");\n exactKeys(envelope, [\"kind\", \"projection\"], \"spreadsheet kernel projection\");\n if (envelope.kind === \"viewport\") {\n return encodeSpreadsheetViewportKernelProjection(\n envelope.projection as SpreadsheetArtifactViewportProjection,\n maximumBytes,\n );\n }\n if (envelope.kind === \"workbook-metadata\") {\n return encodeSpreadsheetMetadataKernelProjection(\n envelope.projection as SpreadsheetArtifactMetadataProjection,\n maximumBytes,\n );\n }\n throw projectionError(\"unknown spreadsheet kernel projection kind\");\n}\n\nexport function decodeSpreadsheetArtifactKernelProjection(\n bytes: Uint8Array,\n): SpreadsheetArtifactKernelProjection {\n const frame = decodeProjectionFrame(bytes);\n if (frame.kind === 0) {\n return Object.freeze({\n kind: \"viewport\",\n projection: decodeViewportPayload(frame),\n });\n }\n return Object.freeze({\n kind: \"workbook-metadata\",\n projection: decodeMetadataPayload(frame),\n });\n}\n\nexport function decodeSpreadsheetViewportKernelProjection(\n bytes: Uint8Array,\n expected?: SpreadsheetArtifactViewportQuery,\n): SpreadsheetArtifactViewportProjection {\n const decoded = decodeSpreadsheetArtifactKernelProjection(bytes);\n if (decoded.kind !== \"viewport\") throw projectionError(\"expected a viewport projection\");\n if (expected !== undefined) {\n const query = normalizeViewportQuery(expected);\n enforceProjectionEnvelopeLimit(bytes, query.maxBytes);\n if (\n decoded.projection.cells.length >\n Math.min(query.maxCells, SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS)\n ) {\n throw projectionError(\"viewport projection exceeds its requested cell limit\");\n }\n if (\n decoded.projection.sheetId !== query.sheetId ||\n decoded.projection.startRow !== query.startRow ||\n decoded.projection.startColumn !== query.startColumn ||\n decoded.projection.rowCount !== query.rowCount ||\n decoded.projection.columnCount !== query.columnCount\n ) {\n throw projectionError(\"viewport projection does not match its query\");\n }\n }\n return decoded.projection;\n}\n\nexport function decodeSpreadsheetMetadataKernelProjection(\n bytes: Uint8Array,\n expected?: SpreadsheetArtifactMetadataQuery,\n): SpreadsheetArtifactMetadataProjection {\n const decoded = decodeSpreadsheetArtifactKernelProjection(bytes);\n if (decoded.kind !== \"workbook-metadata\") {\n throw projectionError(\"expected a workbook metadata projection\");\n }\n if (expected !== undefined) {\n const query = normalizeMetadataQuery(expected);\n enforceProjectionEnvelopeLimit(bytes, query.maxBytes);\n if (\n decoded.projection.sheets.length >\n Math.min(query.maxSheets, SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS)\n ) {\n throw projectionError(\"metadata projection exceeds its requested sheet limit\");\n }\n }\n return decoded.projection;\n}\n\nexport function assertCanonicalSpreadsheetArtifactKernelProjectionBytes(\n bytes: Uint8Array,\n): Uint8Array {\n const canonical = encodeSpreadsheetArtifactKernelProjection(\n decodeSpreadsheetArtifactKernelProjection(bytes),\n );\n if (!equalBytes(bytes, canonical)) {\n throw projectionError(\"spreadsheet kernel projection is not canonical\");\n }\n return bytes;\n}\n\ntype ProjectionFrame = Readonly<{\n kind: 0 | 1;\n flags: number;\n revision: bigint;\n itemCount: number;\n payload: Uint8Array;\n}>;\n\nfunction encodeQueryFrame(\n kind: 0 | 1,\n maxItems: number,\n maxBytes: number,\n payload: Uint8Array,\n): Uint8Array {\n const output = new FixedWriter(QUERY_HEADER_BYTES + payload.byteLength + CHECKSUM_BYTES);\n output.bytes(QUERY_MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_QUERY_VERSION);\n output.u16(0);\n output.u8(kind);\n output.bytes(new Uint8Array(3));\n output.u32(maxItems);\n output.u32(maxBytes);\n output.u32(payload.byteLength);\n output.bytes(payload);\n output.u64(fnv1a64(output.view()));\n const bytes = output.finish();\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES) {\n throw queryError(\"spreadsheet kernel query exceeds its byte limit\");\n }\n return bytes;\n}\n\nfunction decodeQueryFrame(bytes: Uint8Array): Readonly<{\n kind: 0 | 1;\n maxItems: number;\n maxBytes: number;\n payload: Uint8Array;\n}> {\n requireBytes(bytes, \"spreadsheet kernel query\");\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES) {\n throw queryError(\"spreadsheet kernel query exceeds its byte limit\");\n }\n if (bytes.byteLength < QUERY_HEADER_BYTES + CHECKSUM_BYTES) {\n throw queryError(\"spreadsheet kernel query is truncated\");\n }\n const reader = new Reader(bytes);\n if (!equalBytes(reader.bytes(8), QUERY_MAGIC))\n throw queryError(\"spreadsheet query magic is invalid\");\n const version = reader.u16();\n if (version !== SPREADSHEET_ARTIFACT_QUERY_VERSION) {\n throw queryError(`unsupported spreadsheet query version: ${version}`);\n }\n if (reader.u16() !== 0) throw queryError(\"spreadsheet query reserved flags must be zero\");\n const kindTag = reader.u8();\n if (kindTag > 1) throw queryError(\"spreadsheet query kind is invalid\");\n if (reader.u8() !== 0 || reader.u8() !== 0 || reader.u8() !== 0) {\n throw queryError(\"spreadsheet query reserved bytes must be zero\");\n }\n const maxItems = reader.u32();\n const maxBytes = reader.u32();\n const payloadLength = reader.u32();\n const expected = QUERY_HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expected) throw queryError(\"spreadsheet kernel query is truncated\");\n if (bytes.byteLength > expected)\n throw queryError(\"spreadsheet kernel query contains trailing bytes\");\n const payload = reader.bytes(payloadLength);\n const checksum = reader.u64();\n reader.done(\"spreadsheet kernel query contains trailing bytes\");\n if (checksum !== fnv1a64(bytes.subarray(0, -CHECKSUM_BYTES))) {\n throw queryError(\"spreadsheet kernel query checksum does not match\");\n }\n return Object.freeze({ kind: kindTag as 0 | 1, maxItems, maxBytes, payload });\n}\n\nfunction encodeProjectionFrame(\n kind: 0 | 1,\n revision: bigint,\n flags: number,\n itemCount: number,\n payload: Uint8Array,\n maximum: number,\n): Uint8Array {\n const output = new FixedWriter(PROJECTION_HEADER_BYTES + payload.byteLength + CHECKSUM_BYTES);\n output.bytes(PROJECTION_MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_QUERY_VERSION);\n output.u16(flags);\n output.u8(kind);\n output.bytes(new Uint8Array(3));\n output.u64(revision);\n output.u32(itemCount);\n output.u64(BigInt(payload.byteLength));\n output.bytes(payload);\n output.u64(fnv1a64(output.view()));\n const bytes = output.finish();\n if (bytes.byteLength > maximum || bytes.byteLength > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw projectionError(\"spreadsheet kernel projection exceeds its byte limit\");\n }\n return bytes;\n}\n\nfunction decodeProjectionFrame(bytes: Uint8Array): ProjectionFrame {\n requireBytes(bytes, \"spreadsheet kernel projection\");\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw projectionError(\"spreadsheet kernel projection exceeds its byte limit\");\n }\n if (bytes.byteLength < PROJECTION_HEADER_BYTES + CHECKSUM_BYTES) {\n throw projectionError(\"spreadsheet kernel projection is truncated\");\n }\n const reader = new Reader(bytes);\n if (!equalBytes(reader.bytes(8), PROJECTION_MAGIC)) {\n throw projectionError(\"spreadsheet projection magic is invalid\");\n }\n const version = reader.u16();\n if (version !== SPREADSHEET_ARTIFACT_QUERY_VERSION) {\n throw projectionError(`unsupported spreadsheet projection version: ${version}`);\n }\n const flags = reader.u16();\n if ((flags & ~(GENERATIONS_FLAG | DIMENSIONS_FLAG)) !== 0) {\n throw projectionError(\"spreadsheet projection flags are noncanonical\");\n }\n const kindTag = reader.u8();\n if (kindTag > 1) throw projectionError(\"spreadsheet projection kind is invalid\");\n if (reader.u8() !== 0 || reader.u8() !== 0 || reader.u8() !== 0) {\n throw projectionError(\"spreadsheet projection reserved bytes must be zero\");\n }\n const revision = reader.u64();\n const itemCount = reader.u32();\n const payloadLengthBig = reader.u64();\n if (payloadLengthBig > BigInt(SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES)) {\n throw projectionError(\"spreadsheet projection payload exceeds its byte limit\");\n }\n const payloadLength = Number(payloadLengthBig);\n const expected = PROJECTION_HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expected)\n throw projectionError(\"spreadsheet kernel projection is truncated\");\n if (bytes.byteLength > expected) {\n throw projectionError(\"spreadsheet kernel projection contains trailing bytes\");\n }\n const payload = reader.bytes(payloadLength);\n const checksum = reader.u64();\n reader.done(\"spreadsheet kernel projection contains trailing bytes\");\n if (checksum !== fnv1a64(bytes.subarray(0, -CHECKSUM_BYTES))) {\n throw projectionError(\"spreadsheet kernel projection checksum does not match\");\n }\n return Object.freeze({\n kind: kindTag as 0 | 1,\n flags,\n revision,\n itemCount,\n payload,\n });\n}\n\nfunction decodeViewportPayload(frame: ProjectionFrame): SpreadsheetArtifactViewportProjection {\n if (frame.itemCount > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw projectionError(\"viewport projection exceeds its hard cell limit\");\n }\n if (frame.payload.byteLength < VIEWPORT_PROJECTION_PREFIX_BYTES + frame.itemCount * 10) {\n throw projectionError(\"viewport projection payload is truncated\");\n }\n const reader = new Reader(frame.payload);\n const sheetId = reader.stableId(\"viewport sheet id\");\n const generationId = reader.optionalStableId((frame.flags & GENERATIONS_FLAG) !== 0);\n const startRow = reader.u32();\n const startColumn = reader.u32();\n const rowCount = reader.u32();\n const columnCount = reader.u32();\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n const dimensions = (frame.flags & DIMENSIONS_FLAG) !== 0 ? readDimensions(reader) : {};\n validateDimensionExtent(dimensions, startRow, rowCount, startColumn, columnCount);\n const cells: SpreadsheetArtifactProjectedCell[] = [];\n let previousOrdinal = -1;\n for (let index = 0; index < frame.itemCount; index += 1) {\n const relativeRow = reader.u32();\n const relativeColumn = reader.u32();\n if (relativeRow >= rowCount || relativeColumn >= columnCount) {\n throw projectionError(\"viewport cell lies outside its response extent\");\n }\n const ordinal = relativeRow * columnCount + relativeColumn;\n if (!Number.isSafeInteger(ordinal) || ordinal <= previousOrdinal) {\n throw projectionError(\"viewport cells are not unique strict row-major entries\");\n }\n previousOrdinal = ordinal;\n const formula = reader.formula();\n const value = reader.cellValue();\n if (formula === null && value.kind === \"empty\") {\n throw projectionError(\"sparse viewport contains an empty cell\");\n }\n cells.push(\n Object.freeze({\n row: startRow + relativeRow,\n column: startColumn + relativeColumn,\n formula,\n value,\n }),\n );\n }\n reader.done(\"viewport projection payload contains trailing bytes\");\n return Object.freeze({\n revision: frame.revision,\n ...dimensions,\n sheetId,\n generationId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n cells: Object.freeze(cells),\n });\n}\n\nfunction decodeMetadataPayload(frame: ProjectionFrame): SpreadsheetArtifactMetadataProjection {\n if (frame.itemCount > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw projectionError(\"metadata projection exceeds its hard sheet limit\");\n }\n if (frame.payload.byteLength < METADATA_PROJECTION_PREFIX_BYTES + frame.itemCount * 37) {\n throw projectionError(\"metadata projection payload is truncated\");\n }\n const reader = new Reader(frame.payload);\n const features = reader.u32();\n if ((features & ~1) !== 0 || (features === 1) !== ((frame.flags & DIMENSIONS_FLAG) !== 0)) {\n throw projectionError(\"metadata projection contains unknown modeled feature bits\");\n }\n const hasGenerations = (frame.flags & GENERATIONS_FLAG) !== 0;\n if (frame.itemCount === 0 && hasGenerations) {\n throw projectionError(\"empty metadata projection must not set the generations flag\");\n }\n const sheets: SpreadsheetArtifactSheetMetadata[] = [];\n const ids = new Set<string>();\n const names = new Set<string>();\n for (let index = 0; index < frame.itemCount; index += 1) {\n const sheetId = reader.stableId(\"metadata sheet id\");\n if (ids.has(sheetId)) throw projectionError(\"metadata projection contains duplicate sheet ids\");\n ids.add(sheetId);\n const generationId = reader.optionalStableId(hasGenerations);\n const name = validateSheetName(reader.string(), \"metadata sheet name\");\n const foldedName = name.toLowerCase();\n if (names.has(foldedName)) {\n throw projectionError(\"metadata projection contains duplicate case-insensitive sheet names\");\n }\n names.add(foldedName);\n const boundsTag = reader.u8();\n if (boundsTag > 1) throw projectionError(\"metadata used-bounds tag is invalid\");\n let usedBounds: SpreadsheetArtifactUsedBounds | null = null;\n if (boundsTag === 1) {\n const startRow = reader.u32();\n const startColumn = reader.u32();\n const endRow = reader.u32();\n const endColumn = reader.u32();\n if (startRow > endRow || startColumn > endColumn) {\n throw projectionError(\"metadata used bounds are not ordered\");\n }\n usedBounds = Object.freeze({ startRow, startColumn, endRow, endColumn });\n }\n const dimensions = (frame.flags & DIMENSIONS_FLAG) !== 0 ? readDimensions(reader) : {};\n sheets.push(Object.freeze({ sheetId, generationId, name, usedBounds, ...dimensions }));\n }\n reader.done(\"metadata projection payload contains trailing bytes\");\n return Object.freeze({\n revision: frame.revision,\n modeledFeatures: Object.freeze({ dimensions: features === 1, hidden: false, merges: false }),\n sheets: Object.freeze(sheets),\n });\n}\n\nfunction normalizeViewportQuery(input: unknown): SpreadsheetArtifactViewportQuery {\n const query = exactRecord(input, \"spreadsheet viewport query\");\n exactKeys(\n query,\n [\"columnCount\", \"maxBytes\", \"maxCells\", \"rowCount\", \"sheetId\", \"startColumn\", \"startRow\"],\n \"spreadsheet viewport query\",\n );\n const sheetId = spreadsheetSheetId(requireString(query.sheetId, \"viewport sheetId\"));\n const startRow = uint32(query.startRow, \"viewport startRow\");\n const startColumn = uint32(query.startColumn, \"viewport startColumn\");\n const rowCount = positiveUint32(query.rowCount, \"viewport rowCount\");\n const columnCount = positiveUint32(query.columnCount, \"viewport columnCount\");\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n const maxCells = positiveUint32(query.maxCells, \"viewport maxCells\");\n const maxBytes = positiveUint32(query.maxBytes, \"viewport maxBytes\");\n if (maxBytes < SPREADSHEET_ARTIFACT_VIEWPORT_MIN_RESPONSE_BYTES) {\n throw queryError(\"viewport maxBytes cannot fit an empty response\");\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction normalizeMetadataQuery(input: unknown): SpreadsheetArtifactMetadataQuery {\n const query = exactRecord(input, \"spreadsheet metadata query\");\n exactKeys(query, [\"maxBytes\", \"maxSheets\"], \"spreadsheet metadata query\");\n const maxSheets = positiveUint32(query.maxSheets, \"metadata maxSheets\");\n const maxBytes = positiveUint32(query.maxBytes, \"metadata maxBytes\");\n if (maxBytes < SPREADSHEET_ARTIFACT_METADATA_MIN_RESPONSE_BYTES) {\n throw queryError(\"metadata maxBytes cannot fit an empty response\");\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction normalizeViewportProjection(input: unknown): SpreadsheetArtifactViewportProjection {\n const projection = exactRecord(input, \"spreadsheet viewport projection\");\n exactKeys(\n projection,\n [\n \"cells\",\n \"columnCount\",\n \"generationId\",\n \"revision\",\n \"rowCount\",\n \"sheetId\",\n \"startColumn\",\n \"startRow\",\n ...(projection.defaultRowHeight === undefined ? [] : DIMENSION_KEYS),\n ].sort(),\n \"spreadsheet viewport projection\",\n );\n const revision = uint64(projection.revision, \"viewport revision\");\n const sheetId = spreadsheetSheetId(requireString(projection.sheetId, \"viewport sheetId\"));\n const generationId = nullableGenerationId(projection.generationId, \"viewport generationId\");\n const startRow = uint32(projection.startRow, \"viewport startRow\");\n const startColumn = uint32(projection.startColumn, \"viewport startColumn\");\n const rowCount = positiveUint32(projection.rowCount, \"viewport rowCount\");\n const columnCount = positiveUint32(projection.columnCount, \"viewport columnCount\");\n validateViewportGeometry(startRow, startColumn, rowCount, columnCount);\n const dimensions =\n projection.defaultRowHeight === undefined ? {} : normalizeDimensions(projection);\n validateDimensionExtent(dimensions, startRow, rowCount, startColumn, columnCount);\n if (!Array.isArray(projection.cells)) throw projectionError(\"viewport cells must be an array\");\n if (projection.cells.length > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw projectionError(\"viewport projection exceeds its hard cell limit\");\n }\n const cells: SpreadsheetArtifactProjectedCell[] = [];\n let previousOrdinal = -1;\n for (let index = 0; index < projection.cells.length; index += 1) {\n const cell = normalizeProjectedCell(ownArrayElement(projection.cells, index, \"viewport cells\"));\n if (\n cell.row < startRow ||\n cell.row >= startRow + rowCount ||\n cell.column < startColumn ||\n cell.column >= startColumn + columnCount\n ) {\n throw projectionError(\"viewport cell lies outside its response extent\");\n }\n const ordinal = (cell.row - startRow) * columnCount + (cell.column - startColumn);\n if (!Number.isSafeInteger(ordinal) || ordinal <= previousOrdinal) {\n throw projectionError(\"viewport cells are not unique strict row-major entries\");\n }\n previousOrdinal = ordinal;\n if (cell.formula === null && cell.value.kind === \"empty\") {\n throw projectionError(\"sparse viewport contains an empty cell\");\n }\n cells.push(cell);\n }\n return Object.freeze({\n revision,\n ...dimensions,\n sheetId,\n generationId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n cells: Object.freeze(cells),\n });\n}\n\nfunction normalizeMetadataProjection(input: unknown): SpreadsheetArtifactMetadataProjection {\n const projection = exactRecord(input, \"spreadsheet metadata projection\");\n exactKeys(\n projection,\n [\"modeledFeatures\", \"revision\", \"sheets\"],\n \"spreadsheet metadata projection\",\n );\n const revision = uint64(projection.revision, \"metadata revision\");\n const features = exactRecord(projection.modeledFeatures, \"metadata modeledFeatures\");\n exactKeys(features, [\"dimensions\", \"hidden\", \"merges\"], \"metadata modeledFeatures\");\n if (\n typeof features.dimensions !== \"boolean\" ||\n features.hidden !== false ||\n features.merges !== false\n ) {\n throw projectionError(\"metadata modeled features are invalid\");\n }\n if (!Array.isArray(projection.sheets)) throw projectionError(\"metadata sheets must be an array\");\n if (projection.sheets.length > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw projectionError(\"metadata projection exceeds its hard sheet limit\");\n }\n const ids = new Set<string>();\n const names = new Set<string>();\n const sheets: SpreadsheetArtifactSheetMetadata[] = [];\n let generationPresence: boolean | null = null;\n for (let index = 0; index < projection.sheets.length; index += 1) {\n const value = exactRecord(\n ownArrayElement(projection.sheets, index, \"metadata sheets\"),\n \"metadata sheet\",\n );\n exactKeys(\n value,\n [\n \"generationId\",\n \"name\",\n \"sheetId\",\n \"usedBounds\",\n ...(features.dimensions ? DIMENSION_KEYS : []),\n ].sort(),\n \"metadata sheet\",\n );\n const sheetId = spreadsheetSheetId(requireString(value.sheetId, \"metadata sheetId\"));\n if (ids.has(sheetId)) throw projectionError(\"metadata projection contains duplicate sheet ids\");\n ids.add(sheetId);\n const generationId = nullableGenerationId(value.generationId, \"metadata generationId\");\n const present = generationId !== null;\n if (generationPresence !== null && generationPresence !== present) {\n throw projectionError(\"metadata generations must be uniformly present or absent\");\n }\n generationPresence = present;\n const name = validateSheetName(\n requireString(value.name, \"metadata sheet name\"),\n \"metadata sheet name\",\n );\n const foldedName = name.toLowerCase();\n if (names.has(foldedName)) {\n throw projectionError(\"metadata projection contains duplicate case-insensitive sheet names\");\n }\n names.add(foldedName);\n const usedBounds = value.usedBounds === null ? null : normalizeUsedBounds(value.usedBounds);\n sheets.push(\n Object.freeze({\n sheetId,\n generationId,\n name,\n usedBounds,\n ...(features.dimensions ? normalizeDimensions(value) : {}),\n }),\n );\n }\n return Object.freeze({\n revision,\n modeledFeatures: Object.freeze({\n dimensions: features.dimensions,\n hidden: false,\n merges: false,\n }),\n sheets: Object.freeze(sheets),\n });\n}\n\nfunction normalizeDimensions(input: Record<string, unknown>): SpreadsheetArtifactDimensions {\n if (\n input.defaultRowHeight !== SPREADSHEET_DEFAULT_ROW_HEIGHT ||\n input.defaultColumnWidth !== SPREADSHEET_DEFAULT_COLUMN_WIDTH\n ) {\n throw projectionError(\"dimension defaults are invalid\");\n }\n const normalizeEntries = (\n value: unknown,\n defaultPixels: number,\n ): readonly (readonly [number, number])[] => {\n if (!Array.isArray(value) || value.length > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES / 8)\n throw projectionError(\"dimension entries exceed limits\");\n let previous = -1;\n const entries: (readonly [number, number])[] = [];\n for (let offset = 0; offset < value.length; offset += 1) {\n const entry = ownArrayElement(value, offset, \"dimension entries\");\n if (!Array.isArray(entry) || entry.length !== 2)\n throw projectionError(\"dimension entry must be an index/pixels pair\");\n const index = uint32(ownArrayElement(entry, 0, \"dimension index\"), `dimension ${offset}`);\n const pixels = positiveUint32(\n ownArrayElement(entry, 1, \"dimension pixels\"),\n \"dimension pixels\",\n );\n if (\n index <= previous ||\n pixels > SPREADSHEET_MAX_DIMENSION_PIXELS ||\n pixels === defaultPixels\n )\n throw projectionError(\"dimensions must be sorted unique non-default entries within bounds\");\n previous = index;\n entries.push(Object.freeze([index, pixels] as const));\n }\n return Object.freeze(entries);\n };\n return Object.freeze({\n defaultRowHeight: SPREADSHEET_DEFAULT_ROW_HEIGHT,\n defaultColumnWidth: SPREADSHEET_DEFAULT_COLUMN_WIDTH,\n rowHeights: normalizeEntries(input.rowHeights, SPREADSHEET_DEFAULT_ROW_HEIGHT),\n columnWidths: normalizeEntries(input.columnWidths, SPREADSHEET_DEFAULT_COLUMN_WIDTH),\n });\n}\n\nfunction writeDimensions(writer: DynamicWriter, dimensions: SpreadsheetArtifactDimensions): void {\n writer.u32(dimensions.defaultRowHeight!);\n writer.u32(dimensions.defaultColumnWidth!);\n for (const entries of [dimensions.rowHeights!, dimensions.columnWidths!]) {\n writer.u32(entries.length);\n for (const [index, pixels] of entries) {\n writer.u32(index);\n writer.u32(pixels);\n }\n }\n}\n\nfunction readDimensions(reader: Reader): SpreadsheetArtifactDimensions {\n const defaultRowHeight = reader.u32();\n const defaultColumnWidth = reader.u32();\n const axes: (readonly [number, number])[][] = [];\n for (let axis = 0; axis < 2; axis += 1) {\n const count = reader.u32();\n if (count > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES / 8)\n throw projectionError(\"dimension entries exceed limits\");\n const entries: (readonly [number, number])[] = [];\n for (let index = 0; index < count; index += 1) entries.push([reader.u32(), reader.u32()]);\n axes.push(entries);\n }\n return normalizeDimensions({\n defaultRowHeight,\n defaultColumnWidth,\n rowHeights: axes[0],\n columnWidths: axes[1],\n });\n}\n\nfunction validateDimensionExtent(\n dimensions: SpreadsheetArtifactDimensions,\n startRow: number,\n rowCount: number,\n startColumn: number,\n columnCount: number,\n): void {\n if (\n dimensions.rowHeights?.some(([index]) => index < startRow || index - startRow >= rowCount) ||\n dimensions.columnWidths?.some(\n ([index]) => index < startColumn || index - startColumn >= columnCount,\n )\n )\n throw projectionError(\"dimensions lie outside viewport\");\n}\n\nfunction normalizeProjectedCell(input: unknown): SpreadsheetArtifactProjectedCell {\n const cell = exactRecord(input, \"projected cell\");\n exactKeys(cell, [\"column\", \"formula\", \"row\", \"value\"], \"projected cell\");\n const row = uint32(cell.row, \"projected cell row\");\n const column = uint32(cell.column, \"projected cell column\");\n let formula: string | null;\n if (cell.formula === null) {\n formula = null;\n } else {\n formula = requireString(cell.formula, \"projected cell formula\");\n if (formula.length === 0) throw projectionError(\"projected cell formula must not be empty\");\n boundedUtf8(\n formula,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES,\n \"projected cell formula\",\n );\n }\n return Object.freeze({\n row,\n column,\n formula,\n value: normalizeProjectedValue(cell.value),\n });\n}\n\nfunction normalizeProjectedValue(input: unknown): SpreadsheetArtifactProjectedCellValue {\n const value = exactRecord(input, \"projected cell value\");\n if (value.kind === \"empty\") {\n exactKeys(value, [\"kind\"], \"empty projected cell value\");\n return EMPTY_VALUE;\n }\n if (value.kind === \"boolean\") {\n exactKeys(value, [\"kind\", \"value\"], \"boolean projected cell value\");\n if (typeof value.value !== \"boolean\") throw projectionError(\"boolean cell value is invalid\");\n return Object.freeze({ kind: \"boolean\", value: value.value });\n }\n if (value.kind === \"number\") {\n exactKeys(value, [\"kind\", \"value\"], \"number projected cell value\");\n if (typeof value.value !== \"number\" || !Number.isFinite(value.value)) {\n throw projectionError(\"number cell value must be finite\");\n }\n return Object.freeze({\n kind: \"number\",\n value: value.value === 0 ? 0 : value.value,\n });\n }\n if (value.kind === \"date\") {\n exactKeys(value, [\"kind\", \"value\"], \"date projected cell value\");\n return Object.freeze({\n kind: \"date\",\n value: canonicalDateString(value.value),\n });\n }\n if (value.kind === \"text\") {\n exactKeys(value, [\"kind\", \"value\"], \"text projected cell value\");\n const text = requireString(value.value, \"text cell value\");\n boundedUtf8(text, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, \"text cell value\");\n return Object.freeze({ kind: \"text\", value: text });\n }\n if (value.kind === \"error\") {\n exactKeys(value, [\"kind\", \"value\"], \"error projected cell value\");\n return Object.freeze({\n kind: \"error\",\n value: normalizeFormulaError(value.value),\n });\n }\n throw projectionError(\"projected cell value kind is invalid\");\n}\n\nfunction canonicalDateString(input: unknown): string {\n canonicalSpreadsheetDateMilliseconds(input);\n return input as string;\n}\n\nfunction normalizeFormulaError(input: unknown): SpreadsheetArtifactFormulaError {\n if (typeof input === \"string\" && FORMULA_ERROR_TAGS.has(input)) {\n return input as Exclude<SpreadsheetArtifactFormulaError, { custom: string }>;\n }\n const error = exactRecord(input, \"custom formula error\");\n exactKeys(error, [\"custom\"], \"custom formula error\");\n const custom = requireString(error.custom, \"custom formula error\");\n boundedUtf8(custom, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, \"custom formula error\");\n return Object.freeze({ custom });\n}\n\nfunction normalizeUsedBounds(input: unknown): SpreadsheetArtifactUsedBounds {\n const bounds = exactRecord(input, \"metadata used bounds\");\n exactKeys(bounds, [\"endColumn\", \"endRow\", \"startColumn\", \"startRow\"], \"metadata used bounds\");\n const startRow = uint32(bounds.startRow, \"used bounds startRow\");\n const startColumn = uint32(bounds.startColumn, \"used bounds startColumn\");\n const endRow = uint32(bounds.endRow, \"used bounds endRow\");\n const endColumn = uint32(bounds.endColumn, \"used bounds endColumn\");\n if (startRow > endRow || startColumn > endColumn) {\n throw projectionError(\"metadata used bounds are not ordered\");\n }\n return Object.freeze({ startRow, startColumn, endRow, endColumn });\n}\n\nfunction validateViewportGeometry(\n startRow: number,\n startColumn: number,\n rowCount: number,\n columnCount: number,\n): void {\n if (rowCount < 1 || columnCount < 1) {\n throw queryError(\"viewport extents must be nonzero\");\n }\n if (rowCount - 1 > UINT32_MAX - startRow || columnCount - 1 > UINT32_MAX - startColumn) {\n throw queryError(\"viewport extent exceeds uint32 coordinates\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_AREA) {\n throw queryError(\"viewport area exceeds its hard limit\");\n }\n}\n\nfunction validateSheetName(value: string, label: string): string {\n boundedUtf8(value, SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES, label);\n if (\n value.length === 0 ||\n value.trim() !== value ||\n value.length > 31 ||\n /[\\\\/?*[\\]:\\0]/u.test(value)\n ) {\n throw projectionError(`${label} does not match the public spreadsheet model`);\n }\n return value;\n}\n\nfunction nullableGenerationId(value: unknown, label: string): EditableArtifactStableId | null {\n return value === null ? null : spreadsheetSheetId(requireString(value, label));\n}\n\nfunction enforceProjectionEnvelopeLimit(bytes: Uint8Array, requested: number): void {\n if (bytes.byteLength > Math.min(requested, SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES)) {\n throw projectionError(\"spreadsheet projection exceeds its requested byte limit\");\n }\n}\n\nfunction effectiveProjectionMaximum(value: number, minimum: number): number {\n const maximum = positiveUint32(value, \"projection maximumBytes\");\n const effective = Math.min(maximum, SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES);\n if (effective < minimum) throw projectionError(\"projection maximum cannot fit an empty response\");\n return effective;\n}\n\nfunction requireBytes(value: unknown, label: string): asserts value is Uint8Array {\n if (!(value instanceof Uint8Array)) throw new TypeError(`${label} must be a Uint8Array`);\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be a string`);\n return value;\n}\n\nfunction uint32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction positiveUint32(value: unknown, label: string): number {\n const number = uint32(value, label);\n if (number === 0) throw new TypeError(`${label} must be nonzero`);\n return number;\n}\n\nfunction uint64(value: unknown, label: string): bigint {\n if (typeof value !== \"bigint\" || value < 0n || value > UINT64_MAX) {\n throw new TypeError(`${label} must be a uint64 bigint`);\n }\n return value;\n}\n\nfunction exactRecord(value: unknown, label: string): Record<string, unknown> {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n ) {\n throw new TypeError(`${label} must be a plain record`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n label: string,\n): void {\n const keys = Reflect.ownKeys(value);\n if (keys.some((key) => typeof key !== \"string\"))\n throw new TypeError(`${label} has symbol fields`);\n const actual = (keys as string[]).sort(compareCodeUnits);\n if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {\n throw new TypeError(`${label} fields must be exactly: ${expected.join(\", \")}`);\n }\n for (const key of actual) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} fields must be enumerable data properties`);\n }\n }\n}\n\nfunction ownArrayElement(value: readonly unknown[], index: number, label: string): unknown {\n if (!Object.hasOwn(value, index)) throw new TypeError(`${label} must be dense`);\n return value[index];\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction boundedUtf8(value: string, maximum: number, label: string): Uint8Array {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n }\n const bytes = textEncoder.encode(value);\n if (bytes.byteLength > maximum) throw new RangeError(`${label} exceeds its byte limit`);\n return bytes;\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n\nfunction fnv1a64(bytes: Uint8Array): bigint {\n let hash = FNV_OFFSET;\n for (const byte of bytes) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * FNV_PRIME);\n }\n return hash;\n}\n\nfunction queryError(message: string): TypeError {\n return new TypeError(message);\n}\n\nfunction projectionError(message: string): TypeError {\n return new TypeError(message);\n}\n\nconst EMPTY_VALUE: SpreadsheetArtifactProjectedCellValue = Object.freeze({\n kind: \"empty\",\n});\n\nconst FORMULA_ERRORS = [\n \"null\",\n \"divide_by_zero\",\n \"value\",\n \"reference\",\n \"name\",\n \"number\",\n \"not_available\",\n \"spill\",\n \"calculation\",\n] as const;\n\nconst FORMULA_ERROR_TAGS = new Set<string>(FORMULA_ERRORS);\n\nclass FixedWriter {\n private readonly buffer: Uint8Array;\n private readonly viewBuffer: DataView;\n private offset = 0;\n\n constructor(length: number) {\n this.buffer = new Uint8Array(length);\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n view(): Uint8Array {\n return this.buffer.subarray(0, this.offset);\n }\n\n finish(): Uint8Array {\n if (this.offset !== this.buffer.byteLength)\n throw new TypeError(\"fixed binary writer is incomplete\");\n return this.buffer;\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.offset, value);\n this.offset += 1;\n }\n\n u16(value: number): void {\n this.reserve(2);\n this.viewBuffer.setUint16(this.offset, value, true);\n this.offset += 2;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.offset, value, true);\n this.offset += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.offset, value, true);\n this.offset += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n const id = spreadsheetSheetId(value);\n this.u64(BigInt(`0x${id.slice(16)}`));\n this.u64(BigInt(`0x${id.slice(0, 16)}`));\n }\n\n bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.offset);\n this.offset += value.byteLength;\n }\n\n private reserve(length: number): void {\n if (this.offset + length > this.buffer.byteLength)\n throw new RangeError(\"fixed binary writer overflow\");\n }\n}\n\nclass DynamicWriter {\n private buffer: Uint8Array;\n private viewBuffer: DataView;\n private offset = 0;\n\n constructor(private readonly maximum: number) {\n this.buffer = new Uint8Array(Math.min(1_024, maximum));\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.offset);\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.offset, value);\n this.offset += 1;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.offset, value, true);\n this.offset += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.offset, value, true);\n this.offset += 8;\n }\n\n f64(value: number): void {\n this.reserve(8);\n this.viewBuffer.setFloat64(this.offset, value === 0 ? 0 : value, true);\n this.offset += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n const id = spreadsheetSheetId(value);\n this.u64(BigInt(`0x${id.slice(16)}`));\n this.u64(BigInt(`0x${id.slice(0, 16)}`));\n }\n\n optionalStableId(value: EditableArtifactStableId | null): void {\n if (value === null) this.bytes(new Uint8Array(16));\n else this.stableId(value);\n }\n\n string(value: string): void {\n const bytes = boundedUtf8(\n value,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES,\n \"projection string\",\n );\n this.u32(bytes.byteLength);\n this.bytes(bytes);\n }\n\n cell(cell: SpreadsheetArtifactProjectedCell): void {\n if (cell.formula === null) {\n this.u8(0);\n } else {\n this.u8(1);\n this.string(cell.formula);\n }\n const value = cell.value;\n switch (value.kind) {\n case \"empty\":\n this.u8(0);\n break;\n case \"boolean\":\n this.u8(value.value ? 2 : 1);\n break;\n case \"number\":\n this.u8(3);\n this.f64(value.value);\n break;\n case \"date\":\n this.u8(6);\n this.i64(BigInt(Date.parse(value.value)));\n break;\n case \"text\":\n this.u8(4);\n this.string(value.value);\n break;\n case \"error\":\n this.u8(5);\n this.formulaError(value.value);\n break;\n }\n }\n\n private formulaError(error: SpreadsheetArtifactFormulaError): void {\n if (typeof error === \"string\") {\n this.u8(FORMULA_ERRORS.indexOf(error as (typeof FORMULA_ERRORS)[number]));\n } else {\n this.u8(9);\n this.string(error.custom);\n }\n }\n\n private bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.offset);\n this.offset += value.byteLength;\n }\n\n private i64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigInt64(this.offset, value, true);\n this.offset += 8;\n }\n\n private reserve(additional: number): void {\n const required = this.offset + additional;\n if (!Number.isSafeInteger(required) || required > this.maximum) {\n throw projectionError(\"spreadsheet projection exceeds its byte limit\");\n }\n if (required <= this.buffer.byteLength) return;\n let size = Math.max(1, this.buffer.byteLength);\n while (size < required) size = Math.min(this.maximum, size * 2);\n const next = new Uint8Array(size);\n next.set(this.buffer.subarray(0, this.offset));\n this.buffer = next;\n this.viewBuffer = new DataView(next.buffer);\n }\n}\n\nclass Reader {\n private readonly viewBuffer: DataView;\n private offset = 0;\n\n constructor(private readonly input: Uint8Array) {\n this.viewBuffer = new DataView(input.buffer, input.byteOffset, input.byteLength);\n }\n\n u8(): number {\n this.reserve(1);\n return this.input[this.offset++]!;\n }\n\n u16(): number {\n this.reserve(2);\n const value = this.viewBuffer.getUint16(this.offset, true);\n this.offset += 2;\n return value;\n }\n\n u32(): number {\n this.reserve(4);\n const value = this.viewBuffer.getUint32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n u64(): bigint {\n this.reserve(8);\n const value = this.viewBuffer.getBigUint64(this.offset, true);\n this.offset += 8;\n return value;\n }\n\n f64(): number {\n this.reserve(8);\n const value = this.viewBuffer.getFloat64(this.offset, true);\n this.offset += 8;\n if (!Number.isFinite(value) || Object.is(value, -0)) {\n throw projectionError(\"spreadsheet projection number is noncanonical\");\n }\n return value;\n }\n\n stableId(label: string): EditableArtifactStableId {\n const counter = this.u64().toString(16).padStart(16, \"0\");\n const namespace = this.u64().toString(16).padStart(16, \"0\");\n try {\n return spreadsheetSheetId(`${namespace}${counter}`);\n } catch {\n throw projectionError(`${label} is reserved or noncanonical`);\n }\n }\n\n optionalStableId(present: boolean): EditableArtifactStableId | null {\n if (present) return this.stableId(\"projection generation id\");\n const bytes = this.bytes(16);\n if (bytes.some((byte) => byte !== 0)) {\n throw projectionError(\"projection has a generation id without its flag\");\n }\n return null;\n }\n\n string(): string {\n const length = this.u32();\n if (length > SPREADSHEET_ARTIFACT_PROJECTION_MAX_STRING_BYTES) {\n throw projectionError(\"projection string exceeds its byte limit\");\n }\n try {\n return textDecoder.decode(this.bytes(length));\n } catch {\n throw projectionError(\"projection string is not canonical UTF-8\");\n }\n }\n\n formula(): string | null {\n const tag = this.u8();\n if (tag === 0) return null;\n if (tag !== 1) throw projectionError(\"projection formula tag is invalid\");\n const formula = this.string();\n if (formula.length === 0) throw projectionError(\"projection formula must not be empty\");\n return formula;\n }\n\n cellValue(): SpreadsheetArtifactProjectedCellValue {\n switch (this.u8()) {\n case 0:\n return EMPTY_VALUE;\n case 1:\n return Object.freeze({ kind: \"boolean\", value: false });\n case 2:\n return Object.freeze({ kind: \"boolean\", value: true });\n case 3:\n return Object.freeze({ kind: \"number\", value: this.f64() });\n case 4:\n return Object.freeze({ kind: \"text\", value: this.string() });\n case 5:\n return Object.freeze({ kind: \"error\", value: this.formulaError() });\n case 6:\n return Object.freeze({\n kind: \"date\",\n value: canonicalSpreadsheetDateFromMilliseconds(this.i64()),\n });\n default:\n throw projectionError(\"projection cell value tag is invalid\");\n }\n }\n\n done(message: string): void {\n if (this.offset !== this.input.byteLength) throw new TypeError(message);\n }\n\n private i64(): bigint {\n const bytes = this.bytes(8);\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getBigInt64(0, true);\n }\n\n bytes(length: number): Uint8Array {\n this.reserve(length);\n const bytes = this.input.subarray(this.offset, this.offset + length);\n this.offset += length;\n return bytes;\n }\n\n private formulaError(): SpreadsheetArtifactFormulaError {\n const tag = this.u8();\n if (tag <= 8) return FORMULA_ERRORS[tag]!;\n if (tag === 9) return Object.freeze({ custom: this.string() });\n throw projectionError(\"projection formula error tag is invalid\");\n }\n\n private reserve(length: number): void {\n if (\n !Number.isSafeInteger(length) ||\n length < 0 ||\n this.offset + length > this.input.byteLength\n ) {\n throw projectionError(\"spreadsheet projection payload is truncated\");\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,7 @@
1
+ import {
2
+ OPENGENI_SLACK_REST_USER_SCOPES
3
+ } from "./chunk-PUIUXIOL.js";
4
+
1
5
  // src/slack-bot-scopes.ts
2
6
  var OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [
3
7
  "app_mentions:read",
@@ -17,6 +21,7 @@ var OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [
17
21
  "users:read"
18
22
  ];
19
23
  var OPENGENI_SLACK_REACTION_REQUIRED_SCOPE = "reactions:read";
24
+ var OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE = "files:write";
20
25
  var OPENGENI_SLACK_BOT_SEARCH_SCOPES = [
21
26
  "search:read.public",
22
27
  "search:read.files",
@@ -25,8 +30,14 @@ var OPENGENI_SLACK_BOT_SEARCH_SCOPES = [
25
30
  var OPENGENI_SLACK_BOT_REQUESTED_SCOPES = [
26
31
  ...OPENGENI_SLACK_BOT_REQUIRED_SCOPES,
27
32
  OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
28
- ...OPENGENI_SLACK_BOT_SEARCH_SCOPES
33
+ OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE
29
34
  ];
35
+ function openGeniSlackBotRequestedScopes(mode = "limited") {
36
+ return [
37
+ ...OPENGENI_SLACK_BOT_REQUESTED_SCOPES,
38
+ ...mode === "full" ? OPENGENI_SLACK_BOT_SEARCH_SCOPES : []
39
+ ];
40
+ }
30
41
  var OPENGENI_SLACK_BOT_EVENTS = [
31
42
  "app_home_opened",
32
43
  "app_mention",
@@ -36,33 +47,7 @@ var OPENGENI_SLACK_BOT_EVENTS = [
36
47
  "message.mpim",
37
48
  "reaction_added"
38
49
  ];
39
- var OPENGENI_SLACK_MCP_USER_SCOPES = [
40
- "search:read.public",
41
- "search:read.private",
42
- "search:read.mpim",
43
- "search:read.im",
44
- "search:read.files",
45
- "files:read",
46
- "emoji:read",
47
- "search:read.users",
48
- "chat:write",
49
- "channels:history",
50
- "groups:history",
51
- "mpim:history",
52
- "im:history",
53
- "channels:write",
54
- "groups:write",
55
- "im:write",
56
- "mpim:write",
57
- "reactions:write",
58
- "canvases:read",
59
- "canvases:write",
60
- "users:read",
61
- "users:read.email",
62
- "channels:read",
63
- "groups:read",
64
- "mpim:read"
65
- ];
50
+ var OPENGENI_SLACK_MCP_USER_SCOPES = OPENGENI_SLACK_REST_USER_SCOPES;
66
51
  var OPENGENI_MANAGED_PUBLIC_BASE_URL = "https://app.opengeni.ai";
67
52
  function normalizedSlackManifestText(value, fallback, label, maxLength) {
68
53
  const normalized = value?.trim() || fallback;
@@ -92,17 +77,17 @@ function normalizedSlackManifestBaseUrl(publicBaseUrl) {
92
77
  }
93
78
  function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
94
79
  const baseUrl = normalizedSlackManifestBaseUrl(publicBaseUrl);
95
- const appName = normalizedSlackManifestText(options.appName, "OpenGeni", "app name", 35);
80
+ const appName = normalizedSlackManifestText(options.appName, "Opengeni", "app name", 35);
96
81
  const botDisplayName = normalizedSlackManifestText(
97
82
  options.botDisplayName,
98
- "OpenGeni",
83
+ "Opengeni",
99
84
  "bot display name",
100
85
  80
101
86
  );
102
87
  const slashCommand = normalizedSlackCommand(options.slashCommand);
103
88
  const shortcutName = normalizedSlackManifestText(
104
89
  options.shortcutName,
105
- "Open in OpenGeni",
90
+ "Open in Opengeni",
106
91
  "shortcut name",
107
92
  35
108
93
  );
@@ -118,7 +103,7 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
118
103
  slash_commands: [
119
104
  {
120
105
  command: slashCommand,
121
- description: "Start an OpenGeni task in this channel",
106
+ description: "Start an Opengeni task in this channel",
122
107
  should_escape: false,
123
108
  url: `${baseUrl}/v1/integrations/slack/commands`
124
109
  }
@@ -126,7 +111,7 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
126
111
  shortcuts: [
127
112
  {
128
113
  callback_id: "opengeni_message",
129
- description: "Start an OpenGeni task from this Slack message",
114
+ description: "Start an Opengeni task from this Slack message",
130
115
  name: shortcutName,
131
116
  type: "message"
132
117
  }
@@ -138,7 +123,7 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
138
123
  `${baseUrl}/v1/integrations/slack/callback`
139
124
  ],
140
125
  scopes: {
141
- bot: [...OPENGENI_SLACK_BOT_REQUESTED_SCOPES],
126
+ bot: openGeniSlackBotRequestedScopes(options.accessMode),
142
127
  user: [...OPENGENI_SLACK_MCP_USER_SCOPES]
143
128
  }
144
129
  },
@@ -161,8 +146,12 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
161
146
  var OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES = [
162
147
  "team:read",
163
148
  OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
149
+ OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE,
164
150
  ...OPENGENI_SLACK_BOT_SEARCH_SCOPES
165
151
  ];
152
+ function hasOpenGeniSlackFileUploadScope(grantedScopes) {
153
+ return grantedScopes.includes(OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE);
154
+ }
166
155
  function hasOpenGeniSlackBotSearchScopes(grantedScopes) {
167
156
  return OPENGENI_SLACK_BOT_SEARCH_SCOPES.every((scope) => grantedScopes.includes(scope));
168
157
  }
@@ -190,17 +179,20 @@ function evaluateOpenGeniSlackBotScopes(grantedScopes) {
190
179
  export {
191
180
  OPENGENI_SLACK_BOT_REQUIRED_SCOPES,
192
181
  OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
182
+ OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE,
193
183
  OPENGENI_SLACK_BOT_SEARCH_SCOPES,
194
184
  OPENGENI_SLACK_BOT_REQUESTED_SCOPES,
185
+ openGeniSlackBotRequestedScopes,
195
186
  OPENGENI_SLACK_BOT_EVENTS,
196
187
  OPENGENI_SLACK_MCP_USER_SCOPES,
197
188
  OPENGENI_MANAGED_PUBLIC_BASE_URL,
198
189
  buildOpenGeniSlackBotManifest,
199
190
  OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES,
191
+ hasOpenGeniSlackFileUploadScope,
200
192
  hasOpenGeniSlackBotSearchScopes,
201
193
  OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES,
202
194
  areOpenGeniSlackBotScopesAccepted,
203
195
  hasOpenGeniSlackReactionScope,
204
196
  evaluateOpenGeniSlackBotScopes
205
197
  };
206
- //# sourceMappingURL=chunk-MRWYRAS5.js.map
198
+ //# sourceMappingURL=chunk-SHO4YO4B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/slack-bot-scopes.ts"],"sourcesContent":["import { OPENGENI_SLACK_REST_USER_SCOPES } from \"./slack-rest-mcp\";\n\nexport const OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [\n \"app_mentions:read\",\n \"canvases:read\",\n \"channels:history\",\n \"channels:read\",\n \"chat:write\",\n \"commands\",\n \"files:read\",\n \"groups:history\",\n \"groups:read\",\n \"im:history\",\n \"im:read\",\n \"im:write\",\n \"mpim:history\",\n \"mpim:read\",\n \"users:read\",\n] as const;\n\n/** Read-only scope needed only for the optional emoji-reaction summon surface. */\nexport const OPENGENI_SLACK_REACTION_REQUIRED_SCOPE = \"reactions:read\" as const;\n\n/** Optional grant for explicit retained-file delivery to a task's Slack thread. */\nexport const OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE = \"files:write\" as const;\n\n/**\n * Bot-token search scopes for Slack's Real-time Search API\n * (`assistant.search.context`). Slack accepts these as BOT scopes, so\n * workspace-wide public search runs under the bot identity and never needs a\n * human proxy token. Private-channel, DM, and MPIM search remain user-token\n * only and belong exclusively to the personal hosted-MCP grant.\n */\nexport const OPENGENI_SLACK_BOT_SEARCH_SCOPES = [\n \"search:read.public\",\n \"search:read.files\",\n \"search:read.users\",\n] as const;\n\n/**\n * Scopes requested by the managed and generated self-hosted manifests.\n *\n * `reactions:read`, `files:write`, and the bot search scopes are not part of the\n * base eligibility contract: legacy installations may continue using existing\n * Slack interactions and tools while the reaction setting stays disabled, bot\n * search and file delivery stay unavailable, and the tools ask an admin to reinstall.\n */\nexport const OPENGENI_SLACK_BOT_REQUESTED_SCOPES = [\n ...OPENGENI_SLACK_BOT_REQUIRED_SCOPES,\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE,\n] as const;\n\nexport function openGeniSlackBotRequestedScopes(mode: \"limited\" | \"full\" = \"limited\"): string[] {\n return [\n ...OPENGENI_SLACK_BOT_REQUESTED_SCOPES,\n ...(mode === \"full\" ? OPENGENI_SLACK_BOT_SEARCH_SCOPES : []),\n ];\n}\n\nexport const OPENGENI_SLACK_BOT_EVENTS = [\n \"app_home_opened\",\n \"app_mention\",\n \"message.channels\",\n \"message.groups\",\n \"message.im\",\n \"message.mpim\",\n \"reaction_added\",\n] as const;\n\n/** User grants required by the reviewed Slack API MCP tools. */\nexport const OPENGENI_SLACK_MCP_USER_SCOPES = OPENGENI_SLACK_REST_USER_SCOPES;\n\nexport const OPENGENI_MANAGED_PUBLIC_BASE_URL = \"https://app.opengeni.ai\" as const;\n\nexport type OpenGeniSlackBotManifestOptions = Readonly<{\n appName?: string;\n botDisplayName?: string;\n slashCommand?: string;\n shortcutName?: string;\n accessMode?: \"limited\" | \"full\";\n}>;\n\nfunction normalizedSlackManifestText(\n value: string | undefined,\n fallback: string,\n label: string,\n maxLength: number,\n): string {\n const normalized = value?.trim() || fallback;\n if (normalized.length > maxLength || /[\\r\\n\\0]/u.test(normalized)) {\n throw new Error(`Slack bot manifest ${label} must be at most ${maxLength} plain characters`);\n }\n return normalized;\n}\n\nfunction normalizedSlackCommand(value: string | undefined): string {\n const command = value?.trim() || \"/opengeni\";\n if (!/^\\/[a-z0-9_-]{1,31}$/u.test(command)) {\n throw new Error(\n \"Slack bot manifest slash command must start with / and contain at most 31 lowercase letters, digits, hyphens, or underscores\",\n );\n }\n return command;\n}\n\nfunction normalizedSlackManifestBaseUrl(publicBaseUrl: string): string {\n const parsed = new URL(publicBaseUrl);\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new Error(\"Slack bot manifest public base URL must be credential-free HTTPS\");\n }\n parsed.hash = \"\";\n parsed.search = \"\";\n parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\n/** Canonical managed/self-hosted Slack app manifest. Slack accepts JSON manifests. */\nexport function buildOpenGeniSlackBotManifest(\n publicBaseUrl: string,\n options: OpenGeniSlackBotManifestOptions = {},\n) {\n const baseUrl = normalizedSlackManifestBaseUrl(publicBaseUrl);\n const appName = normalizedSlackManifestText(options.appName, \"Opengeni\", \"app name\", 35);\n const botDisplayName = normalizedSlackManifestText(\n options.botDisplayName,\n \"Opengeni\",\n \"bot display name\",\n 80,\n );\n const slashCommand = normalizedSlackCommand(options.slashCommand);\n const shortcutName = normalizedSlackManifestText(\n options.shortcutName,\n \"Open in Opengeni\",\n \"shortcut name\",\n 35,\n );\n return {\n display_information: { name: appName },\n features: {\n app_home: {\n home_tab_enabled: true,\n messages_tab_enabled: true,\n messages_tab_read_only_enabled: false,\n },\n bot_user: { display_name: botDisplayName, always_online: false },\n slash_commands: [\n {\n command: slashCommand,\n description: \"Start an Opengeni task in this channel\",\n should_escape: false,\n url: `${baseUrl}/v1/integrations/slack/commands`,\n },\n ],\n shortcuts: [\n {\n callback_id: \"opengeni_message\",\n description: \"Start an Opengeni task from this Slack message\",\n name: shortcutName,\n type: \"message\",\n },\n ],\n },\n oauth_config: {\n redirect_urls: [\n `${baseUrl}/v1/integrations/oauth/callback`,\n `${baseUrl}/v1/integrations/slack/callback`,\n ],\n scopes: {\n bot: openGeniSlackBotRequestedScopes(options.accessMode),\n user: [...OPENGENI_SLACK_MCP_USER_SCOPES],\n },\n },\n settings: {\n event_subscriptions: {\n bot_events: [...OPENGENI_SLACK_BOT_EVENTS],\n request_url: `${baseUrl}/v1/integrations/slack/events`,\n },\n interactivity: {\n is_enabled: true,\n request_url: `${baseUrl}/v1/integrations/slack/interactions`,\n },\n is_mcp_enabled: true,\n org_deploy_enabled: false,\n socket_mode_enabled: false,\n token_rotation_enabled: false,\n },\n } as const;\n}\n\n/**\n * Optional bot grants used by the shipped read/identity and task-file-delivery\n * surfaces. Every other unrequired scope fails closed, including unknown future\n * Slack scopes, so verification, core routing, and UI eligibility cannot drift.\n */\nexport const OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES = [\n \"team:read\",\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE,\n ...OPENGENI_SLACK_BOT_SEARCH_SCOPES,\n] as const;\n\nexport function hasOpenGeniSlackFileUploadScope(grantedScopes: readonly string[]): boolean {\n return grantedScopes.includes(OPENGENI_SLACK_FILE_UPLOAD_REQUIRED_SCOPE);\n}\n\nexport function hasOpenGeniSlackBotSearchScopes(grantedScopes: readonly string[]): boolean {\n return OPENGENI_SLACK_BOT_SEARCH_SCOPES.every((scope) => grantedScopes.includes(scope));\n}\n\n/** @deprecated Use evaluateOpenGeniSlackBotScopes; an allowlist is the policy. */\nexport const OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES = [\"channels:join\", \"chat:write.public\"] as const;\n\nexport type OpenGeniSlackBotScopePolicy = {\n accepted: boolean;\n missingRequired: string[];\n unsupported: string[];\n};\n\nfunction isOpenGeniSlackBotScopeAllowed(scope: string): boolean {\n return (\n (OPENGENI_SLACK_BOT_REQUIRED_SCOPES as readonly string[]).includes(scope) ||\n (OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES as readonly string[]).includes(scope)\n );\n}\n\nexport function areOpenGeniSlackBotScopesAccepted(grantedScopes: readonly string[]): boolean {\n return (\n OPENGENI_SLACK_BOT_REQUIRED_SCOPES.every((scope) => grantedScopes.includes(scope)) &&\n grantedScopes.every(isOpenGeniSlackBotScopeAllowed)\n );\n}\n\nexport function hasOpenGeniSlackReactionScope(grantedScopes: readonly string[]): boolean {\n return grantedScopes.includes(OPENGENI_SLACK_REACTION_REQUIRED_SCOPE);\n}\n\nexport function evaluateOpenGeniSlackBotScopes(\n grantedScopes: readonly string[],\n): OpenGeniSlackBotScopePolicy {\n const granted = new Set(grantedScopes);\n const missingRequired = OPENGENI_SLACK_BOT_REQUIRED_SCOPES.filter((scope) => !granted.has(scope));\n const unsupported = [...granted].filter((scope) => !isOpenGeniSlackBotScopeAllowed(scope)).sort();\n return {\n accepted: areOpenGeniSlackBotScopesAccepted(grantedScopes),\n missingRequired,\n unsupported,\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,153 @@
1
+ import {
2
+ Permission
3
+ } from "./chunk-HRRU4QPI.js";
4
+ import {
5
+ defineSchema
6
+ } from "./chunk-56SNIMDO.js";
7
+
8
+ // src/organization-access.ts
9
+ import { z } from "zod";
10
+ var OrganizationAccessPreset = /* @__PURE__ */ defineSchema(
11
+ () => z.enum(["read_only", "full", "custom"])
12
+ );
13
+ var OrganizationWorkspaceScope = /* @__PURE__ */ defineSchema(
14
+ () => z.discriminatedUnion("kind", [
15
+ z.object({ kind: z.literal("all") }).strict(),
16
+ z.object({
17
+ kind: z.literal("selected"),
18
+ workspaceIds: z.array(
19
+ z.string().uuid().transform((id) => id.toLowerCase())
20
+ ).max(500).refine((ids) => new Set(ids).size === ids.length, "Workspace IDs must be unique")
21
+ }).strict()
22
+ ])
23
+ );
24
+ var OrganizationActor = /* @__PURE__ */ defineSchema(
25
+ () => z.enum(["user", "organization"])
26
+ );
27
+ var aliases = {
28
+ "environments:manage": "variable-sets:manage",
29
+ "environments:use": "variable-sets:use"
30
+ };
31
+ var permissionSets;
32
+ function sets() {
33
+ if (permissionSets) return permissionSets;
34
+ const canonical = Permission.options.filter((permission) => !aliases[permission]);
35
+ const observational = canonical.filter(
36
+ (permission) => /:(read|list|view|search)$/.test(permission)
37
+ );
38
+ const secretValue = /* @__PURE__ */ new Set(["secrets:read", "variable-sets:read"]);
39
+ const readOnly = observational.filter((permission) => !secretValue.has(permission));
40
+ permissionSets = { canonical, observational, readOnly };
41
+ return permissionSets;
42
+ }
43
+ function organizationAccessPresetPermissions(preset) {
44
+ return preset === "full" ? [...sets().canonical] : preset === "read_only" ? [...sets().readOnly] : [];
45
+ }
46
+ function isReadOnlyPermissionSet(permissions) {
47
+ return permissions.every(
48
+ (permission) => sets().observational.includes(aliases[permission] ?? permission)
49
+ );
50
+ }
51
+ var OrganizationAccessPolicyInput = /* @__PURE__ */ defineSchema(
52
+ () => z.object({
53
+ preset: OrganizationAccessPreset,
54
+ // Lazy for the same module-order reason as `sets()` above.
55
+ permissions: z.array(z.lazy(() => Permission)),
56
+ workspaceScope: OrganizationWorkspaceScope
57
+ }).strict()
58
+ );
59
+ function normalizeOrganizationAccessPolicy(policy) {
60
+ const parsed = OrganizationAccessPolicyInput.parse(policy);
61
+ const requested = new Set(
62
+ parsed.permissions.map((permission) => aliases[permission] ?? permission)
63
+ );
64
+ const { canonical, readOnly } = sets();
65
+ const permissions = canonical.filter((permission) => requested.has(permission));
66
+ const same = (candidate) => candidate.length === permissions.length && candidate.every((permission) => requested.has(permission));
67
+ return {
68
+ preset: same(canonical) ? "full" : same(readOnly) ? "read_only" : "custom",
69
+ permissions,
70
+ workspaceScope: parsed.workspaceScope.kind === "selected" ? { kind: "selected", workspaceIds: [...parsed.workspaceScope.workspaceIds].sort() } : { kind: "all" }
71
+ };
72
+ }
73
+ var OrganizationAccessPolicy = /* @__PURE__ */ defineSchema(
74
+ () => OrganizationAccessPolicyInput.transform(normalizeOrganizationAccessPolicy)
75
+ );
76
+ var UpdateOrganizationMcpConnectionRequest = /* @__PURE__ */ defineSchema(
77
+ () => z.object({ access: OrganizationAccessPolicy }).strict()
78
+ );
79
+ var McpConnectionDecision = /* @__PURE__ */ defineSchema(
80
+ () => z.discriminatedUnion("decision", [
81
+ z.object({ decision: z.literal("deny") }).strict(),
82
+ z.object({
83
+ decision: z.literal("approve"),
84
+ organizationId: z.string().uuid(),
85
+ access: OrganizationAccessPolicy
86
+ }).strict()
87
+ ])
88
+ );
89
+ var OrganizationServiceAccountRole = /* @__PURE__ */ defineSchema(
90
+ () => z.enum(["admin", "member"])
91
+ );
92
+ var ORGANIZATION_ADMIN_ONLY_PERMISSIONS = [
93
+ "account:admin",
94
+ "members:manage",
95
+ "billing:manage",
96
+ "api_keys:manage",
97
+ "usage_allowances:manage"
98
+ ];
99
+ function serviceAccountAllowsPermission(role, permission) {
100
+ return role === "admin" || !ORGANIZATION_ADMIN_ONLY_PERMISSIONS.includes(permission);
101
+ }
102
+ var OrganizationServiceAccount = /* @__PURE__ */ defineSchema(
103
+ () => z.object({
104
+ id: z.string().uuid(),
105
+ organizationId: z.string().uuid(),
106
+ name: z.string().min(1).max(200),
107
+ description: z.string().nullable(),
108
+ role: OrganizationServiceAccountRole,
109
+ /** Keys that are not revoked, including expired ones. */
110
+ activeKeyCount: z.number().int().nonnegative(),
111
+ createdAt: z.string(),
112
+ updatedAt: z.string()
113
+ })
114
+ );
115
+ var ListOrganizationServiceAccountsResponse = /* @__PURE__ */ defineSchema(
116
+ () => z.object({
117
+ serviceAccounts: z.array(OrganizationServiceAccount)
118
+ })
119
+ );
120
+ var CreateOrganizationServiceAccountRequest = /* @__PURE__ */ defineSchema(
121
+ () => z.object({
122
+ name: z.string().trim().min(1).max(200),
123
+ description: z.string().trim().min(1).max(500).optional(),
124
+ role: OrganizationServiceAccountRole.default("member")
125
+ }).strict()
126
+ );
127
+ var UpdateOrganizationServiceAccountRequest = /* @__PURE__ */ defineSchema(
128
+ () => z.object({
129
+ name: z.string().trim().min(1).max(200).optional(),
130
+ description: z.string().trim().min(1).max(500).nullable().optional(),
131
+ role: OrganizationServiceAccountRole.optional()
132
+ }).strict().refine((request) => Object.keys(request).length > 0, "At least one change is required")
133
+ );
134
+
135
+ export {
136
+ OrganizationAccessPreset,
137
+ OrganizationWorkspaceScope,
138
+ OrganizationActor,
139
+ organizationAccessPresetPermissions,
140
+ isReadOnlyPermissionSet,
141
+ normalizeOrganizationAccessPolicy,
142
+ OrganizationAccessPolicy,
143
+ UpdateOrganizationMcpConnectionRequest,
144
+ McpConnectionDecision,
145
+ OrganizationServiceAccountRole,
146
+ ORGANIZATION_ADMIN_ONLY_PERMISSIONS,
147
+ serviceAccountAllowsPermission,
148
+ OrganizationServiceAccount,
149
+ ListOrganizationServiceAccountsResponse,
150
+ CreateOrganizationServiceAccountRequest,
151
+ UpdateOrganizationServiceAccountRequest
152
+ };
153
+ //# sourceMappingURL=chunk-SWRN2DJ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/organization-access.ts"],"sourcesContent":["import { defineSchema } from \"./define-schema\";\nimport { z } from \"zod\";\nimport { Permission } from \"./permissions\";\n\nexport const OrganizationAccessPreset = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"read_only\", \"full\", \"custom\"]),\n);\nexport type OrganizationAccessPreset = z.infer<typeof OrganizationAccessPreset>;\n\nexport const OrganizationWorkspaceScope = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"all\") }).strict(),\n z\n .object({\n kind: z.literal(\"selected\"),\n workspaceIds: z\n .array(\n z\n .string()\n .uuid()\n .transform((id) => id.toLowerCase()),\n )\n .max(500)\n .refine((ids) => new Set(ids).size === ids.length, \"Workspace IDs must be unique\"),\n })\n .strict(),\n ]),\n);\nexport type OrganizationWorkspaceScope = z.infer<typeof OrganizationWorkspaceScope>;\n\nexport const OrganizationActor = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"user\", \"organization\"]),\n);\nexport type OrganizationActor = z.infer<typeof OrganizationActor>;\n\nconst aliases: Partial<Record<Permission, Permission>> = {\n \"environments:manage\": \"variable-sets:manage\",\n \"environments:use\": \"variable-sets:use\",\n};\n// Computed on first use, never at module load: the web build can place\n// `Permission` in a chunk that finishes initializing after this one, and a\n// top-level read of `Permission.options` then crashes the whole app.\nlet permissionSets:\n | { canonical: Permission[]; observational: Permission[]; readOnly: Permission[] }\n | undefined;\nfunction sets() {\n if (permissionSets) return permissionSets;\n const canonical = Permission.options.filter((permission) => !aliases[permission]);\n /** Everything that only observes. Reading secret values observes too. */\n const observational = canonical.filter((permission) =>\n /:(read|list|view|search)$/.test(permission),\n );\n /** Secret values are opt-in: Read only leaves them out, Custom can add them. */\n const secretValue = new Set<Permission>([\"secrets:read\", \"variable-sets:read\"]);\n const readOnly = observational.filter((permission) => !secretValue.has(permission));\n permissionSets = { canonical, observational, readOnly };\n return permissionSets;\n}\n\n/** Custom has no implicit permissions. Presets are expanded only by this helper. */\nexport function organizationAccessPresetPermissions(\n preset: OrganizationAccessPreset,\n): Permission[] {\n return preset === \"full\"\n ? [...sets().canonical]\n : preset === \"read_only\"\n ? [...sets().readOnly]\n : [];\n}\n\n/** True when nothing can be changed, including an empty set and secret-value reads. */\nexport function isReadOnlyPermissionSet(permissions: readonly Permission[]): boolean {\n return permissions.every((permission) =>\n sets().observational.includes(aliases[permission] ?? permission),\n );\n}\n\nconst OrganizationAccessPolicyInput = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n preset: OrganizationAccessPreset,\n // Lazy for the same module-order reason as `sets()` above.\n permissions: z.array(z.lazy(() => Permission)),\n workspaceScope: OrganizationWorkspaceScope,\n })\n .strict(),\n);\n\nexport type OrganizationAccessPolicy = z.infer<typeof OrganizationAccessPolicyInput>;\n\n/** Canonical ordering, alias mapping and labels; never adds an unrequested grant. */\nexport function normalizeOrganizationAccessPolicy(\n policy: OrganizationAccessPolicy,\n): OrganizationAccessPolicy {\n const parsed = OrganizationAccessPolicyInput.parse(policy);\n const requested = new Set(\n parsed.permissions.map((permission) => aliases[permission] ?? permission),\n );\n const { canonical, readOnly } = sets();\n const permissions = canonical.filter((permission) => requested.has(permission));\n const same = (candidate: readonly Permission[]) =>\n candidate.length === permissions.length &&\n candidate.every((permission) => requested.has(permission));\n return {\n preset: same(canonical) ? \"full\" : same(readOnly) ? \"read_only\" : \"custom\",\n permissions,\n workspaceScope:\n parsed.workspaceScope.kind === \"selected\"\n ? { kind: \"selected\", workspaceIds: [...parsed.workspaceScope.workspaceIds].sort() }\n : { kind: \"all\" },\n };\n}\n\nexport const OrganizationAccessPolicy = /* @__PURE__ */ defineSchema(() =>\n OrganizationAccessPolicyInput.transform(normalizeOrganizationAccessPolicy),\n);\n\n/** Change what a connected agent can do. Only the person who connected it can. */\nexport const UpdateOrganizationMcpConnectionRequest = /* @__PURE__ */ defineSchema(() =>\n z.object({ access: OrganizationAccessPolicy }).strict(),\n);\n\n/**\n * The answer to a pending agent sign-in: deny it, or approve it for one\n * organization with the access the agent gets there.\n */\nexport const McpConnectionDecision = /* @__PURE__ */ defineSchema(() =>\n z.discriminatedUnion(\"decision\", [\n z.object({ decision: z.literal(\"deny\") }).strict(),\n z\n .object({\n decision: z.literal(\"approve\"),\n organizationId: z.string().uuid(),\n access: OrganizationAccessPolicy,\n })\n .strict(),\n ]),\n);\n\n/* ----------------------------------------------------------------------------\n Service accounts: an organization identity with no person behind it. It\n holds organization API keys; its role caps what those keys can be given.\n Up to admin, never owner.\n -------------------------------------------------------------------------- */\n\nexport const OrganizationServiceAccountRole = /* @__PURE__ */ defineSchema(() =>\n z.enum([\"admin\", \"member\"]),\n);\nexport type OrganizationServiceAccountRole = z.infer<typeof OrganizationServiceAccountRole>;\n\n/** What only an organization administrator can do; a member service account's keys never hold it. */\nexport const ORGANIZATION_ADMIN_ONLY_PERMISSIONS: readonly Permission[] = [\n \"account:admin\",\n \"members:manage\",\n \"billing:manage\",\n \"api_keys:manage\",\n \"usage_allowances:manage\",\n];\n\n/** The permissions a service account's keys may hold, given its role. */\nexport function serviceAccountAllowsPermission(\n role: OrganizationServiceAccountRole,\n permission: Permission,\n): boolean {\n return role === \"admin\" || !ORGANIZATION_ADMIN_ONLY_PERMISSIONS.includes(permission);\n}\n\nexport const OrganizationServiceAccount = /* @__PURE__ */ defineSchema(() =>\n z.object({\n id: z.string().uuid(),\n organizationId: z.string().uuid(),\n name: z.string().min(1).max(200),\n description: z.string().nullable(),\n role: OrganizationServiceAccountRole,\n /** Keys that are not revoked, including expired ones. */\n activeKeyCount: z.number().int().nonnegative(),\n createdAt: z.string(),\n updatedAt: z.string(),\n }),\n);\nexport type OrganizationServiceAccount = z.infer<typeof OrganizationServiceAccount>;\n\nexport const ListOrganizationServiceAccountsResponse = /* @__PURE__ */ defineSchema(() =>\n z.object({\n serviceAccounts: z.array(OrganizationServiceAccount),\n }),\n);\nexport type ListOrganizationServiceAccountsResponse = z.infer<\n typeof ListOrganizationServiceAccountsResponse\n>;\n\nexport const CreateOrganizationServiceAccountRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n name: z.string().trim().min(1).max(200),\n description: z.string().trim().min(1).max(500).optional(),\n role: OrganizationServiceAccountRole.default(\"member\"),\n })\n .strict(),\n);\nexport type CreateOrganizationServiceAccountRequest = z.infer<\n typeof CreateOrganizationServiceAccountRequest\n>;\n\nexport const UpdateOrganizationServiceAccountRequest = /* @__PURE__ */ defineSchema(() =>\n z\n .object({\n name: z.string().trim().min(1).max(200).optional(),\n description: z.string().trim().min(1).max(500).nullable().optional(),\n role: OrganizationServiceAccountRole.optional(),\n })\n .strict()\n .refine((request) => Object.keys(request).length > 0, \"At least one change is required\"),\n);\nexport type UpdateOrganizationServiceAccountRequest = z.infer<\n typeof UpdateOrganizationServiceAccountRequest\n>;\n"],"mappings":"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","names":[]}