@opengeni/contracts 0.44.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/dist/agent-authored-durable-text.d.ts +70 -0
  2. package/dist/agent-config.d.ts +869 -0
  3. package/dist/agent-instruction-changes.d.ts +110 -0
  4. package/dist/agent-learning.d.ts +243 -0
  5. package/dist/agent-topology.d.ts +292 -0
  6. package/dist/allowance-refusal.d.ts +9 -0
  7. package/dist/allowance-refusal.js +50 -0
  8. package/dist/allowance-refusal.js.map +1 -0
  9. package/dist/analytics-consent-report.d.ts +19 -0
  10. package/dist/analytics-consent-report.js +10 -0
  11. package/dist/analytics-consent-report.js.map +1 -0
  12. package/dist/api-key-presets.d.ts +19 -0
  13. package/dist/artifact-catalog.d.ts +161 -0
  14. package/dist/artifacts.d.ts +135 -11
  15. package/dist/atlassian-native-retirement.d.ts +16 -0
  16. package/dist/atlassian-native-retirement.js +30 -0
  17. package/dist/atlassian-native-retirement.js.map +1 -0
  18. package/dist/atlassian.d.ts +2 -0
  19. package/dist/atlassian.js +27 -11
  20. package/dist/browser-storage.d.ts +5 -0
  21. package/dist/browser-storage.js +9 -0
  22. package/dist/browser-storage.js.map +1 -0
  23. package/dist/bundled-skills.d.ts +40 -0
  24. package/dist/canonical-human-identities.d.ts +157 -0
  25. package/dist/canonical-human-identities.js +23 -0
  26. package/dist/canonical-human-identities.js.map +1 -0
  27. package/dist/chunk-2ACYHZFB.js +292 -0
  28. package/dist/chunk-2ACYHZFB.js.map +1 -0
  29. package/dist/chunk-2VORLN2R.js +353 -0
  30. package/dist/chunk-2VORLN2R.js.map +1 -0
  31. package/dist/{chunk-Y3MLSLB4.js → chunk-3SIZGL3O.js} +42 -30
  32. package/dist/chunk-3SIZGL3O.js.map +1 -0
  33. package/dist/chunk-46KLD2UH.js +186 -0
  34. package/dist/chunk-46KLD2UH.js.map +1 -0
  35. package/dist/chunk-4JGHSSB7.js +11 -0
  36. package/dist/chunk-4JGHSSB7.js.map +1 -0
  37. package/dist/{chunk-52SGB2QO.js → chunk-5IXYF6XN.js} +50 -10
  38. package/dist/chunk-5IXYF6XN.js.map +1 -0
  39. package/dist/chunk-BCS7WHCK.js +139 -0
  40. package/dist/chunk-BCS7WHCK.js.map +1 -0
  41. package/dist/chunk-EK7NDGFR.js +128 -0
  42. package/dist/chunk-EK7NDGFR.js.map +1 -0
  43. package/dist/{chunk-5UDNP7AO.js → chunk-FZ6BXQHL.js} +78 -38
  44. package/dist/chunk-FZ6BXQHL.js.map +1 -0
  45. package/dist/chunk-GRG7PHWQ.js +25 -0
  46. package/dist/chunk-GRG7PHWQ.js.map +1 -0
  47. package/dist/chunk-JUFK3T4Q.js +80 -0
  48. package/dist/chunk-JUFK3T4Q.js.map +1 -0
  49. package/dist/chunk-KHHZTBP7.js +11 -0
  50. package/dist/chunk-KHHZTBP7.js.map +1 -0
  51. package/dist/chunk-KR2V42UZ.js +187 -0
  52. package/dist/chunk-KR2V42UZ.js.map +1 -0
  53. package/dist/chunk-MZLBPKFE.js +168 -0
  54. package/dist/chunk-MZLBPKFE.js.map +1 -0
  55. package/dist/{chunk-H5BVCZKF.js → chunk-NRMCVHAU.js} +6 -5
  56. package/dist/chunk-NRMCVHAU.js.map +1 -0
  57. package/dist/{chunk-TZ6YEYN4.js → chunk-NVJMJWLL.js} +3 -1
  58. package/dist/chunk-NVJMJWLL.js.map +1 -0
  59. package/dist/chunk-O77VSFYZ.js +70 -0
  60. package/dist/chunk-O77VSFYZ.js.map +1 -0
  61. package/dist/chunk-PX3VCKAU.js +29 -0
  62. package/dist/chunk-PX3VCKAU.js.map +1 -0
  63. package/dist/chunk-QR5D2IQC.js +61 -0
  64. package/dist/chunk-QR5D2IQC.js.map +1 -0
  65. package/dist/chunk-RJ76DRPO.js +117 -0
  66. package/dist/chunk-RJ76DRPO.js.map +1 -0
  67. package/dist/chunk-RKX3NQYS.js +28 -0
  68. package/dist/chunk-RKX3NQYS.js.map +1 -0
  69. package/dist/{chunk-FJBG5E4O.js → chunk-SIOU2K4U.js} +45 -22
  70. package/dist/chunk-SIOU2K4U.js.map +1 -0
  71. package/dist/chunk-TSCDAGET.js +75 -0
  72. package/dist/chunk-TSCDAGET.js.map +1 -0
  73. package/dist/{chunk-LSB7GRLG.js → chunk-TXTQIYCV.js} +15 -11
  74. package/dist/chunk-TXTQIYCV.js.map +1 -0
  75. package/dist/chunk-X7ETVO4P.js +26544 -0
  76. package/dist/chunk-X7ETVO4P.js.map +1 -0
  77. package/dist/{chunk-CADSX6UN.js → chunk-Y3KNXVTD.js} +2 -2
  78. package/dist/chunk-YBW5JSA3.js +251 -0
  79. package/dist/chunk-YBW5JSA3.js.map +1 -0
  80. package/dist/chunk-YRXAWWCU.js +45 -0
  81. package/dist/chunk-YRXAWWCU.js.map +1 -0
  82. package/dist/claude-provider-account-authority.d.ts +18 -0
  83. package/dist/claude-subscription-oauth.d.ts +42 -0
  84. package/dist/claude-subscription-usage.d.ts +159 -0
  85. package/dist/client-error-report.d.ts +109 -0
  86. package/dist/client-error-report.js +87 -0
  87. package/dist/client-error-report.js.map +1 -0
  88. package/dist/code-search.d.ts +52 -0
  89. package/dist/code-search.js +40 -0
  90. package/dist/code-search.js.map +1 -0
  91. package/dist/codex-provider-account-authority.d.ts +23 -0
  92. package/dist/codex-provider-account-authority.js +23 -0
  93. package/dist/codex-provider-account-authority.js.map +1 -0
  94. package/dist/company-brain-governed-writes.d.ts +475 -0
  95. package/dist/company-brain.d.ts +336 -0
  96. package/dist/company-profile.d.ts +566 -0
  97. package/dist/connect.d.ts +325 -0
  98. package/dist/connect.js +191 -0
  99. package/dist/connect.js.map +1 -0
  100. package/dist/connection-account-label.d.ts +2 -0
  101. package/dist/connection-account-label.js +35 -0
  102. package/dist/connection-account-label.js.map +1 -0
  103. package/dist/connection-authority.d.ts +193 -0
  104. package/dist/connection-authority.js +50 -0
  105. package/dist/connection-authority.js.map +1 -0
  106. package/dist/connector-attachments.d.ts +95 -0
  107. package/dist/connector-attachments.js +51 -0
  108. package/dist/connector-attachments.js.map +1 -0
  109. package/dist/connector-tool-permissions.d.ts +73 -0
  110. package/dist/direct-model-provider.d.ts +36 -0
  111. package/dist/editable-artifact-codec-registry.d.ts +16 -7
  112. package/dist/editable-artifact-codec-registry.js +19 -9
  113. package/dist/editable-artifact-committed-transaction.d.ts +2 -2
  114. package/dist/editable-artifact-committed-transaction.js +2 -2
  115. package/dist/editable-artifact-live.d.ts +11 -12
  116. package/dist/editable-artifact-live.js +110 -45
  117. package/dist/editable-artifact-live.js.map +1 -1
  118. package/dist/editable-artifact-serialized-commit.d.ts +2 -1
  119. package/dist/editable-artifact-serialized-commit.js +8 -7
  120. package/dist/editable-artifact-versions.d.ts +20 -5
  121. package/dist/editable-artifact-versions.js +23 -5
  122. package/dist/editable-artifacts.d.ts +2 -0
  123. package/dist/editable-artifacts.js +48 -36
  124. package/dist/external-identities.d.ts +784 -0
  125. package/dist/external-identities.js +44 -0
  126. package/dist/external-identities.js.map +1 -0
  127. package/dist/feedback.d.ts +51 -0
  128. package/dist/github-repository-contracts.d.ts +36 -0
  129. package/dist/github-repository-contracts.js +59 -0
  130. package/dist/github-repository-contracts.js.map +1 -0
  131. package/dist/github-repository.d.ts +14 -0
  132. package/dist/github-repository.js +36 -0
  133. package/dist/github-repository.js.map +1 -0
  134. package/dist/google-drive.d.ts +90 -1
  135. package/dist/google-drive.js +91 -15
  136. package/dist/google-drive.js.map +1 -1
  137. package/dist/governed-learning-activation.d.ts +154 -0
  138. package/dist/governed-learning-evaluator.d.ts +152 -0
  139. package/dist/host-mcp-bindings.d.ts +326 -0
  140. package/dist/host-mcp-bindings.js +252 -0
  141. package/dist/host-mcp-bindings.js.map +1 -0
  142. package/dist/image-generation.d.ts +1 -0
  143. package/dist/index.d.ts +27574 -5374
  144. package/dist/index.js +2531 -177
  145. package/dist/insights-usage.d.ts +877 -0
  146. package/dist/insights-usage.js +509 -0
  147. package/dist/insights-usage.js.map +1 -0
  148. package/dist/interaction.d.ts +1752 -13
  149. package/dist/knowledge-entries.d.ts +982 -0
  150. package/dist/knowledge-preparation.d.ts +237 -0
  151. package/dist/knowledge.d.ts +740 -0
  152. package/dist/managed-auth-session-sets.d.ts +241 -0
  153. package/dist/managed-auth-session-sets.js +191 -0
  154. package/dist/managed-auth-session-sets.js.map +1 -0
  155. package/dist/managed-sign-in-methods.d.ts +56 -0
  156. package/dist/managed-sign-in-methods.js +46 -0
  157. package/dist/managed-sign-in-methods.js.map +1 -0
  158. package/dist/mcp-catalog-limits.d.ts +2 -0
  159. package/dist/mcp-endpoint.d.ts +7 -0
  160. package/dist/mcp-endpoint.js +9 -0
  161. package/dist/mcp-endpoint.js.map +1 -0
  162. package/dist/mcp-oauth.d.ts +71 -0
  163. package/dist/modal-native-proof-v2.d.ts +587 -0
  164. package/dist/modal-native-proof-v2.js +37 -0
  165. package/dist/modal-native-proof-v2.js.map +1 -0
  166. package/dist/model-availability.d.ts +15 -0
  167. package/dist/model-connection-access.d.ts +24 -0
  168. package/dist/model-context-inspector.d.ts +329 -0
  169. package/dist/model-display.d.ts +38 -0
  170. package/dist/model-display.js +134 -0
  171. package/dist/model-display.js.map +1 -0
  172. package/dist/model-picker-order.d.ts +25 -0
  173. package/dist/model-picker-order.js +42 -0
  174. package/dist/model-picker-order.js.map +1 -0
  175. package/dist/organization-access.d.ts +231 -0
  176. package/dist/organization-access.js +34 -0
  177. package/dist/organization-access.js.map +1 -0
  178. package/dist/organization-integration-policy.d.ts +27 -0
  179. package/dist/organization-membership-lifecycle.d.ts +1022 -0
  180. package/dist/organization-model-usage.d.ts +146 -0
  181. package/dist/organization-model-usage.js +67 -0
  182. package/dist/organization-model-usage.js.map +1 -0
  183. package/dist/organization-recovery.d.ts +337 -0
  184. package/dist/organization-recovery.js +37 -0
  185. package/dist/organization-recovery.js.map +1 -0
  186. package/dist/organization-usage.d.ts +138 -0
  187. package/dist/permissions.d.ts +54 -0
  188. package/dist/personal-github.d.ts +320 -0
  189. package/dist/personal-github.js +222 -0
  190. package/dist/personal-github.js.map +1 -0
  191. package/dist/plugin-discovery.d.ts +35 -0
  192. package/dist/plugin-discovery.js +7 -0
  193. package/dist/plugin-discovery.js.map +1 -0
  194. package/dist/preference-registry.d.ts +44 -1
  195. package/dist/product-analytics.d.ts +113 -0
  196. package/dist/product-lifecycle-facts.d.ts +73 -0
  197. package/dist/remember.d.ts +350 -0
  198. package/dist/retained-output.d.ts +8 -0
  199. package/dist/sandbox-file-artifacts.d.ts +57 -0
  200. package/dist/sandbox-provider-command.d.ts +113 -0
  201. package/dist/sandbox-recovery.d.ts +146 -0
  202. package/dist/sandbox-snapshots.d.ts +39 -0
  203. package/dist/session-final-reply.d.ts +6 -0
  204. package/dist/session-final-reply.js +9 -0
  205. package/dist/session-final-reply.js.map +1 -0
  206. package/dist/session-goal-reports.d.ts +21 -0
  207. package/dist/session-history-import.d.ts +947 -0
  208. package/dist/session-list-entries.d.ts +4 -0
  209. package/dist/session-list-entries.js +51 -0
  210. package/dist/session-list-entries.js.map +1 -0
  211. package/dist/session-mcp-projections.d.ts +215 -0
  212. package/dist/session-message-search.d.ts +68 -0
  213. package/dist/session-titles.d.ts +68 -0
  214. package/dist/session-titles.js +25 -0
  215. package/dist/session-titles.js.map +1 -0
  216. package/dist/session-topology-primitives.d.ts +22 -0
  217. package/dist/signup-attribution.d.ts +39 -0
  218. package/dist/site-request-headers.test.d.ts +1 -0
  219. package/dist/site-session-http.d.ts +11 -0
  220. package/dist/site-session-http.js +11 -0
  221. package/dist/site-session-http.js.map +1 -0
  222. package/dist/skill-catalog-context.d.ts +7 -0
  223. package/dist/skill-files.d.ts +12 -0
  224. package/dist/skill-metadata.d.ts +9 -0
  225. package/dist/skill-use.d.ts +61 -0
  226. package/dist/skills.d.ts +185 -0
  227. package/dist/slack-bot-scopes.d.ts +46 -21
  228. package/dist/slack-bot-scopes.js +14 -3
  229. package/dist/slack-rest-mcp.d.ts +31 -0
  230. package/dist/slack-rest-mcp.js +19 -0
  231. package/dist/slack-rest-mcp.js.map +1 -0
  232. package/dist/slack-task-policy.d.ts +294 -0
  233. package/dist/spreadsheet-artifact-commands.d.ts +2 -3
  234. package/dist/spreadsheet-artifact-commands.js +4 -2
  235. package/dist/spreadsheet-artifact-query.js +3 -2
  236. package/dist/subscription-account-pools.d.ts +292 -0
  237. package/dist/task-notes.d.ts +169 -0
  238. package/dist/tool-catalog.d.ts +286 -0
  239. package/dist/tool-result-spill.d.ts +16 -0
  240. package/dist/usage-allowances.d.ts +285 -0
  241. package/dist/usage-allowances.js +49 -0
  242. package/dist/usage-allowances.js.map +1 -0
  243. package/dist/video-generation.d.ts +51 -0
  244. package/dist/video-generation.js +9 -1
  245. package/dist/work-claims.d.ts +411 -0
  246. package/dist/workspace-instruction-policies.d.ts +94 -0
  247. package/dist/workspace-integration-wire.d.ts +36 -0
  248. package/dist/workspace-integration-wire.js +23 -0
  249. package/dist/workspace-integration-wire.js.map +1 -0
  250. package/dist/workspace-integrations.d.ts +948 -0
  251. package/dist/workspace-learning-administration.d.ts +289 -0
  252. package/dist/workspace-learning-policy.d.ts +1 -1
  253. package/dist/workspace-state.d.ts +85 -416
  254. package/dist/xai-provider-account-authority.d.ts +26 -0
  255. package/dist/xai-provider-account-authority.js +9 -0
  256. package/dist/xai-provider-account-authority.js.map +1 -0
  257. package/package.json +146 -1
  258. package/src/agent-authored-durable-text.ts +116 -0
  259. package/src/agent-config.ts +1527 -0
  260. package/src/agent-instruction-changes.ts +98 -0
  261. package/src/agent-learning.ts +161 -0
  262. package/src/agent-topology.ts +69 -0
  263. package/src/allowance-refusal.ts +81 -0
  264. package/src/analytics-consent-report.ts +20 -0
  265. package/src/api-key-presets.ts +25 -0
  266. package/src/artifact-catalog.ts +60 -0
  267. package/src/artifacts.ts +146 -18
  268. package/src/atlassian-native-retirement.ts +33 -0
  269. package/src/browser-storage.ts +10 -0
  270. package/src/bundled-skills.ts +73 -0
  271. package/src/canonical-human-identities.ts +93 -0
  272. package/src/claude-provider-account-authority.ts +12 -0
  273. package/src/claude-subscription-oauth.ts +62 -0
  274. package/src/claude-subscription-usage.ts +59 -0
  275. package/src/client-error-report.ts +184 -0
  276. package/src/code-search.ts +105 -0
  277. package/src/codex-provider-account-authority.ts +37 -0
  278. package/src/company-brain-governed-writes.ts +356 -0
  279. package/src/company-brain.ts +201 -0
  280. package/src/company-profile.ts +167 -1
  281. package/src/connect.ts +202 -0
  282. package/src/connection-account-label.ts +46 -0
  283. package/src/connection-authority.ts +213 -0
  284. package/src/connector-attachments.ts +327 -0
  285. package/src/connector-tool-permissions.ts +60 -0
  286. package/src/direct-model-provider.ts +98 -0
  287. package/src/editable-artifact-codec-registry.ts +55 -17
  288. package/src/editable-artifact-committed-transaction.ts +44 -31
  289. package/src/editable-artifact-live.ts +123 -57
  290. package/src/editable-artifact-serialized-commit.ts +2 -1
  291. package/src/editable-artifact-versions.ts +26 -5
  292. package/src/editable-artifacts.ts +2 -0
  293. package/src/external-identities.ts +285 -0
  294. package/src/feedback.ts +39 -0
  295. package/src/github-repository-contracts.ts +85 -0
  296. package/src/github-repository.ts +59 -0
  297. package/src/google-drive.ts +76 -4
  298. package/src/governed-learning-activation.ts +191 -0
  299. package/src/governed-learning-evaluator.ts +176 -0
  300. package/src/host-mcp-bindings.ts +298 -0
  301. package/src/image-generation.ts +8 -2
  302. package/src/index.ts +8019 -1799
  303. package/src/insights-usage.ts +679 -0
  304. package/src/interaction.ts +1102 -6
  305. package/src/knowledge-entries.ts +375 -0
  306. package/src/knowledge-preparation.ts +50 -0
  307. package/src/knowledge.ts +335 -0
  308. package/src/managed-auth-session-sets.ts +253 -0
  309. package/src/managed-sign-in-methods.ts +37 -0
  310. package/src/mcp-catalog-limits.ts +2 -0
  311. package/src/mcp-endpoint.ts +30 -0
  312. package/src/mcp-oauth.ts +66 -0
  313. package/src/modal-native-proof-v2.ts +398 -0
  314. package/src/model-availability.ts +22 -0
  315. package/src/model-connection-access.ts +17 -0
  316. package/src/model-context-inspector.ts +139 -0
  317. package/src/model-display.ts +195 -0
  318. package/src/model-picker-order.ts +97 -0
  319. package/src/organization-access.ts +176 -0
  320. package/src/organization-integration-policy.ts +54 -0
  321. package/src/organization-membership-lifecycle.ts +559 -0
  322. package/src/organization-model-usage.ts +72 -0
  323. package/src/organization-recovery.ts +186 -0
  324. package/src/organization-usage.ts +79 -0
  325. package/src/permissions.ts +58 -0
  326. package/src/personal-github.ts +267 -0
  327. package/src/plugin-discovery.ts +33 -0
  328. package/src/preference-registry.ts +20 -1
  329. package/src/product-analytics.ts +253 -0
  330. package/src/product-lifecycle-facts.ts +121 -0
  331. package/src/remember.ts +243 -0
  332. package/src/retained-output.ts +20 -3
  333. package/src/sandbox-file-artifacts.ts +73 -0
  334. package/src/sandbox-provider-command.ts +82 -0
  335. package/src/sandbox-recovery.ts +116 -0
  336. package/src/sandbox-snapshots.ts +142 -0
  337. package/src/session-final-reply.ts +16 -0
  338. package/src/session-goal-reports.ts +55 -0
  339. package/src/session-history-import.ts +159 -0
  340. package/src/session-list-entries.ts +91 -0
  341. package/src/session-mcp-projections.ts +273 -0
  342. package/src/session-message-search.ts +54 -0
  343. package/src/session-titles.ts +467 -0
  344. package/src/session-topology-primitives.ts +21 -0
  345. package/src/signup-attribution.ts +81 -0
  346. package/src/site-request-headers.test.ts +28 -0
  347. package/src/site-session-http.ts +63 -0
  348. package/src/skill-catalog-context.ts +50 -0
  349. package/src/skill-files.ts +52 -0
  350. package/src/skill-metadata.ts +40 -0
  351. package/src/skill-use.ts +77 -0
  352. package/src/skills.ts +136 -0
  353. package/src/slack-bot-scopes.ts +106 -42
  354. package/src/slack-rest-mcp.ts +194 -0
  355. package/src/slack-task-policy.ts +215 -0
  356. package/src/spreadsheet-artifact-commands.ts +12 -13
  357. package/src/subscription-account-pools.ts +44 -0
  358. package/src/task-notes.ts +105 -0
  359. package/src/tool-catalog.ts +155 -0
  360. package/src/tool-result-spill.ts +35 -0
  361. package/src/usage-allowances.ts +187 -0
  362. package/src/video-generation.ts +43 -6
  363. package/src/work-claims.ts +266 -0
  364. package/src/workspace-instruction-policies.ts +31 -0
  365. package/src/workspace-integration-wire.ts +99 -0
  366. package/src/workspace-integrations.ts +640 -0
  367. package/src/workspace-learning-administration.ts +88 -0
  368. package/src/workspace-learning-policy.ts +4 -3
  369. package/src/workspace-state.ts +16 -126
  370. package/src/xai-provider-account-authority.ts +38 -0
  371. package/dist/chunk-52SGB2QO.js.map +0 -1
  372. package/dist/chunk-5UDNP7AO.js.map +0 -1
  373. package/dist/chunk-BVGIYW7D.js +0 -11
  374. package/dist/chunk-BVGIYW7D.js.map +0 -1
  375. package/dist/chunk-FJBG5E4O.js.map +0 -1
  376. package/dist/chunk-H5BVCZKF.js.map +0 -1
  377. package/dist/chunk-LSB7GRLG.js.map +0 -1
  378. package/dist/chunk-TZ6YEYN4.js.map +0 -1
  379. package/dist/chunk-VA22KRHS.js +0 -15177
  380. package/dist/chunk-VA22KRHS.js.map +0 -1
  381. package/dist/chunk-Y3MLSLB4.js.map +0 -1
  382. /package/dist/{chunk-CADSX6UN.js.map → chunk-Y3KNXVTD.js.map} +0 -0
