@opengeni/contracts 0.50.0 → 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 (369) 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 +26 -12
  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/chunk-2ACYHZFB.js +292 -0
  25. package/dist/chunk-2ACYHZFB.js.map +1 -0
  26. package/dist/chunk-2VORLN2R.js +353 -0
  27. package/dist/chunk-2VORLN2R.js.map +1 -0
  28. package/dist/{chunk-Y3MLSLB4.js → chunk-3SIZGL3O.js} +42 -30
  29. package/dist/chunk-3SIZGL3O.js.map +1 -0
  30. package/dist/chunk-46KLD2UH.js +186 -0
  31. package/dist/chunk-46KLD2UH.js.map +1 -0
  32. package/dist/chunk-4JGHSSB7.js +11 -0
  33. package/dist/chunk-4JGHSSB7.js.map +1 -0
  34. package/dist/{chunk-M5ZGRVIQ.js → chunk-5IXYF6XN.js} +14 -5
  35. package/dist/chunk-5IXYF6XN.js.map +1 -0
  36. package/dist/chunk-BCS7WHCK.js +139 -0
  37. package/dist/chunk-BCS7WHCK.js.map +1 -0
  38. package/dist/chunk-EK7NDGFR.js +128 -0
  39. package/dist/chunk-EK7NDGFR.js.map +1 -0
  40. package/dist/{chunk-5UDNP7AO.js → chunk-FZ6BXQHL.js} +78 -38
  41. package/dist/chunk-FZ6BXQHL.js.map +1 -0
  42. package/dist/{chunk-CM6BMECR.js → chunk-GRG7PHWQ.js} +2 -1
  43. package/dist/chunk-GRG7PHWQ.js.map +1 -0
  44. package/dist/chunk-KHHZTBP7.js +11 -0
  45. package/dist/chunk-KHHZTBP7.js.map +1 -0
  46. package/dist/chunk-KR2V42UZ.js +187 -0
  47. package/dist/chunk-KR2V42UZ.js.map +1 -0
  48. package/dist/chunk-MZLBPKFE.js +168 -0
  49. package/dist/chunk-MZLBPKFE.js.map +1 -0
  50. package/dist/{chunk-LW7OH6CS.js → chunk-NRMCVHAU.js} +6 -5
  51. package/dist/chunk-NRMCVHAU.js.map +1 -0
  52. package/dist/{chunk-TZ6YEYN4.js → chunk-NVJMJWLL.js} +3 -1
  53. package/dist/chunk-NVJMJWLL.js.map +1 -0
  54. package/dist/chunk-O77VSFYZ.js +70 -0
  55. package/dist/chunk-O77VSFYZ.js.map +1 -0
  56. package/dist/chunk-PX3VCKAU.js +29 -0
  57. package/dist/chunk-PX3VCKAU.js.map +1 -0
  58. package/dist/chunk-QR5D2IQC.js +61 -0
  59. package/dist/chunk-QR5D2IQC.js.map +1 -0
  60. package/dist/chunk-RJ76DRPO.js +117 -0
  61. package/dist/chunk-RJ76DRPO.js.map +1 -0
  62. package/dist/chunk-RKX3NQYS.js +28 -0
  63. package/dist/chunk-RKX3NQYS.js.map +1 -0
  64. package/dist/{chunk-JBCIY7QD.js → chunk-SIOU2K4U.js} +45 -22
  65. package/dist/chunk-SIOU2K4U.js.map +1 -0
  66. package/dist/chunk-TSCDAGET.js +75 -0
  67. package/dist/chunk-TSCDAGET.js.map +1 -0
  68. package/dist/{chunk-LSB7GRLG.js → chunk-TXTQIYCV.js} +15 -11
  69. package/dist/chunk-TXTQIYCV.js.map +1 -0
  70. package/dist/chunk-X7ETVO4P.js +26544 -0
  71. package/dist/chunk-X7ETVO4P.js.map +1 -0
  72. package/dist/{chunk-CADSX6UN.js → chunk-Y3KNXVTD.js} +2 -2
  73. package/dist/chunk-YBW5JSA3.js +251 -0
  74. package/dist/chunk-YBW5JSA3.js.map +1 -0
  75. package/dist/chunk-YRXAWWCU.js +45 -0
  76. package/dist/chunk-YRXAWWCU.js.map +1 -0
  77. package/dist/claude-provider-account-authority.d.ts +18 -0
  78. package/dist/claude-subscription-oauth.d.ts +42 -0
  79. package/dist/claude-subscription-usage.d.ts +159 -0
  80. package/dist/client-error-report.d.ts +109 -0
  81. package/dist/client-error-report.js +87 -0
  82. package/dist/client-error-report.js.map +1 -0
  83. package/dist/code-search.d.ts +52 -0
  84. package/dist/code-search.js +40 -0
  85. package/dist/code-search.js.map +1 -0
  86. package/dist/company-brain-governed-writes.d.ts +475 -0
  87. package/dist/company-brain.d.ts +336 -0
  88. package/dist/company-profile.d.ts +566 -0
  89. package/dist/connect.d.ts +325 -0
  90. package/dist/connect.js +191 -0
  91. package/dist/connect.js.map +1 -0
  92. package/dist/connection-account-label.d.ts +2 -0
  93. package/dist/connection-account-label.js +35 -0
  94. package/dist/connection-account-label.js.map +1 -0
  95. package/dist/connection-authority.d.ts +193 -0
  96. package/dist/connection-authority.js +50 -0
  97. package/dist/connection-authority.js.map +1 -0
  98. package/dist/connector-attachments.d.ts +95 -0
  99. package/dist/connector-attachments.js +51 -0
  100. package/dist/connector-attachments.js.map +1 -0
  101. package/dist/connector-tool-permissions.d.ts +73 -0
  102. package/dist/direct-model-provider.d.ts +36 -0
  103. package/dist/editable-artifact-codec-registry.d.ts +16 -7
  104. package/dist/editable-artifact-codec-registry.js +18 -8
  105. package/dist/editable-artifact-committed-transaction.d.ts +2 -2
  106. package/dist/editable-artifact-committed-transaction.js +2 -2
  107. package/dist/editable-artifact-live.d.ts +11 -12
  108. package/dist/editable-artifact-live.js +110 -45
  109. package/dist/editable-artifact-live.js.map +1 -1
  110. package/dist/editable-artifact-serialized-commit.d.ts +2 -1
  111. package/dist/editable-artifact-serialized-commit.js +8 -7
  112. package/dist/editable-artifact-versions.d.ts +20 -5
  113. package/dist/editable-artifact-versions.js +23 -5
  114. package/dist/editable-artifacts.d.ts +2 -0
  115. package/dist/editable-artifacts.js +47 -35
  116. package/dist/external-identities.d.ts +784 -0
  117. package/dist/external-identities.js +44 -0
  118. package/dist/external-identities.js.map +1 -0
  119. package/dist/feedback.d.ts +51 -0
  120. package/dist/github-repository-contracts.d.ts +36 -0
  121. package/dist/github-repository-contracts.js +59 -0
  122. package/dist/github-repository-contracts.js.map +1 -0
  123. package/dist/github-repository.d.ts +14 -0
  124. package/dist/github-repository.js +36 -0
  125. package/dist/github-repository.js.map +1 -0
  126. package/dist/google-drive.d.ts +90 -1
  127. package/dist/google-drive.js +90 -16
  128. package/dist/google-drive.js.map +1 -1
  129. package/dist/governed-learning-activation.d.ts +154 -0
  130. package/dist/governed-learning-evaluator.d.ts +152 -0
  131. package/dist/host-mcp-bindings.d.ts +326 -0
  132. package/dist/host-mcp-bindings.js +252 -0
  133. package/dist/host-mcp-bindings.js.map +1 -0
  134. package/dist/image-generation.d.ts +1 -0
  135. package/dist/index.d.ts +32396 -11386
  136. package/dist/index.js +2198 -164
  137. package/dist/insights-usage.d.ts +877 -0
  138. package/dist/insights-usage.js +509 -0
  139. package/dist/insights-usage.js.map +1 -0
  140. package/dist/interaction.d.ts +344 -0
  141. package/dist/knowledge-entries.d.ts +982 -0
  142. package/dist/knowledge-preparation.d.ts +237 -0
  143. package/dist/knowledge.d.ts +197 -0
  144. package/dist/managed-auth-session-sets.d.ts +241 -0
  145. package/dist/managed-auth-session-sets.js +191 -0
  146. package/dist/managed-auth-session-sets.js.map +1 -0
  147. package/dist/managed-sign-in-methods.d.ts +56 -0
  148. package/dist/managed-sign-in-methods.js +46 -0
  149. package/dist/managed-sign-in-methods.js.map +1 -0
  150. package/dist/mcp-catalog-limits.d.ts +2 -0
  151. package/dist/mcp-endpoint.d.ts +7 -0
  152. package/dist/mcp-endpoint.js +9 -0
  153. package/dist/mcp-endpoint.js.map +1 -0
  154. package/dist/mcp-oauth.d.ts +71 -0
  155. package/dist/modal-native-proof-v2.d.ts +587 -0
  156. package/dist/modal-native-proof-v2.js +37 -0
  157. package/dist/modal-native-proof-v2.js.map +1 -0
  158. package/dist/model-availability.d.ts +15 -0
  159. package/dist/model-connection-access.d.ts +24 -0
  160. package/dist/model-context-inspector.d.ts +329 -0
  161. package/dist/model-display.d.ts +38 -0
  162. package/dist/model-display.js +134 -0
  163. package/dist/model-display.js.map +1 -0
  164. package/dist/model-picker-order.d.ts +25 -0
  165. package/dist/model-picker-order.js +42 -0
  166. package/dist/model-picker-order.js.map +1 -0
  167. package/dist/organization-access.d.ts +231 -0
  168. package/dist/organization-access.js +34 -0
  169. package/dist/organization-access.js.map +1 -0
  170. package/dist/organization-integration-policy.d.ts +27 -0
  171. package/dist/organization-membership-lifecycle.d.ts +1022 -0
  172. package/dist/organization-model-usage.d.ts +146 -0
  173. package/dist/organization-model-usage.js +67 -0
  174. package/dist/organization-model-usage.js.map +1 -0
  175. package/dist/organization-recovery.d.ts +337 -0
  176. package/dist/organization-recovery.js +37 -0
  177. package/dist/organization-recovery.js.map +1 -0
  178. package/dist/organization-usage.d.ts +138 -0
  179. package/dist/permissions.d.ts +54 -0
  180. package/dist/personal-github.d.ts +320 -0
  181. package/dist/personal-github.js +222 -0
  182. package/dist/personal-github.js.map +1 -0
  183. package/dist/plugin-discovery.d.ts +35 -0
  184. package/dist/plugin-discovery.js +7 -0
  185. package/dist/plugin-discovery.js.map +1 -0
  186. package/dist/preference-registry.d.ts +44 -1
  187. package/dist/product-analytics.d.ts +113 -0
  188. package/dist/product-lifecycle-facts.d.ts +73 -0
  189. package/dist/remember.d.ts +350 -0
  190. package/dist/retained-output.d.ts +8 -0
  191. package/dist/sandbox-file-artifacts.d.ts +57 -0
  192. package/dist/sandbox-provider-command.d.ts +113 -0
  193. package/dist/sandbox-recovery.d.ts +146 -0
  194. package/dist/sandbox-snapshots.d.ts +39 -0
  195. package/dist/session-final-reply.d.ts +6 -0
  196. package/dist/session-final-reply.js +9 -0
  197. package/dist/session-final-reply.js.map +1 -0
  198. package/dist/session-goal-reports.d.ts +21 -0
  199. package/dist/session-history-import.d.ts +947 -0
  200. package/dist/session-list-entries.d.ts +4 -0
  201. package/dist/session-list-entries.js +51 -0
  202. package/dist/session-list-entries.js.map +1 -0
  203. package/dist/session-mcp-projections.d.ts +215 -0
  204. package/dist/session-message-search.d.ts +68 -0
  205. package/dist/session-titles.d.ts +68 -0
  206. package/dist/session-titles.js +25 -0
  207. package/dist/session-titles.js.map +1 -0
  208. package/dist/session-topology-primitives.d.ts +22 -0
  209. package/dist/signup-attribution.d.ts +39 -0
  210. package/dist/site-request-headers.test.d.ts +1 -0
  211. package/dist/site-session-http.d.ts +11 -0
  212. package/dist/site-session-http.js +11 -0
  213. package/dist/site-session-http.js.map +1 -0
  214. package/dist/skill-catalog-context.d.ts +7 -0
  215. package/dist/skill-files.d.ts +12 -0
  216. package/dist/skill-metadata.d.ts +9 -0
  217. package/dist/skill-use.d.ts +61 -0
  218. package/dist/skills.d.ts +185 -0
  219. package/dist/slack-bot-scopes.d.ts +46 -21
  220. package/dist/slack-bot-scopes.js +14 -3
  221. package/dist/slack-rest-mcp.d.ts +31 -0
  222. package/dist/slack-rest-mcp.js +19 -0
  223. package/dist/slack-rest-mcp.js.map +1 -0
  224. package/dist/spreadsheet-artifact-commands.d.ts +2 -3
  225. package/dist/spreadsheet-artifact-commands.js +4 -2
  226. package/dist/spreadsheet-artifact-query.js +3 -2
  227. package/dist/subscription-account-pools.d.ts +292 -0
  228. package/dist/task-notes.d.ts +42 -1
  229. package/dist/tool-catalog.d.ts +286 -0
  230. package/dist/tool-result-spill.d.ts +16 -0
  231. package/dist/usage-allowances.d.ts +285 -0
  232. package/dist/usage-allowances.js +49 -0
  233. package/dist/usage-allowances.js.map +1 -0
  234. package/dist/video-generation.d.ts +3 -0
  235. package/dist/video-generation.js +1 -1
  236. package/dist/work-claims.d.ts +411 -0
  237. package/dist/workspace-instruction-policies.d.ts +94 -0
  238. package/dist/workspace-integration-wire.d.ts +36 -0
  239. package/dist/workspace-integration-wire.js +23 -0
  240. package/dist/workspace-integration-wire.js.map +1 -0
  241. package/dist/workspace-integrations.d.ts +948 -0
  242. package/dist/workspace-learning-administration.d.ts +289 -0
  243. package/dist/workspace-learning-policy.d.ts +1 -1
  244. package/dist/workspace-state.d.ts +85 -416
  245. package/dist/xai-provider-account-authority.d.ts +3 -0
  246. package/dist/xai-provider-account-authority.js +1 -1
  247. package/package.json +134 -1
  248. package/src/agent-authored-durable-text.ts +116 -0
  249. package/src/agent-config.ts +1527 -0
  250. package/src/agent-instruction-changes.ts +98 -0
  251. package/src/agent-learning.ts +161 -0
  252. package/src/agent-topology.ts +69 -0
  253. package/src/allowance-refusal.ts +81 -0
  254. package/src/analytics-consent-report.ts +20 -0
  255. package/src/api-key-presets.ts +25 -0
  256. package/src/artifact-catalog.ts +60 -0
  257. package/src/artifacts.ts +146 -18
  258. package/src/atlassian-native-retirement.ts +33 -0
  259. package/src/browser-storage.ts +10 -0
  260. package/src/bundled-skills.ts +73 -0
  261. package/src/claude-provider-account-authority.ts +12 -0
  262. package/src/claude-subscription-oauth.ts +62 -0
  263. package/src/claude-subscription-usage.ts +59 -0
  264. package/src/client-error-report.ts +184 -0
  265. package/src/code-search.ts +105 -0
  266. package/src/company-brain-governed-writes.ts +356 -0
  267. package/src/company-brain.ts +201 -0
  268. package/src/company-profile.ts +167 -1
  269. package/src/connect.ts +202 -0
  270. package/src/connection-account-label.ts +46 -0
  271. package/src/connection-authority.ts +213 -0
  272. package/src/connector-attachments.ts +327 -0
  273. package/src/connector-tool-permissions.ts +60 -0
  274. package/src/direct-model-provider.ts +98 -0
  275. package/src/editable-artifact-codec-registry.ts +55 -17
  276. package/src/editable-artifact-committed-transaction.ts +44 -31
  277. package/src/editable-artifact-live.ts +123 -57
  278. package/src/editable-artifact-serialized-commit.ts +2 -1
  279. package/src/editable-artifact-versions.ts +26 -5
  280. package/src/editable-artifacts.ts +2 -0
  281. package/src/external-identities.ts +285 -0
  282. package/src/feedback.ts +39 -0
  283. package/src/github-repository-contracts.ts +85 -0
  284. package/src/github-repository.ts +59 -0
  285. package/src/google-drive.ts +76 -4
  286. package/src/governed-learning-activation.ts +191 -0
  287. package/src/governed-learning-evaluator.ts +176 -0
  288. package/src/host-mcp-bindings.ts +298 -0
  289. package/src/image-generation.ts +8 -2
  290. package/src/index.ts +7093 -1466
  291. package/src/insights-usage.ts +679 -0
  292. package/src/interaction.ts +220 -5
  293. package/src/knowledge-entries.ts +375 -0
  294. package/src/knowledge-preparation.ts +50 -0
  295. package/src/knowledge.ts +134 -6
  296. package/src/managed-auth-session-sets.ts +253 -0
  297. package/src/managed-sign-in-methods.ts +37 -0
  298. package/src/mcp-catalog-limits.ts +2 -0
  299. package/src/mcp-endpoint.ts +30 -0
  300. package/src/mcp-oauth.ts +66 -0
  301. package/src/modal-native-proof-v2.ts +398 -0
  302. package/src/model-availability.ts +22 -0
  303. package/src/model-connection-access.ts +17 -0
  304. package/src/model-context-inspector.ts +139 -0
  305. package/src/model-display.ts +195 -0
  306. package/src/model-picker-order.ts +97 -0
  307. package/src/organization-access.ts +176 -0
  308. package/src/organization-integration-policy.ts +54 -0
  309. package/src/organization-membership-lifecycle.ts +559 -0
  310. package/src/organization-model-usage.ts +72 -0
  311. package/src/organization-recovery.ts +186 -0
  312. package/src/organization-usage.ts +79 -0
  313. package/src/permissions.ts +58 -0
  314. package/src/personal-github.ts +267 -0
  315. package/src/plugin-discovery.ts +33 -0
  316. package/src/preference-registry.ts +20 -1
  317. package/src/product-analytics.ts +253 -0
  318. package/src/product-lifecycle-facts.ts +121 -0
  319. package/src/remember.ts +243 -0
  320. package/src/retained-output.ts +20 -3
  321. package/src/sandbox-file-artifacts.ts +73 -0
  322. package/src/sandbox-provider-command.ts +82 -0
  323. package/src/sandbox-recovery.ts +116 -0
  324. package/src/sandbox-snapshots.ts +142 -0
  325. package/src/session-final-reply.ts +16 -0
  326. package/src/session-goal-reports.ts +55 -0
  327. package/src/session-history-import.ts +159 -0
  328. package/src/session-list-entries.ts +91 -0
  329. package/src/session-mcp-projections.ts +273 -0
  330. package/src/session-message-search.ts +54 -0
  331. package/src/session-titles.ts +467 -0
  332. package/src/session-topology-primitives.ts +21 -0
  333. package/src/signup-attribution.ts +81 -0
  334. package/src/site-request-headers.test.ts +28 -0
  335. package/src/site-session-http.ts +63 -0
  336. package/src/skill-catalog-context.ts +50 -0
  337. package/src/skill-files.ts +52 -0
  338. package/src/skill-metadata.ts +40 -0
  339. package/src/skill-use.ts +77 -0
  340. package/src/skills.ts +136 -0
  341. package/src/slack-bot-scopes.ts +106 -42
  342. package/src/slack-rest-mcp.ts +194 -0
  343. package/src/spreadsheet-artifact-commands.ts +12 -13
  344. package/src/subscription-account-pools.ts +44 -0
  345. package/src/task-notes.ts +14 -1
  346. package/src/tool-catalog.ts +155 -0
  347. package/src/tool-result-spill.ts +35 -0
  348. package/src/usage-allowances.ts +187 -0
  349. package/src/work-claims.ts +266 -0
  350. package/src/workspace-instruction-policies.ts +31 -0
  351. package/src/workspace-integration-wire.ts +99 -0
  352. package/src/workspace-integrations.ts +640 -0
  353. package/src/workspace-learning-administration.ts +88 -0
  354. package/src/workspace-learning-policy.ts +4 -3
  355. package/src/workspace-state.ts +16 -126
  356. package/src/xai-provider-account-authority.ts +1 -0
  357. package/dist/chunk-5UDNP7AO.js.map +0 -1
  358. package/dist/chunk-BVGIYW7D.js +0 -11
  359. package/dist/chunk-BVGIYW7D.js.map +0 -1
  360. package/dist/chunk-CM6BMECR.js.map +0 -1
  361. package/dist/chunk-JBCIY7QD.js.map +0 -1
  362. package/dist/chunk-LSB7GRLG.js.map +0 -1
  363. package/dist/chunk-LW7OH6CS.js.map +0 -1
  364. package/dist/chunk-M5ZGRVIQ.js.map +0 -1
  365. package/dist/chunk-Q6A7XT2N.js +0 -16734
  366. package/dist/chunk-Q6A7XT2N.js.map +0 -1
  367. package/dist/chunk-TZ6YEYN4.js.map +0 -1
  368. package/dist/chunk-Y3MLSLB4.js.map +0 -1
  369. /package/dist/{chunk-CADSX6UN.js.map → chunk-Y3KNXVTD.js.map} +0 -0
