@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
@@ -0,0 +1,398 @@
1
+ import { z } from "zod";
2
+ import { ModalRouterProviderCommand } from "./sandbox-provider-command";
3
+
4
+ /** Secret-free descriptions for the NEW native proof protocol. Parsing any
5
+ * value below establishes correlation ONLY. It does not authenticate a host,
6
+ * native response, grant, election, capture, Start, or semantic continuation.
7
+ * Frozen reservation/journal v1 values are never adopted into this protocol. */
8
+ export const MODAL_NATIVE_PROOF_PROTOCOL_VERSION = 2 as const;
9
+ export const MODAL_NATIVE_FRESH_COMPILER_FINGERPRINT =
10
+ "db6d33c8a1142e5ffe3d1a130d8b9f9d819e46832ad0417d41d5606b7fe25ab1" as const;
11
+
12
+ const uuid = z.string().regex(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/u);
13
+ // Fresh readiness must round-trip through the retained original-command schema.
14
+ // Reuse its exact UUID domain; do not widen it or change the frozen compiler.
15
+ const commandExecId = uuid.pipe(ModalRouterProviderCommand.shape.execId);
16
+ const positive = z.number().int().positive().safe();
17
+ const nonnegative = z.number().int().nonnegative().safe();
18
+ const digest = z.string().regex(/^[a-f0-9]{64}$/u);
19
+ const empty = z.object({}).strict();
20
+ const noItems = z.tuple([]);
21
+ const entrypoint = z.tuple([z.literal("sleep"), z.literal("infinity")]);
22
+ const sourceSha = "bb830ded1925e1d927d1fc221b2329d961f9a57eafdd9a85bf13fb7cfc982599";
23
+
24
+ /** This entire profile is declared BEFORE even namespace lookup. It is a
25
+ * reviewed literal, not caller-selected defaults or an arbitrary self-hash. */
26
+ export const ModalNativeFreshNormalizationV1 = z
27
+ .object({
28
+ recipeId: z.literal("modal-native-fresh-v1"),
29
+ recipeRevision: z.literal(1),
30
+ schema: z.literal("modal.client.ModalClient/SandboxCreate"),
31
+ encoding: z.literal("modal-create-json-v1"),
32
+ sdkVersion: z.literal("0.9.0"),
33
+ sdkSourceSha256: z.literal(sourceSha),
34
+ entrypoint,
35
+ createWorkdir: z.literal("/tmp"),
36
+ env: empty,
37
+ mounts: noItems,
38
+ restore: z.null(),
39
+ idleTimeout: z.literal("unset"),
40
+ gpu: z.literal("unset"),
41
+ gpuProto: z
42
+ .object({ type: z.literal(0), count: z.literal(0), gpuType: z.literal("") })
43
+ .strict(),
44
+ cpuLimit: z.literal("unset"),
45
+ memoryLimit: z.literal("unset"),
46
+ pty: z.literal("unset"),
47
+ regions: z.literal("unset"),
48
+ proxy: z.literal("unset"),
49
+ readinessProbe: z.literal("unset"),
50
+ environmentVariables: z.literal("unset"),
51
+ network: z
52
+ .object({
53
+ access: z.literal("OPEN"),
54
+ outboundCidrs: noItems,
55
+ outboundDomains: noItems,
56
+ inboundCidrs: noItems,
57
+ i6pn: z.literal(false),
58
+ })
59
+ .strict(),
60
+ volumes: noItems,
61
+ cloudBucketMounts: noItems,
62
+ secrets: noItems,
63
+ ports: noItems,
64
+ cloud: z.literal(""),
65
+ verbose: z.literal(false),
66
+ includeOidcIdentityToken: z.literal(false),
67
+ experimentalOptions: empty,
68
+ experimentalOptionsV2: empty,
69
+ customDomain: z.literal(""),
70
+ })
71
+ .strict();
72
+ export type ModalNativeFreshNormalizationV1 = z.infer<typeof ModalNativeFreshNormalizationV1>;
73
+
74
+ function freezeLiteral<T>(value: T): T {
75
+ if (value !== null && typeof value === "object") {
76
+ for (const child of Object.values(value)) freezeLiteral(child);
77
+ Object.freeze(value);
78
+ }
79
+ return value;
80
+ }
81
+
82
+ /** Public, credential-free recipe data. The host must normatively select this
83
+ * literal before I/O; possessing a copy supplies no issuance provenance. */
84
+ export const MODAL_NATIVE_FRESH_NORMALIZATION_V1 = freezeLiteral(
85
+ ModalNativeFreshNormalizationV1.parse({
86
+ recipeId: "modal-native-fresh-v1",
87
+ recipeRevision: 1,
88
+ schema: "modal.client.ModalClient/SandboxCreate",
89
+ encoding: "modal-create-json-v1",
90
+ sdkVersion: "0.9.0",
91
+ sdkSourceSha256: sourceSha,
92
+ entrypoint: ["sleep", "infinity"],
93
+ createWorkdir: "/tmp",
94
+ env: {},
95
+ mounts: [],
96
+ restore: null,
97
+ idleTimeout: "unset",
98
+ gpu: "unset",
99
+ gpuProto: { type: 0, count: 0, gpuType: "" },
100
+ cpuLimit: "unset",
101
+ memoryLimit: "unset",
102
+ pty: "unset",
103
+ regions: "unset",
104
+ proxy: "unset",
105
+ readinessProbe: "unset",
106
+ environmentVariables: "unset",
107
+ network: {
108
+ access: "OPEN",
109
+ outboundCidrs: [],
110
+ outboundDomains: [],
111
+ inboundCidrs: [],
112
+ i6pn: false,
113
+ },
114
+ volumes: [],
115
+ cloudBucketMounts: [],
116
+ secrets: [],
117
+ ports: [],
118
+ cloud: "",
119
+ verbose: false,
120
+ includeOidcIdentityToken: false,
121
+ experimentalOptions: {},
122
+ experimentalOptionsV2: {},
123
+ customDomain: "",
124
+ }),
125
+ );
126
+
127
+ export const ModalNativePreparationRecipeV2 = z
128
+ .object({
129
+ version: z.literal(1),
130
+ recipeId: z.literal("modal-native-fresh-v1"),
131
+ recipeRevision: z.literal(1),
132
+ createWorkdir: z.literal("/tmp"),
133
+ entrypoint,
134
+ normalization: ModalNativeFreshNormalizationV1,
135
+ compilerFingerprint: z.literal(MODAL_NATIVE_FRESH_COMPILER_FINGERPRINT),
136
+ })
137
+ .strict();
138
+ export type ModalNativePreparationRecipeV2 = z.infer<typeof ModalNativePreparationRecipeV2>;
139
+
140
+ export const MODAL_NATIVE_PREPARATION_RECIPE_V2 = freezeLiteral(
141
+ ModalNativePreparationRecipeV2.parse({
142
+ version: 1,
143
+ recipeId: "modal-native-fresh-v1",
144
+ recipeRevision: 1,
145
+ createWorkdir: "/tmp",
146
+ entrypoint: ["sleep", "infinity"],
147
+ normalization: MODAL_NATIVE_FRESH_NORMALIZATION_V1,
148
+ compilerFingerprint: MODAL_NATIVE_FRESH_COMPILER_FINGERPRINT,
149
+ }),
150
+ );
151
+
152
+ /** Exactly the old reservation vocabulary, NOT an extension to its keys. */
153
+ export const ModalNativeFreshBlueprintV1 = z
154
+ .object({
155
+ version: z.literal(1),
156
+ adapterId: z.literal("modal-native-fresh-creator-reservation-v1"),
157
+ create: z
158
+ .object({
159
+ operationId: uuid,
160
+ appId: z.string().regex(/^ap-[A-Za-z0-9_-]{1,200}$/u),
161
+ imageId: z.string().regex(/^im-[A-Za-z0-9_-]{1,200}$/u),
162
+ cpu: z
163
+ .number()
164
+ .positive()
165
+ .max(128)
166
+ .refine(
167
+ (v) =>
168
+ Number.isSafeInteger(Math.trunc(v * 1000)) &&
169
+ Math.trunc(v * 1000) >= 1 &&
170
+ Math.trunc(v * 1000) / 1000 === v,
171
+ ),
172
+ memoryMiB: z.number().int().min(128).max(1048576).safe(),
173
+ timeoutSeconds: z.number().int().min(1).max(86400).safe(),
174
+ env: empty,
175
+ mounts: noItems,
176
+ })
177
+ .strict(),
178
+ restore: z.null(),
179
+ readiness: z
180
+ .object({
181
+ operationId: uuid,
182
+ execId: commandExecId,
183
+ commandArgs: z.tuple([z.literal("/bin/true")]),
184
+ workdir: z.literal("/tmp"),
185
+ env: empty,
186
+ })
187
+ .strict(),
188
+ publishOperationId: uuid,
189
+ cleanup: z
190
+ .object({ operationId: uuid, requires: z.literal("physical-terminal-proof") })
191
+ .strict(),
192
+ })
193
+ .strict();
194
+ export type ModalNativeFreshBlueprintV1 = z.infer<typeof ModalNativeFreshBlueprintV1>;
195
+
196
+ /** Full pre-election identity. routeEpoch is NOT the physical lease epoch;
197
+ * creatorId is NOT an elected owner or a replacement accepted attempt. */
198
+ export const ModalNativeOriginalScopeV2 = z
199
+ .object({
200
+ version: z.literal(2),
201
+ declarationId: uuid,
202
+ planId: uuid,
203
+ creatorId: uuid,
204
+ accountId: uuid,
205
+ workspaceId: uuid,
206
+ sessionId: uuid,
207
+ turnId: uuid,
208
+ attemptId: uuid,
209
+ executionGeneration: positive,
210
+ triggerEventId: uuid,
211
+ sandboxGroupId: uuid,
212
+ routeKind: z.literal("home"),
213
+ routeTargetId: z.null(),
214
+ routeEpoch: nonnegative,
215
+ })
216
+ .strict()
217
+ .refine((v) => v.creatorId !== v.attemptId && v.creatorId !== v.planId, {
218
+ message: "A declared creator is distinct from the accepted attempt and plan",
219
+ });
220
+ export type ModalNativeOriginalScopeV2 = z.infer<typeof ModalNativeOriginalScopeV2>;
221
+
222
+ /** References must resolve through the complete protected scope/config join.
223
+ * They are neither credentials nor canonical/native authentication receipts. */
224
+ export const ModalNativeConfigurationCaptureRefV2 = z
225
+ .object({ id: uuid, revision: positive })
226
+ .strict();
227
+ export type ModalNativeConfigurationCaptureRefV2 = z.infer<
228
+ typeof ModalNativeConfigurationCaptureRefV2
229
+ >;
230
+ export const ModalNativeProofGrantRefV2 = z.object({ id: uuid, epoch: positive }).strict();
231
+ export type ModalNativeProofGrantRefV2 = z.infer<typeof ModalNativeProofGrantRefV2>;
232
+ export const ModalNativeReservedLeaseRefV2 = z.object({ id: uuid, epoch: nonnegative }).strict();
233
+ export type ModalNativeReservedLeaseRefV2 = z.infer<typeof ModalNativeReservedLeaseRefV2>;
234
+
235
+ export const ModalNativePreparationDeclarationV2 = z
236
+ .object({
237
+ version: z.literal(2),
238
+ scope: ModalNativeOriginalScopeV2,
239
+ blueprint: ModalNativeFreshBlueprintV1,
240
+ preparationRecipe: ModalNativePreparationRecipeV2,
241
+ configurationCaptureRef: ModalNativeConfigurationCaptureRefV2,
242
+ proofGrantRef: ModalNativeProofGrantRefV2,
243
+ providerRecoveryCount: z.union([
244
+ z.literal(0),
245
+ z.literal(1),
246
+ z.literal(2),
247
+ z.literal(3),
248
+ z.literal(4),
249
+ z.literal(5),
250
+ ]),
251
+ namespaceState: z.literal("unbound"),
252
+ })
253
+ .strict()
254
+ .superRefine((v, ctx) => {
255
+ const ids = [
256
+ v.scope.planId,
257
+ v.scope.creatorId,
258
+ v.blueprint.create.operationId,
259
+ v.blueprint.readiness.operationId,
260
+ v.blueprint.readiness.execId,
261
+ v.blueprint.publishOperationId,
262
+ v.blueprint.cleanup.operationId,
263
+ ];
264
+ if (new Set(ids).size !== 7)
265
+ ctx.addIssue({
266
+ code: "custom",
267
+ message: "All seven supplied operation identities must be distinct",
268
+ });
269
+ });
270
+ export type ModalNativePreparationDeclarationV2 = z.infer<
271
+ typeof ModalNativePreparationDeclarationV2
272
+ >;
273
+
274
+ const safeEndpoint = z
275
+ .string()
276
+ .url()
277
+ .max(1024)
278
+ .refine(
279
+ (v) => {
280
+ try {
281
+ const url = new URL(v);
282
+ return (
283
+ url.protocol === "https:" && !url.username && !url.password && !url.search && !url.hash
284
+ );
285
+ } catch {
286
+ return false;
287
+ }
288
+ },
289
+ { message: "Only a credential-free captured HTTPS endpoint is supported" },
290
+ );
291
+
292
+ /** Separate bind-once append, linked to the SAME captured configuration and
293
+ * claim. This deliberately has no invented immutable provider-principal ID.
294
+ * Only a trusted native issuer + authenticated host ingress can attest it. */
295
+ export const ModalNativeNamespaceEvidenceV2 = z
296
+ .object({
297
+ version: z.literal(2),
298
+ scope: ModalNativeOriginalScopeV2,
299
+ configurationCaptureRef: ModalNativeConfigurationCaptureRefV2,
300
+ proofGrantRef: ModalNativeProofGrantRefV2,
301
+ claimId: uuid,
302
+ nonce: uuid,
303
+ claimRevision: positive,
304
+ recordRevision: positive,
305
+ captureId: uuid,
306
+ purpose: z.literal("original-namespace-read"),
307
+ reservation: ModalNativeReservedLeaseRefV2,
308
+ source: z.literal("modal-client-workspace-name-lookup-v1"),
309
+ responseField: z.enum(["workspaceName", "username"]),
310
+ binding: z
311
+ .object({
312
+ version: z.literal(1),
313
+ serverUrl: safeEndpoint,
314
+ workspaceName: z.string().min(1).max(200),
315
+ environment: z.string().max(200),
316
+ })
317
+ .strict(),
318
+ })
319
+ .strict();
320
+ export type ModalNativeNamespaceEvidenceV2 = z.infer<typeof ModalNativeNamespaceEvidenceV2>;
321
+
322
+ const claimFields = {
323
+ version: z.literal(2),
324
+ scope: ModalNativeOriginalScopeV2,
325
+ configurationCaptureRef: ModalNativeConfigurationCaptureRefV2,
326
+ proofGrantRef: ModalNativeProofGrantRefV2,
327
+ claimId: uuid,
328
+ nonce: uuid,
329
+ claimRevision: positive,
330
+ recordRevision: positive,
331
+ captureId: uuid,
332
+ expiresAt: z.string().datetime(),
333
+ };
334
+
335
+ /** Scheduling custody ONLY. No lease/task grant is fabricated to authorize
336
+ * this prerequisite lookup. A reserved lease supplies exclusion, not effects. */
337
+ export const ModalNativeNamespaceReadClaimV2 = z
338
+ .object({
339
+ ...claimFields,
340
+ purpose: z.literal("original-namespace-read"),
341
+ reservation: ModalNativeReservedLeaseRefV2,
342
+ })
343
+ .strict();
344
+ export type ModalNativeNamespaceReadClaimV2 = z.infer<typeof ModalNativeNamespaceReadClaimV2>;
345
+
346
+ /** Exact original router command and authoritative prior cursors; no retarget,
347
+ * new TaskGet adoption, legacy locator, PTY, Start, stdin or process-cancel API. */
348
+ export const ModalNativeOriginalCommandReadClaimV2 = z
349
+ .object({
350
+ ...claimFields,
351
+ purpose: z.literal("original-readiness-read"),
352
+ reservation: ModalNativeReservedLeaseRefV2,
353
+ physicalOwnerGeneration: positive,
354
+ operationId: uuid,
355
+ providerBindingKey: z.string().min(1).max(1024),
356
+ command: ModalRouterProviderCommand.refine((v) => v.pty !== true),
357
+ })
358
+ .strict();
359
+ export type ModalNativeOriginalCommandReadClaimV2 = z.infer<
360
+ typeof ModalNativeOriginalCommandReadClaimV2
361
+ >;
362
+
363
+ /** Preserve the actual runtime descriptor's encoding/fingerprint domain. This
364
+ * is passive protobuf PREFLIGHT, not the RPC's transmitted bytes or permission. */
365
+ export const ModalNativePreparedStartDescriptionV1 = z
366
+ .object({
367
+ taskId: z.string().min(1).max(200),
368
+ execId: commandExecId,
369
+ descriptorProtocol: z.literal("modal-prepared-start-descriptor"),
370
+ descriptorVersion: z.literal(1),
371
+ readinessRecipe: z.literal("modal-exec-readiness-bin-true-v1"),
372
+ readinessRecipeVersion: z.literal(1),
373
+ startMessage: z.literal("Start"),
374
+ rpcMethod: z.literal("/modal.task_command_router.TaskCommandRouter/TaskExecStart"),
375
+ encoderVersion: z.literal("protobufjs@7.6.5"),
376
+ preflight: z
377
+ .object({
378
+ encoding: z.literal("modal-start-protobuf-preflight-v1"),
379
+ sha256: digest,
380
+ byteLength: positive.max(1024 * 1024),
381
+ encoderFingerprint: z.string().regex(/^sha256:[a-f0-9]{64}$/u),
382
+ })
383
+ .strict(),
384
+ })
385
+ .strict();
386
+ export type ModalNativePreparedStartDescriptionV1 = z.infer<
387
+ typeof ModalNativePreparedStartDescriptionV1
388
+ >;
389
+
390
+ /** Host/native acquisition objects are intentionally NOT constructed here.
391
+ * Raw DTOs, copied refs and any schema-success result cannot mint those objects.
392
+ * Capture needs issuer-authenticated OWN bytes, the exact original claim and a
393
+ * durable capture key; unknown ACK reconciles that same key/acquisition. */
394
+ export type ModalNativeProofCaptureStatusV2 =
395
+ | { status: "committed"; captureId: string; receiptId: string; recordRevision: number }
396
+ | { status: "absent_fenced"; captureId: string }
397
+ | { status: "conflict"; captureId: string }
398
+ | { status: "unresolved"; captureId: string };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `details.code` on a 422 `validation_failed` envelope when the requested or
3
+ * stored model is not in the live model catalog (retired, removed, or never
4
+ * offered). Retrying the same request cannot succeed; the client must choose
5
+ * another model. Additive to the public error envelope: `code` stays
6
+ * `validation_failed` and the message keeps its historical text.
7
+ */
8
+ export const MODEL_UNAVAILABLE_ERROR_CODE = "model_unavailable" as const;
9
+
10
+ /** Typed cause for a model that is not selectable in the live catalog. */
11
+ export class ModelUnavailableError extends Error {
12
+ readonly code = MODEL_UNAVAILABLE_ERROR_CODE;
13
+
14
+ constructor(readonly modelId: string) {
15
+ super(`model is not available: ${modelId}`);
16
+ this.name = "ModelUnavailableError";
17
+ }
18
+ }
19
+
20
+ export function isModelUnavailableError(error: unknown): error is ModelUnavailableError {
21
+ return error instanceof ModelUnavailableError;
22
+ }
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+
3
+ export const ModelConnectionAccessPolicy = z
4
+ .object({
5
+ allowedModels: z.array(z.string().trim().min(1).max(256)).max(500).nullable(),
6
+ allowedWorkspaces: z.array(z.string().uuid()).max(500).nullable(),
7
+ allowPersonalWorkspaces: z.boolean(),
8
+ version: z.number().int().positive(),
9
+ })
10
+ .strict();
11
+
12
+ export const ModelConnectionAccessResponse = z.object({
13
+ policy: ModelConnectionAccessPolicy,
14
+ models: z.array(z.object({ id: z.string(), label: z.string() })),
15
+ workspaces: z.array(z.object({ id: z.string().uuid(), name: z.string() })),
16
+ personalWorkspacesSupported: z.boolean(),
17
+ });
@@ -0,0 +1,139 @@
1
+ import { z } from "zod";
2
+ import { AGENT_PROMPT_MODULE_IDS, AgentPromptModuleId } from "./agent-config";
3
+
4
+ export const MODEL_CONTEXT_SNAPSHOT_VERSION = 1 as const;
5
+ export const MODEL_CONTEXT_INSTRUCTIONS_MAX_UTF8_BYTES = 8 * 1024 * 1024;
6
+ export const MODEL_CONTEXT_SNAPSHOT_MAX_UTF8_BYTES = 16 * 1024 * 1024;
7
+ export const MODEL_CONTEXT_LAYER_MAX_COUNT = 16;
8
+ export const MODEL_CONTEXT_TOOL_MAX_COUNT = 2_048;
9
+ export const MODEL_CONTEXT_SKILL_MAX_COUNT = 1_024;
10
+
11
+ export const ModelContextInstructionLayerId = z.enum([
12
+ "skill_catalog",
13
+ "operational_contract",
14
+ "persona_and_core",
15
+ "workspace_governance",
16
+ "session_instructions",
17
+ "workspace_memory",
18
+ "codemode",
19
+ "code_search",
20
+ "git_bindings",
21
+ "builtin_skills",
22
+ "genesis_title",
23
+ "sdk_capability_instructions",
24
+ "sandbox_preamble",
25
+ "sandbox_filesystem",
26
+ "sent_system_instructions",
27
+ "identity",
28
+ ]);
29
+ export type ModelContextInstructionLayerId = z.infer<typeof ModelContextInstructionLayerId>;
30
+
31
+ /** One prompt module inside a layer (modular operational contract only). */
32
+ export const ModelContextInstructionModule = z
33
+ .object({
34
+ id: AgentPromptModuleId,
35
+ chars: z.number().int().nonnegative(),
36
+ })
37
+ .strict();
38
+ export type ModelContextInstructionModule = z.infer<typeof ModelContextInstructionModule>;
39
+
40
+ export const ModelContextInstructionLayer = z
41
+ .object({
42
+ id: ModelContextInstructionLayerId,
43
+ title: z.string().min(1).max(120),
44
+ content: z.string(),
45
+ utf8Bytes: z.number().int().nonnegative(),
46
+ estimatedTokens: z.number().int().nonnegative(),
47
+ // Composition-order prompt modules of a modular operational contract.
48
+ modules: z.array(ModelContextInstructionModule).max(AGENT_PROMPT_MODULE_IDS.length).optional(),
49
+ })
50
+ .strict();
51
+ export type ModelContextInstructionLayer = z.infer<typeof ModelContextInstructionLayer>;
52
+
53
+ export const ModelContextToolVisibility = z.enum(["eager", "searchable"]);
54
+ export type ModelContextToolVisibility = z.infer<typeof ModelContextToolVisibility>;
55
+
56
+ export const ModelContextTool = z
57
+ .object({
58
+ name: z.string().min(1).max(256),
59
+ type: z.string().min(1).max(64),
60
+ visibility: ModelContextToolVisibility,
61
+ description: z.string().max(16_384).optional(),
62
+ namespace: z.string().max(256).optional(),
63
+ schema: z.unknown().optional(),
64
+ utf8Bytes: z.number().int().nonnegative(),
65
+ estimatedTokens: z.number().int().nonnegative(),
66
+ })
67
+ .strict();
68
+ export type ModelContextTool = z.infer<typeof ModelContextTool>;
69
+
70
+ export const ModelContextSkillKind = z.enum([
71
+ "preference_descriptor",
72
+ "runtime_skill",
73
+ "native_tool_skill",
74
+ ]);
75
+ export type ModelContextSkillKind = z.infer<typeof ModelContextSkillKind>;
76
+
77
+ export const ModelContextSkill = z
78
+ .object({
79
+ kind: ModelContextSkillKind,
80
+ name: z.string().min(1).max(128),
81
+ description: z.string().max(8_192),
82
+ source: z.string().max(64).optional(),
83
+ path: z.string().max(1_024).optional(),
84
+ })
85
+ .strict();
86
+ export type ModelContextSkill = z.infer<typeof ModelContextSkill>;
87
+
88
+ export const ModelContextTokenCounts = z
89
+ .object({
90
+ instructions: z.number().int().nonnegative(),
91
+ tools: z.number().int().nonnegative(),
92
+ prefix: z.number().int().nonnegative(),
93
+ })
94
+ .strict();
95
+ export type ModelContextTokenCounts = z.infer<typeof ModelContextTokenCounts>;
96
+
97
+ export const ModelContextSnapshot = z
98
+ .object({
99
+ version: z.literal(MODEL_CONTEXT_SNAPSHOT_VERSION),
100
+ capturedAt: z.string().datetime(),
101
+ source: z.literal("model_request"),
102
+ requestIndex: z.number().int().nonnegative(),
103
+ instructions: z.string(),
104
+ // Absent on historical SDK-prefix captures. Never infer a wire payload.
105
+ providerRequest: z
106
+ .object({
107
+ provider: z.string(),
108
+ body: z.string().nullable(),
109
+ unavailableReason: z.string().optional(),
110
+ parts: z.array(
111
+ z
112
+ .object({
113
+ key: z.string(),
114
+ estimatedTokens: z.number().int().nonnegative().nullable(),
115
+ utf8Bytes: z.number().int().nonnegative(),
116
+ itemEstimatedTokens: z.array(z.number().int().nonnegative().nullable()).optional(),
117
+ })
118
+ .strict(),
119
+ ),
120
+ })
121
+ .strict()
122
+ .optional(),
123
+ layers: z.array(ModelContextInstructionLayer).max(MODEL_CONTEXT_LAYER_MAX_COUNT),
124
+ tools: z.array(ModelContextTool).max(MODEL_CONTEXT_TOOL_MAX_COUNT),
125
+ skills: z.array(ModelContextSkill).max(MODEL_CONTEXT_SKILL_MAX_COUNT),
126
+ tokens: ModelContextTokenCounts,
127
+ })
128
+ .strict();
129
+ export type ModelContextSnapshot = z.infer<typeof ModelContextSnapshot>;
130
+
131
+ export const SessionModelContextResponse = z
132
+ .object({
133
+ sessionId: z.string().uuid(),
134
+ attemptId: z.string().uuid().nullable(),
135
+ turnId: z.string().uuid().nullable(),
136
+ snapshot: ModelContextSnapshot.nullable(),
137
+ })
138
+ .strict();
139
+ export type SessionModelContextResponse = z.infer<typeof SessionModelContextResponse>;