@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,222 @@
1
+ /** The catalog and OAuth identity stay stable while calls use the ordinary Web API. */
2
+ export const OFFICIAL_SLACK_MCP_URL = "https://mcp.slack.com/mcp";
3
+ export const SLACK_REST_API_BASE = "https://slack.com/api/";
4
+ /** Private Slack file bytes are served only from this origin and path. */
5
+ export const SLACK_PRIVATE_FILE_ORIGIN = "https://files.slack.com";
6
+ export const SLACK_PRIVATE_FILE_PATH_PREFIX = "/files-pri/";
7
+
8
+ /** A private Slack file download URL that may carry a Slack user token. */
9
+ export function isSlackPrivateFileUrl(value: string | URL): boolean {
10
+ try {
11
+ const url = new URL(value);
12
+ return (
13
+ url.origin === SLACK_PRIVATE_FILE_ORIGIN &&
14
+ !url.username &&
15
+ !url.password &&
16
+ !url.hash &&
17
+ url.pathname.startsWith(SLACK_PRIVATE_FILE_PATH_PREFIX) &&
18
+ !url.pathname.split("/").some((segment) => segment === "." || segment === "..")
19
+ );
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ export const OPENGENI_SLACK_REST_USER_SCOPES = [
26
+ "channels:read",
27
+ "groups:read",
28
+ "im:read",
29
+ "mpim:read",
30
+ "channels:history",
31
+ "groups:history",
32
+ "im:history",
33
+ "mpim:history",
34
+ "users:read",
35
+ "files:read",
36
+ "im:write",
37
+ "chat:write",
38
+ ] as const;
39
+
40
+ /** Slack returns comma-delimited scopes, including in existing saved grants. */
41
+ export function normalizeSlackScopes(
42
+ scopes: readonly string[] | string | undefined | null,
43
+ ): string[] {
44
+ return [
45
+ ...new Set(
46
+ (typeof scopes === "string" ? [scopes] : (scopes ?? []))
47
+ .flatMap((entry) => entry.split(/[\s,]+/u))
48
+ .filter(Boolean),
49
+ ),
50
+ ].sort();
51
+ }
52
+
53
+ export type SlackRestMcpTool = {
54
+ name: string;
55
+ description: string;
56
+ inputSchema: {
57
+ type: "object";
58
+ properties: Record<string, unknown>;
59
+ required: string[];
60
+ additionalProperties: false;
61
+ };
62
+ annotations: {
63
+ readOnlyHint: boolean;
64
+ destructiveHint: false;
65
+ idempotentHint: boolean;
66
+ openWorldHint: true;
67
+ };
68
+ };
69
+
70
+ const conversationScopes = ["channels:read", "groups:read", "im:read", "mpim:read"];
71
+ const historyScopes = ["channels:history", "groups:history", "im:history", "mpim:history"];
72
+ const channel = { type: "string", description: "Slack conversation ID, such as C123 or D123." };
73
+ const cursor = { type: "string", maxLength: 4096, description: "Cursor from the previous page." };
74
+ const directoryPage = { type: "integer", minimum: 1, maximum: 100, default: 100 };
75
+ const historyPage = { type: "integer", minimum: 1, maximum: 15, default: 15 };
76
+ const timestamp = { type: "string", pattern: "^[0-9]+\\.[0-9]+$" };
77
+
78
+ function tool(
79
+ name: string,
80
+ description: string,
81
+ properties: Record<string, unknown>,
82
+ required: string[] = [],
83
+ mutation = false,
84
+ ): SlackRestMcpTool {
85
+ return {
86
+ name,
87
+ description,
88
+ inputSchema: { type: "object", properties, required, additionalProperties: false },
89
+ annotations: {
90
+ readOnlyHint: !mutation,
91
+ destructiveHint: false,
92
+ idempotentHint: !mutation,
93
+ openWorldHint: true,
94
+ },
95
+ };
96
+ }
97
+
98
+ /** Static reviewed pilot surface. Each call reads only one explicitly requested page. */
99
+ export const SLACK_REST_MCP_TOOLS: SlackRestMcpTool[] = [
100
+ tool(
101
+ "slack_list_channels",
102
+ "Lists one page of conversations visible to your connected Slack account. Conversation types without a granted read scope are omitted.",
103
+ {
104
+ types: {
105
+ type: "array",
106
+ items: { type: "string", enum: ["public_channel", "private_channel", "im", "mpim"] },
107
+ minItems: 1,
108
+ maxItems: 4,
109
+ },
110
+ cursor,
111
+ limit: directoryPage,
112
+ exclude_archived: { type: "boolean", default: true },
113
+ },
114
+ ),
115
+ tool(
116
+ "slack_get_channel_info",
117
+ "Gets metadata for one conversation visible to your connected Slack account.",
118
+ { channel },
119
+ ["channel"],
120
+ ),
121
+ tool(
122
+ "slack_list_channel_members",
123
+ "Lists one page of members in a visible channel or group conversation.",
124
+ { channel, cursor, limit: directoryPage },
125
+ ["channel"],
126
+ ),
127
+ tool("slack_list_users", "Lists one page of users in the connected Slack workspace.", {
128
+ cursor,
129
+ limit: directoryPage,
130
+ }),
131
+ tool(
132
+ "slack_get_user_info",
133
+ "Gets a user's profile by their Slack user ID. Email is included only when Slack has granted that scope.",
134
+ { user: { type: "string" } },
135
+ ["user"],
136
+ ),
137
+ tool(
138
+ "slack_read_channel",
139
+ "Reads one page of at most 15 messages from a selected conversation. Slack history limits are shared across the workspace. No automatic pagination or backfill.",
140
+ {
141
+ channel,
142
+ cursor,
143
+ limit: historyPage,
144
+ oldest: timestamp,
145
+ latest: timestamp,
146
+ inclusive: { type: "boolean", default: false },
147
+ },
148
+ ["channel"],
149
+ ),
150
+ tool(
151
+ "slack_read_thread",
152
+ "Reads one page of at most 15 messages in a selected thread. Slack thread limits are shared across the workspace. No automatic pagination or backfill.",
153
+ {
154
+ channel,
155
+ ts: { ...timestamp, description: "Thread root message timestamp." },
156
+ cursor,
157
+ limit: historyPage,
158
+ },
159
+ ["channel", "ts"],
160
+ ),
161
+ tool(
162
+ "slack_download_file",
163
+ "Downloads one file shared in Slack, such as a PDF or image, into your workspace like an attachment and returns its path. Use the file ID (F...) from a message's files.",
164
+ { file: { type: "string", pattern: "^F[A-Z0-9]+$", description: "Slack file ID." } },
165
+ ["file"],
166
+ ),
167
+ tool(
168
+ "slack_open_dm",
169
+ "Opens or resumes a direct message with one Slack user as your connected account.",
170
+ { user: { type: "string" } },
171
+ ["user"],
172
+ true,
173
+ ),
174
+ tool(
175
+ "slack_send_message",
176
+ "Sends a message as your connected Slack account. Supply thread_ts to reply in a thread. Review the recipient and text before approving. An uncertain submission is never automatically retried.",
177
+ {
178
+ channel,
179
+ text: { type: "string", minLength: 1, maxLength: 40000 },
180
+ thread_ts: { ...timestamp, description: "Optional thread root timestamp for a reply." },
181
+ unfurl_links: { type: "boolean", default: false },
182
+ unfurl_media: { type: "boolean", default: false },
183
+ },
184
+ ["channel", "text"],
185
+ true,
186
+ ),
187
+ ];
188
+
189
+ const REQUIRED_ANY_SCOPES: Readonly<Record<string, readonly string[]>> = {
190
+ slack_list_channels: conversationScopes,
191
+ slack_get_channel_info: conversationScopes,
192
+ slack_list_channel_members: ["channels:read", "groups:read", "mpim:read"],
193
+ slack_list_users: ["users:read"],
194
+ slack_get_user_info: ["users:read"],
195
+ slack_read_channel: historyScopes,
196
+ slack_read_thread: historyScopes,
197
+ slack_download_file: ["files:read"],
198
+ slack_open_dm: ["im:write"],
199
+ slack_send_message: ["chat:write"],
200
+ };
201
+
202
+ export function slackRestMcpToolsForScopes(scopes: readonly string[] | string): SlackRestMcpTool[] {
203
+ const granted = new Set(normalizeSlackScopes(scopes));
204
+ return SLACK_REST_MCP_TOOLS.filter((entry) =>
205
+ REQUIRED_ANY_SCOPES[entry.name]?.some((scope) => granted.has(scope)),
206
+ ).map((entry) => ({
207
+ ...entry,
208
+ inputSchema: {
209
+ ...entry.inputSchema,
210
+ required: [...entry.inputSchema.required],
211
+ properties: { ...entry.inputSchema.properties },
212
+ },
213
+ annotations: { ...entry.annotations },
214
+ }));
215
+ }
216
+
217
+ export const SLACK_CONVERSATION_READ_SCOPE_BY_TYPE = {
218
+ public_channel: "channels:read",
219
+ private_channel: "groups:read",
220
+ im: "im:read",
221
+ mpim: "mpim:read",
222
+ } as const;
@@ -1,38 +1,47 @@
1
+ import { defineSchema } from "./define-schema";
1
2
  import { z } from "zod";
2
3
 
3
4
  export const SLACK_TASK_POLICY_ID_MAX_CHARS = 128;
4
5
  export const SLACK_TASK_POLICY_REASON_MAX_CHARS = 4_096;
5
6
  export const SLACK_TASK_POLICY_MAX_IDS = 256;
6
7
 
7
- const SlackOpaqueId = z.string().min(1).max(SLACK_TASK_POLICY_ID_MAX_CHARS);
8
+ const SlackOpaqueId = /* @__PURE__ */ defineSchema(() =>
9
+ z.string().min(1).max(SLACK_TASK_POLICY_ID_MAX_CHARS),
10
+ );
8
11
 
9
- export const SlackSharedConversationMode = z.enum(["deny", "private_handoff"]);
12
+ export const SlackSharedConversationMode = /* @__PURE__ */ defineSchema(() =>
13
+ z.enum(["deny", "private_handoff"]),
14
+ );
10
15
  export type SlackSharedConversationMode = z.infer<typeof SlackSharedConversationMode>;
11
16
 
12
- export const SlackResultPublicationMode = z.enum(["never", "approval_required", "allow"]);
17
+ export const SlackResultPublicationMode = /* @__PURE__ */ defineSchema(() =>
18
+ z.enum(["never", "approval_required", "allow"]),
19
+ );
13
20
  export type SlackResultPublicationMode = z.infer<typeof SlackResultPublicationMode>;
14
21
 
15
22
  function uniqueSortedIds(values: string[]): string[] {
16
23
  return [...new Set(values)].sort();
17
24
  }
18
25
 
19
- export const SlackTaskPolicyContent = z
20
- .object({
21
- allowedTeamIds: z
22
- .array(SlackOpaqueId)
23
- .max(SLACK_TASK_POLICY_MAX_IDS)
24
- .transform(uniqueSortedIds),
25
- allowedConversationIds: z
26
- .array(SlackOpaqueId)
27
- .max(SLACK_TASK_POLICY_MAX_IDS)
28
- .transform(uniqueSortedIds),
29
- allowGuestInitiators: z.boolean(),
30
- allowExternalInitiators: z.boolean(),
31
- allowMpim: z.boolean(),
32
- sharedConversationMode: SlackSharedConversationMode,
33
- resultPublicationMode: SlackResultPublicationMode,
34
- })
35
- .strict();
26
+ export const SlackTaskPolicyContent = /* @__PURE__ */ defineSchema(() =>
27
+ z
28
+ .object({
29
+ allowedTeamIds: z
30
+ .array(SlackOpaqueId)
31
+ .max(SLACK_TASK_POLICY_MAX_IDS)
32
+ .transform(uniqueSortedIds),
33
+ allowedConversationIds: z
34
+ .array(SlackOpaqueId)
35
+ .max(SLACK_TASK_POLICY_MAX_IDS)
36
+ .transform(uniqueSortedIds),
37
+ allowGuestInitiators: z.boolean(),
38
+ allowExternalInitiators: z.boolean(),
39
+ allowMpim: z.boolean(),
40
+ sharedConversationMode: SlackSharedConversationMode,
41
+ resultPublicationMode: SlackResultPublicationMode,
42
+ })
43
+ .strict(),
44
+ );
36
45
  export type SlackTaskPolicyContent = z.infer<typeof SlackTaskPolicyContent>;
37
46
 
38
47
  export const DEFAULT_SLACK_TASK_POLICY: SlackTaskPolicyContent = Object.freeze({
@@ -58,71 +67,85 @@ export function canonicalizeSlackTaskPolicy(value: SlackTaskPolicyContent): Slac
58
67
  };
59
68
  }
60
69
 
61
- export const SlackTaskPolicyRevisionIdentity = z.object({
62
- id: z.string().uuid(),
63
- revision: z.number().int().positive(),
64
- policyHash: z.string().regex(/^[0-9a-f]{64}$/),
65
- });
70
+ export const SlackTaskPolicyRevisionIdentity = /* @__PURE__ */ defineSchema(() =>
71
+ z.object({
72
+ id: z.string().uuid(),
73
+ revision: z.number().int().positive(),
74
+ policyHash: z.string().regex(/^[0-9a-f]{64}$/),
75
+ }),
76
+ );
66
77
  export type SlackTaskPolicyRevisionIdentity = z.infer<typeof SlackTaskPolicyRevisionIdentity>;
67
78
 
68
- export const SlackTaskPolicyRevision = SlackTaskPolicyRevisionIdentity.extend({
69
- operationId: z.string().uuid(),
70
- accountId: z.string().uuid(),
71
- workspaceId: z.string().uuid(),
72
- policy: SlackTaskPolicyContent,
73
- supersedesRevisionId: z.string().uuid().nullable(),
74
- createdBySubjectId: z.string().min(1).max(1_024),
75
- createdAt: z.string().datetime(),
76
- });
79
+ export const SlackTaskPolicyRevision = /* @__PURE__ */ defineSchema(() =>
80
+ SlackTaskPolicyRevisionIdentity.extend({
81
+ operationId: z.string().uuid(),
82
+ accountId: z.string().uuid(),
83
+ workspaceId: z.string().uuid(),
84
+ policy: SlackTaskPolicyContent,
85
+ supersedesRevisionId: z.string().uuid().nullable(),
86
+ createdBySubjectId: z.string().min(1).max(1_024),
87
+ createdAt: z.string().datetime(),
88
+ }),
89
+ );
77
90
  export type SlackTaskPolicyRevision = z.infer<typeof SlackTaskPolicyRevision>;
78
91
 
79
- export const SlackTaskPolicyHead = z.object({
80
- accountId: z.string().uuid(),
81
- workspaceId: z.string().uuid(),
82
- revisionId: z.string().uuid(),
83
- revision: z.number().int().positive(),
84
- policyHash: z.string().regex(/^[0-9a-f]{64}$/),
85
- activationVersion: z.number().int().positive(),
86
- activatedAt: z.string().datetime(),
87
- });
92
+ export const SlackTaskPolicyHead = /* @__PURE__ */ defineSchema(() =>
93
+ z.object({
94
+ accountId: z.string().uuid(),
95
+ workspaceId: z.string().uuid(),
96
+ revisionId: z.string().uuid(),
97
+ revision: z.number().int().positive(),
98
+ policyHash: z.string().regex(/^[0-9a-f]{64}$/),
99
+ activationVersion: z.number().int().positive(),
100
+ activatedAt: z.string().datetime(),
101
+ }),
102
+ );
88
103
  export type SlackTaskPolicyHead = z.infer<typeof SlackTaskPolicyHead>;
89
104
 
90
- export const SlackTaskPolicyActivationEvent = z.object({
91
- id: z.string().uuid(),
92
- operationId: z.string().uuid(),
93
- accountId: z.string().uuid(),
94
- workspaceId: z.string().uuid(),
95
- activationVersion: z.number().int().positive(),
96
- oldRevision: SlackTaskPolicyRevisionIdentity.nullable(),
97
- newRevision: SlackTaskPolicyRevisionIdentity,
98
- actorSubjectId: z.string().min(1).max(1_024),
99
- reason: z.string().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
100
- createdAt: z.string().datetime(),
101
- });
105
+ export const SlackTaskPolicyActivationEvent = /* @__PURE__ */ defineSchema(() =>
106
+ z.object({
107
+ id: z.string().uuid(),
108
+ operationId: z.string().uuid(),
109
+ accountId: z.string().uuid(),
110
+ workspaceId: z.string().uuid(),
111
+ activationVersion: z.number().int().positive(),
112
+ oldRevision: SlackTaskPolicyRevisionIdentity.nullable(),
113
+ newRevision: SlackTaskPolicyRevisionIdentity,
114
+ actorSubjectId: z.string().min(1).max(1_024),
115
+ reason: z.string().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
116
+ createdAt: z.string().datetime(),
117
+ }),
118
+ );
102
119
  export type SlackTaskPolicyActivationEvent = z.infer<typeof SlackTaskPolicyActivationEvent>;
103
120
 
104
- export const SlackTaskPolicyListResponse = z.object({
105
- current: SlackTaskPolicyHead.nullable(),
106
- activeRevision: SlackTaskPolicyRevision.nullable(),
107
- revisions: z.array(SlackTaskPolicyRevision),
108
- activationEvents: z.array(SlackTaskPolicyActivationEvent),
109
- });
121
+ export const SlackTaskPolicyListResponse = /* @__PURE__ */ defineSchema(() =>
122
+ z.object({
123
+ current: SlackTaskPolicyHead.nullable(),
124
+ activeRevision: SlackTaskPolicyRevision.nullable(),
125
+ revisions: z.array(SlackTaskPolicyRevision),
126
+ activationEvents: z.array(SlackTaskPolicyActivationEvent),
127
+ }),
128
+ );
110
129
  export type SlackTaskPolicyListResponse = z.infer<typeof SlackTaskPolicyListResponse>;
111
130
 
112
- export const UpdateSlackTaskPolicyRequest = z.object({
113
- operationId: z.string().uuid().optional(),
114
- policy: SlackTaskPolicyContent,
115
- expectedCurrentRevisionId: z.string().uuid().nullable(),
116
- expectedActivationVersion: z.number().int().nonnegative(),
117
- reason: z.string().trim().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
118
- });
131
+ export const UpdateSlackTaskPolicyRequest = /* @__PURE__ */ defineSchema(() =>
132
+ z.object({
133
+ operationId: z.string().uuid().optional(),
134
+ policy: SlackTaskPolicyContent,
135
+ expectedCurrentRevisionId: z.string().uuid().nullable(),
136
+ expectedActivationVersion: z.number().int().nonnegative(),
137
+ reason: z.string().trim().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
138
+ }),
139
+ );
119
140
  export type UpdateSlackTaskPolicyRequest = z.infer<typeof UpdateSlackTaskPolicyRequest>;
120
141
 
121
- export const SlackTaskPolicyMutationResponse = z.object({
122
- revision: SlackTaskPolicyRevision,
123
- head: SlackTaskPolicyHead,
124
- event: SlackTaskPolicyActivationEvent,
125
- });
142
+ export const SlackTaskPolicyMutationResponse = /* @__PURE__ */ defineSchema(() =>
143
+ z.object({
144
+ revision: SlackTaskPolicyRevision,
145
+ head: SlackTaskPolicyHead,
146
+ event: SlackTaskPolicyActivationEvent,
147
+ }),
148
+ );
126
149
  export type SlackTaskPolicyMutationResponse = z.infer<typeof SlackTaskPolicyMutationResponse>;
127
150
 
128
151
  export type SlackTaskPolicyConversationFacts = Readonly<{
@@ -17,6 +17,9 @@ export const SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS = 4_096;
17
17
  export const SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS = 1_000_000;
18
18
  export const SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES = 1 * 1024 * 1024;
19
19
  export const SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS = 31;
20
+ export const SPREADSHEET_DEFAULT_ROW_HEIGHT = 24;
21
+ export const SPREADSHEET_DEFAULT_COLUMN_WIDTH = 96;
22
+ export const SPREADSHEET_MAX_DIMENSION_PIXELS = 4096;
20
23
 
21
24
  const MAGIC = new TextEncoder().encode("OGASC002");
22
25
  const HEADER_BYTES = 8 + 2 + 2 + 4 + 8;
@@ -121,7 +124,19 @@ export type SpreadsheetArtifactCommand =
121
124
  | SpreadsheetRenameSheetCommand
122
125
  | SpreadsheetDeleteSheetCommand
123
126
  | SpreadsheetSetCellsCommand
124
- | SpreadsheetClearRangeCommand;
127
+ | SpreadsheetClearRangeCommand
128
+ | Readonly<{
129
+ kind: "row.height.set";
130
+ sheet: SpreadsheetSheetPrecondition;
131
+ row: number;
132
+ height: number | null;
133
+ }>
134
+ | Readonly<{
135
+ kind: "column.width.set";
136
+ sheet: SpreadsheetSheetPrecondition;
137
+ column: number;
138
+ width: number | null;
139
+ }>;
125
140
 
126
141
  export type SpreadsheetArtifactCommandBatch = Readonly<{
127
142
  version: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;
@@ -331,6 +346,27 @@ function encodeCommand(
331
346
  writer.u32(range.end.column);
332
347
  break;
333
348
  }
349
+ case "row.height.set":
350
+ case "column.width.set": {
351
+ const row = command.kind === "row.height.set";
352
+ const coordinate = row ? "row" : "column";
353
+ const size = row ? "height" : "width";
354
+ exactKeys(
355
+ command,
356
+ ["kind", "sheet", coordinate, size].sort(),
357
+ `spreadsheet command ${index}`,
358
+ );
359
+ writer.u8(row ? 5 : 6);
360
+ encodeSheetPrecondition(writer, command.sheet, index, context);
361
+ writer.u32(nonnegativeU32(command[coordinate], coordinate));
362
+ writer.u32(
363
+ dimensionPixels(
364
+ command[size],
365
+ row ? SPREADSHEET_DEFAULT_ROW_HEIGHT : SPREADSHEET_DEFAULT_COLUMN_WIDTH,
366
+ ),
367
+ );
368
+ break;
369
+ }
334
370
  default:
335
371
  throw commandError(index, "unknown command kind");
336
372
  }
@@ -341,7 +377,8 @@ function decodeCommand(
341
377
  index: number,
342
378
  context: CommandContext,
343
379
  ): SpreadsheetArtifactCommand {
344
- switch (reader.u8()) {
380
+ const tag = reader.u8();
381
+ switch (tag) {
345
382
  case 0: {
346
383
  const sheetId = reader.sheetObjectId();
347
384
  const name = decodedSheetName(
@@ -400,11 +437,45 @@ function decodeCommand(
400
437
  range: Object.freeze({ start, end }),
401
438
  });
402
439
  }
440
+ case 5:
441
+ case 6: {
442
+ const sheet = decodeSheetPrecondition(reader, index, context);
443
+ const coordinate = reader.u32();
444
+ const pixels = reader.u32();
445
+ const defaultPixels =
446
+ tag === 5 ? SPREADSHEET_DEFAULT_ROW_HEIGHT : SPREADSHEET_DEFAULT_COLUMN_WIDTH;
447
+ if (pixels === defaultPixels || pixels > SPREADSHEET_MAX_DIMENSION_PIXELS) {
448
+ throw commandError(index, "dimension pixels are noncanonical or outside bounds");
449
+ }
450
+ return tag === 5
451
+ ? Object.freeze({ kind: "row.height.set", sheet, row: coordinate, height: pixels || null })
452
+ : Object.freeze({
453
+ kind: "column.width.set",
454
+ sheet,
455
+ column: coordinate,
456
+ width: pixels || null,
457
+ });
458
+ }
403
459
  default:
404
460
  throw commandError(index, "unknown binary command tag");
405
461
  }
406
462
  }
407
463
 
464
+ function dimensionPixels(value: unknown, defaultPixels: number): number {
465
+ if (value === null) return 0;
466
+ if (
467
+ typeof value !== "number" ||
468
+ !Number.isInteger(value) ||
469
+ value < 1 ||
470
+ value > SPREADSHEET_MAX_DIMENSION_PIXELS
471
+ ) {
472
+ throw new RangeError(
473
+ "dimension pixels must be an integer from 1 through 4096, or null to reset",
474
+ );
475
+ }
476
+ return value === defaultPixels ? 0 : value;
477
+ }
478
+
408
479
  function encodeSheetPrecondition(
409
480
  writer: BinaryWriter,
410
481
  value: unknown,