@@ -45,6 +45,13 @@ const opaqueGeneration = z
45
45
  .min(1)
46
46
  .max(256)
47
47
  .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u);
48
+ // Native bridge generations use unpadded base64url; both - and _ can lead.
49
+ // Keep the bytes unchanged: generation equality fences old connections.
50
+ const attachedBridgeGeneration = z
51
+ .string()
52
+ .min(1)
53
+ .max(256)
54
+ .regex(/^[A-Za-z0-9_-][A-Za-z0-9._:-]*$/u);
48
55
  const boundedOpaqueId = z
49
56
  .string()
50
57
  .min(1)
@@ -202,6 +209,11 @@ export const BrowserSessionCapabilities = z
202
209
  .strict();
203
210
  export type BrowserSessionCapabilities = z.infer<typeof BrowserSessionCapabilities>;
204
211
 
212
+ /** Versioned persistent discriminator for experimental disposable contexts. */
213
+ export { EPHEMERAL_CHROMIUM_DRIVER_ID, browserSessionStorageMode } from "./browser-storage";
214
+ export const BrowserStorageMode = z.enum(["private_profile", "ephemeral_context"]);
215
+ export type BrowserStorageMode = z.infer<typeof BrowserStorageMode>;
216
+
205
217
  export const BrowserSession = z
