@opengeni/contracts 3.1.0-canary.1 → 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 (434) 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 +110 -0
  4. package/dist/agent-learning.d.ts +243 -0
  5. package/dist/allowance-refusal.d.ts +9 -0
  6. package/dist/allowance-refusal.js +50 -0
  7. package/dist/allowance-refusal.js.map +1 -0
  8. package/dist/analytics-consent-report.d.ts +19 -0
  9. package/dist/analytics-consent-report.js +10 -0
  10. package/dist/analytics-consent-report.js.map +1 -0
  11. package/dist/api-key-presets.d.ts +19 -0
  12. package/dist/artifact-catalog.d.ts +188 -0
  13. package/dist/artifacts.d.ts +86 -0
  14. package/dist/atlassian-native-retirement.d.ts +16 -0
  15. package/dist/atlassian-native-retirement.js +30 -0
  16. package/dist/atlassian-native-retirement.js.map +1 -0
  17. package/dist/atlassian.d.ts +1 -0
  18. package/dist/atlassian.js +34 -19
  19. package/dist/browser-storage.d.ts +5 -0
  20. package/dist/browser-storage.js +9 -0
  21. package/dist/browser-storage.js.map +1 -0
  22. package/dist/bundled-skills.d.ts +24 -1
  23. package/dist/canonical-human-identities.js +2 -1
  24. package/dist/chunk-2ZIHHL72.js +153 -0
  25. package/dist/chunk-2ZIHHL72.js.map +1 -0
  26. package/dist/{chunk-5LYFSZ7O.js → chunk-352X6ENP.js} +31 -31
  27. package/dist/chunk-4JGHSSB7.js +11 -0
  28. package/dist/chunk-4JGHSSB7.js.map +1 -0
  29. package/dist/chunk-4QO6GJUX.js +85 -0
  30. package/dist/chunk-4QO6GJUX.js.map +1 -0
  31. package/dist/chunk-4VDMHLLL.js +49 -0
  32. package/dist/chunk-4VDMHLLL.js.map +1 -0
  33. package/dist/chunk-56SNIMDO.js +9 -0
  34. package/dist/chunk-56SNIMDO.js.map +1 -0
  35. package/dist/chunk-6C2HKFTU.js +207 -0
  36. package/dist/chunk-6C2HKFTU.js.map +1 -0
  37. package/dist/chunk-6IXO76Z6.js +72 -0
  38. package/dist/chunk-6IXO76Z6.js.map +1 -0
  39. package/dist/chunk-7272KVWZ.js +60 -0
  40. package/dist/chunk-7272KVWZ.js.map +1 -0
  41. package/dist/{chunk-7ABONTXE.js → chunk-E3GGUBHS.js} +49 -5
  42. package/dist/chunk-E3GGUBHS.js.map +1 -0
  43. package/dist/chunk-EFZYKUE2.js +767 -0
  44. package/dist/chunk-EFZYKUE2.js.map +1 -0
  45. package/dist/chunk-EKWNTOG3.js +154 -0
  46. package/dist/chunk-EKWNTOG3.js.map +1 -0
  47. package/dist/chunk-HABQ7ADB.js +234 -0
  48. package/dist/chunk-HABQ7ADB.js.map +1 -0
  49. package/dist/chunk-HRRU4QPI.js +91 -0
  50. package/dist/chunk-HRRU4QPI.js.map +1 -0
  51. package/dist/{chunk-3SIZGL3O.js → chunk-IK36LXKC.js} +18 -2
  52. package/dist/chunk-IK36LXKC.js.map +1 -0
  53. package/dist/{chunk-TXTQIYCV.js → chunk-ILJ72KPO.js} +56 -3
  54. package/dist/chunk-ILJ72KPO.js.map +1 -0
  55. package/dist/chunk-J4HQ3UKY.js +93 -0
  56. package/dist/chunk-J4HQ3UKY.js.map +1 -0
  57. package/dist/chunk-KHHZTBP7.js +11 -0
  58. package/dist/chunk-KHHZTBP7.js.map +1 -0
  59. package/dist/{chunk-WYBDERIY.js → chunk-LZ2LAHIX.js} +47 -41
  60. package/dist/chunk-LZ2LAHIX.js.map +1 -0
  61. package/dist/chunk-NDZHPTCL.js +400 -0
  62. package/dist/chunk-NDZHPTCL.js.map +1 -0
  63. package/dist/chunk-OF6OKOBF.js +54793 -0
  64. package/dist/chunk-OF6OKOBF.js.map +1 -0
  65. package/dist/chunk-OL23ARTF.js +94 -0
  66. package/dist/chunk-OL23ARTF.js.map +1 -0
  67. package/dist/chunk-PUIUXIOL.js +189 -0
  68. package/dist/chunk-PUIUXIOL.js.map +1 -0
  69. package/dist/{chunk-WBYTNVIW.js → chunk-RKX3NQYS.js} +1 -1
  70. package/dist/{chunk-Y3KNXVTD.js → chunk-RMWXDZEO.js} +128 -21
  71. package/dist/chunk-RMWXDZEO.js.map +1 -0
  72. package/dist/{chunk-MRWYRAS5.js → chunk-SHO4YO4B.js} +27 -35
  73. package/dist/chunk-SHO4YO4B.js.map +1 -0
  74. package/dist/chunk-SWRN2DJ3.js +153 -0
  75. package/dist/chunk-SWRN2DJ3.js.map +1 -0
  76. package/dist/chunk-TCXCRBPF.js +267 -0
  77. package/dist/chunk-TCXCRBPF.js.map +1 -0
  78. package/dist/chunk-TLU3UEMD.js +324 -0
  79. package/dist/chunk-TLU3UEMD.js.map +1 -0
  80. package/dist/chunk-TSWWZMUS.js +186 -0
  81. package/dist/chunk-TSWWZMUS.js.map +1 -0
  82. package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
  83. package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
  84. package/dist/chunk-XDLAGX66.js +127 -0
  85. package/dist/chunk-XDLAGX66.js.map +1 -0
  86. package/dist/chunk-YKZ4WU4P.js +33 -0
  87. package/dist/chunk-YKZ4WU4P.js.map +1 -0
  88. package/dist/{chunk-O5LEQHDM.js → chunk-Z7WEVGCL.js} +3 -3
  89. package/dist/{chunk-YBW5JSA3.js → chunk-ZDCRWCGZ.js} +119 -101
  90. package/dist/chunk-ZDCRWCGZ.js.map +1 -0
  91. package/dist/claude-provider-account-authority.d.ts +18 -0
  92. package/dist/claude-subscription-oauth.d.ts +42 -0
  93. package/dist/claude-subscription-usage.d.ts +159 -0
  94. package/dist/client-error-report.d.ts +158 -0
  95. package/dist/client-error-report.js +164 -0
  96. package/dist/client-error-report.js.map +1 -0
  97. package/dist/code-search.d.ts +52 -0
  98. package/dist/code-search.js +40 -0
  99. package/dist/code-search.js.map +1 -0
  100. package/dist/codex-provider-account-authority.js +20 -12
  101. package/dist/codex-provider-account-authority.js.map +1 -1
  102. package/dist/company-brain.d.ts +19 -81
  103. package/dist/company-profile.d.ts +144 -6
  104. package/dist/connect.d.ts +37 -0
  105. package/dist/connect.js +216 -159
  106. package/dist/connect.js.map +1 -1
  107. package/dist/connection-account-label.d.ts +2 -0
  108. package/dist/connection-account-label.js +35 -0
  109. package/dist/connection-account-label.js.map +1 -0
  110. package/dist/connection-authority.d.ts +9 -317
  111. package/dist/connection-authority.js +37 -42
  112. package/dist/connector-attachments.js +2 -1
  113. package/dist/connector-destinations.js +2 -1
  114. package/dist/connector-tool-permissions.d.ts +137 -0
  115. package/dist/cua-desktop-tools.d.ts +17 -0
  116. package/dist/define-schema.d.ts +8 -0
  117. package/dist/direct-model-provider.d.ts +36 -0
  118. package/dist/editable-artifact-codec-registry.js +5 -5
  119. package/dist/editable-artifact-committed-transaction.js +3 -2
  120. package/dist/editable-artifact-live.js +5 -5
  121. package/dist/editable-artifact-serialized-commit.js +6 -6
  122. package/dist/editable-artifact-versions.d.ts +7 -1
  123. package/dist/editable-artifact-versions.js +1 -1
  124. package/dist/editable-artifacts.js +62 -56
  125. package/dist/event-preview.d.ts +22 -0
  126. package/dist/external-identities.d.ts +174 -0
  127. package/dist/external-identities.js +15 -4
  128. package/dist/first-party-tool-authorization.d.ts +815 -0
  129. package/dist/github-repository-contracts.js +60 -43
  130. package/dist/github-repository-contracts.js.map +1 -1
  131. package/dist/google-drive.d.ts +2 -1
  132. package/dist/google-drive.js +305 -238
  133. package/dist/google-drive.js.map +1 -1
  134. package/dist/host-mcp-bindings.d.ts +39 -10
  135. package/dist/host-mcp-bindings.js +256 -171
  136. package/dist/host-mcp-bindings.js.map +1 -1
  137. package/dist/image-generation.d.ts +1 -0
  138. package/dist/index.d.ts +15715 -3850
  139. package/dist/index.js +2088 -289
  140. package/dist/insights-usage.d.ts +877 -0
  141. package/dist/insights-usage.js +559 -0
  142. package/dist/insights-usage.js.map +1 -0
  143. package/dist/interaction.d.ts +1176 -829
  144. package/dist/knowledge-entries.d.ts +984 -0
  145. package/dist/knowledge-preparation.d.ts +239 -0
  146. package/dist/managed-auth-session-sets.d.ts +7 -0
  147. package/dist/managed-auth-session-sets.js +198 -132
  148. package/dist/managed-auth-session-sets.js.map +1 -1
  149. package/dist/managed-sign-in-methods.d.ts +56 -0
  150. package/dist/managed-sign-in-methods.js +64 -0
  151. package/dist/managed-sign-in-methods.js.map +1 -0
  152. package/dist/mcp-catalog-limits.d.ts +2 -0
  153. package/dist/mcp-endpoint.js +9 -0
  154. package/dist/mcp-endpoint.js.map +1 -0
  155. package/dist/mcp-oauth.d.ts +2 -2
  156. package/dist/mcp-structured-content.d.ts +25 -0
  157. package/dist/modal-native-proof-v2.d.ts +587 -0
  158. package/dist/modal-native-proof-v2.js +38 -0
  159. package/dist/modal-native-proof-v2.js.map +1 -0
  160. package/dist/model-account-choice.d.ts +235 -0
  161. package/dist/model-account-settings.d.ts +422 -0
  162. package/dist/model-availability.d.ts +15 -0
  163. package/dist/model-connection-access.d.ts +13 -0
  164. package/dist/model-context-inspector.d.ts +98 -0
  165. package/dist/model-display.d.ts +43 -0
  166. package/dist/model-display.js +17 -0
  167. package/dist/model-display.js.map +1 -0
  168. package/dist/model-picker-order.d.ts +3 -1
  169. package/dist/model-picker-order.js +3 -0
  170. package/dist/model-picker-order.js.map +1 -1
  171. package/dist/organization-access.d.ts +412 -0
  172. package/dist/organization-access.js +39 -0
  173. package/dist/organization-access.js.map +1 -0
  174. package/dist/organization-integration-policy.d.ts +27 -0
  175. package/dist/organization-membership-lifecycle.d.ts +38 -0
  176. package/dist/organization-model-usage.d.ts +146 -0
  177. package/dist/organization-model-usage.js +78 -0
  178. package/dist/organization-model-usage.js.map +1 -0
  179. package/dist/organization-recovery.js +2 -1
  180. package/dist/organization-usage.d.ts +138 -0
  181. package/dist/permissions.d.ts +18 -0
  182. package/dist/personal-github.d.ts +1 -0
  183. package/dist/personal-github.js +199 -144
  184. package/dist/personal-github.js.map +1 -1
  185. package/dist/plugin-discovery.js +1 -1
  186. package/dist/prepared-mcp-setup.d.ts +54 -0
  187. package/dist/prepared-mcp-setup.js +12 -0
  188. package/dist/prepared-mcp-setup.js.map +1 -0
  189. package/dist/product-analytics.d.ts +116 -0
  190. package/dist/product-lifecycle-facts.d.ts +73 -0
  191. package/dist/remember.d.ts +98 -6
  192. package/dist/retained-output.d.ts +8 -0
  193. package/dist/sandbox-file-artifacts.d.ts +1 -0
  194. package/dist/sandbox-provider-command.d.ts +91 -1
  195. package/dist/sandbox-recovery.d.ts +146 -0
  196. package/dist/secret-generator.d.ts +44 -0
  197. package/dist/secret-references.d.ts +90 -0
  198. package/dist/secret-resolution.d.ts +111 -0
  199. package/dist/secret-totp.d.ts +41 -0
  200. package/dist/session-final-reply.d.ts +6 -0
  201. package/dist/session-final-reply.js +9 -0
  202. package/dist/session-final-reply.js.map +1 -0
  203. package/dist/session-goal-reports.d.ts +21 -0
  204. package/dist/session-history-import.d.ts +1272 -0
  205. package/dist/session-list-entries.d.ts +4 -0
  206. package/dist/session-list-entries.js +56 -0
  207. package/dist/session-list-entries.js.map +1 -0
  208. package/dist/session-mcp-projections.d.ts +6 -0
  209. package/dist/session-mcp-tool-permissions.d.ts +62 -0
  210. package/dist/session-message-search.d.ts +68 -0
  211. package/dist/session-target.d.ts +18 -0
  212. package/dist/session-titles.d.ts +8 -0
  213. package/dist/session-titles.js +5 -1
  214. package/dist/session-usage-limit-refusal.d.ts +34 -0
  215. package/dist/session-usage-limit-refusal.js +15 -0
  216. package/dist/session-usage-limit-refusal.js.map +1 -0
  217. package/dist/session-usage-limits.d.ts +127 -0
  218. package/dist/session-usage-limits.js +41 -0
  219. package/dist/session-usage-limits.js.map +1 -0
  220. package/dist/signup-attribution.d.ts +39 -0
  221. package/dist/site-data.d.ts +286 -0
  222. package/dist/site-operations.d.ts +39 -0
  223. package/dist/site-publishing.d.ts +778 -0
  224. package/dist/site-session-http.d.ts +89 -4
  225. package/dist/site-session-http.js +25 -1
  226. package/dist/site-sql.d.ts +421 -0
  227. package/dist/skill-catalog-context.d.ts +7 -0
  228. package/dist/skill-files.d.ts +1 -1
  229. package/dist/skill-use.d.ts +61 -0
  230. package/dist/skills.d.ts +15 -0
  231. package/dist/slack-bot-scopes.d.ts +17 -12
  232. package/dist/slack-bot-scopes.js +10 -3
  233. package/dist/slack-rest-mcp.d.ts +36 -0
  234. package/dist/slack-rest-mcp.js +25 -0
  235. package/dist/slack-rest-mcp.js.map +1 -0
  236. package/dist/spreadsheet-artifact-commands.d.ts +14 -1
  237. package/dist/spreadsheet-artifact-commands.js +8 -2
  238. package/dist/spreadsheet-artifact-query.d.ts +13 -6
  239. package/dist/spreadsheet-artifact-query.js +3 -3
  240. package/dist/subscription-account-actions.d.ts +64 -0
  241. package/dist/subscription-account-pools.d.ts +292 -0
  242. package/dist/subscription-personal-authority-v2.d.ts +28 -0
  243. package/dist/subscription-personal-authority-v2.js +12 -0
  244. package/dist/subscription-personal-authority-v2.js.map +1 -0
  245. package/dist/tool-action-review.d.ts +132 -0
  246. package/dist/tool-catalog.d.ts +408 -0
  247. package/dist/tool-policy.d.ts +5 -0
  248. package/dist/tool-review-presentation.d.ts +12 -0
  249. package/dist/tool-review-presentation.js +17 -0
  250. package/dist/tool-review-presentation.js.map +1 -0
  251. package/dist/transcription-recordings.d.ts +21 -0
  252. package/dist/turn-serving-policy.d.ts +221 -0
  253. package/dist/usage-allowances.d.ts +314 -0
  254. package/dist/usage-allowances.js +52 -0
  255. package/dist/usage-allowances.js.map +1 -0
  256. package/dist/vaults.d.ts +1286 -0
  257. package/dist/video-generation.d.ts +3 -0
  258. package/dist/video-generation.js +2 -1
  259. package/dist/workspace-instruction-policies.d.ts +13 -0
  260. package/dist/workspace-integration-wire.d.ts +36 -0
  261. package/dist/workspace-integration-wire.js +23 -0
  262. package/dist/workspace-integration-wire.js.map +1 -0
  263. package/dist/workspace-integrations.d.ts +1028 -0
  264. package/dist/workspace-state.d.ts +85 -416
  265. package/dist/xai-provider-account-authority.js +2 -1
  266. package/package.json +98 -2
  267. package/src/agent-authored-durable-text.ts +14 -11
  268. package/src/agent-config.ts +1698 -0
  269. package/src/agent-instruction-changes.ts +115 -0
  270. package/src/agent-learning.ts +188 -0
  271. package/src/agent-topology.ts +57 -52
  272. package/src/allowance-refusal.ts +81 -0
  273. package/src/analytics-consent-report.ts +20 -0
  274. package/src/api-key-presets.ts +28 -0
  275. package/src/artifact-catalog.ts +82 -0
  276. package/src/artifacts.ts +299 -227
  277. package/src/atlassian-native-retirement.ts +33 -0
  278. package/src/atlassian.ts +135 -108
  279. package/src/browser-storage.ts +10 -0
  280. package/src/bundled-skills.ts +60 -17
  281. package/src/canonical-human-identities.ts +60 -58
  282. package/src/claude-provider-account-authority.ts +12 -0
  283. package/src/claude-subscription-oauth.ts +73 -0
  284. package/src/claude-subscription-usage.ts +68 -0
  285. package/src/client-error-report.ts +343 -0
  286. package/src/code-search.ts +105 -0
  287. package/src/codex-provider-account-authority.ts +21 -16
  288. package/src/company-brain-governed-writes.ts +255 -233
  289. package/src/company-brain.ts +164 -153
  290. package/src/company-profile.ts +365 -292
  291. package/src/connect.ts +212 -173
  292. package/src/connection-account-label.ts +46 -0
  293. package/src/connection-authority.ts +183 -364
  294. package/src/connector-attachments.ts +137 -122
  295. package/src/connector-destinations.ts +46 -42
  296. package/src/connector-tool-permissions.ts +117 -0
  297. package/src/cua-desktop-tools.gen.json +6512 -0
  298. package/src/cua-desktop-tools.linux.gen.json +6600 -0
  299. package/src/cua-desktop-tools.ts +36 -0
  300. package/src/cua-desktop-tools.windows.gen.json +6353 -0
  301. package/src/define-schema.ts +10 -0
  302. package/src/direct-model-provider.ts +108 -0
  303. package/src/editable-artifact-committed-transaction.ts +17 -0
  304. package/src/editable-artifact-versions.ts +7 -1
  305. package/src/event-preview.ts +53 -3
  306. package/src/external-identities.ts +262 -145
  307. package/src/feedback.ts +43 -30
  308. package/src/first-party-tool-authorization.ts +356 -0
  309. package/src/github-repository-contracts.ts +78 -64
  310. package/src/google-drive.ts +285 -234
  311. package/src/governed-learning-activation.ts +152 -131
  312. package/src/governed-learning-evaluator.ts +140 -133
  313. package/src/host-mcp-bindings.ts +292 -198
  314. package/src/image-generation.ts +104 -95
  315. package/src/index.ts +13354 -8654
  316. package/src/insights-usage.ts +727 -0
  317. package/src/interaction.ts +3070 -2326
  318. package/src/knowledge-entries.ts +428 -0
  319. package/src/knowledge-preparation.ts +57 -0
  320. package/src/knowledge.ts +246 -213
  321. package/src/managed-auth-session-sets.ts +220 -144
  322. package/src/managed-sign-in-methods.ts +52 -0
  323. package/src/mcp-catalog-limits.ts +2 -0
  324. package/src/mcp-oauth.ts +43 -34
  325. package/src/mcp-receipts.ts +192 -192
  326. package/src/mcp-structured-content.ts +81 -0
  327. package/src/memory-slack-delivery.ts +171 -142
  328. package/src/modal-native-proof-v2.ts +429 -0
  329. package/src/model-account-choice.ts +177 -0
  330. package/src/model-account-settings.ts +210 -0
  331. package/src/model-availability.ts +22 -0
  332. package/src/model-connection-access.ts +61 -14
  333. package/src/model-context-inspector.ts +133 -99
  334. package/src/model-display.ts +221 -0
  335. package/src/model-picker-order.ts +12 -1
  336. package/src/organization-access.ts +217 -0
  337. package/src/organization-integration-policy.ts +63 -0
  338. package/src/organization-membership-lifecycle.ts +528 -382
  339. package/src/organization-model-usage.ts +81 -0
  340. package/src/organization-recovery.ts +147 -135
  341. package/src/organization-usage.ts +94 -0
  342. package/src/permissions.ts +88 -52
  343. package/src/personal-github.ts +210 -171
  344. package/src/preference-registry.ts +314 -258
  345. package/src/prepared-mcp-setup.ts +189 -0
  346. package/src/product-analytics.ts +261 -0
  347. package/src/product-lifecycle-facts.ts +122 -0
  348. package/src/remember.ts +181 -167
  349. package/src/retained-output.ts +194 -165
  350. package/src/sandbox-file-artifacts.ts +60 -47
  351. package/src/sandbox-provider-command.ts +88 -20
  352. package/src/sandbox-recovery.ts +129 -0
  353. package/src/scoped-knowledge.ts +61 -43
  354. package/src/secret-generator.ts +155 -0
  355. package/src/secret-references.ts +414 -0
  356. package/src/secret-resolution.ts +274 -0
  357. package/src/secret-totp.ts +188 -0
  358. package/src/session-final-reply.ts +16 -0
  359. package/src/session-goal-reports.ts +64 -0
  360. package/src/session-history-import.ts +177 -0
  361. package/src/session-list-entries.ts +96 -0
  362. package/src/session-mcp-projections.ts +11 -0
  363. package/src/session-mcp-tool-permissions.ts +108 -0
  364. package/src/session-message-search.ts +61 -0
  365. package/src/session-target.ts +57 -0
  366. package/src/session-titles.ts +80 -10
  367. package/src/session-topology-primitives.ts +19 -12
  368. package/src/session-usage-limit-refusal.ts +101 -0
  369. package/src/session-usage-limits.ts +171 -0
  370. package/src/signup-attribution.ts +86 -0
  371. package/src/site-data.ts +339 -0
  372. package/src/site-operations.ts +154 -0
  373. package/src/site-publishing.ts +876 -0
  374. package/src/site-session-http.ts +294 -16
  375. package/src/site-sql.ts +1123 -0
  376. package/src/skill-catalog-context.ts +50 -0
  377. package/src/skill-files.ts +3 -3
  378. package/src/skill-use.ts +80 -0
  379. package/src/skills.ts +82 -54
  380. package/src/slack-bot-scopes.ts +31 -39
  381. package/src/slack-rest-mcp.ts +222 -0
  382. package/src/slack-task-policy.ts +96 -73
  383. package/src/spreadsheet-artifact-commands.ts +73 -2
  384. package/src/spreadsheet-artifact-query.ts +187 -39
  385. package/src/subscription-account-actions.ts +84 -0
  386. package/src/subscription-account-pools.ts +53 -0
  387. package/src/subscription-personal-authority-v2.ts +66 -0
  388. package/src/task-notes.ts +55 -51
  389. package/src/tool-action-review.ts +258 -0
  390. package/src/tool-catalog.ts +609 -372
  391. package/src/tool-policy.ts +82 -0
  392. package/src/tool-result-spill.ts +12 -9
  393. package/src/tool-review-presentation.ts +385 -0
  394. package/src/transcription-recordings.ts +145 -131
  395. package/src/turn-serving-policy.ts +166 -0
  396. package/src/usage-allowances.ts +248 -0
  397. package/src/vaults.ts +850 -0
  398. package/src/video-generation.ts +385 -360
  399. package/src/work-claims.ts +173 -149
  400. package/src/workspace-instruction-policies.ts +349 -275
  401. package/src/workspace-integration-wire.ts +101 -0
  402. package/src/workspace-integrations.ts +724 -0
  403. package/src/workspace-learning-administration.ts +57 -44
  404. package/src/workspace-learning-policy.ts +127 -96
  405. package/src/workspace-state.ts +253 -333
  406. package/src/xai-provider-account-authority.ts +22 -17
  407. package/dist/chunk-3SIZGL3O.js.map +0 -1
  408. package/dist/chunk-7ABONTXE.js.map +0 -1
  409. package/dist/chunk-BCS7WHCK.js +0 -139
  410. package/dist/chunk-BCS7WHCK.js.map +0 -1
  411. package/dist/chunk-GRG7PHWQ.js +0 -25
  412. package/dist/chunk-GRG7PHWQ.js.map +0 -1
  413. package/dist/chunk-JUFK3T4Q.js +0 -80
  414. package/dist/chunk-JUFK3T4Q.js.map +0 -1
  415. package/dist/chunk-M5ZGRVIQ.js +0 -719
  416. package/dist/chunk-M5ZGRVIQ.js.map +0 -1
  417. package/dist/chunk-MRWYRAS5.js.map +0 -1
  418. package/dist/chunk-OSBYTE3O.js +0 -348
  419. package/dist/chunk-OSBYTE3O.js.map +0 -1
  420. package/dist/chunk-P3HLDT77.js +0 -59
  421. package/dist/chunk-P3HLDT77.js.map +0 -1
  422. package/dist/chunk-TEMFILR7.js +0 -143
  423. package/dist/chunk-TEMFILR7.js.map +0 -1
  424. package/dist/chunk-TXTQIYCV.js.map +0 -1
  425. package/dist/chunk-UR2GFYIE.js +0 -22598
  426. package/dist/chunk-UR2GFYIE.js.map +0 -1
  427. package/dist/chunk-WYBDERIY.js.map +0 -1
  428. package/dist/chunk-Y3KNXVTD.js.map +0 -1
  429. package/dist/chunk-YBW5JSA3.js.map +0 -1
  430. package/dist/chunk-YRXAWWCU.js +0 -45
  431. package/dist/chunk-YRXAWWCU.js.map +0 -1
  432. /package/dist/{chunk-5LYFSZ7O.js.map → chunk-352X6ENP.js.map} +0 -0
  433. /package/dist/{chunk-WBYTNVIW.js.map → chunk-RKX3NQYS.js.map} +0 -0
  434. /package/dist/{chunk-O5LEQHDM.js.map → chunk-Z7WEVGCL.js.map} +0 -0
