@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,266 @@
1
+ import { z } from "zod";
2
+ import { normalizeAutomaticSessionTitle } from "./session-titles";
3
+
4
+ export const WORK_CLAIM_NAMESPACE_MAX_BYTES = 64;
5
+ export const WORK_CLAIM_CANONICAL_KEY_MAX_BYTES = 512;
6
+ export const WORK_CLAIM_DISPLAY_LABEL_MAX_BYTES = 256;
7
+ export const WORK_CLAIM_VERSION_VALUE_MAX_BYTES = 256;
8
+ export const WORK_CLAIM_ACTIVE_SESSION_CAP = 64;
9
+ export const WORK_CLAIM_DISCOVERY_LIMIT = 8;
10
+ export const WORK_CLAIM_DISCOVERY_DEFAULT_LIMIT = 4;
11
+ export const WORK_DISCOVERY_QUERY_MAX_CHARS = 200;
12
+ export const WORK_DISCOVERY_RECENT_HOURS_MAX = 24 * 365;
13
+
14
+ const utf8Bytes = (value: string): number => new TextEncoder().encode(value).byteLength;
15
+ const CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]/u;
16
+ const NAMESPACE_PATTERN = /^[a-z0-9](?:[a-z0-9._:-]{0,62}[a-z0-9])?$/u;
17
+
18
+ function boundedCanonicalText(maxBytes: number, label: string) {
19
+ return z
20
+ .string()
21
+ .min(1)
22
+ .superRefine((value, context) => {
23
+ if (value !== value.trim()) {
24
+ context.addIssue({
25
+ code: z.ZodIssueCode.custom,
26
+ message: `${label} must not have leading or trailing whitespace`,
27
+ });
28
+ }
29
+ if (value !== value.normalize("NFKC")) {
30
+ context.addIssue({
31
+ code: z.ZodIssueCode.custom,
32
+ message: `${label} must use canonical Unicode normalization`,
33
+ });
34
+ }
35
+ if (CONTROL_CHARACTERS.test(value)) {
36
+ context.addIssue({
37
+ code: z.ZodIssueCode.custom,
38
+ message: `${label} must not contain control characters`,
39
+ });
40
+ }
41
+ if (utf8Bytes(value) > maxBytes) {
42
+ context.addIssue({
43
+ code: z.ZodIssueCode.custom,
44
+ message: `${label} must be at most ${maxBytes} UTF-8 bytes`,
45
+ });
46
+ }
47
+ });
48
+ }
49
+
50
+ export function normalizeWorkClaimNamespace(value: string): string {
51
+ return value.normalize("NFKC").trim().toLowerCase();
52
+ }
53
+
54
+ export function normalizeWorkClaimCanonicalKey(value: string): string {
55
+ return value.normalize("NFKC").trim();
56
+ }
57
+
58
+ export function normalizeWorkClaimDisplayLabel(value: string): string | null {
59
+ const normalized = normalizeAutomaticSessionTitle(value);
60
+ if (!normalized || utf8Bytes(normalized) > WORK_CLAIM_DISPLAY_LABEL_MAX_BYTES) return null;
61
+ return normalized;
62
+ }
63
+
64
+ export const WorkClaimNamespace = z
65
+ .string()
66
+ .min(1)
67
+ .max(WORK_CLAIM_NAMESPACE_MAX_BYTES)
68
+ .regex(NAMESPACE_PATTERN)
69
+ .refine((value) => value === normalizeWorkClaimNamespace(value), {
70
+ message: "work claim namespace must already be canonical lowercase text",
71
+ });
72
+ export type WorkClaimNamespace = z.infer<typeof WorkClaimNamespace>;
73
+
74
+ export const WorkClaimCanonicalKey = boundedCanonicalText(
75
+ WORK_CLAIM_CANONICAL_KEY_MAX_BYTES,
76
+ "work claim canonical key",
77
+ );
78
+ export type WorkClaimCanonicalKey = z.infer<typeof WorkClaimCanonicalKey>;
79
+
80
+ export const WorkClaimDisplayLabel = z
81
+ .string()
82
+ .min(1)
83
+ .superRefine((value, context) => {
84
+ if (utf8Bytes(value) > WORK_CLAIM_DISPLAY_LABEL_MAX_BYTES) {
85
+ context.addIssue({
86
+ code: z.ZodIssueCode.custom,
87
+ message: `work claim display label must be at most ${WORK_CLAIM_DISPLAY_LABEL_MAX_BYTES} UTF-8 bytes`,
88
+ });
89
+ }
90
+ if (normalizeWorkClaimDisplayLabel(value) !== value) {
91
+ context.addIssue({
92
+ code: z.ZodIssueCode.custom,
93
+ message: "work claim display label must be a safe concise semantic label",
94
+ });
95
+ }
96
+ });
97
+ export type WorkClaimDisplayLabel = z.infer<typeof WorkClaimDisplayLabel>;
98
+
99
+ export const WorkClaimSubjectType = z.enum([
100
+ "repository",
101
+ "branch",
102
+ "pull_request",
103
+ "issue",
104
+ "artifact",
105
+ "release",
106
+ "ci_run",
107
+ "other",
108
+ ]);
109
+ export type WorkClaimSubjectType = z.infer<typeof WorkClaimSubjectType>;
110
+
111
+ export const WorkClaimRole = z.enum(["working", "reviewing", "monitoring", "delivering"]);
112
+ export type WorkClaimRole = z.infer<typeof WorkClaimRole>;
113
+
114
+ export const WorkClaimState = z.enum(["active", "released", "superseded", "stale"]);
115
+ export type WorkClaimState = z.infer<typeof WorkClaimState>;
116
+
117
+ export const WorkClaimProvenance = z.enum([
118
+ "explicit_agent",
119
+ "user_api",
120
+ "trusted_integration",
121
+ "session_resource",
122
+ "system_lifecycle",
123
+ ]);
124
+ export type WorkClaimProvenance = z.infer<typeof WorkClaimProvenance>;
125
+
126
+ export const WorkClaimVersionKind = z.enum([
127
+ "git_commit",
128
+ "branch_head",
129
+ "pull_request_head",
130
+ "artifact_version",
131
+ "release_version",
132
+ "ci_run",
133
+ "other",
134
+ ]);
135
+ export type WorkClaimVersionKind = z.infer<typeof WorkClaimVersionKind>;
136
+
137
+ export const WorkClaimVersionValue = boundedCanonicalText(
138
+ WORK_CLAIM_VERSION_VALUE_MAX_BYTES,
139
+ "work claim version value",
140
+ );
141
+ export type WorkClaimVersionValue = z.infer<typeof WorkClaimVersionValue>;
142
+
143
+ export const WorkClaimReleaseReason = z.enum([
144
+ "completed",
145
+ "cancelled",
146
+ "failed",
147
+ "superseded",
148
+ "no_longer_active",
149
+ "corrected",
150
+ "external_state_changed",
151
+ "other",
152
+ ]);
153
+ export type WorkClaimReleaseReason = z.infer<typeof WorkClaimReleaseReason>;
154
+
155
+ export const WorkClaimMutationKind = z.enum([
156
+ "created",
157
+ "updated",
158
+ "released",
159
+ "superseded",
160
+ "stale",
161
+ ]);
162
+ export type WorkClaimMutationKind = z.infer<typeof WorkClaimMutationKind>;
163
+
164
+ export const WorkClaim = z.object({
165
+ id: z.string().uuid(),
166
+ sessionId: z.string().uuid(),
167
+ rootSessionId: z.string().uuid(),
168
+ subject: z.object({
169
+ namespace: WorkClaimNamespace,
170
+ type: WorkClaimSubjectType,
171
+ canonicalKey: WorkClaimCanonicalKey,
172
+ displayLabel: WorkClaimDisplayLabel.nullable(),
173
+ }),
174
+ role: WorkClaimRole,
175
+ state: WorkClaimState,
176
+ revision: z.number().int().positive(),
177
+ provenance: WorkClaimProvenance,
178
+ version: z
179
+ .object({
180
+ kind: WorkClaimVersionKind,
181
+ value: WorkClaimVersionValue,
182
+ })
183
+ .nullable(),
184
+ observedAt: z.string().datetime({ offset: true }),
185
+ createdAt: z.string().datetime({ offset: true }),
186
+ updatedAt: z.string().datetime({ offset: true }),
187
+ settledAt: z.string().datetime({ offset: true }).nullable(),
188
+ });
189
+ export type WorkClaim = z.infer<typeof WorkClaim>;
190
+
191
+ export const WorkClaimMutationResult = z.object({
192
+ claim: WorkClaim,
193
+ mutation: WorkClaimMutationKind,
194
+ replayed: z.boolean(),
195
+ });
196
+ export type WorkClaimMutationResult = z.infer<typeof WorkClaimMutationResult>;
197
+
198
+ export const WorkClaimDiscoverySummary = WorkClaim.pick({
199
+ id: true,
200
+ sessionId: true,
201
+ subject: true,
202
+ role: true,
203
+ state: true,
204
+ revision: true,
205
+ provenance: true,
206
+ version: true,
207
+ observedAt: true,
208
+ updatedAt: true,
209
+ settledAt: true,
210
+ });
211
+ export type WorkClaimDiscoverySummary = z.infer<typeof WorkClaimDiscoverySummary>;
212
+
213
+ export const WorkClaimSubjectFilter = z
214
+ .object({
215
+ namespace: WorkClaimNamespace,
216
+ type: WorkClaimSubjectType,
217
+ canonicalKey: WorkClaimCanonicalKey,
218
+ })
219
+ .strict();
220
+ export type WorkClaimSubjectFilter = z.infer<typeof WorkClaimSubjectFilter>;
221
+
222
+ export const WorkDiscoveryMatchClass = z.enum(["exact_subject", "title", "goal", "fuzzy"]);
223
+ export type WorkDiscoveryMatchClass = z.infer<typeof WorkDiscoveryMatchClass>;
224
+
225
+ export const WorkDiscoveryMatchedField = z.enum([
226
+ "subject",
227
+ "title",
228
+ "goal",
229
+ "claim_key",
230
+ "claim_label",
231
+ ]);
232
+ export type WorkDiscoveryMatchedField = z.infer<typeof WorkDiscoveryMatchedField>;
233
+
234
+ /**
235
+ * Deliberately stable bands rather than a raw ranking score. Raw full-text or
236
+ * trigram values are query-relative and become a misleading cross-query API.
237
+ */
238
+ export const WorkDiscoveryScoreBand = z.enum(["exact", "strong", "related"]);
239
+ export type WorkDiscoveryScoreBand = z.infer<typeof WorkDiscoveryScoreBand>;
240
+
241
+ export const WorkDiscoveryMatch = z
242
+ .object({
243
+ class: WorkDiscoveryMatchClass,
244
+ field: WorkDiscoveryMatchedField,
245
+ scoreBand: WorkDiscoveryScoreBand,
246
+ claimId: z.string().uuid().nullable(),
247
+ })
248
+ .strict();
249
+ export type WorkDiscoveryMatch = z.infer<typeof WorkDiscoveryMatch>;
250
+
251
+ /**
252
+ * Provider-neutral related-work evidence. The two literal booleans are part of
253
+ * the wire contract so a consumer cannot accidentally present a claim as a
254
+ * lock, authorization grant, ownership transfer, or mandatory instruction.
255
+ */
256
+ export const WorkDiscoveryProjection = z
257
+ .object({
258
+ claims: z.array(WorkClaimDiscoverySummary).max(WORK_CLAIM_DISCOVERY_LIMIT),
259
+ claimsTruncated: z.boolean(),
260
+ match: WorkDiscoveryMatch.nullable(),
261
+ possibleOverlap: z.boolean(),
262
+ advisoryOnly: z.literal(true),
263
+ noAdditionalAccess: z.literal(true),
264
+ })
265
+ .strict();
266
+ export type WorkDiscoveryProjection = z.infer<typeof WorkDiscoveryProjection>;
@@ -15,6 +15,7 @@ export type WorkspaceInstructionPolicyScope = z.infer<typeof WorkspaceInstructio
15
15
 