206
218
  .object({
207
219
  id: z.string().uuid(),
@@ -309,7 +321,7 @@ export type AttachedBrowserDeviceAnnouncement = z.infer<typeof AttachedBrowserDe
309
321
 
310
322
  export const AttachedBrowserInventorySnapshot = z
311
323
  .object({
312
- bridgeGeneration: opaqueGeneration,
324
+ bridgeGeneration: attachedBridgeGeneration,
313
325
  revision: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
314
326
  devices: z.array(AttachedBrowserDeviceAnnouncement).max(10_000),
315
327
  })
@@ -364,9 +376,25 @@ export const AttachedBrowserDevice = z
364
376
  });
365
377
  export type AttachedBrowserDevice = z.infer<typeof AttachedBrowserDevice>;
366
378
 
379
+ /** One enrolled machine agent currently reporting its browser-bridge inventory.
380
+ * A bridge with zero devices is operational but has no Chrome profile connected
381
+ * through the OpenGeni extension yet. */
382
+ export const AttachedBrowserBridge = z
383
+ .object({
384
+ enrollmentId: z.string().uuid(),
385
+ state: z.enum(["online", "offline"]),
386
+ bridgeGeneration: attachedBridgeGeneration,
387
+ inventoryRevision: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
388
+ connectedProfileCount: z.number().int().nonnegative().max(10_000),
389
+ lastSeenAt: z.string().datetime({ offset: true }),
390
+ })
391
+ .strict();
392
+ export type AttachedBrowserBridge = z.infer<typeof AttachedBrowserBridge>;
393
+
367
394
  export const AttachedBrowserDeviceListResponse = z