@@ -0,0 +1,115 @@
1
+ import { defineSchema } from "./define-schema";
2
+ import { z } from "zod";
3
+ import { AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS } from "./agent-authored-durable-text";
4
+ import { KnowledgeEntryEvidence } from "./knowledge-entries";
5
+ import { WorkspaceInstructionPolicyTarget } from "./workspace-instruction-policies";
6
+
7
+ export const AgentInstructionEditMode = /* @__PURE__ */ defineSchema(() =>
8
+ z.enum(["append", "edit"]),
9
+ );
10
+ export type AgentInstructionEditMode = z.infer<typeof AgentInstructionEditMode>;
11
+
12
+ export const AgentInstructionSaveRequest = /* @__PURE__ */ defineSchema(() =>
13
+ z
14
+ .object({
15
+ operationId: z.uuid(),
16
+ target: WorkspaceInstructionPolicyTarget,
17
+ editMode: AgentInstructionEditMode,
18
+ content: z.string().max(AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS).optional(),
19
+ oldText: z
20
+ .string()
21
+ .min(1)
22
+ .max(AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS)
23
+ .optional(),
24
+ newText: z.string().max(AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS).optional(),
25
+ expectedCurrentRevisionId: z.uuid().nullable(),
26
+ expectedActivationVersion: z.number().int().nonnegative(),
27
+ evidence: z.array(KnowledgeEntryEvidence).max(32).default([]),
28
+ reason: z.string().min(1).max(4096),
29
+ })
30
+ .superRefine((value, context) => {
31
+ if (value.editMode === "edit") {
32
+ if (value.oldText === undefined) {
33
+ context.addIssue({
34
+ code: "custom",
35
+ path: ["oldText"],
36
+ message: "An exact edit requires oldText",
37
+ });
38
+ }
39
+ if (value.newText === undefined) {
40
+ context.addIssue({
41
+ code: "custom",
42
+ path: ["newText"],
43
+ message: "An exact edit requires newText (use an empty string to remove the text)",
44
+ });
45
+ }
46
+ if (value.content !== undefined) {
47
+ context.addIssue({
48
+ code: "custom",
49
+ path: ["content"],
50
+ message: "An exact edit uses oldText and newText, not content",
51
+ });
52
+ }
53
+ return;
54
+ }
55
+ if (value.content === undefined || value.content.trim().length === 0) {
56
+ context.addIssue({
57
+ code: "custom",
58
+ path: ["content"],
59
+ message: "Append changes require non-empty content",
60
+ });
61
+ }
62
+ if (value.oldText !== undefined || value.newText !== undefined) {
63
+ context.addIssue({
64
+ code: "custom",
65
+ path: [value.oldText !== undefined ? "oldText" : "newText"],
66
+ message: "Append changes use content, not oldText or newText",
67
+ });
68
+ }
69
+ })
70
+ .strict(),
71
+ );
72
+ export type AgentInstructionSaveRequest = z.input<typeof AgentInstructionSaveRequest>;
73
+
74
+ export const AgentInstructionReviewRequest = /* @__PURE__ */ defineSchema(() =>
75
+ z
76
+ .object({
77
+ operationId: z.uuid(),
78
+ revisionId: z.uuid(),
79
+ decision: z.enum(["approve", "reject"]),
80
+ reason: z.string().min(1).max(4096),
81
+ })
82
+ .strict(),
83
+ );
84
+ export type AgentInstructionReviewRequest = z.infer<typeof AgentInstructionReviewRequest>;
85
+
86
+ export const AgentInstructionReceipt = /* @__PURE__ */ defineSchema(() =>
87
+ z.object({
88
+ operationId: z.uuid(),
89
+ revisionId: z.uuid(),
90
+ outcome: z.enum(["published", "pending", "rejected"]),
91
+ reviewBatchId: z.uuid().nullable(),
92
+ replayed: z.boolean(),
93
+ }),
94
+ );
95
+ export type AgentInstructionReceipt = z.infer<typeof AgentInstructionReceipt>;
96
+
97
+ export const AgentInstructionReviewItem = /* @__PURE__ */ defineSchema(() =>
98
+ z.object({
99
+ revisionId: z.uuid(),
100
+ content: z.string(),
101
+ target: WorkspaceInstructionPolicyTarget,
102
+ reviewBatchId: z.uuid().nullable(),
103
+ sessionId: z.uuid().nullable(),
104
+ reason: z.string(),
105
+ createdAt: z.string(),
106
+ }),
107
+ );
108
+ export type AgentInstructionReviewItem = z.infer<typeof AgentInstructionReviewItem>;
109
+ export const AgentInstructionReviewListResponse = /* @__PURE__ */ defineSchema(() =>
110
+ z.object({
111
+ entries: z.array(AgentInstructionReviewItem),
112
+ nextCursor: z.string().nullable(),
113
+ }),
114
+ );
115
+ export type AgentInstructionReviewListResponse = z.infer<typeof AgentInstructionReviewListResponse>;
@@ -0,0 +1,188 @@
1
+ import { defineSchema } from "./define-schema";
2
+ import { z } from "zod";
3
+
4
+ /** Review controls publication. It never grants content or external-action authority. */
5
+ export const AgentLearningMode = /* @__PURE__ */ defineSchema(() =>
6
+ z.enum(["automatic", "review_first", "off"]),
7
+ );
8
+ export type AgentLearningMode = z.infer<typeof AgentLearningMode>;
9
+
10
+ export const AgentLearningCategory = /* @__PURE__ */ defineSchema(() =>
11
+ z.enum(["knowledge", "instructions", "skills"]),
12
+ );
13
+ export type AgentLearningCategory = z.infer<typeof AgentLearningCategory>;
14
+
15
+ export const AgentLearningDefaults = /* @__PURE__ */ defineSchema(() =>
16
+ z
17
+ .object({
18
+ knowledge: AgentLearningMode,
19
+ instructions: AgentLearningMode,
20
+ skills: AgentLearningMode,
21
+ })
22
+ .strict(),
23
+ );
24
+ export type AgentLearningDefaults = z.infer<typeof AgentLearningDefaults>;
25
+
26
+ export const DEFAULT_AGENT_LEARNING: Readonly<AgentLearningDefaults> = Object.freeze({
27
+ knowledge: "automatic",
28
+ instructions: "automatic",
29
+ skills: "automatic",
30
+ });
31
+
32
+ /** An absent category inherits. `inherit` is a reset request, not persisted policy. */
33
+ export const AgentLearningOverrides = /* @__PURE__ */ defineSchema(() =>
34
+ AgentLearningDefaults.partial(),
35
+ );
36
+ export type AgentLearningOverrides = z.infer<typeof AgentLearningOverrides>;
37
+
38
+ export const AgentLearningOverridePatch = /* @__PURE__ */ defineSchema(() =>
39
+ z
40
+ .object({
41
+ knowledge: AgentLearningMode.or(z.literal("inherit")).optional(),
42
+ instructions: AgentLearningMode.or(z.literal("inherit")).optional(),
43
+ skills: AgentLearningMode.or(z.literal("inherit")).optional(),
44
+ })
45
+ .strict(),
46
+ );
47
+ export type AgentLearningOverridePatch = z.infer<typeof AgentLearningOverridePatch>;
48
+
49
+ export const AgentLearningContext = /* @__PURE__ */ defineSchema(() =>
50
+ z.discriminatedUnion("kind", [
51
+ z.object({ kind: z.literal("chat"), id: z.uuid() }).strict(),
52
+ z.object({ kind: z.literal("scheduled_task"), id: z.uuid() }).strict(),
53
+ ]),
54
+ );
55
+ export type AgentLearningContext = z.infer<typeof AgentLearningContext>;
56
+
57
+ export const AgentLearningOwner = /* @__PURE__ */ defineSchema(() =>
58
+ z.discriminatedUnion("kind", [
59
+ z.object({ kind: z.literal("workspace"), workspaceId: z.uuid() }).strict(),
60
+ z.object({ kind: z.literal("personal"), subjectId: z.string().min(1).max(1024) }).strict(),
61
+ ]),
62
+ );
63
+ export type AgentLearningOwner = z.infer<typeof AgentLearningOwner>;
64
+
65
+ export const AgentLearningSettings = /* @__PURE__ */ defineSchema(() =>
66
+ z
67
+ .object({
68
+ owner: AgentLearningOwner,
69
+ version: z.number().int().nonnegative(),
70
+ defaults: AgentLearningDefaults,
71
+ })
72
+ .strict(),
73
+ );
74
+ export type AgentLearningSettings = z.infer<typeof AgentLearningSettings>;
75
+
76
+ export const AgentLearningContextSettings = /* @__PURE__ */ defineSchema(() =>
77
+ z
78
+ .object({
79
+ context: AgentLearningContext,
80
+ version: z.number().int().nonnegative(),
81
+ overrides: AgentLearningOverrides,
82
+ })
83
+ .strict(),
84
+ );
85
+ export type AgentLearningContextSettings = z.infer<typeof AgentLearningContextSettings>;
86
+
87
+ /** Versioned settings returned by both central and contextual editors. */
88
+ export const AgentLearningSettingsRecord = /* @__PURE__ */ defineSchema(() =>
89
+ z.object({
90
+ ownerKey: z.string(),
91
+ contextKey: z.string(),
92
+ version: z.number().int().nonnegative(),
93
+ settings: AgentLearningOverrides,
94
+ }),
95
+ );
96
+ export type AgentLearningSettingsRecord = z.infer<typeof AgentLearningSettingsRecord>;
97
+ export const AgentLearningOverrideRecord = /* @__PURE__ */ defineSchema(() =>
98
+ z.object({
99
+ contextKey: z.string(),
100
+ version: z.number().int().positive(),
101
+ settings: AgentLearningOverrides,
102
+ updatedAt: z.string(),
103
+ label: z.string(),
104
+ }),
105
+ );
106
+ export type AgentLearningOverrideRecord = z.infer<typeof AgentLearningOverrideRecord>;
107
+ export type SaveAgentLearningSettingsRequest = {
108
+ scope: "workspace" | "personal";
109
+ source?: AgentLearningContext;
110
+ operationId: string;
111
+ expectedVersion: number;
112
+ settings: AgentLearningOverridePatch;
113
+ };
114
+
115
+ export const AgentLearningEffectiveCategory = /* @__PURE__ */ defineSchema(() =>
116
+ z
117
+ .object({
118
+ mode: AgentLearningMode,
119
+ inherited: z.boolean(),
120
+ })
121
+ .strict(),
122
+ );
123
+ export const AgentLearningEffectivePolicy = /* @__PURE__ */ defineSchema(() =>
124
+ z
125
+ .object({
126
+ knowledge: AgentLearningEffectiveCategory,
127
+ instructions: AgentLearningEffectiveCategory,
128
+ skills: AgentLearningEffectiveCategory,
129
+ })
130
+ .strict(),
131
+ );
132
+ export type AgentLearningEffectivePolicy = z.infer<typeof AgentLearningEffectivePolicy>;
133
+
134
+ /** Apply only at an authorized settings boundary; this function confers no authority. */
135
+ export function patchAgentLearningOverrides(
136
+ current: AgentLearningOverrides,
137
+ patch: AgentLearningOverridePatch,
138
+ ): AgentLearningOverrides {
139
+ const result = AgentLearningOverrides.parse(current);
140
+ const changes = AgentLearningOverridePatch.parse(patch);
141
+ for (const category of AgentLearningCategory.options) {
142
+ const value = changes[category];
143
+ if (value === "inherit") delete result[category];
144
+ else if (value !== undefined) result[category] = value;
145
+ }
146
+ return result;
147
+ }
148
+
149
+ /** Pure resolution over accepted settings. Runtime callers persist the resulting snapshot. */
150
+ export function resolveAgentLearningPolicy(
151
+ defaults: AgentLearningDefaults,
152
+ overrides: AgentLearningOverrides,
153
+ ): AgentLearningEffectivePolicy {
154
+ const base = AgentLearningDefaults.parse(defaults);
155
+ const context = AgentLearningOverrides.parse(overrides);
156
+ return Object.fromEntries(
157
+ AgentLearningCategory.options.map((category) => [
158
+ category,
159
+ { mode: context[category] ?? base[category], inherited: context[category] === undefined },
160
+ ]),
161
+ ) as AgentLearningEffectivePolicy;
162
+ }
163
+
164
+ /** Migration adapter preserves explicit opt-outs and existing instruction/Skill choices. */
165
+ export function agentLearningDefaultsFromLegacy(input: {
166
+ memoryEnabled?: boolean;
167
+ workspaceMode?: "off" | "suggest" | "automatic";
168
+ }): AgentLearningDefaults {
169
+ const parsed = z
170
+ .object({
171
+ memoryEnabled: z.boolean().optional(),
172
+ workspaceMode: z.enum(["off", "suggest", "automatic"]).optional(),
173
+ })
174
+ .strict()
175
+ .parse(input);
176
+ const behavior = parsed.workspaceMode ?? "suggest";
177
+ return {
178
+ knowledge: parsed.memoryEnabled === false ? "off" : "automatic",
179
+ instructions: behavior === "suggest" ? "review_first" : behavior,
180
+ skills: behavior === "suggest" ? "review_first" : behavior,
181
+ };
182
+ }
183
+
184
+ /** Existing instruction and Skill lifecycles retain their native mode vocabulary. */
185
+ export function agentLearningDestinationMode(mode: AgentLearningMode) {
186
+ const parsed = AgentLearningMode.parse(mode);
187
+ return parsed === "review_first" ? ("suggest" as const) : parsed;
188
+ }
@@ -1,3 +1,4 @@
1
+ import { defineSchema } from "./define-schema";
1
2
  import { z } from "zod";