@@ -0,0 +1,70 @@
1
+ // src/workspace-integration-wire.ts
2
+ var WORKSPACE_WEBHOOK_EVENT_TYPES = [
3
+ "turn.completed",
4
+ "turn.failed",
5
+ "turn.cancelled",
6
+ "session.status.changed",
7
+ "session.requiresAction",
8
+ "session.humanInput.requested",
9
+ "usage.threshold_reached",
10
+ "usage.exhausted",
11
+ "usage.period_reset"
12
+ ];
13
+ var OPENGENI_WEBHOOK_TEST_EVENT_TYPE = "webhook.test";
14
+ var OPENGENI_TEST_REQUEST_NIL_ID = "00000000-0000-0000-0000-000000000000";
15
+ var OPENGENI_SIGNATURE_HEADER = "OpenGeni-Signature";
16
+ var OPENGENI_EVENT_ID_HEADER = "OpenGeni-Event-Id";
17
+ var OPENGENI_DELIVERY_ID_HEADER = "OpenGeni-Delivery-Id";
18
+ var OPENGENI_SIGNATURE_TOLERANCE_SECONDS = 300;
19
+ var encoder = new TextEncoder();
20
+ async function hmacSha256Hex(secret, message) {
21
+ const key = await crypto.subtle.importKey(
22
+ "raw",
23
+ encoder.encode(secret),
24
+ { name: "HMAC", hash: "SHA-256" },
25
+ false,
26
+ ["sign"]
27
+ );
28
+ const signature = new Uint8Array(await crypto.subtle.sign("HMAC", key, encoder.encode(message)));
29
+ return Array.from(signature, (byte) => byte.toString(16).padStart(2, "0")).join("");
30
+ }
31
+ function constantTimeEqualHex(left, right) {
32
+ if (left.length !== right.length) return false;
33
+ let difference = 0;
34
+ for (let index = 0; index < left.length; index += 1) {
35
+ difference |= left.charCodeAt(index) ^ right.charCodeAt(index);
36
+ }
37
+ return difference === 0;
38
+ }
39
+ async function signOpenGeniPayload(secret, body, timestampSeconds = Math.floor(Date.now() / 1e3)) {
40
+ return `t=${timestampSeconds},v1=${await hmacSha256Hex(secret, `${timestampSeconds}.${body}`)}`;
41
+ }
42
+ async function verifyOpenGeniSignature(input) {
43
+ if (!input.signature) return false;
44
+ let timestamp = null;
45
+ const candidates = [];
46
+ for (const part of input.signature.split(",")) {
47
+ const [key, value] = part.trim().split("=", 2);
48
+ if (key === "t" && value && /^\d{1,12}$/.test(value)) timestamp = Number(value);
49
+ if (key === "v1" && value && /^[0-9a-f]{64}$/.test(value)) candidates.push(value);
50
+ }
51
+ if (timestamp === null || candidates.length === 0) return false;
52
+ const now = input.nowSeconds ?? Math.floor(Date.now() / 1e3);
53
+ const tolerance = input.toleranceSeconds ?? OPENGENI_SIGNATURE_TOLERANCE_SECONDS;
54
+ if (Math.abs(now - timestamp) > tolerance) return false;
55
+ const expected = await hmacSha256Hex(input.secret, `${timestamp}.${input.body}`);
56
+ return candidates.some((candidate) => constantTimeEqualHex(candidate, expected));
57
+ }
58
+
59
+ export {
60
+ WORKSPACE_WEBHOOK_EVENT_TYPES,
61
+ OPENGENI_WEBHOOK_TEST_EVENT_TYPE,
62
+ OPENGENI_TEST_REQUEST_NIL_ID,
63
+ OPENGENI_SIGNATURE_HEADER,
64
+ OPENGENI_EVENT_ID_HEADER,
65
+ OPENGENI_DELIVERY_ID_HEADER,
66
+ OPENGENI_SIGNATURE_TOLERANCE_SECONDS,
67
+ signOpenGeniPayload,
68
+ verifyOpenGeniSignature
69
+ };
70
+ //# sourceMappingURL=chunk-O77VSFYZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/workspace-integration-wire.ts"],"sourcesContent":["/**\n * Dependency-free wire constants and the OpenGeni-Signature scheme shared by\n * workspace webhooks and credential providers. Kept free of zod so browser and\n * React Native bundles can verify signatures without the schema runtime.\n */\n\nexport const WORKSPACE_WEBHOOK_EVENT_TYPES = [\n \"turn.completed\",\n \"turn.failed\",\n \"turn.cancelled\",\n \"session.status.changed\",\n \"session.requiresAction\",\n \"session.humanInput.requested\",\n \"usage.threshold_reached\",\n \"usage.exhausted\",\n \"usage.period_reset\",\n] as const;\n\n/**\n * Sent only when an administrator presses \"Send test event\". It is never a\n * subscribable type: every endpoint can receive it, and a receiver that does\n * not care acknowledges it with any 2xx.\n */\nexport const OPENGENI_WEBHOOK_TEST_EVENT_TYPE = \"webhook.test\";\n\n/**\n * The session, turn and attempt ids of a credential-provider test request\n * (`purpose: \"test\"`). A test is not a run, so no real ids exist.\n */\nexport const OPENGENI_TEST_REQUEST_NIL_ID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const OPENGENI_SIGNATURE_HEADER = \"OpenGeni-Signature\";\nexport const OPENGENI_EVENT_ID_HEADER = \"OpenGeni-Event-Id\";\nexport const OPENGENI_DELIVERY_ID_HEADER = \"OpenGeni-Delivery-Id\";\nexport const OPENGENI_SIGNATURE_TOLERANCE_SECONDS = 300;\n\nconst encoder = new TextEncoder();\n\nasync function hmacSha256Hex(secret: string, message: string): Promise<string> {\n const key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const signature = new Uint8Array(await crypto.subtle.sign(\"HMAC\", key, encoder.encode(message)));\n return Array.from(signature, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction constantTimeEqualHex(left: string, right: string): boolean {\n if (left.length !== right.length) return false;\n let difference = 0;\n for (let index = 0; index < left.length; index += 1) {\n difference |= left.charCodeAt(index) ^ right.charCodeAt(index);\n }\n return difference === 0;\n}\n\n/**\n * `OpenGeni-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<body>\")>`.\n * The timestamp is signed so a captured request cannot be replayed later.\n */\nexport async function signOpenGeniPayload(\n secret: string,\n body: string,\n timestampSeconds = Math.floor(Date.now() / 1000),\n): Promise<string> {\n return `t=${timestampSeconds},v1=${await hmacSha256Hex(secret, `${timestampSeconds}.${body}`)}`;\n}\n\nexport type VerifyOpenGeniSignatureInput = {\n secret: string;\n /** The exact raw request body, before JSON parsing. */\n body: string;\n /** The `OpenGeni-Signature` header value. */\n signature: string | null | undefined;\n toleranceSeconds?: number;\n nowSeconds?: number;\n};\n\nexport async function verifyOpenGeniSignature(\n input: VerifyOpenGeniSignatureInput,\n): Promise<boolean> {\n if (!input.signature) return false;\n let timestamp: number | null = null;\n const candidates: string[] = [];\n for (const part of input.signature.split(\",\")) {\n const [key, value] = part.trim().split(\"=\", 2);\n if (key === \"t\" && value && /^\\d{1,12}$/.test(value)) timestamp = Number(value);\n if (key === \"v1\" && value && /^[0-9a-f]{64}$/.test(value)) candidates.push(value);\n }\n if (timestamp === null || candidates.length === 0) return false;\n const now = input.nowSeconds ?? Math.floor(Date.now() / 1000);\n const tolerance = input.toleranceSeconds ?? OPENGENI_SIGNATURE_TOLERANCE_SECONDS;\n if (Math.abs(now - timestamp) > tolerance) return false;\n const expected = await hmacSha256Hex(input.secret, `${timestamp}.${input.body}`);\n return candidates.some((candidate) => constantTimeEqualHex(candidate, expected));\n}\n"],"mappings":";AAMO,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,IAAM,mCAAmC;AAMzC,IAAM,+BAA+B;AAErC,IAAM,4BAA4B;AAClC,IAAM,2BAA2B;AACjC,IAAM,8BAA8B;AACpC,IAAM,uCAAuC;AAEpD,IAAM,UAAU,IAAI,YAAY;AAEhC,eAAe,cAAc,QAAgB,SAAkC;AAC7E,QAAM,MAAM,MAAM,OAAO,OAAO;AAAA,IAC9B;AAAA,IACA,QAAQ,OAAO,MAAM;AAAA,IACrB,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,IAChC;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACA,QAAM,YAAY,IAAI,WAAW,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAO,OAAO,CAAC,CAAC;AAC/F,SAAO,MAAM,KAAK,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACpF;AAEA,SAAS,qBAAqB,MAAc,OAAwB;AAClE,MAAI,KAAK,WAAW,MAAM,OAAQ,QAAO;AACzC,MAAI,aAAa;AACjB,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,kBAAc,KAAK,WAAW,KAAK,IAAI,MAAM,WAAW,KAAK;AAAA,EAC/D;AACA,SAAO,eAAe;AACxB;AAMA,eAAsB,oBACpB,QACA,MACA,mBAAmB,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,GAC9B;AACjB,SAAO,KAAK,gBAAgB,OAAO,MAAM,cAAc,QAAQ,GAAG,gBAAgB,IAAI,IAAI,EAAE,CAAC;AAC/F;AAYA,eAAsB,wBACpB,OACkB;AAClB,MAAI,CAAC,MAAM,UAAW,QAAO;AAC7B,MAAI,YAA2B;AAC/B,QAAM,aAAuB,CAAC;AAC9B,aAAW,QAAQ,MAAM,UAAU,MAAM,GAAG,GAAG;AAC7C,UAAM,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AAC7C,QAAI,QAAQ,OAAO,SAAS,aAAa,KAAK,KAAK,EAAG,aAAY,OAAO,KAAK;AAC9E,QAAI,QAAQ,QAAQ,SAAS,iBAAiB,KAAK,KAAK,EAAG,YAAW,KAAK,KAAK;AAAA,EAClF;AACA,MAAI,cAAc,QAAQ,WAAW,WAAW,EAAG,QAAO;AAC1D,QAAM,MAAM,MAAM,cAAc,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAC5D,QAAM,YAAY,MAAM,oBAAoB;AAC5C,MAAI,KAAK,IAAI,MAAM,SAAS,IAAI,UAAW,QAAO;AAClD,QAAM,WAAW,MAAM,cAAc,MAAM,QAAQ,GAAG,SAAS,IAAI,MAAM,IAAI,EAAE;AAC/E,SAAO,WAAW,KAAK,CAAC,cAAc,qBAAqB,WAAW,QAAQ,CAAC;AACjF;","names":[]}
@@ -0,0 +1,29 @@
1
+ // src/editable-artifact-versions.ts
2
+ var SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION = 2;
3
+ var DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION = 1;
4
+ var PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION = 1;
5
+ var SPREADSHEET_KERNEL_SNAPSHOT_VERSION = 2;
6
+ var DOCUMENT_ARTIFACT_SNAPSHOT_VERSION = 1;
7
+ var PRESENTATION_ARTIFACT_SNAPSHOT_VERSION = 1;
8
+ var SPREADSHEET_KERNEL_COMMAND_VERSION = 2;
9
+ var SPREADSHEET_ARTIFACT_COMMAND_VERSION = 2;
10
+ var SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION = 2;
11
+ var COMMITTED_TRANSACTION_PROTOCOL_VERSION = 2;
12
+ var EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION = 1;
13
+ var EDITABLE_ARTIFACT_LIVE_WIRE_VERSION = 2;
14
+
15
+ export {
16
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
17
+ DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
18
+ PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
19
+ SPREADSHEET_KERNEL_SNAPSHOT_VERSION,
20
+ DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
21
+ PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
22
+ SPREADSHEET_KERNEL_COMMAND_VERSION,
23
+ SPREADSHEET_ARTIFACT_COMMAND_VERSION,
24
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
25
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
26
+ EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,
27
+ EDITABLE_ARTIFACT_LIVE_WIRE_VERSION
28
+ };
29
+ //# sourceMappingURL=chunk-PX3VCKAU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable-artifact-versions.ts"],"sourcesContent":["/** Modality-specific durable semantic/schema versions. */\nexport const SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION = 2 as const;\nexport const DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION = 1 as const;\nexport const PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION = 1 as const;\n\n/** Direct kernel workbook snapshot version (OGARTK02), never the durable CRDT snapshot. */\nexport const SPREADSHEET_KERNEL_SNAPSHOT_VERSION = 2 as const;\n\n/** Modality-specific canonical snapshot versions. */\nexport const DOCUMENT_ARTIFACT_SNAPSHOT_VERSION = 1 as const;\nexport const PRESENTATION_ARTIFACT_SNAPSHOT_VERSION = 1 as const;\n\n/** Canonical internal spreadsheet kernel command-envelope version. */\nexport const SPREADSHEET_KERNEL_COMMAND_VERSION = 2 as const;\n\n/** Canonical public, identity-free spreadsheet command-envelope version. */\nexport const SPREADSHEET_ARTIFACT_COMMAND_VERSION = 2 as const;\n\n/** Canonical durable spreadsheet collaboration-snapshot version. */\nexport const SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION = 2 as const;\n\n/** Canonical committed spreadsheet transaction protocol version. */\nexport const COMMITTED_TRANSACTION_PROTOCOL_VERSION = 2 as const;\n\n/** Canonical document/presentation serialized-commit protocol version. */\nexport const EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION = 1 as const;\n\n/** Canonical editable-artifact live transport protocol version. */\nexport const EDITABLE_ARTIFACT_LIVE_WIRE_VERSION = 2 as const;\n"],"mappings":";AACO,IAAM,4CAA4C;AAClD,IAAM,yCAAyC;AAC/C,IAAM,6CAA6C;AAGnD,IAAM,sCAAsC;AAG5C,IAAM,qCAAqC;AAC3C,IAAM,yCAAyC;AAG/C,IAAM,qCAAqC;AAG3C,IAAM,uCAAuC;AAG7C,IAAM,6CAA6C;AAGnD,IAAM,yCAAyC;AAG/C,IAAM,8CAA8C;AAGpD,IAAM,sCAAsC;","names":[]}
@@ -0,0 +1,61 @@
1
+ // src/permissions.ts
2
+ import { z } from "zod";
3
+ var Permission = z.enum([
4
+ "account:read",
5
+ "account:admin",
6
+ "members:manage",
7
+ "workspace:create",
8
+ "billing:read",
9
+ "billing:manage",
10
+ "workspace:read",
11
+ "workspace:admin",
12
+ "sessions:create",
13
+ "sessions:read",
14
+ "sessions:control",
15
+ "stream:view",
16
+ "stream:control",
17
+ "stream:acknowledge",
18
+ "files:upload",
19
+ "files:read",
20
+ "files:write",
21
+ "terminal:attach",
22
+ "documents:manage",
23
+ "documents:search",
24
+ "scheduled_tasks:manage",
25
+ "scheduled_tasks:run",
26
+ "github:manage",
27
+ "github:use",
28
+ "api_keys:manage",
29
+ /** Literal organization-key authority to configure workspace usage allowances. */
30
+ "usage_allowances:manage",
31
+ "connections:read",
32
+ "connections:write",
33
+ "capabilities:manage",
34
+ /** @deprecated alias of variable-sets:manage */
35
+ "environments:manage",
36
+ /** @deprecated alias of variable-sets:use */
37
+ "environments:use",
38
+ "variable-sets:list",
39
+ "variable-sets:read",
40
+ "variable-sets:write",
41
+ "variable-sets:manage",
42
+ "variable-sets:attach",
43
+ "variable-sets:use",
44
+ "secrets:list",
45
+ "secrets:read",
46
+ "secrets:write",
47
+ "mcp_servers:attach",
48
+ "codemode:call",
49
+ "goals:manage",
50
+ "enrollments:read",
51
+ "enrollments:manage",
52
+ "rigs:use",
53
+ "rigs:manage",
54
+ "artifacts:read",
55
+ "artifacts:publish"
56
+ ]);
57
+
58
+ export {
59
+ Permission
60
+ };
61
+ //# sourceMappingURL=chunk-QR5D2IQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/permissions.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Canonical public permission vocabulary shared by operational and control-plane contracts. */\nexport const Permission = z.enum([\n \"account:read\",\n \"account:admin\",\n \"members:manage\",\n \"workspace:create\",\n \"billing:read\",\n \"billing:manage\",\n \"workspace:read\",\n \"workspace:admin\",\n \"sessions:create\",\n \"sessions:read\",\n \"sessions:control\",\n \"stream:view\",\n \"stream:control\",\n \"stream:acknowledge\",\n \"files:upload\",\n \"files:read\",\n \"files:write\",\n \"terminal:attach\",\n \"documents:manage\",\n \"documents:search\",\n \"scheduled_tasks:manage\",\n \"scheduled_tasks:run\",\n \"github:manage\",\n \"github:use\",\n \"api_keys:manage\",\n /** Literal organization-key authority to configure workspace usage allowances. */\n \"usage_allowances:manage\",\n \"connections:read\",\n \"connections:write\",\n \"capabilities:manage\",\n /** @deprecated alias of variable-sets:manage */\n \"environments:manage\",\n /** @deprecated alias of variable-sets:use */\n \"environments:use\",\n \"variable-sets:list\",\n \"variable-sets:read\",\n \"variable-sets:write\",\n \"variable-sets:manage\",\n \"variable-sets:attach\",\n \"variable-sets:use\",\n \"secrets:list\",\n \"secrets:read\",\n \"secrets:write\",\n \"mcp_servers:attach\",\n \"codemode:call\",\n \"goals:manage\",\n \"enrollments:read\",\n \"enrollments:manage\",\n \"rigs:use\",\n \"rigs:manage\",\n \"artifacts:read\",\n \"artifacts:publish\",\n]);\nexport type Permission = z.infer<typeof Permission>;\n"],"mappings":";AAAA,SAAS,SAAS;AAGX,IAAM,aAAa,EAAE,KAAK;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;","names":[]}
@@ -0,0 +1,117 @@
1
+ import {
2
+ Permission
3
+ } from "./chunk-QR5D2IQC.js";
4
+
5
+ // src/organization-access.ts
6
+ import { z } from "zod";
7
+ var OrganizationAccessPreset = z.enum(["read_only", "full", "custom"]);
8
+ var OrganizationWorkspaceScope = z.discriminatedUnion("kind", [
9
+ z.object({ kind: z.literal("all") }).strict(),
10
+ z.object({
11
+ kind: z.literal("selected"),
12
+ workspaceIds: z.array(
13
+ z.string().uuid().transform((id) => id.toLowerCase())
14
+ ).max(500).refine((ids) => new Set(ids).size === ids.length, "Workspace IDs must be unique")
15
+ }).strict()
16
+ ]);
17
+ var OrganizationActor = z.enum(["user", "organization"]);
18
+ var aliases = {
19
+ "environments:manage": "variable-sets:manage",
20
+ "environments:use": "variable-sets:use"
21
+ };
22
+ var permissionSets;
23
+ function sets() {
24
+ if (permissionSets) return permissionSets;
25
+ const canonical = Permission.options.filter((permission) => !aliases[permission]);
26
+ const observational = canonical.filter(
27
+ (permission) => /:(read|list|view|search)$/.test(permission)
28
+ );
29
+ const secretValue = /* @__PURE__ */ new Set(["secrets:read", "variable-sets:read"]);
30
+ const readOnly = observational.filter((permission) => !secretValue.has(permission));
31
+ permissionSets = { canonical, observational, readOnly };
32
+ return permissionSets;
33
+ }
34
+ function organizationAccessPresetPermissions(preset) {
35
+ return preset === "full" ? [...sets().canonical] : preset === "read_only" ? [...sets().readOnly] : [];
36
+ }
37
+ function isReadOnlyPermissionSet(permissions) {
38
+ return permissions.every(
39
+ (permission) => sets().observational.includes(aliases[permission] ?? permission)
40
+ );
41
+ }
42
+ var OrganizationAccessPolicyInput = z.object({
43
+ preset: OrganizationAccessPreset,
44
+ // Lazy for the same module-order reason as `sets()` above.
45
+ permissions: z.array(z.lazy(() => Permission)),
46
+ workspaceScope: OrganizationWorkspaceScope
47
+ }).strict();
48
+ function normalizeOrganizationAccessPolicy(policy) {
49
+ const parsed = OrganizationAccessPolicyInput.parse(policy);
50
+ const requested = new Set(
51
+ parsed.permissions.map((permission) => aliases[permission] ?? permission)
52
+ );
53
+ const { canonical, readOnly } = sets();
54
+ const permissions = canonical.filter((permission) => requested.has(permission));
55
+ const same = (candidate) => candidate.length === permissions.length && candidate.every((permission) => requested.has(permission));
56
+ return {
57
+ preset: same(canonical) ? "full" : same(readOnly) ? "read_only" : "custom",
58
+ permissions,
59
+ workspaceScope: parsed.workspaceScope.kind === "selected" ? { kind: "selected", workspaceIds: [...parsed.workspaceScope.workspaceIds].sort() } : { kind: "all" }
60
+ };
61
+ }
62
+ var OrganizationAccessPolicy = OrganizationAccessPolicyInput.transform(
63
+ normalizeOrganizationAccessPolicy
64
+ );
65
+ var OrganizationServiceAccountRole = z.enum(["admin", "member"]);
66
+ var ORGANIZATION_ADMIN_ONLY_PERMISSIONS = [
67
+ "account:admin",
68
+ "members:manage",
69
+ "billing:manage",
70
+ "api_keys:manage",
71
+ "usage_allowances:manage"
72
+ ];
73
+ function serviceAccountAllowsPermission(role, permission) {
74
+ return role === "admin" || !ORGANIZATION_ADMIN_ONLY_PERMISSIONS.includes(permission);
75
+ }
76
+ var OrganizationServiceAccount = z.object({
77
+ id: z.string().uuid(),
78
+ organizationId: z.string().uuid(),
79
+ name: z.string().min(1).max(200),
80
+ description: z.string().nullable(),
81
+ role: OrganizationServiceAccountRole,
82
+ /** Keys that are not revoked, including expired ones. */
83
+ activeKeyCount: z.number().int().nonnegative(),
84
+ createdAt: z.string(),
85
+ updatedAt: z.string()
86
+ });
87
+ var ListOrganizationServiceAccountsResponse = z.object({
88
+ serviceAccounts: z.array(OrganizationServiceAccount)
89
+ });
90
+ var CreateOrganizationServiceAccountRequest = z.object({
91
+ name: z.string().trim().min(1).max(200),
92
+ description: z.string().trim().min(1).max(500).optional(),
93
+ role: OrganizationServiceAccountRole.default("member")
94
+ }).strict();
95
+ var UpdateOrganizationServiceAccountRequest = z.object({
96
+ name: z.string().trim().min(1).max(200).optional(),
97
+ description: z.string().trim().min(1).max(500).nullable().optional(),
98
+ role: OrganizationServiceAccountRole.optional()
99
+ }).strict().refine((request) => Object.keys(request).length > 0, "At least one change is required");
100
+
101
+ export {
102
+ OrganizationAccessPreset,
103
+ OrganizationWorkspaceScope,
104
+ OrganizationActor,
105
+ organizationAccessPresetPermissions,
106
+ isReadOnlyPermissionSet,
107
+ normalizeOrganizationAccessPolicy,
108
+ OrganizationAccessPolicy,
109
+ OrganizationServiceAccountRole,
110
+ ORGANIZATION_ADMIN_ONLY_PERMISSIONS,
111
+ serviceAccountAllowsPermission,
112
+ OrganizationServiceAccount,
113
+ ListOrganizationServiceAccountsResponse,
114
+ CreateOrganizationServiceAccountRequest,
115
+ UpdateOrganizationServiceAccountRequest
116
+ };
117
+ //# sourceMappingURL=chunk-RJ76DRPO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/organization-access.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Permission } from \"./permissions\";\n\nexport const OrganizationAccessPreset = z.enum([\"read_only\", \"full\", \"custom\"]);\nexport type OrganizationAccessPreset = z.infer<typeof OrganizationAccessPreset>;\n\nexport const OrganizationWorkspaceScope = 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]);\nexport type OrganizationWorkspaceScope = z.infer<typeof OrganizationWorkspaceScope>;\n\nexport const OrganizationActor = z.enum([\"user\", \"organization\"]);\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 = 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\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 = OrganizationAccessPolicyInput.transform(\n normalizeOrganizationAccessPolicy,\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 = z.enum([\"admin\", \"member\"]);\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 = 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});\nexport type OrganizationServiceAccount = z.infer<typeof OrganizationServiceAccount>;\n\nexport const ListOrganizationServiceAccountsResponse = z.object({\n serviceAccounts: z.array(OrganizationServiceAccount),\n});\nexport type ListOrganizationServiceAccountsResponse = z.infer<\n typeof ListOrganizationServiceAccountsResponse\n>;\n\nexport const CreateOrganizationServiceAccountRequest = 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();\nexport type CreateOrganizationServiceAccountRequest = z.infer<\n typeof CreateOrganizationServiceAccountRequest\n>;\n\nexport const UpdateOrganizationServiceAccountRequest = 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\");\nexport type UpdateOrganizationServiceAccountRequest = z.infer<\n typeof UpdateOrganizationServiceAccountRequest\n>;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/mcp-endpoint.ts
2
+ function mcpEndpointIdentity(value) {
3
+ if (!value) return null;
4
+ try {
5
+ const url = new URL(value);
6
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password) return null;
7
+ url.hash = "";
8
+ return url.href;
9
+ } catch {
10
+ return null;
11
+ }
12
+ }
13
+ function pluginMcpUnavailableReason(server) {
14
+ if (server.transport === "stdio" || !server.endpoint) return "Requires a local runtime";
15
+ if (server.transport && !["http", "streamable-http", "streamable_http"].includes(server.transport))
16
+ return "Unsupported transport: " + server.transport;
17
+ if (server.requiresConfiguration || server.endpoint.includes("{"))
18
+ return "Requires custom connection configuration";
19
+ const endpoint = mcpEndpointIdentity(server.endpoint);
20
+ if (!endpoint?.startsWith("https://")) return "Requires a valid HTTPS endpoint";
21
+ return null;
22
+ }
23
+
24
+ export {
25
+ mcpEndpointIdentity,
26
+ pluginMcpUnavailableReason
27
+ };
28
+ //# sourceMappingURL=chunk-RKX3NQYS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp-endpoint.ts"],"sourcesContent":["/** Exact endpoint identity: normalize URL syntax, preserve paths and query parameters. */\nexport function mcpEndpointIdentity(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const url = new URL(value);\n if (![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password) return null;\n url.hash = \"\";\n return url.href;\n } catch {\n return null;\n }\n}\n\nexport function pluginMcpUnavailableReason(server: {\n endpoint: string | null;\n transport?: string;\n requiresConfiguration?: boolean;\n}): string | null {\n if (server.transport === \"stdio\" || !server.endpoint) return \"Requires a local runtime\";\n if (\n server.transport &&\n ![\"http\", \"streamable-http\", \"streamable_http\"].includes(server.transport)\n )\n return \"Unsupported transport: \" + server.transport;\n if (server.requiresConfiguration || server.endpoint.includes(\"{\"))\n return \"Requires custom connection configuration\";\n const endpoint = mcpEndpointIdentity(server.endpoint);\n if (!endpoint?.startsWith(\"https://\")) return \"Requires a valid HTTPS endpoint\";\n return null;\n}\n"],"mappings":";AACO,SAAS,oBAAoB,OAAiD;AACnF,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,QAAI,CAAC,CAAC,UAAU,OAAO,EAAE,SAAS,IAAI,QAAQ,KAAK,IAAI,YAAY,IAAI,SAAU,QAAO;AACxF,QAAI,OAAO;AACX,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,2BAA2B,QAIzB;AAChB,MAAI,OAAO,cAAc,WAAW,CAAC,OAAO,SAAU,QAAO;AAC7D,MACE,OAAO,aACP,CAAC,CAAC,QAAQ,mBAAmB,iBAAiB,EAAE,SAAS,OAAO,SAAS;AAEzE,WAAO,4BAA4B,OAAO;AAC5C,MAAI,OAAO,yBAAyB,OAAO,SAAS,SAAS,GAAG;AAC9D,WAAO;AACT,QAAM,WAAW,oBAAoB,OAAO,QAAQ;AACpD,MAAI,CAAC,UAAU,WAAW,UAAU,EAAG,QAAO;AAC9C,SAAO;AACT;","names":[]}
@@ -1,14 +1,3 @@
1
- import {
2
- SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,
3
- SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,
4
- SPREADSHEET_ARTIFACT_QUERY_VERSION,
5
- assertCanonicalSpreadsheetArtifactKernelProjectionBytes,
6
- assertCanonicalSpreadsheetArtifactKernelQueryBytes,
7
- decodeSpreadsheetArtifactKernelProjection,
8
- decodeSpreadsheetArtifactKernelQuery,
9
- encodeSpreadsheetArtifactKernelProjection,
10
- encodeSpreadsheetArtifactKernelQuery
11
- } from "./chunk-CADSX6UN.js";
12
1
  import {
13
2
  DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,
14
3
  DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,
@@ -45,22 +34,44 @@ import {
45
34
  encodePresentationArtifactQuery,
46
35
  encodePresentationArtifactQueryResponse
47
36
  } from "./chunk-D2HKF2EF.js";
37
+ import {
38
+ SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,
39
+ SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,
40
+ SPREADSHEET_ARTIFACT_QUERY_VERSION,
41
+ assertCanonicalSpreadsheetArtifactKernelProjectionBytes,
42
+ assertCanonicalSpreadsheetArtifactKernelQueryBytes,
43
+ decodeSpreadsheetArtifactKernelProjection,
44
+ decodeSpreadsheetArtifactKernelQuery,
45
+ encodeSpreadsheetArtifactKernelProjection,
46
+ encodeSpreadsheetArtifactKernelQuery
47
+ } from "./chunk-Y3KNXVTD.js";
48
48
  import {
49
49
  SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,
50
50
  SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,
51
- SPREADSHEET_ARTIFACT_COMMAND_VERSION,
52
51
  assertCanonicalSpreadsheetArtifactCommandBytes,
53
52
  decodeSpreadsheetArtifactCommandBatch,
54
53
  encodeSpreadsheetArtifactCommandBatch
55
- } from "./chunk-LSB7GRLG.js";
54
+ } from "./chunk-TXTQIYCV.js";
55
+ import {
56
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
57
+ DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
58
+ DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
59
+ EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,
60
+ EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,
61
+ PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
62
+ PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
63
+ SPREADSHEET_ARTIFACT_COMMAND_VERSION,
64
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
65
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
66
+ } from "./chunk-PX3VCKAU.js";
56
67
 