368
395
  .object({
369
396
  revision: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
397
+ bridges: z.array(AttachedBrowserBridge).max(10_000),
370
398
  devices: z.array(AttachedBrowserDevice).max(10_000),
371
399
  })
372
400
  .strict();
@@ -1800,6 +1828,18 @@ export const BrowserObservation = z
1800
1828
  frameId: opaqueGeneration.nullable(),
1801
1829
  semantic: z.union([InteractionSemanticSnapshot, InteractionSemanticDiff]).nullable(),
1802
1830
  screenshot: RetainedArtifactReferenceSchema.nullable(),
1831
+ viewport: z
1832
+ .object({
1833
+ width: z.number().int().positive(),
1834
+ height: z.number().int().positive(),
1835
+ visualWidth: z.number().positive(),
1836
+ visualHeight: z.number().positive(),
1837
+ deviceScaleFactor: z.number().positive(),
1838
+ maxTouchPoints: z.number().int().nonnegative(),
1839
+ })
1840
+ .strict()
1841
+ .nullable()
1842
+ .optional(),
1803
1843
  focusedRef: boundedOpaqueId.nullable(),
1804
1844
  changedRegions: z.array(InteractionRect).max(INTERACTION_MAX_CHANGED_NODES),
1805
1845
  diagnostics: InteractionDiagnosticSummary,