2
3
 
3
4
  import {
@@ -8,62 +9,66 @@ import {
8
9
  import { WorkDiscoveryProjection } from "./work-claims";
9
10
 
10
11
  /** Compact, bounded session projection for workspace agent-topology browsers. */
11
- export const AgentTopologySession = z.object({
12
- id: z.string().uuid(),
13
- title: z.string().nullable(),
14
- titleTruncated: z.boolean(),
15
- parentSessionId: z.string().uuid().nullable(),
16
- rootSessionId: z.string().uuid(),
17
- nestedAgentDepth: NestedAgentDepthValue,
18
- ancestorPath: z.array(
19
- z.object({
20
- id: z.string().uuid(),
21
- title: z.string().nullable(),
22
- titleTruncated: z.boolean(),
23
- }),
24
- ),
25
- status: SessionStatus,
26
- goal: z
27
- .object({
28
- status: SessionGoalStatus,
29
- summary: z.string(),
30
- summaryTruncated: z.boolean(),
31
- })
32
- .nullable(),
33
- pause: z.object({
34
- state: z.enum(["active", "paused"]),
35
- additionalBlockerCount: z.number().int().nonnegative(),
36
- source: z
12
+ export const AgentTopologySession = /* @__PURE__ */ defineSchema(() =>
13
+ z.object({
14
+ id: z.string().uuid(),
15
+ title: z.string().nullable(),
16
+ titleTruncated: z.boolean(),
17
+ parentSessionId: z.string().uuid().nullable(),
18
+ rootSessionId: z.string().uuid(),
19
+ nestedAgentDepth: NestedAgentDepthValue,
20
+ ancestorPath: z.array(
21
+ z.object({
22
+ id: z.string().uuid(),
23
+ title: z.string().nullable(),
24
+ titleTruncated: z.boolean(),
25
+ }),
26
+ ),
27
+ status: SessionStatus,
28
+ goal: z
37
29
  .object({
38
- kind: z.enum(["session", "workspace"]),
39
- sessionId: z.string().uuid().optional(),
40
- displayName: z.string(),
41
- displayNameTruncated: z.boolean(),
30
+ status: SessionGoalStatus,
31
+ summary: z.string(),
32
+ summaryTruncated: z.boolean(),
42
33
  })
43
34
  .nullable(),
35
+ pause: z.object({
36
+ state: z.enum(["active", "paused"]),
37
+ additionalBlockerCount: z.number().int().nonnegative(),
38
+ source: z
39
+ .object({
40
+ kind: z.enum(["session", "workspace"]),
41
+ sessionId: z.string().uuid().optional(),
42
+ displayName: z.string(),
43
+ displayNameTruncated: z.boolean(),
44
+ })
45
+ .nullable(),
46
+ }),
47
+ children: z.object({
48
+ directChildren: z.number().int().nonnegative(),
49
+ totalDescendants: z.number().int().nonnegative(),
50
+ runningDescendants: z.number().int().nonnegative(),
51
+ queuedDescendants: z.number().int().nonnegative(),
52
+ attentionDescendants: z.number().int().nonnegative(),
53
+ pausedDescendants: z.number().int().nonnegative(),
54
+ failedDescendants: z.number().int().nonnegative(),
55
+ truncated: z.boolean(),
56
+ }),
57
+ relatedWork: WorkDiscoveryProjection,
58
+ createdAt: z.string(),
59
+ updatedAt: z.string(),
44
60
  }),
45
- children: z.object({
46
- directChildren: z.number().int().nonnegative(),
47
- totalDescendants: z.number().int().nonnegative(),
48
- runningDescendants: z.number().int().nonnegative(),
49
- queuedDescendants: z.number().int().nonnegative(),
50
- attentionDescendants: z.number().int().nonnegative(),
51
- pausedDescendants: z.number().int().nonnegative(),
52
- failedDescendants: z.number().int().nonnegative(),
53
- truncated: z.boolean(),
54
- }),
55
- relatedWork: WorkDiscoveryProjection,
56
- createdAt: z.string(),
57
- updatedAt: z.string(),
58
- });
61
+ );
59
62
  export type AgentTopologySession = z.infer<typeof AgentTopologySession>;
60
63
 
61
- export const AgentTopologyPageResponse = z.object({
62
- sessions: z.array(AgentTopologySession),
63
- total: z.number().int().nonnegative(),
64
- hasMore: z.boolean(),
65
- /** Operator rollout decision for human advisory presentation. */
66
- humanAdvisoriesEnabled: z.boolean().optional(),
67
- nextCursor: z.string().nullable(),
68
- });
64
+ export const AgentTopologyPageResponse = /* @__PURE__ */ defineSchema(() =>
65
+ z.object({
66
+ sessions: z.array(AgentTopologySession),
67
+ total: z.number().int().nonnegative(),
68
+ hasMore: z.boolean(),
69
+ /** Operator rollout decision for human advisory presentation. */
70
+ humanAdvisoriesEnabled: z.boolean().optional(),
71
+ nextCursor: z.string().nullable(),
72
+ }),
73
+ );
69
74
  export type AgentTopologyPageResponse = z.infer<typeof AgentTopologyPageResponse>;
@@ -0,0 +1,81 @@
1
+ import type { AllowanceExhaustedRefusal } from "./usage-allowances";
2
+
3
+ const MESSAGE_MAX_UTF8_BYTES = 1_024;
4
+
5
+ function record(value: unknown): Record<string, unknown> | null {
6
+ return value !== null && typeof value === "object" && !Array.isArray(value)
7
+ ? (value as Record<string, unknown>)
8
+ : null;
9
+ }
10
+
11
+ /** Mirror the canonical offset datetime's calendar/time bounds without loading
12
+ * the schema runtime into synchronous browser/React Native session projection.
13
+ * Contract-parity tests guard this deliberately small, bounded wire leaf.
14
+ */
15
+ function resetTimestamp(value: unknown): value is string | null {
16
+ if (value === null) return true;
17
+ if (typeof value !== "string" || value.length > 64) return false;
18
+ const parts =
19
+ /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/.exec(
20
+ value,
21
+ );
22
+ if (!parts || !Number.isFinite(Date.parse(value))) return false;
23
+ const year = Number(parts[1]);
24
+ const month = Number(parts[2]);
25
+ const day = Number(parts[3]);
26
+ const leapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
27
+ const days = [31, leapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
28
+ return day <= days[month - 1]!;
29
+ }
30
+
31
+ /** Select only public refusal fields, including from an API error's details.
32
+ * LimitDecision's allowed:false and transport/SQL diagnostics never cross out.
33
+ */
34
+ export function parseAllowanceExhaustedRefusal(value: unknown): AllowanceExhaustedRefusal | null {
35
+ const source = record(value);
36
+ if (source?.code !== "allowance_exhausted") return null;
37
+ const fields = record(source.details) ?? source;
38
+ const scope = fields.scope;
39
+ const subjectId = scope === "member" ? fields.subjectId : undefined;
40
+ if (
41
+ typeof source.message !== "string" ||
42
+ (scope !== "workspace" && scope !== "member") ||
43
+ !resetTimestamp(fields.resetsAt) ||
44
+ (subjectId !== undefined &&
45
+ (typeof subjectId !== "string" ||
46
+ subjectId.length === 0 ||
47
+ subjectId.length > 1_024 ||
48
+ subjectId.includes("\0")))
49
+ ) {
50
+ return null;
51
+ }
52
+ const normalized = source.message
53
+ .slice(0, MESSAGE_MAX_UTF8_BYTES * 2)
54
+ .replace(/[\u0000-\u001f\u007f]+/g, " ")
55
+ .trim();
56
+ const bytes = new TextEncoder().encode(normalized.slice(0, MESSAGE_MAX_UTF8_BYTES * 2));
57
+ let end = Math.min(bytes.length, MESSAGE_MAX_UTF8_BYTES);
58
+ while (end > 0 && end < bytes.length && (bytes[end]! & 0xc0) === 0x80) end -= 1;
59
+ return {
60
+ code: "allowance_exhausted",
61
+ scope,
62
+ resetsAt: fields.resetsAt,
63
+ ...(typeof subjectId === "string" ? { subjectId } : {}),
64
+ message: new TextDecoder().decode(bytes.slice(0, end)).trim(),
65
+ };
66
+ }
67
+
68
+ /** Bounded, fixed remedies: a ceiling is not an exhausted billing source.
69
+ * Never interpolate arbitrary exception prose or a member identifier.
70
+ */
71
+ export function allowanceExhaustedMessage(refusal: AllowanceExhaustedRefusal): string {
72
+ const remedy =
73
+ refusal.scope === "workspace"
74
+ ? "The workspace usage allowance is exhausted. An organization administrator or a full-access organization API key can raise the workspace ceiling or add an allowance grant."
75
+ : "The member usage allowance is exhausted. A workspace administrator or a full-access organization API key can adjust the member ceiling.";
76
+ const reset =
77
+ refusal.resetsAt === null
78
+ ? "This allowance has no automatic reset."
79
+ : `It resets at ${new Date(refusal.resetsAt).toISOString().slice(0, 16).replace("T", " ")} UTC.`;
80
+ return `${remedy} ${reset}`;
81
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Wire grammar of the content-free analytics consent beacon
3
+ * (`POST /v1/analytics-consent`).
4
+ *
5
+ * When a person answers the web console's optional-analytics banner, the
6
+ * browser reports only the closed decision so the API can count choices in
7
+ * `opengeni_analytics_consent_total{decision}`. The count shows how much of
8
+ * the audience the consent-gated analytics providers never see. A report
9
+ * carries no identifier, URL, cookie, or user content, and the web client and
10
+ * the API route both validate against these exact values.
11
+ */
12
+ export const ANALYTICS_CONSENT_PATH = "/v1/analytics-consent";
13
+
14
+ export const ANALYTICS_CONSENT_DECISIONS = ["granted", "denied"] as const;
15
+ export type AnalyticsConsentDecision = (typeof ANALYTICS_CONSENT_DECISIONS)[number];
16
+
17
+ /** Largest accepted report body. A valid report is under 32 bytes. */
18
+ export const ANALYTICS_CONSENT_REPORT_MAX_BYTES = 128;
19
+
20
+ export type AnalyticsConsentReport = { decision: AnalyticsConsentDecision };
@@ -0,0 +1,28 @@
1
+ import { defineSchema } from "./define-schema";
2
+ import { z } from "zod";
3
+ import type { Permission } from "./permissions";
4
+
5
+ /** Optional creation alias for the developer_setup organization access tier. */
6
+ export const OrganizationApiKeyPreset = /* @__PURE__ */ defineSchema(() =>
7
+ z.enum(["developer_setup"]),
8
+ );
9
+ export type OrganizationApiKeyPreset = z.infer<typeof OrganizationApiKeyPreset>;
10
+
11
+ /**
12
+ * The current setup-route floor: workspace provisioning, configuration/cleanup,
13
+ * and explicit literal budget authority. workspace:admin also covers discovery and session/tool/
14
+ * schedule guards. It is broad authority, not setup-only, and never confers
15
+ * literal secrets:read. No account:admin, billing, or redundant read scopes.
16
+ */
17
+ export const DEVELOPER_SETUP_API_KEY_PRESET = {
18
+ id: "developer_setup",
19
+ label: "Developer setup",
20
+ description:
21
+ "Set up shared workspaces, tools and budgets. Includes broad workspace administration and expires after 24 hours. Can't manage API keys.",
22
+ permissions: [
23
+ "workspace:create",
24
+ "workspace:admin",
25
+ "usage_allowances:manage",
26
+ ] satisfies Permission[],
27
+ defaultExpiryHours: 24,
28
+ } as const;
@@ -0,0 +1,82 @@
1
+ import { defineSchema } from "./define-schema";
2
+ import { z } from "zod";
3
+ import { RetainedArtifactReferenceSchema } from "./retained-output";
4
+
5
+ export const ArtifactCatalogKind = /* @__PURE__ */ defineSchema(() =>
6
+ z.enum(["site", "document", "spreadsheet", "presentation", "image", "file"]),
7
+ );
8
+ export type ArtifactCatalogKind = z.infer<typeof ArtifactCatalogKind>;
9
+
10
+ /** Metadata only: native domain IDs, never content, storage keys or credentials. */
11
+ export const ArtifactCatalogItem = /* @__PURE__ */ defineSchema(() =>
12
+ z
13
+ .object({
14
+ id: z.string().min(1).max(128),
15
+ kind: ArtifactCatalogKind,
16
+ title: z.string().min(1).max(1024),
17
+ createdAt: z.string().datetime({ offset: true }),
18
+ updatedAt: z.string().datetime({ offset: true }),
19
+ status: z.enum(["active", "archived"]),
20
+ /** Shared workspace metadata, not content-access authority. */
21
+ pinned: z.boolean().optional(),
22
+ /** Sites only: "private" when only its owner (the viewer) can see it. */
23
+ visibility: z.enum(["private", "workspace"]).optional(),
24
+ sourceSessionId: z.string().uuid().optional(),
25
+ versionId: z.string().min(1).max(128).optional(),
26
+ file: RetainedArtifactReferenceSchema.optional(),
27
+ filename: z.string().max(1024).optional(),
28
+ contentType: z.string().max(127).optional(),
29
+ sizeBytes: z.number().int().nonnegative().safe().optional(),
30
+ })
31
+ .strict(),
32
+ );
33
+ export type ArtifactCatalogItem = z.infer<typeof ArtifactCatalogItem>;
34
+
35
+ export const ArtifactCatalogListQuery = /* @__PURE__ */ defineSchema(() =>
36
+ z
37
+ .object({
38
+ sourceSessionId: z.string().uuid().optional(),
39
+ q: z
40
+ .string()
41
+ .trim()
42
+ .max(200)
43
+ .refine((value) => !value.includes("\0"))
44
+ .optional(),
45
+ kind: ArtifactCatalogKind.optional(),
46
+ sort: z.enum(["updated", "newest", "title"]).default("updated"),
47
+ status: z.enum(["active", "archived"]).default("active"),
48
+ limit: z.coerce.number().int().min(1).max(100).default(50),
49
+ cursor: z.string().min(1).max(8192).optional(),
50
+ })
51
+ .strict(),
52
+ );
53
+ export type ArtifactCatalogListQuery = z.infer<typeof ArtifactCatalogListQuery>;
54
+ export type ArtifactCatalogListOptions = Omit<z.input<typeof ArtifactCatalogListQuery>, "limit"> & {
55
+ limit?: number;
56
+ };
57
+
58
+ export const ArtifactCatalogListResponse = /* @__PURE__ */ defineSchema(() =>
59
+ z
60
+ .object({
61
+ items: z.array(ArtifactCatalogItem).max(100),
62
+ nextCursor: z.string().max(8192).nullable(),
63
+ })
64
+ .strict(),
65
+ );
66
+ export type ArtifactCatalogListResponse = z.infer<typeof ArtifactCatalogListResponse>;
67
+
68
+ export const UpdateArtifactPinRequest = /* @__PURE__ */ defineSchema(() =>
69
+ z.object({ pinned: z.boolean() }).strict(),
70
+ );
71
+ export type UpdateArtifactPinRequest = z.infer<typeof UpdateArtifactPinRequest>;
72
+
73
+ export const ArtifactPinResponse = /* @__PURE__ */ defineSchema(() =>
74
+ z
75
+ .object({
76
+ kind: ArtifactCatalogKind,
77
+ artifactId: z.string().min(1).max(128),
78
+ pinned: z.boolean(),
79
+ })
80
+ .strict(),
81
+ );
82
+ export type ArtifactPinResponse = z.infer<typeof ArtifactPinResponse>;