57
68
  // src/editable-artifact-codec-registry.ts
58
69
  var spreadsheet = Object.freeze({
59
70
  modality: "spreadsheet",
60
- modelSchemaVersion: 1,
61
- snapshotVersion: 1,
71
+ modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
72
+ snapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
62
73
  command: Object.freeze({
63
- magic: "OGASC001",
74
+ magic: "OGASC002",
64
75
  version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,
65
76
  maximumBytes: SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,
66
77
  maximumCommands: SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,
@@ -90,14 +101,14 @@ var spreadsheet = Object.freeze({
90
101
  }),
91
102
  concurrency: Object.freeze({
92
103
  semantics: "causal-crdt-v1",
93
- collaborationEnvelope: "OGACO001",
104
+ collaborationEnvelope: "OGACO002",
94
105
  staleBaseMustBeRejected: false
95
106
  })
96
107
  });
97
108
  var document = Object.freeze({
98
109
  modality: "document",
99
- modelSchemaVersion: 1,
100
- snapshotVersion: 1,
110
+ modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
111
+ snapshotVersion: DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
101
112
  command: Object.freeze({
102
113
  magic: "OGADC001",
103
114
  version: DOCUMENT_ARTIFACT_COMMAND_VERSION,
@@ -133,8 +144,8 @@ var document = Object.freeze({
133
144
  });
134
145
  var presentation = Object.freeze({
135
146
  modality: "presentation",
136
- modelSchemaVersion: 1,
137
- snapshotVersion: 1,
147
+ modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
148
+ snapshotVersion: PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
138
149
  command: Object.freeze({
139
150
  magic: "OGAPC001",
140
151
  version: PRESENTATION_ARTIFACT_COMMAND_VERSION,
@@ -171,6 +182,17 @@ var presentation = Object.freeze({
171
182
  })
172
183
  });
173
184
  var EDITABLE_ARTIFACT_CODEC_REGISTRY = Object.freeze({ spreadsheet, document, presentation });
185
+ function currentEditableArtifactCompatibility(modality) {
186
+ const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[modality];
187
+ return Object.freeze({
188
+ modality,
189
+ liveProtocolVersion: EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,
190
+ modelSchemaVersion: descriptor.modelSchemaVersion,
191
+ snapshotVersion: descriptor.snapshotVersion,
192
+ commandProtocolVersion: descriptor.command.version,
193
+ committedTransactionProtocolVersion: modality === "spreadsheet" ? COMMITTED_TRANSACTION_PROTOCOL_VERSION : EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION
194
+ });
195
+ }
174
196
  function editableArtifactCodecFor(input) {
175
197
  const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[input.durableModality];
176
198
  if (!descriptor) throw new TypeError("unsupported durable editable artifact modality");
@@ -189,6 +211,7 @@ function editableArtifactCodecFor(input) {
189
211
 
190
212
  export {
191
213
  EDITABLE_ARTIFACT_CODEC_REGISTRY,
214
+ currentEditableArtifactCompatibility,
192
215
  editableArtifactCodecFor
193
216
  };
194
- //# sourceMappingURL=chunk-FJBG5E4O.js.map
217
+ //# sourceMappingURL=chunk-SIOU2K4U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable-artifact-codec-registry.ts"],"sourcesContent":["import {\n DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n DOCUMENT_ARTIFACT_QUERY_VERSION,\n assertCanonicalDocumentArtifactCommandBytes,\n assertCanonicalDocumentArtifactQueryBytes,\n assertCanonicalDocumentArtifactQueryResponseBytes,\n decodeDocumentArtifactCommandBatch,\n decodeDocumentArtifactQuery,\n decodeDocumentArtifactQueryResponse,\n encodeDocumentArtifactCommandBatch,\n encodeDocumentArtifactQuery,\n encodeDocumentArtifactQueryResponse,\n} from \"./document-artifact-commands\";\nimport {\n PRESENTATION_ARTIFACT_COMMAND_MAX_BYTES,\n PRESENTATION_ARTIFACT_COMMAND_MAX_COMMANDS,\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n PRESENTATION_ARTIFACT_QUERY_MAX_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_VERSION,\n PRESENTATION_ARTIFACT_QUERY_VERSION,\n assertCanonicalPresentationArtifactCommandBytes,\n assertCanonicalPresentationArtifactQueryBytes,\n assertCanonicalPresentationArtifactQueryResponseBytes,\n decodePresentationArtifactCommandBatch,\n decodePresentationArtifactQuery,\n decodePresentationArtifactQueryResponse,\n encodePresentationArtifactCommandBatch,\n encodePresentationArtifactQuery,\n encodePresentationArtifactQueryResponse,\n} from \"./presentation-artifact-commands\";\nimport {\n SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,\n SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeSpreadsheetArtifactCommandBatch,\n encodeSpreadsheetArtifactCommandBatch,\n} from \"./spreadsheet-artifact-commands\";\nimport {\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,\n SPREADSHEET_ARTIFACT_QUERY_VERSION,\n assertCanonicalSpreadsheetArtifactKernelProjectionBytes,\n assertCanonicalSpreadsheetArtifactKernelQueryBytes,\n decodeSpreadsheetArtifactKernelProjection,\n decodeSpreadsheetArtifactKernelQuery,\n encodeSpreadsheetArtifactKernelProjection,\n encodeSpreadsheetArtifactKernelQuery,\n} from \"./spreadsheet-artifact-query\";\nimport {\n DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n} from \"./editable-artifact-versions\";\n\nexport {\n DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n} from \"./editable-artifact-versions\";\n\nexport type EditableArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\nexport type EditableArtifactConcurrencySemantics =\n | \"causal-crdt-v1\"\n | \"authoritative-serialized-stale-base-v1\";\n\nexport type CurrentEditableArtifactCompatibility = Readonly<{\n modality: EditableArtifactModality;\n liveProtocolVersion: number;\n modelSchemaVersion: number;\n snapshotVersion: number;\n commandProtocolVersion: number;\n committedTransactionProtocolVersion: number;\n}>;\n\nexport type EditableArtifactCodecDescriptor = Readonly<{\n modality: EditableArtifactModality;\n modelSchemaVersion: 1 | 2;\n snapshotVersion: 1 | 2;\n command: Readonly<{\n magic: \"OGASC002\" | \"OGADC001\" | \"OGAPC001\";\n version: 1 | 2;\n maximumBytes: number;\n maximumCommands: number;\n encode: (value: unknown) => Uint8Array;\n decode: (bytes: Uint8Array) => unknown;\n assertCanonical: (bytes: Uint8Array) => void;\n }>;\n query: Readonly<{\n magic: \"OGAKQ001\" | \"OGADQ001\" | \"OGAPQ001\";\n responseMagic: \"OGAKV001\" | \"OGADP001\" | \"OGAPV001\";\n version: 1;\n responseVersion: 1;\n maximumBytes: number;\n maximumResponseBytes: number;\n encode: (value: unknown) => Uint8Array;\n decode: (bytes: Uint8Array) => unknown;\n assertCanonical: (bytes: Uint8Array) => void;\n encodeResponse: (value: unknown) => Uint8Array;\n decodeResponse: (bytes: Uint8Array) => unknown;\n assertCanonicalResponse: (bytes: Uint8Array) => void;\n }>;\n concurrency: Readonly<{\n semantics: EditableArtifactConcurrencySemantics;\n collaborationEnvelope: \"OGACO002\" | null;\n staleBaseMustBeRejected: boolean;\n }>;\n}>;\n\nconst spreadsheet = Object.freeze({\n modality: \"spreadsheet\",\n modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGASC002\",\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n maximumBytes: SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodeSpreadsheetArtifactCommandBatch(\n value as Parameters<typeof encodeSpreadsheetArtifactCommandBatch>[0],\n ),\n decode: decodeSpreadsheetArtifactCommandBatch,\n assertCanonical: assertCanonicalSpreadsheetArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGAKQ001\",\n responseMagic: \"OGAKV001\",\n version: SPREADSHEET_ARTIFACT_QUERY_VERSION,\n responseVersion: SPREADSHEET_ARTIFACT_QUERY_VERSION,\n maximumBytes: SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n encode: (value: unknown) =>\n encodeSpreadsheetArtifactKernelQuery(\n value as Parameters<typeof encodeSpreadsheetArtifactKernelQuery>[0],\n ),\n decode: decodeSpreadsheetArtifactKernelQuery,\n assertCanonical: assertCanonicalSpreadsheetArtifactKernelQueryBytes,\n encodeResponse: (value: unknown) =>\n encodeSpreadsheetArtifactKernelProjection(\n value as Parameters<typeof encodeSpreadsheetArtifactKernelProjection>[0],\n ),\n decodeResponse: decodeSpreadsheetArtifactKernelProjection,\n assertCanonicalResponse: assertCanonicalSpreadsheetArtifactKernelProjectionBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"causal-crdt-v1\",\n collaborationEnvelope: \"OGACO002\",\n staleBaseMustBeRejected: false,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nconst document = Object.freeze({\n modality: \"document\",\n modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGADC001\",\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n maximumBytes: DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodeDocumentArtifactCommandBatch(\n value as Parameters<typeof encodeDocumentArtifactCommandBatch>[0],\n ),\n decode: decodeDocumentArtifactCommandBatch,\n assertCanonical: assertCanonicalDocumentArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGADQ001\",\n responseMagic: \"OGADP001\",\n version: DOCUMENT_ARTIFACT_QUERY_VERSION,\n responseVersion: DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n maximumBytes: DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encode: (value: unknown) =>\n encodeDocumentArtifactQuery(value as Parameters<typeof encodeDocumentArtifactQuery>[0]),\n decode: decodeDocumentArtifactQuery,\n assertCanonical: assertCanonicalDocumentArtifactQueryBytes,\n encodeResponse: (value: unknown) =>\n encodeDocumentArtifactQueryResponse(\n value as Parameters<typeof encodeDocumentArtifactQueryResponse>[0],\n ),\n decodeResponse: decodeDocumentArtifactQueryResponse,\n assertCanonicalResponse: assertCanonicalDocumentArtifactQueryResponseBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"authoritative-serialized-stale-base-v1\",\n collaborationEnvelope: null,\n staleBaseMustBeRejected: true,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nconst presentation = Object.freeze({\n modality: \"presentation\",\n modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGAPC001\",\n version: PRESENTATION_ARTIFACT_COMMAND_VERSION,\n maximumBytes: PRESENTATION_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: PRESENTATION_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodePresentationArtifactCommandBatch(\n value as Parameters<typeof encodePresentationArtifactCommandBatch>[0],\n ),\n decode: decodePresentationArtifactCommandBatch,\n assertCanonical: assertCanonicalPresentationArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGAPQ001\",\n responseMagic: \"OGAPV001\",\n version: PRESENTATION_ARTIFACT_QUERY_VERSION,\n responseVersion: PRESENTATION_ARTIFACT_QUERY_RESPONSE_VERSION,\n maximumBytes: PRESENTATION_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encode: (value: unknown) =>\n encodePresentationArtifactQuery(\n value as Parameters<typeof encodePresentationArtifactQuery>[0],\n ),\n decode: decodePresentationArtifactQuery,\n assertCanonical: assertCanonicalPresentationArtifactQueryBytes,\n encodeResponse: (value: unknown) =>\n encodePresentationArtifactQueryResponse(\n value as Parameters<typeof encodePresentationArtifactQueryResponse>[0],\n ),\n decodeResponse: decodePresentationArtifactQueryResponse,\n assertCanonicalResponse: assertCanonicalPresentationArtifactQueryResponseBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"authoritative-serialized-stale-base-v1\",\n collaborationEnvelope: null,\n staleBaseMustBeRejected: true,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nexport const EDITABLE_ARTIFACT_CODEC_REGISTRY: Readonly<\n Record<EditableArtifactModality, EditableArtifactCodecDescriptor>\n> = Object.freeze({ spreadsheet, document, presentation });\n\n/** One exact current compatibility tuple per durable modality. */\nexport function currentEditableArtifactCompatibility(\n modality: EditableArtifactModality,\n): CurrentEditableArtifactCompatibility {\n const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[modality];\n return Object.freeze({\n modality,\n liveProtocolVersion: EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,\n modelSchemaVersion: descriptor.modelSchemaVersion,\n snapshotVersion: descriptor.snapshotVersion,\n commandProtocolVersion: descriptor.command.version,\n committedTransactionProtocolVersion:\n modality === \"spreadsheet\"\n ? COMMITTED_TRANSACTION_PROTOCOL_VERSION\n : EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n });\n}\n\n/**\n * Selects solely from the durable artifact modality plus persisted versions.\n * Modality intentionally never enters OGATX001: the durable artifact row is\n * authoritative and prevents client-controlled cross-modality decoding.\n */\nexport function editableArtifactCodecFor(\n input: Readonly<{\n durableModality: EditableArtifactModality;\n modelSchemaVersion: number;\n commandProtocolVersion: number;\n }>,\n): EditableArtifactCodecDescriptor {\n const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[input.durableModality];\n if (!descriptor) throw new TypeError(\"unsupported durable editable artifact modality\");\n if (input.modelSchemaVersion !== descriptor.modelSchemaVersion) {\n throw new TypeError(\n \"editable artifact model schema version is incompatible with its durable modality\",\n );\n }\n if (input.commandProtocolVersion !== descriptor.command.version) {\n throw new TypeError(\n \"editable artifact command protocol version is incompatible with its durable modality\",\n );\n }\n return descriptor;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,75 @@
1
+ // src/organization-usage.ts
2
+ import { z } from "zod";
3
+ var OrganizationUsagePeriod = z.enum(["today", "week", "month", "ytd"]);
4
+ var OrganizationUsageQuery = z.object({
5
+ period: OrganizationUsagePeriod.default("month")
6
+ });
7
+ var OrganizationUsageWorkspacePageQuery = OrganizationUsageQuery.extend({
8
+ until: z.string().datetime(),
9
+ afterWorkspaceId: z.string().uuid().optional()
10
+ });
11
+ var OrganizationUsageTotal = z.object({
12
+ eventType: z.string(),
13
+ unit: z.string(),
14
+ quantity: z.string().regex(/^-?\d+$/),
15
+ eventCount: z.string().regex(/^\d+$/)
16
+ });
17
+ var OrganizationUsagePersonalWorkspace = z.object({
18
+ membershipId: z.string().uuid(),
19
+ totals: z.array(OrganizationUsageTotal)
20
+ });
21
+ var OrganizationUsageSummary = z.object({
22
+ accountId: z.string().uuid(),
23
+ period: OrganizationUsagePeriod,
24
+ since: z.string().datetime(),
25
+ until: z.string().datetime(),
26
+ granularity: z.enum(["hour", "day"]),
27
+ totals: z.array(OrganizationUsageTotal),
28
+ buckets: z.array(z.object({ bucket: z.string(), totals: z.array(OrganizationUsageTotal) })),
29
+ workspaces: z.array(
30
+ z.object({
31
+ workspaceId: z.string().uuid(),
32
+ name: z.string().nullable(),
33
+ totals: z.array(OrganizationUsageTotal)
34
+ })
35
+ ).max(50),
36
+ nextWorkspaceCursor: z.string().uuid().nullable(),
37
+ /**
38
+ * Usage in each member's Personal workspace, keyed by the owner's
39
+ * organization membership: amounts only, never the workspace's id, name or
40
+ * content. Only Personal workspaces with usage in the period, the 50 that
41
+ * spent the most. Absent before migration 0543, hence the defaults.
42
+ */
43
+ personalWorkspaces: z.array(OrganizationUsagePersonalWorkspace).max(50).default([]),
44
+ /** How many Personal workspaces had usage in the period, listed or not. */
45
+ personalWorkspaceCount: z.number().int().nonnegative().default(0),
46
+ /** Other people's Only-me chats in shared workspaces: member amounts only. */
47
+ privateChats: z.array(
48
+ z.object({
49
+ workspaceId: z.string().uuid(),
50
+ membershipId: z.string().uuid().nullable(),
51
+ name: z.string().nullable(),
52
+ totals: z.array(OrganizationUsageTotal)
53
+ })
54
+ ).default([]),
55
+ privateChatsTruncated: z.boolean().default(false)
56
+ });
57
+ var OrganizationUsageWorkspacePage = OrganizationUsageSummary.omit({
58
+ totals: true,
59
+ buckets: true,
60
+ personalWorkspaces: true,
61
+ personalWorkspaceCount: true,
62
+ privateChats: true,
63
+ privateChatsTruncated: true
64
+ });
65
+
66
+ export {
67
+ OrganizationUsagePeriod,
68
+ OrganizationUsageQuery,
69
+ OrganizationUsageWorkspacePageQuery,
70
+ OrganizationUsageTotal,
71
+ OrganizationUsagePersonalWorkspace,
72
+ OrganizationUsageSummary,
73
+ OrganizationUsageWorkspacePage
74
+ };
75
+ //# sourceMappingURL=chunk-TSCDAGET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/organization-usage.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const OrganizationUsagePeriod = z.enum([\"today\", \"week\", \"month\", \"ytd\"]);\nexport type OrganizationUsagePeriod = z.infer<typeof OrganizationUsagePeriod>;\nexport const OrganizationUsageQuery = z.object({\n period: OrganizationUsagePeriod.default(\"month\"),\n});\nexport const OrganizationUsageWorkspacePageQuery = OrganizationUsageQuery.extend({\n until: z.string().datetime(),\n afterWorkspaceId: z.string().uuid().optional(),\n});\n// PostgreSQL SUM(bigint) must never pass through a JavaScript number.\nexport const OrganizationUsageTotal = z.object({\n eventType: z.string(),\n unit: z.string(),\n quantity: z.string().regex(/^-?\\d+$/),\n eventCount: z.string().regex(/^\\d+$/),\n});\n/** One member's Personal workspace, as usage only. */\nexport const OrganizationUsagePersonalWorkspace = z.object({\n membershipId: z.string().uuid(),\n totals: z.array(OrganizationUsageTotal),\n});\nexport type OrganizationUsagePersonalWorkspace = z.infer<typeof OrganizationUsagePersonalWorkspace>;\nexport const OrganizationUsageSummary = z.object({\n accountId: z.string().uuid(),\n period: OrganizationUsagePeriod,\n since: z.string().datetime(),\n until: z.string().datetime(),\n granularity: z.enum([\"hour\", \"day\"]),\n totals: z.array(OrganizationUsageTotal),\n buckets: z.array(z.object({ bucket: z.string(), totals: z.array(OrganizationUsageTotal) })),\n workspaces: z\n .array(\n z.object({\n workspaceId: z.string().uuid(),\n name: z.string().nullable(),\n totals: z.array(OrganizationUsageTotal),\n }),\n )\n .max(50),\n nextWorkspaceCursor: z.string().uuid().nullable(),\n /**\n * Usage in each member's Personal workspace, keyed by the owner's\n * organization membership: amounts only, never the workspace's id, name or\n * content. Only Personal workspaces with usage in the period, the 50 that\n * spent the most. Absent before migration 0543, hence the defaults.\n */\n personalWorkspaces: z.array(OrganizationUsagePersonalWorkspace).max(50).default([]),\n /** How many Personal workspaces had usage in the period, listed or not. */\n personalWorkspaceCount: z.number().int().nonnegative().default(0),\n /** Other people's Only-me chats in shared workspaces: member amounts only. */\n privateChats: z\n .array(\n z.object({\n workspaceId: z.string().uuid(),\n membershipId: z.string().uuid().nullable(),\n name: z.string().nullable(),\n totals: z.array(OrganizationUsageTotal),\n }),\n )\n .default([]),\n privateChatsTruncated: z.boolean().default(false),\n});\nexport type OrganizationUsageSummary = z.infer<typeof OrganizationUsageSummary>;\n\n/**\n * A page deliberately excludes totals, charts and Personal rows: those are not\n * recomputed. Pages continue the shared workspaces only.\n */\nexport const OrganizationUsageWorkspacePage = OrganizationUsageSummary.omit({\n totals: true,\n buckets: true,\n personalWorkspaces: true,\n personalWorkspaceCount: true,\n privateChats: true,\n privateChatsTruncated: true,\n});\nexport type OrganizationUsageWorkspacePage = z.infer<typeof OrganizationUsageWorkspacePage>;\n"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,0BAA0B,EAAE,KAAK,CAAC,SAAS,QAAQ,SAAS,KAAK,CAAC;AAExE,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,QAAQ,wBAAwB,QAAQ,OAAO;AACjD,CAAC;AACM,IAAM,sCAAsC,uBAAuB,OAAO;AAAA,EAC/E,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAC/C,CAAC;AAEM,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,WAAW,EAAE,OAAO;AAAA,EACpB,MAAM,EAAE,OAAO;AAAA,EACf,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,MAAM,OAAO;AACtC,CAAC;AAEM,IAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,cAAc,EAAE,OAAO,EAAE,KAAK;AAAA,EAC9B,QAAQ,EAAE,MAAM,sBAAsB;AACxC,CAAC;AAEM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,WAAW,EAAE,OAAO,EAAE,KAAK;AAAA,EAC3B,QAAQ;AAAA,EACR,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAa,EAAE,KAAK,CAAC,QAAQ,KAAK,CAAC;AAAA,EACnC,QAAQ,EAAE,MAAM,sBAAsB;AAAA,EACtC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,MAAM,sBAAsB,EAAE,CAAC,CAAC;AAAA,EAC1F,YAAY,EACT;AAAA,IACC,EAAE,OAAO;AAAA,MACP,aAAa,EAAE,OAAO,EAAE,KAAK;AAAA,MAC7B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,QAAQ,EAAE,MAAM,sBAAsB;AAAA,IACxC,CAAC;AAAA,EACH,EACC,IAAI,EAAE;AAAA,EACT,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhD,oBAAoB,EAAE,MAAM,kCAAkC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA,EAElF,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;AAAA;AAAA,EAEhE,cAAc,EACX;AAAA,IACC,EAAE,OAAO;AAAA,MACP,aAAa,EAAE,OAAO,EAAE,KAAK;AAAA,MAC7B,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,MACzC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,QAAQ,EAAE,MAAM,sBAAsB;AAAA,IACxC,CAAC;AAAA,EACH,EACC,QAAQ,CAAC,CAAC;AAAA,EACb,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAClD,CAAC;AAOM,IAAM,iCAAiC,yBAAyB,KAAK;AAAA,EAC1E,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,uBAAuB;AACzB,CAAC;","names":[]}