@@ -1868,6 +1908,90 @@ export const BrowserLocator = z.discriminatedUnion("kind", [
1868
1908
  ]);
1869
1909
  export type BrowserLocator = z.infer<typeof BrowserLocator>;
1870
1910
 
1911
+ /** Cheap causal state for a target. This is intentionally independent of an
1912
+ * accessibility observation, which can require a full tree for every frame. */
1913
+ export const BrowserTargetState = z
1914
+ .object({
1915
+ browserSessionId: z.string().uuid(),
1916
+ controllerGeneration: opaqueGeneration,
1917
+ targetId: boundedOpaqueId,
1918
+ targetGeneration: opaqueGeneration,
1919
+ documentGeneration: opaqueGeneration.nullable(),
1920
+ frameId: opaqueGeneration.nullable(),
1921
+ })
1922
+ .strict();
1923
+ export type BrowserTargetState = z.infer<typeof BrowserTargetState>;
1924
+
1925
+ export const BrowserDomSafeAttribute = z.enum([
1926
+ "href",
1927
+ "src",
1928
+ "alt",
1929
+ "title",
1930
+ "role",
1931
+ "aria-label",
1932
+ "aria-expanded",
1933
+ "aria-checked",
1934
+ "aria-selected",
1935
+ "placeholder",
1936
+ "type",
1937
+ "name",
1938
+ "data-testid",
1939
+ ]);
1940
+ export type BrowserDomSafeAttribute = z.infer<typeof BrowserDomSafeAttribute>;
1941
+
1942
+ export const BrowserDomReadSelector = z
1943
+ .string()
1944
+ .min(1)
1945
+ .max(8_192)
1946
+ .regex(/^[A-Za-z0-9_#.,\s>*-]+$/u);
1947
+
1948
+ /** DOM extraction avoids content-matching locators, which can probe redacted text. */
1949
+ export const BrowserDomReadLocator = z.discriminatedUnion("kind", [
1950
+ z.object({ kind: z.literal("ref"), ref: boundedOpaqueId }).strict(),
1951
+ z.object({ kind: z.literal("placeholder"), text: z.string().min(1).max(8_192) }).strict(),
1952
+ z.object({ kind: z.literal("test_id"), value: z.string().min(1).max(2_048) }).strict(),
1953
+ z.object({ kind: z.literal("css"), selector: BrowserDomReadSelector }).strict(),
1954
+ ]);
1955
+ export type BrowserDomReadLocator = z.infer<typeof BrowserDomReadLocator>;
1956
+
1957
+ const BrowserDomReadFence = z.object({
1958
+ expectedTargetGeneration: opaqueGeneration,
1959
+ expectedDocumentGeneration: opaqueGeneration,
1960
+ expectedFrameId: opaqueGeneration,
1961
+ });
1962
+
1963
+ /** A fixed, read-only query. The caller never supplies executable JavaScript.
1964
+ * CSS reads accept only simple tag, class, id, descendant, and child selectors
1965
+ * so predicate queries cannot probe protected attribute values. CSS count is
1966
+ * scoped to the target's main document; child frames and shadow roots are not
1967
+ * part of its count. */
1968
+ export const BrowserDomReadRequest = z.discriminatedUnion("kind", [
1969
+ BrowserDomReadFence.extend({
1970
+ kind: z.literal("element"),
1971
+ locator: BrowserDomReadLocator,
1972
+ attributes: z.array(BrowserDomSafeAttribute).max(13).optional(),
1973
+ maxChars: z.number().int().min(1).max(32_768).optional(),
1974
+ }).strict(),
1975
+ BrowserDomReadFence.extend({
1976
+ kind: z.literal("count"),
1977
+ selector: BrowserDomReadSelector,
1978
+ }).strict(),
1979
+ ]);
1980
+ export type BrowserDomReadRequest = z.infer<typeof BrowserDomReadRequest>;
1981
+
1982
+ export const BrowserDomReadResponse = BrowserTargetState.extend({
1983
+ kind: z.enum(["element", "count"]),
1984
+ count: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
1985
+ text: z.string().max(32_768).nullable().optional(),
1986
+ value: z.string().max(32_768).nullable().optional(),
1987
+ attributes: z
1988
+ .partialRecord(BrowserDomSafeAttribute, z.string().max(32_768).nullable())
1989
+ .optional(),
1990
+ redacted: z.enum(["password", "payment", "private", "policy"]).nullable().optional(),
1991
+ truncated: z.boolean(),
1992
+ }).strict();
1993
+ export type BrowserDomReadResponse = z.infer<typeof BrowserDomReadResponse>;
1994
+
1871
1995
  /** Provider-neutral locator for native accessibility trees. Native automation
1872
1996
  * identifiers are intentionally distinct from DOM selectors/test ids: AX,
1873
1997
  * AT-SPI, and UIA adapters resolve them inside the exact observed target. */
@@ -1926,6 +2050,17 @@ export type BrowserPermissionSetting = z.infer<typeof BrowserPermissionSetting>;
1926
2050
 
1927
2051
  const browserActionVariants = [
1928
2052
  z.object({ type: z.literal("navigate"), url: boundedUrl }).strict(),
2053
+ z.object({ type: z.literal("history"), direction: z.enum(["back", "forward"]) }).strict(),
2054
+ z.object({ type: z.literal("activate") }).strict(),
2055
+ z
2056
+ .object({
2057
+ type: z.literal("viewport"),
2058
+ width: z.number().int().min(240).max(4_096),
2059
+ height: z.number().int().min(240).max(4_096),
2060
+ mobile: z.boolean(),
2061
+ deviceScaleFactor: z.number().min(0.5).max(4).optional(),
2062
+ })
2063
+ .strict(),
1929
2064
  z
1930
2065
  .object({
1931
2066
  type: z.literal("click"),
@@ -2146,6 +2281,8 @@ export const BrowserActionBatch = z
2146
2281
  .object({
2147
2282
  type: z.literal("batch"),
2148
2283
  actions: z.array(BrowserAction).min(1).max(INTERACTION_MAX_ACTIONS_PER_BATCH),
2284
+ /** Revalidate the original document before each action; never follow navigation. */
2285
+ fenceEachAction: z.literal(true).optional(),
2149
2286
  })
2150
2287
  .strict()
2151
2288
  .superRefine((batch, context) => {
@@ -2162,6 +2299,41 @@ export const BrowserActionBatch = z
2162
2299
  });
2163
2300
  export type BrowserActionBatch = z.infer<typeof BrowserActionBatch>;
2164
2301
 
2302
+ /** Secret-safe projection of a connected-machine control failure carried in a
2303
+ * standard API error envelope. The outer envelope owns HTTP status, retryability,
2304
+ * and public request correlation; this preserves the exact failing control class
2305
+ * and optional inner request id without exposing subjects, local paths, or tokens. */
2306
+ export const InteractionControlFailureCode = z.enum([
2307
+ "unknown",
2308
+ "unsupported",
2309
+ "os",
2310
+ "not_found",
2311
+ "consent_required",
2312
+ "timeout",
2313
+ "draining",
2314
+ "protocol",
2315
+ "stream",
2316
+ "agent_offline",
2317
+ "fenced",
2318
+ "payload_too_large",
2319
+ ]);
2320
+ export type InteractionControlFailureCode = z.infer<typeof InteractionControlFailureCode>;
2321
+
2322
+ export const InteractionControlFailureDetails = z
2323
+ .object({
2324
+ interactionLayer: z.literal("connected_machine"),
2325
+ interactionSurface: z.enum(["browser", "computer"]),
2326
+ controlFailureCode: InteractionControlFailureCode,
2327
+ controlRequestId: z
2328
+ .string()
2329
+ .min(1)
2330
+ .max(128)
2331
+ .regex(/^[A-Za-z0-9._:-]+$/u)
2332
+ .optional(),
2333
+ })
2334
+ .strict();
2335
+ export type InteractionControlFailureDetails = z.infer<typeof InteractionControlFailureDetails>;
2336
+
2165
2337
  export const InteractionError = z
2166
2338
  .object({
2167
2339
  code: z.enum([
@@ -2205,8 +2377,10 @@ export const BrowserActionCommand = z
2205
2377
  expectedFrameId: opaqueGeneration.nullable(),
2206
2378
  actor: InteractionActor,
2207
2379
  /** Human live-control surfaces already receive the resulting pixels. They
2208
- * may omit the expensive semantic snapshot; agent actions keep it. */
2209
- observationMode: z.enum(["full", "none"]).optional(),
2380
+ * may omit the expensive semantic snapshot; agent actions keep it. The
2381
+ * negotiated input mode only observes a focused native dropdown after a
2382
+ * pointer click, and otherwise returns no observation. */
2383
+ observationMode: z.enum(["full", "none", "input"]).optional(),
2210
2384
  action: z.union([BrowserAction, BrowserActionBatch]),
2211
2385
  })
2212
2386
  .strict();
@@ -2334,6 +2508,7 @@ export const CreateBrowserSessionRequest = z
2334
2508
  name: z.string().trim().min(1).max(200).optional(),
2335
2509
  initialUrl: boundedUrl.optional(),
2336
2510
  headless: z.boolean().default(true),
2511
+ storageMode: BrowserStorageMode.default("private_profile"),
2337
2512
  /** Managed engine choice. Attached Chrome continues to derive its engine
2338
2513
  * from the selected device rather than accepting an impersonated value. */
2339
2514
  engine: z.enum(["chromium", "lightpanda"]).default("chromium"),
@@ -2345,6 +2520,23 @@ export const CreateBrowserSessionRequest = z
2345
2520
  })
2346
2521
  .strict()
2347
2522
  .superRefine((value, context) => {
2523
+ if (
2524
+ value.storageMode === "ephemeral_context" &&
2525
+ (!value.headless ||
2526
+ value.engine !== "chromium" ||
2527
+ value.identityId ||
2528
+ value.baseRevisionId ||
2529
+ value.networkRouteId ||
2530
+ value.linkedComputerSessionId ||
2531
+ (value.placement && value.placement.kind !== "sandbox_group"))
2532
+ ) {
2533
+ context.addIssue({
2534
+ code: "custom",
2535
+ path: ["storageMode"],
2536
+ message:
2537
+ "ephemeral contexts require headless managed sandbox Chromium without identity, revision, route or Computer",
2538
+ });
2539
+ }
2348
2540
  if (value.baseRevisionId && !value.identityId) {
2349
2541
  context.addIssue({
2350
2542
  code: "custom",
@@ -2502,11 +2694,16 @@ const DirectInteractionFrameStreamAttachment = z
2502
2694
  })
2503
2695
  .strict();
2504
2696
 
2697
+ /** Native tunnels offer `binary` + RFB + bearer (3). Docker and OpenSandbox
2698
+ * hide those on the API interaction frame-proxy, so the viewer sees `binary` +
2699
+ * the proxy grant (2). */
2505
2700
  const DirectComputerRfbAttachment = z
2506
2701
  .object({
2507
2702
  kind: z.literal("direct_rfb"),
2508
2703
  url: boundedUrl,
2509
- protocols: z.array(z.string().min(1).max(2_048)).length(3),
2704
+ protocols: z.array(z.string().min(1).max(2_048)).min(2).max(3),
2705
+ /** Absent on an older API means pixel viewing only. */
2706
+ inputAllowed: z.boolean().default(false),
2510
2707
  })
2511
2708
  .strict();
2512
2709
 
@@ -2554,6 +2751,8 @@ export const BrowserSessionAttachment = z
2554
2751
  controllerGeneration: opaqueGeneration,
2555
2752
  targetId: boundedOpaqueId,
2556
2753
  stream: BrowserFrameStreamAttachment,
2754
+ fencedInputBatches: z.literal(true).optional(),
2755
+ focusedInputObservations: z.literal(true).optional(),
2557
2756
  expiresAt: z.string().datetime({ offset: true }),
2558
2757
  })
2559
2758
  .strict();
@@ -2578,7 +2777,7 @@ export const BrowserActionRequest = z
2578
2777
  expectedTargetGeneration: opaqueGeneration,
2579
2778
  expectedDocumentGeneration: opaqueGeneration.nullable(),
2580
2779
  expectedFrameId: opaqueGeneration.nullable(),
2581
- observationMode: z.enum(["full", "none"]).default("full"),
2780
+ observationMode: z.enum(["full", "none", "input"]).default("full"),
2582
2781
  action: z.union([BrowserAction, BrowserActionBatch]),
2583
2782
  })
2584
2783
  .strict();
@@ -2742,6 +2941,8 @@ export const ComputerSessionCapabilities = z
2742
2941
  keyboardInput: z.boolean(),
2743
2942
  clipboard: z.boolean(),
2744
2943
  backgroundActions: z.boolean(),
2944
+ /** Raw window input stays in the background. Absent means foreground-only. */
2945
+ backgroundInput: z.boolean().optional(),
2745
2946
  parallelApps: z.boolean(),
2746
2947
  })
2747
2948
  .strict();
@@ -3106,12 +3307,26 @@ export const ComputerSessionAttachment = z
3106
3307
  computerSessionId: z.string().uuid(),
3107
3308
  controllerGeneration: opaqueGeneration,
3108
3309
  targetId: boundedOpaqueId,
3310
+ // Viewer posture only. Canonical actions still require live source authority.
3311
+ // Older API responses omit it; their existing action authorization remains.
3312
+ inputAllowed: z.boolean().optional(),
3109
3313
  stream: ComputerFrameStreamAttachment,
3110
3314
  expiresAt: z.string().datetime({ offset: true }),
3111
3315
  })
3112
3316
  .strict();
3113
3317
  export type ComputerSessionAttachment = z.infer<typeof ComputerSessionAttachment>;
3114
3318
 
3319
+ /** Caller-specific human input posture, independent of media/native capability.
3320
+ * It is a current-controller hint; every action still reauthorizes. */
3321
+ export const ComputerSessionInputPosture = z
3322
+ .object({
3323
+ computerSessionId: z.string().uuid(),
3324
+ controllerGeneration: opaqueGeneration,
3325
+ inputAllowed: z.boolean(),
3326
+ })
3327
+ .strict();
3328
+ export type ComputerSessionInputPosture = z.infer<typeof ComputerSessionInputPosture>;
3329
+
3115
3330
  export const ComputerSessionAttachmentRequest = z
3116
3331
  .object({
3117
3332
  targetId: boundedOpaqueId,