16
16
  export const WorkspaceInstructionPolicyProvenanceSource = z.enum([
17
17
  "human",
18
+ "agent_learning",
18
19
  "onboarding",
19
20
  "knowledge_proposal",
20
21
  "legacy_import",
@@ -154,6 +155,16 @@ export const WorkspaceInstructionPolicyHead = z.object({
154
155
  });
155
156
  export type WorkspaceInstructionPolicyHead = z.infer<typeof WorkspaceInstructionPolicyHead>;
156
157
 
158
+ export const WorkspaceInstructionPolicyInactiveHead = z.object({
159
+ workspaceId: z.string().uuid(),
160
+ ...targetShape,
161
+ activationVersion: z.number().int().positive(),
162
+ deactivatedAt: z.string().datetime(),
163
+ });
164
+ export type WorkspaceInstructionPolicyInactiveHead = z.infer<
165
+ typeof WorkspaceInstructionPolicyInactiveHead
166
+ >;
167
+
157
168
  export const WorkspaceInstructionPolicySnapshotProvenance = z.object({
158
169
  source: WorkspaceInstructionPolicyProvenanceSource,
159
170
  sourceIdHash: z
@@ -230,6 +241,23 @@ export type WorkspaceInstructionPolicyActivationEvent = z.infer<
230
241
  typeof WorkspaceInstructionPolicyActivationEvent
231
242
  >;
232
243
 
244
+ export const WorkspaceInstructionPolicyDeactivationEvent = z.object({
245
+ id: z.string().uuid(),
246
+ operationId: z.string().uuid(),
247
+ accountId: z.string().uuid(),
248
+ workspaceId: z.string().uuid(),
249
+ ...targetShape,
250
+ type: z.literal("automatic_deactivate"),
251
+ activationVersion: z.number().int().positive(),
252
+ oldRevision: WorkspaceInstructionPolicyRevisionIdentity,
253
+ actorSubjectId: z.string().min(1),
254
+ reason: z.string().min(1).max(WORKSPACE_INSTRUCTION_POLICY_REASON_MAX_CHARS),
255
+ createdAt: z.string().datetime(),
256
+ });
257
+ export type WorkspaceInstructionPolicyDeactivationEvent = z.infer<
258
+ typeof WorkspaceInstructionPolicyDeactivationEvent
259
+ >;
260
+
233
261
  export const CreateWorkspaceInstructionPolicyDraftRequest = z
234
262
  .object({
235
263
  operationId: z.string().uuid().optional(),
@@ -279,7 +307,10 @@ export type WorkspaceInstructionPolicyListQuery = z.infer<
279
307
  export const WorkspaceInstructionPolicyListResponse = z.object({
280
308
  revisions: z.array(WorkspaceInstructionPolicyRevision),
281
309
  activeHeads: z.array(WorkspaceInstructionPolicyHead),
310
+ inactiveHeads: z.array(WorkspaceInstructionPolicyInactiveHead).default([]),
311
+ inactiveHeadsTruncated: z.boolean().default(false),
282
312
  activationEvents: z.array(WorkspaceInstructionPolicyActivationEvent),
313
+ deactivationEvents: z.array(WorkspaceInstructionPolicyDeactivationEvent).default([]),
283
314
  nextAfterRevision: z.number().int().positive().nullable(),
284
315
  });
285
316
  export type WorkspaceInstructionPolicyListResponse = z.infer<
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Dependency-free wire constants and the OpenGeni-Signature scheme shared by
3
+ * workspace webhooks and credential providers. Kept free of zod so browser and
4
+ * React Native bundles can verify signatures without the schema runtime.
5
+ */
6
+
7
+ export const WORKSPACE_WEBHOOK_EVENT_TYPES = [
8
+ "turn.completed",
9
+ "turn.failed",
10
+ "turn.cancelled",
11
+ "session.status.changed",
12
+ "session.requiresAction",
13
+ "session.humanInput.requested",
14
+ "usage.threshold_reached",
15
+ "usage.exhausted",
16
+ "usage.period_reset",
17
+ ] as const;
18
+
19
+ /**
20
+ * Sent only when an administrator presses "Send test event". It is never a
21
+ * subscribable type: every endpoint can receive it, and a receiver that does
22
+ * not care acknowledges it with any 2xx.
23
+ */
24
+ export const OPENGENI_WEBHOOK_TEST_EVENT_TYPE = "webhook.test";
25
+
26
+ /**
27
+ * The session, turn and attempt ids of a credential-provider test request
28
+ * (`purpose: "test"`). A test is not a run, so no real ids exist.
29
+ */
30
+ export const OPENGENI_TEST_REQUEST_NIL_ID = "00000000-0000-0000-0000-000000000000";
31
+
32
+ export const OPENGENI_SIGNATURE_HEADER = "OpenGeni-Signature";
33
+ export const OPENGENI_EVENT_ID_HEADER = "OpenGeni-Event-Id";
34
+ export const OPENGENI_DELIVERY_ID_HEADER = "OpenGeni-Delivery-Id";
35
+ export const OPENGENI_SIGNATURE_TOLERANCE_SECONDS = 300;
36
+
37
+ const encoder = new TextEncoder();
38
+
39
+ async function hmacSha256Hex(secret: string, message: string): Promise<string> {
40
+ const key = await crypto.subtle.importKey(
41
+ "raw",
42
+ encoder.encode(secret),
43
+ { name: "HMAC", hash: "SHA-256" },
44
+ false,
45
+ ["sign"],
46
+ );
47
+ const signature = new Uint8Array(await crypto.subtle.sign("HMAC", key, encoder.encode(message)));
48
+ return Array.from(signature, (byte) => byte.toString(16).padStart(2, "0")).join("");
49
+ }
50
+
51
+ function constantTimeEqualHex(left: string, right: string): boolean {
52
+ if (left.length !== right.length) return false;
53
+ let difference = 0;
54
+ for (let index = 0; index < left.length; index += 1) {
55
+ difference |= left.charCodeAt(index) ^ right.charCodeAt(index);
56
+ }
57
+ return difference === 0;
58
+ }
59
+
60
+ /**
61
+ * `OpenGeni-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<body>")>`.
62
+ * The timestamp is signed so a captured request cannot be replayed later.
63
+ */
64
+ export async function signOpenGeniPayload(
65
+ secret: string,
66
+ body: string,
67
+ timestampSeconds = Math.floor(Date.now() / 1000),
68
+ ): Promise<string> {
69
+ return `t=${timestampSeconds},v1=${await hmacSha256Hex(secret, `${timestampSeconds}.${body}`)}`;
70
+ }
71
+
72
+ export type VerifyOpenGeniSignatureInput = {
73
+ secret: string;
74
+ /** The exact raw request body, before JSON parsing. */
75
+ body: string;
76
+ /** The `OpenGeni-Signature` header value. */
77
+ signature: string | null | undefined;
78
+ toleranceSeconds?: number;
79
+ nowSeconds?: number;
80
+ };
81
+
82
+ export async function verifyOpenGeniSignature(
83
+ input: VerifyOpenGeniSignatureInput,
84
+ ): Promise<boolean> {
85
+ if (!input.signature) return false;
86
+ let timestamp: number | null = null;
87
+ const candidates: string[] = [];
88
+ for (const part of input.signature.split(",")) {
89
+ const [key, value] = part.trim().split("=", 2);
90
+ if (key === "t" && value && /^\d{1,12}$/.test(value)) timestamp = Number(value);
91
+ if (key === "v1" && value && /^[0-9a-f]{64}$/.test(value)) candidates.push(value);
92
+ }
93
+ if (timestamp === null || candidates.length === 0) return false;
94
+ const now = input.nowSeconds ?? Math.floor(Date.now() / 1000);
95
+ const tolerance = input.toleranceSeconds ?? OPENGENI_SIGNATURE_TOLERANCE_SECONDS;
96
+ if (Math.abs(now - timestamp) > tolerance) return false;
97
+ const expected = await hmacSha256Hex(input.secret, `${timestamp}.${input.body}`);
98
+ return candidates.some((candidate) => constantTimeEqualHex(candidate, expected));
99
+ }