@vertesia/common 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260806.125520Z

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 (552) hide show
  1. package/lib/Progress.d.ts.map +1 -1
  2. package/lib/Progress.js.map +1 -1
  3. package/lib/access-control-values.d.ts +98 -0
  4. package/lib/access-control-values.d.ts.map +1 -0
  5. package/lib/access-control-values.js +101 -0
  6. package/lib/access-control-values.js.map +1 -0
  7. package/lib/access-control.d.ts +22 -119
  8. package/lib/access-control.d.ts.map +1 -1
  9. package/lib/access-control.js +6 -78
  10. package/lib/access-control.js.map +1 -1
  11. package/lib/account-values.d.ts +53 -0
  12. package/lib/account-values.d.ts.map +1 -0
  13. package/lib/account-values.js +91 -0
  14. package/lib/account-values.js.map +1 -0
  15. package/lib/analytics.d.ts +12 -38
  16. package/lib/analytics.d.ts.map +1 -1
  17. package/lib/api-schemas/access-control.d.ts +215 -0
  18. package/lib/api-schemas/access-control.d.ts.map +1 -0
  19. package/lib/api-schemas/access-control.js +165 -0
  20. package/lib/api-schemas/access-control.js.map +1 -0
  21. package/lib/api-schemas/account.d.ts +101 -0
  22. package/lib/api-schemas/account.d.ts.map +1 -0
  23. package/lib/api-schemas/account.js +136 -0
  24. package/lib/api-schemas/account.js.map +1 -0
  25. package/lib/api-schemas/adapter.d.ts +80 -0
  26. package/lib/api-schemas/adapter.d.ts.map +1 -0
  27. package/lib/api-schemas/adapter.js +726 -0
  28. package/lib/api-schemas/adapter.js.map +1 -0
  29. package/lib/api-schemas/agent-runs.d.ts +3786 -0
  30. package/lib/api-schemas/agent-runs.d.ts.map +1 -0
  31. package/lib/api-schemas/agent-runs.js +1000 -0
  32. package/lib/api-schemas/agent-runs.js.map +1 -0
  33. package/lib/api-schemas/analytics.d.ts +86 -0
  34. package/lib/api-schemas/analytics.d.ts.map +1 -0
  35. package/lib/api-schemas/analytics.js +58 -0
  36. package/lib/api-schemas/analytics.js.map +1 -0
  37. package/lib/api-schemas/apikey.d.ts +231 -0
  38. package/lib/api-schemas/apikey.d.ts.map +1 -0
  39. package/lib/api-schemas/apikey.js +172 -0
  40. package/lib/api-schemas/apikey.js.map +1 -0
  41. package/lib/api-schemas/app-lifecycle.d.ts +1148 -0
  42. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
  43. package/lib/api-schemas/app-lifecycle.js +801 -0
  44. package/lib/api-schemas/app-lifecycle.js.map +1 -0
  45. package/lib/api-schemas/app-runtime.d.ts +10951 -0
  46. package/lib/api-schemas/app-runtime.d.ts.map +1 -0
  47. package/lib/api-schemas/app-runtime.js +874 -0
  48. package/lib/api-schemas/app-runtime.js.map +1 -0
  49. package/lib/api-schemas/apps.d.ts +271 -0
  50. package/lib/api-schemas/apps.d.ts.map +1 -0
  51. package/lib/api-schemas/apps.js +426 -0
  52. package/lib/api-schemas/apps.js.map +1 -0
  53. package/lib/api-schemas/audit-trail.d.ts +465 -0
  54. package/lib/api-schemas/audit-trail.d.ts.map +1 -0
  55. package/lib/api-schemas/audit-trail.js +218 -0
  56. package/lib/api-schemas/audit-trail.js.map +1 -0
  57. package/lib/api-schemas/bulk-operation.d.ts +104 -0
  58. package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
  59. package/lib/api-schemas/bulk-operation.js +66 -0
  60. package/lib/api-schemas/bulk-operation.js.map +1 -0
  61. package/lib/api-schemas/commands.d.ts +50 -0
  62. package/lib/api-schemas/commands.d.ts.map +1 -0
  63. package/lib/api-schemas/commands.js +58 -0
  64. package/lib/api-schemas/commands.js.map +1 -0
  65. package/lib/api-schemas/content.d.ts +3565 -0
  66. package/lib/api-schemas/content.d.ts.map +1 -0
  67. package/lib/api-schemas/content.js +854 -0
  68. package/lib/api-schemas/content.js.map +1 -0
  69. package/lib/api-schemas/cost-analytics.d.ts +300 -0
  70. package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
  71. package/lib/api-schemas/cost-analytics.js +218 -0
  72. package/lib/api-schemas/cost-analytics.js.map +1 -0
  73. package/lib/api-schemas/dashboard.d.ts +408 -0
  74. package/lib/api-schemas/dashboard.d.ts.map +1 -0
  75. package/lib/api-schemas/dashboard.js +311 -0
  76. package/lib/api-schemas/dashboard.js.map +1 -0
  77. package/lib/api-schemas/data-store.d.ts +1650 -0
  78. package/lib/api-schemas/data-store.d.ts.map +1 -0
  79. package/lib/api-schemas/data-store.js +504 -0
  80. package/lib/api-schemas/data-store.js.map +1 -0
  81. package/lib/api-schemas/document-processing.d.ts +1501 -0
  82. package/lib/api-schemas/document-processing.d.ts.map +1 -0
  83. package/lib/api-schemas/document-processing.js +312 -0
  84. package/lib/api-schemas/document-processing.js.map +1 -0
  85. package/lib/api-schemas/embeddings.d.ts +184 -0
  86. package/lib/api-schemas/embeddings.d.ts.map +1 -0
  87. package/lib/api-schemas/embeddings.js +102 -0
  88. package/lib/api-schemas/embeddings.js.map +1 -0
  89. package/lib/api-schemas/environment.d.ts +412 -0
  90. package/lib/api-schemas/environment.d.ts.map +1 -0
  91. package/lib/api-schemas/environment.js +170 -0
  92. package/lib/api-schemas/environment.js.map +1 -0
  93. package/lib/api-schemas/events.d.ts +4918 -0
  94. package/lib/api-schemas/events.d.ts.map +1 -0
  95. package/lib/api-schemas/events.js +888 -0
  96. package/lib/api-schemas/events.js.map +1 -0
  97. package/lib/api-schemas/files.d.ts +107 -0
  98. package/lib/api-schemas/files.d.ts.map +1 -0
  99. package/lib/api-schemas/files.js +137 -0
  100. package/lib/api-schemas/files.js.map +1 -0
  101. package/lib/api-schemas/group.d.ts +122 -0
  102. package/lib/api-schemas/group.d.ts.map +1 -0
  103. package/lib/api-schemas/group.js +142 -0
  104. package/lib/api-schemas/group.js.map +1 -0
  105. package/lib/api-schemas/index.d.ts +36 -0
  106. package/lib/api-schemas/index.d.ts.map +1 -0
  107. package/lib/api-schemas/index.js +36 -0
  108. package/lib/api-schemas/index.js.map +1 -0
  109. package/lib/api-schemas/indexing.d.ts +144 -0
  110. package/lib/api-schemas/indexing.d.ts.map +1 -0
  111. package/lib/api-schemas/indexing.js +217 -0
  112. package/lib/api-schemas/indexing.js.map +1 -0
  113. package/lib/api-schemas/integrations.d.ts +269 -0
  114. package/lib/api-schemas/integrations.d.ts.map +1 -0
  115. package/lib/api-schemas/integrations.js +335 -0
  116. package/lib/api-schemas/integrations.js.map +1 -0
  117. package/lib/api-schemas/interaction.d.ts +22456 -0
  118. package/lib/api-schemas/interaction.d.ts.map +1 -0
  119. package/lib/api-schemas/interaction.js +2071 -0
  120. package/lib/api-schemas/interaction.js.map +1 -0
  121. package/lib/api-schemas/invites.d.ts +162 -0
  122. package/lib/api-schemas/invites.d.ts.map +1 -0
  123. package/lib/api-schemas/invites.js +106 -0
  124. package/lib/api-schemas/invites.js.map +1 -0
  125. package/lib/api-schemas/oauth-server.d.ts +415 -0
  126. package/lib/api-schemas/oauth-server.d.ts.map +1 -0
  127. package/lib/api-schemas/oauth-server.js +193 -0
  128. package/lib/api-schemas/oauth-server.js.map +1 -0
  129. package/lib/api-schemas/oauth.d.ts +150 -0
  130. package/lib/api-schemas/oauth.d.ts.map +1 -0
  131. package/lib/api-schemas/oauth.js +148 -0
  132. package/lib/api-schemas/oauth.js.map +1 -0
  133. package/lib/api-schemas/parameters.d.ts +64 -0
  134. package/lib/api-schemas/parameters.d.ts.map +1 -0
  135. package/lib/api-schemas/parameters.js +246 -0
  136. package/lib/api-schemas/parameters.js.map +1 -0
  137. package/lib/api-schemas/process.d.ts +499 -0
  138. package/lib/api-schemas/process.d.ts.map +1 -0
  139. package/lib/api-schemas/process.js +817 -0
  140. package/lib/api-schemas/process.js.map +1 -0
  141. package/lib/api-schemas/project-configuration.d.ts +4900 -0
  142. package/lib/api-schemas/project-configuration.d.ts.map +1 -0
  143. package/lib/api-schemas/project-configuration.js +425 -0
  144. package/lib/api-schemas/project-configuration.js.map +1 -0
  145. package/lib/api-schemas/project.d.ts +7247 -0
  146. package/lib/api-schemas/project.d.ts.map +1 -0
  147. package/lib/api-schemas/project.js +185 -0
  148. package/lib/api-schemas/project.js.map +1 -0
  149. package/lib/api-schemas/prompt.d.ts +70 -0
  150. package/lib/api-schemas/prompt.d.ts.map +1 -0
  151. package/lib/api-schemas/prompt.js +77 -0
  152. package/lib/api-schemas/prompt.js.map +1 -0
  153. package/lib/api-schemas/quota.d.ts +90 -0
  154. package/lib/api-schemas/quota.d.ts.map +1 -0
  155. package/lib/api-schemas/quota.js +95 -0
  156. package/lib/api-schemas/quota.js.map +1 -0
  157. package/lib/api-schemas/registry.d.ts +98506 -0
  158. package/lib/api-schemas/registry.d.ts.map +1 -0
  159. package/lib/api-schemas/registry.js +2606 -0
  160. package/lib/api-schemas/registry.js.map +1 -0
  161. package/lib/api-schemas/schema-primitives.d.ts +5 -0
  162. package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
  163. package/lib/api-schemas/schema-primitives.js +11 -0
  164. package/lib/api-schemas/schema-primitives.js.map +1 -0
  165. package/lib/api-schemas/secrets.d.ts +497 -0
  166. package/lib/api-schemas/secrets.d.ts.map +1 -0
  167. package/lib/api-schemas/secrets.js +298 -0
  168. package/lib/api-schemas/secrets.js.map +1 -0
  169. package/lib/api-schemas/store.d.ts +22140 -0
  170. package/lib/api-schemas/store.d.ts.map +1 -0
  171. package/lib/api-schemas/store.js +557 -0
  172. package/lib/api-schemas/store.js.map +1 -0
  173. package/lib/api-schemas/sts.d.ts +166 -0
  174. package/lib/api-schemas/sts.d.ts.map +1 -0
  175. package/lib/api-schemas/sts.js +107 -0
  176. package/lib/api-schemas/sts.js.map +1 -0
  177. package/lib/api-schemas/task.d.ts +215 -0
  178. package/lib/api-schemas/task.d.ts.map +1 -0
  179. package/lib/api-schemas/task.js +95 -0
  180. package/lib/api-schemas/task.js.map +1 -0
  181. package/lib/api-schemas/tools.d.ts +111 -0
  182. package/lib/api-schemas/tools.d.ts.map +1 -0
  183. package/lib/api-schemas/tools.js +122 -0
  184. package/lib/api-schemas/tools.js.map +1 -0
  185. package/lib/api-schemas/user.d.ts +208 -0
  186. package/lib/api-schemas/user.d.ts.map +1 -0
  187. package/lib/api-schemas/user.js +180 -0
  188. package/lib/api-schemas/user.js.map +1 -0
  189. package/lib/api-schemas/view-execution.d.ts +3163 -0
  190. package/lib/api-schemas/view-execution.d.ts.map +1 -0
  191. package/lib/api-schemas/view-execution.js +172 -0
  192. package/lib/api-schemas/view-execution.js.map +1 -0
  193. package/lib/api-schemas/views.d.ts +5990 -0
  194. package/lib/api-schemas/views.d.ts.map +1 -0
  195. package/lib/api-schemas/views.js +396 -0
  196. package/lib/api-schemas/views.js.map +1 -0
  197. package/lib/api-schemas/workflow-runs.d.ts +2210 -0
  198. package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
  199. package/lib/api-schemas/workflow-runs.js +589 -0
  200. package/lib/api-schemas/workflow-runs.js.map +1 -0
  201. package/lib/apikey-values.d.ts +10 -0
  202. package/lib/apikey-values.d.ts.map +1 -0
  203. package/lib/apikey-values.js +11 -0
  204. package/lib/apikey-values.js.map +1 -0
  205. package/lib/apikey.d.ts +37 -36
  206. package/lib/apikey.d.ts.map +1 -1
  207. package/lib/apikey.js +5 -4
  208. package/lib/apikey.js.map +1 -1
  209. package/lib/apps.d.ts +142 -1172
  210. package/lib/apps.d.ts.map +1 -1
  211. package/lib/apps.js +4 -0
  212. package/lib/apps.js.map +1 -1
  213. package/lib/ask-user.d.ts +8 -1
  214. package/lib/ask-user.d.ts.map +1 -1
  215. package/lib/audit-trail.d.ts +20 -131
  216. package/lib/audit-trail.d.ts.map +1 -1
  217. package/lib/audit-trail.js.map +1 -1
  218. package/lib/browser-credentials.d.ts +11 -106
  219. package/lib/browser-credentials.d.ts.map +1 -1
  220. package/lib/common.d.ts +59 -81
  221. package/lib/common.d.ts.map +1 -1
  222. package/lib/cost-analytics.d.ts +14 -167
  223. package/lib/cost-analytics.d.ts.map +1 -1
  224. package/lib/cost-analytics.js.map +1 -1
  225. package/lib/data-platform.d.ts +122 -786
  226. package/lib/data-platform.d.ts.map +1 -1
  227. package/lib/data-platform.js +41 -61
  228. package/lib/data-platform.js.map +1 -1
  229. package/lib/email.d.ts +5 -17
  230. package/lib/email.d.ts.map +1 -1
  231. package/lib/email.js +0 -3
  232. package/lib/email.js.map +1 -1
  233. package/lib/embeddings.d.ts +14 -56
  234. package/lib/embeddings.d.ts.map +1 -1
  235. package/lib/environment.d.ts +22 -118
  236. package/lib/environment.d.ts.map +1 -1
  237. package/lib/environment.js +3 -0
  238. package/lib/environment.js.map +1 -1
  239. package/lib/facets.d.ts +4 -7
  240. package/lib/facets.d.ts.map +1 -1
  241. package/lib/group.d.ts +33 -39
  242. package/lib/group.d.ts.map +1 -1
  243. package/lib/group.js +0 -1
  244. package/lib/group.js.map +1 -1
  245. package/lib/index.d.ts +8 -0
  246. package/lib/index.d.ts.map +1 -1
  247. package/lib/index.js +1 -0
  248. package/lib/index.js.map +1 -1
  249. package/lib/integrations.d.ts +20 -108
  250. package/lib/integrations.d.ts.map +1 -1
  251. package/lib/integrations.js.map +1 -1
  252. package/lib/interaction-values.d.ts +11 -0
  253. package/lib/interaction-values.d.ts.map +1 -0
  254. package/lib/interaction-values.js +24 -0
  255. package/lib/interaction-values.js.map +1 -0
  256. package/lib/interaction.d.ts +88 -778
  257. package/lib/interaction.d.ts.map +1 -1
  258. package/lib/interaction.js +8 -12
  259. package/lib/interaction.js.map +1 -1
  260. package/lib/meters.d.ts +11 -7
  261. package/lib/meters.d.ts.map +1 -1
  262. package/lib/meters.js.map +1 -1
  263. package/lib/oauth-server.d.ts +33 -119
  264. package/lib/oauth-server.d.ts.map +1 -1
  265. package/lib/oauth.d.ts +14 -96
  266. package/lib/oauth.d.ts.map +1 -1
  267. package/lib/oauth.js +0 -4
  268. package/lib/oauth.js.map +1 -1
  269. package/lib/payload.d.ts +15 -38
  270. package/lib/payload.d.ts.map +1 -1
  271. package/lib/platform-event-validation.d.ts.map +1 -1
  272. package/lib/platform-event-validation.js +15 -2
  273. package/lib/platform-event-validation.js.map +1 -1
  274. package/lib/platform-event.d.ts +79 -464
  275. package/lib/platform-event.d.ts.map +1 -1
  276. package/lib/platform-event.js.map +1 -1
  277. package/lib/principal-context.d.ts +10 -15
  278. package/lib/principal-context.d.ts.map +1 -1
  279. package/lib/project-values.d.ts +24 -0
  280. package/lib/project-values.d.ts.map +1 -0
  281. package/lib/project-values.js +42 -0
  282. package/lib/project-values.js.map +1 -0
  283. package/lib/project.d.ts +56 -504
  284. package/lib/project.d.ts.map +1 -1
  285. package/lib/project.js +6 -76
  286. package/lib/project.js.map +1 -1
  287. package/lib/prompt.d.ts +20 -51
  288. package/lib/prompt.d.ts.map +1 -1
  289. package/lib/prompt.js.map +1 -1
  290. package/lib/query.d.ts +27 -88
  291. package/lib/query.d.ts.map +1 -1
  292. package/lib/rate-limiter.d.ts +19 -70
  293. package/lib/rate-limiter.d.ts.map +1 -1
  294. package/lib/rate-limiter.js +0 -3
  295. package/lib/rate-limiter.js.map +1 -1
  296. package/lib/refs.d.ts +3 -11
  297. package/lib/refs.d.ts.map +1 -1
  298. package/lib/refs.js.map +1 -1
  299. package/lib/roles/types.d.ts +14 -20
  300. package/lib/roles/types.d.ts.map +1 -1
  301. package/lib/roles/types.js +5 -9
  302. package/lib/roles/types.js.map +1 -1
  303. package/lib/runs.d.ts +6 -25
  304. package/lib/runs.d.ts.map +1 -1
  305. package/lib/schema-for-extraction.js.map +1 -1
  306. package/lib/secrets.d.ts +20 -105
  307. package/lib/secrets.d.ts.map +1 -1
  308. package/lib/store/agent-approval.d.ts +6 -15
  309. package/lib/store/agent-approval.d.ts.map +1 -1
  310. package/lib/store/agent-approval.js.map +1 -1
  311. package/lib/store/agent-run.d.ts +57 -358
  312. package/lib/store/agent-run.d.ts.map +1 -1
  313. package/lib/store/collections.d.ts +11 -63
  314. package/lib/store/collections.d.ts.map +1 -1
  315. package/lib/store/collections.js.map +1 -1
  316. package/lib/store/conversation-state.d.ts +61 -61
  317. package/lib/store/conversation-state.d.ts.map +1 -1
  318. package/lib/store/conversation-state.js +2 -0
  319. package/lib/store/conversation-state.js.map +1 -1
  320. package/lib/store/doc-analyzer.d.ts +9 -32
  321. package/lib/store/doc-analyzer.d.ts.map +1 -1
  322. package/lib/store/dsl-workflow.d.ts +37 -151
  323. package/lib/store/dsl-workflow.d.ts.map +1 -1
  324. package/lib/store/dsl-workflow.js.map +1 -1
  325. package/lib/store/editing-policy-schema.generated.d.ts +3 -0
  326. package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
  327. package/lib/store/editing-policy-schema.generated.js +28 -0
  328. package/lib/store/editing-policy-schema.generated.js.map +1 -0
  329. package/lib/store/grounded-extraction.d.ts +7 -104
  330. package/lib/store/grounded-extraction.d.ts.map +1 -1
  331. package/lib/store/grounded-extraction.js.map +1 -1
  332. package/lib/store/index.d.ts +2 -0
  333. package/lib/store/index.d.ts.map +1 -1
  334. package/lib/store/index.js +3 -0
  335. package/lib/store/index.js.map +1 -1
  336. package/lib/store/intake-policy-schema.generated.d.ts +3 -0
  337. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
  338. package/lib/store/intake-policy-schema.generated.js +1425 -0
  339. package/lib/store/intake-policy-schema.generated.js.map +1 -0
  340. package/lib/store/process-schema.d.ts +81 -1
  341. package/lib/store/process-schema.d.ts.map +1 -1
  342. package/lib/store/process-schema.js +79 -0
  343. package/lib/store/process-schema.js.map +1 -1
  344. package/lib/store/process-validation.d.ts.map +1 -1
  345. package/lib/store/process-validation.js +70 -2
  346. package/lib/store/process-validation.js.map +1 -1
  347. package/lib/store/process.d.ts +36 -125
  348. package/lib/store/process.d.ts.map +1 -1
  349. package/lib/store/process.js.map +1 -1
  350. package/lib/store/rendering.d.ts +9 -64
  351. package/lib/store/rendering.d.ts.map +1 -1
  352. package/lib/store/rendering.js.map +1 -1
  353. package/lib/store/schedule.d.ts +6 -6
  354. package/lib/store/schedule.d.ts.map +1 -1
  355. package/lib/store/store.d.ts +99 -701
  356. package/lib/store/store.d.ts.map +1 -1
  357. package/lib/store/store.js +4 -456
  358. package/lib/store/store.js.map +1 -1
  359. package/lib/store/task.d.ts +15 -59
  360. package/lib/store/task.d.ts.map +1 -1
  361. package/lib/store/task.js +0 -3
  362. package/lib/store/task.js.map +1 -1
  363. package/lib/store/workflow.d.ts +58 -516
  364. package/lib/store/workflow.d.ts.map +1 -1
  365. package/lib/store/workflow.js +31 -11
  366. package/lib/store/workflow.js.map +1 -1
  367. package/lib/sts-errors.d.ts +7 -0
  368. package/lib/sts-errors.d.ts.map +1 -0
  369. package/lib/sts-errors.js +11 -0
  370. package/lib/sts-errors.js.map +1 -0
  371. package/lib/sts-token-types.d.ts +13 -66
  372. package/lib/sts-token-types.d.ts.map +1 -1
  373. package/lib/sts-token-types.js.map +1 -1
  374. package/lib/tools.d.ts +8 -100
  375. package/lib/tools.d.ts.map +1 -1
  376. package/lib/transient-tokens-values.d.ts +11 -0
  377. package/lib/transient-tokens-values.d.ts.map +1 -0
  378. package/lib/transient-tokens-values.js +12 -0
  379. package/lib/transient-tokens-values.js.map +1 -0
  380. package/lib/transient-tokens.d.ts +15 -13
  381. package/lib/transient-tokens.d.ts.map +1 -1
  382. package/lib/transient-tokens.js +5 -5
  383. package/lib/transient-tokens.js.map +1 -1
  384. package/lib/user.d.ts +55 -156
  385. package/lib/user.d.ts.map +1 -1
  386. package/lib/user.js +2 -79
  387. package/lib/user.js.map +1 -1
  388. package/lib/versions.d.ts +34 -1
  389. package/lib/versions.d.ts.map +1 -1
  390. package/lib/versions.js +33 -0
  391. package/lib/versions.js.map +1 -1
  392. package/lib/vertesia-common.js +6 -2
  393. package/lib/vertesia-common.js.map +1 -1
  394. package/lib/view-configuration-validation.js.map +1 -1
  395. package/lib/view-query-validation.js.map +1 -1
  396. package/lib/view-validation-helpers.d.ts +1 -1
  397. package/lib/view-validation-helpers.d.ts.map +1 -1
  398. package/lib/views-schema.d.ts +51 -51
  399. package/lib/views-schema.d.ts.map +1 -1
  400. package/lib/views-validation.js.map +1 -1
  401. package/lib/views.d.ts +58 -314
  402. package/lib/views.d.ts.map +1 -1
  403. package/lib/views.js.map +1 -1
  404. package/lib/workflow-analytics.d.ts +10 -3
  405. package/lib/workflow-analytics.d.ts.map +1 -1
  406. package/package.json +14 -5
  407. package/src/access-control-values.ts +113 -0
  408. package/src/access-control.ts +33 -138
  409. package/src/account-values.ts +95 -0
  410. package/src/analytics.ts +18 -42
  411. package/src/api-schemas/access-control.contract.test.ts +209 -0
  412. package/src/api-schemas/access-control.ts +208 -0
  413. package/src/api-schemas/account.contract.test.ts +318 -0
  414. package/src/api-schemas/account.ts +150 -0
  415. package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
  416. package/src/api-schemas/adapter.ts +778 -0
  417. package/src/api-schemas/agent-runs.ts +1091 -0
  418. package/src/api-schemas/analytics.ts +65 -0
  419. package/src/api-schemas/apikey.contract.test.ts +270 -0
  420. package/src/api-schemas/apikey.ts +199 -0
  421. package/src/api-schemas/app-delete-summary.contract.test.ts +67 -0
  422. package/src/api-schemas/app-lifecycle.ts +900 -0
  423. package/src/api-schemas/app-runtime.ts +1022 -0
  424. package/src/api-schemas/apps.ts +484 -0
  425. package/src/api-schemas/audit-trail.ts +243 -0
  426. package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
  427. package/src/api-schemas/bulk-operation.ts +75 -0
  428. package/src/api-schemas/bundle-isolation.test.ts +80 -0
  429. package/src/api-schemas/commands.contract.test.ts +51 -0
  430. package/src/api-schemas/commands.ts +62 -0
  431. package/src/api-schemas/content.ts +952 -0
  432. package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
  433. package/src/api-schemas/cost-analytics.ts +235 -0
  434. package/src/api-schemas/dashboard.contract.test.ts +127 -0
  435. package/src/api-schemas/dashboard.ts +351 -0
  436. package/src/api-schemas/data-store.contract.test.ts +91 -0
  437. package/src/api-schemas/data-store.ts +571 -0
  438. package/src/api-schemas/document-processing.contract.test.ts +76 -0
  439. package/src/api-schemas/document-processing.ts +344 -0
  440. package/src/api-schemas/embeddings.ts +113 -0
  441. package/src/api-schemas/environment.contract.test.ts +184 -0
  442. package/src/api-schemas/environment.ts +190 -0
  443. package/src/api-schemas/events.ts +981 -0
  444. package/src/api-schemas/files.ts +159 -0
  445. package/src/api-schemas/group.contract.test.ts +205 -0
  446. package/src/api-schemas/group.ts +155 -0
  447. package/src/api-schemas/index.ts +35 -0
  448. package/src/api-schemas/indexing.contract.test.ts +83 -0
  449. package/src/api-schemas/indexing.ts +234 -0
  450. package/src/api-schemas/integrations.ts +369 -0
  451. package/src/api-schemas/interaction.contract.test.ts +27 -0
  452. package/src/api-schemas/interaction.ts +2364 -0
  453. package/src/api-schemas/invites.contract.test.ts +268 -0
  454. package/src/api-schemas/invites.ts +127 -0
  455. package/src/api-schemas/llumiverse.contract.test.ts +108 -0
  456. package/src/api-schemas/mcp-api-key.contract.test.ts +86 -0
  457. package/src/api-schemas/oauth-server.ts +219 -0
  458. package/src/api-schemas/oauth.contract.test.ts +118 -0
  459. package/src/api-schemas/oauth.ts +166 -0
  460. package/src/api-schemas/parameters.test.ts +402 -0
  461. package/src/api-schemas/parameters.ts +310 -0
  462. package/src/api-schemas/process.ts +929 -0
  463. package/src/api-schemas/project-configuration.ts +478 -0
  464. package/src/api-schemas/project.contract.test.ts +365 -0
  465. package/src/api-schemas/project.ts +214 -0
  466. package/src/api-schemas/prompt.ts +88 -0
  467. package/src/api-schemas/pruning-limits.test.ts +189 -0
  468. package/src/api-schemas/quota.contract.test.ts +147 -0
  469. package/src/api-schemas/quota.ts +122 -0
  470. package/src/api-schemas/registry-groups.test.ts +91 -0
  471. package/src/api-schemas/registry.ts +3512 -0
  472. package/src/api-schemas/response-pruning.test.ts +260 -0
  473. package/src/api-schemas/schema-primitives.ts +12 -0
  474. package/src/api-schemas/secrets.ts +332 -0
  475. package/src/api-schemas/store.contract.test.ts +471 -0
  476. package/src/api-schemas/store.ts +604 -0
  477. package/src/api-schemas/sts.contract.test.ts +112 -0
  478. package/src/api-schemas/sts.ts +123 -0
  479. package/src/api-schemas/task.ts +104 -0
  480. package/src/api-schemas/tools.ts +140 -0
  481. package/src/api-schemas/user.contract.test.ts +191 -0
  482. package/src/api-schemas/user.ts +204 -0
  483. package/src/api-schemas/view-execution.ts +200 -0
  484. package/src/api-schemas/views.ts +437 -0
  485. package/src/api-schemas/workflow-runs.ts +653 -0
  486. package/src/apikey-values.ts +10 -0
  487. package/src/apikey.ts +49 -40
  488. package/src/apps.test.ts +82 -0
  489. package/src/apps.ts +283 -1228
  490. package/src/ask-user.ts +9 -1
  491. package/src/audit-trail.ts +45 -137
  492. package/src/browser-credentials.ts +21 -106
  493. package/src/common.ts +67 -78
  494. package/src/cost-analytics.ts +37 -176
  495. package/src/data-platform.ts +205 -776
  496. package/src/email.ts +5 -17
  497. package/src/embeddings.ts +22 -60
  498. package/src/environment.ts +52 -126
  499. package/src/facets.ts +4 -7
  500. package/src/group.ts +38 -42
  501. package/src/index.ts +12 -0
  502. package/src/integrations.ts +39 -129
  503. package/src/interaction-values.ts +23 -0
  504. package/src/interaction.ts +162 -902
  505. package/src/meters.ts +11 -7
  506. package/src/oauth-server.ts +58 -127
  507. package/src/oauth.ts +24 -108
  508. package/src/payload.ts +25 -40
  509. package/src/platform-event-validation.test.ts +26 -0
  510. package/src/platform-event-validation.ts +15 -2
  511. package/src/platform-event.ts +141 -484
  512. package/src/principal-context.ts +11 -15
  513. package/src/project-values.ts +41 -0
  514. package/src/project.ts +116 -588
  515. package/src/prompt.ts +34 -61
  516. package/src/query.ts +34 -93
  517. package/src/rate-limiter.ts +27 -75
  518. package/src/refs.ts +4 -11
  519. package/src/roles/types.ts +20 -20
  520. package/src/runs.ts +11 -24
  521. package/src/secrets.ts +38 -117
  522. package/src/store/agent-approval.ts +9 -14
  523. package/src/store/agent-run.ts +93 -450
  524. package/src/store/collections.ts +21 -63
  525. package/src/store/content-type-editing.test.ts +1 -1
  526. package/src/store/conversation-state.ts +75 -64
  527. package/src/store/doc-analyzer.ts +17 -33
  528. package/src/store/dsl-workflow.ts +62 -158
  529. package/src/store/editing-policy-schema.generated.ts +30 -0
  530. package/src/store/grounded-extraction.ts +13 -104
  531. package/src/store/index.ts +3 -0
  532. package/src/store/intake-policy-schema.generated.ts +1442 -0
  533. package/src/store/process-schema.test.ts +43 -0
  534. package/src/store/process-schema.ts +79 -0
  535. package/src/store/process-validation.test.ts +141 -0
  536. package/src/store/process-validation.ts +82 -2
  537. package/src/store/process.ts +70 -146
  538. package/src/store/rendering.ts +15 -64
  539. package/src/store/store.ts +197 -1204
  540. package/src/store/task.ts +25 -59
  541. package/src/store/workflow.ts +103 -554
  542. package/src/sts-errors.ts +13 -0
  543. package/src/sts-token-types.ts +26 -75
  544. package/src/tools.ts +18 -97
  545. package/src/transient-tokens-values.ts +11 -0
  546. package/src/transient-tokens.ts +16 -13
  547. package/src/user.ts +75 -215
  548. package/src/versions.test.ts +13 -0
  549. package/src/versions.ts +36 -0
  550. package/src/views-schema.test.ts +9 -1
  551. package/src/views.ts +106 -329
  552. package/src/workflow-analytics.ts +10 -3
@@ -0,0 +1,471 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { Ajv } from 'ajv';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { ContentTypeIntakePolicySchema as GeneratedIntakePolicySchema } from '../store/intake-policy-schema.generated.js';
6
+ import type { ContentObjectTypeRef, ContentTypeIntakePolicy, IntakePageRanges } from '../store/store.js';
7
+ import type { JsonObject } from './adapter.js';
8
+ import { ApiSchemaComponents, bundleCanonicalComponent, validateApiResponse } from './registry.js';
9
+ import { ContentTypeIntakePolicySchema } from './store.js';
10
+
11
+ /** Exact type identity — `extends` in both directions is too weak (any/unknown slip through). */
12
+ type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
13
+ function assertType<T extends true>(_ok: T): void {}
14
+
15
+ /**
16
+ * The intake policy is now stated once, in Zod, and reaches its consumers three ways: as the
17
+ * published OpenAPI component, as the checked-in JSON artifact that zeno-server / the workflow tool /
18
+ * the web editor compiles, and as the TypeScript type. This file is the gate that keeps all three
19
+ * the same statement.
20
+ *
21
+ * It also pins the behaviour changes the conversion makes, because the schema it replaced was
22
+ * hand-written and disagreed with the contract in both directions. Each is asserted rather than
23
+ * described: the whole point of the migration is that a disagreement fails a build instead of
24
+ * shipping.
25
+ */
26
+ const ajv = new Ajv({ strict: false, allErrors: true });
27
+ const validate = ajv.compile<ContentTypeIntakePolicy>(GeneratedIntakePolicySchema);
28
+
29
+ function errors(): string {
30
+ return ajv.errorsText(validate.errors, { separator: '\n' });
31
+ }
32
+
33
+ /**
34
+ * Reads a file from the studio repository this package is a submodule of.
35
+ *
36
+ * `undefined` when it is not there, which is the normal state in this repository's own CI: it clones
37
+ * composableai alone, so nothing above the submodule root exists. Two of the gates below compare
38
+ * against the published document and the generated-client fixture, both of which live up there — so
39
+ * they are skipped when they cannot be read rather than failing the whole file at import time, which
40
+ * is what used to happen and what left this suite red on every commit.
41
+ *
42
+ * They still run where they are the actual gate: a checkout of the parent repository, which is what
43
+ * the migration's own verification and the studio CI use.
44
+ */
45
+ function readFromStudioRepo(relativePath: string): unknown {
46
+ try {
47
+ return JSON.parse(readFileSync(fileURLToPath(new URL(relativePath, import.meta.url)), 'utf8'));
48
+ } catch (error) {
49
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') return undefined;
50
+ throw error;
51
+ }
52
+ }
53
+
54
+ const publishedDocument = readFromStudioRepo('../../../../../packages/api-specs/vertesia-openapi.json') as
55
+ | { components: { schemas: Record<string, Record<string, unknown>> } }
56
+ | undefined;
57
+ const published = publishedDocument?.components.schemas ?? {};
58
+
59
+ /**
60
+ * The published component minus the OpenAPI-only discriminator hint the bundler drops.
61
+ *
62
+ * Written out here rather than imported from the registry on purpose: reusing the production
63
+ * function to check the production function would make the comparison below pass by construction.
64
+ * The rule is small enough to state twice, and stating it twice is what makes it a gate.
65
+ */
66
+ function withoutDiscriminatorHints(value: unknown): unknown {
67
+ if (Array.isArray(value)) return value.map(withoutDiscriminatorHints);
68
+ if (!value || typeof value !== 'object') return value;
69
+ const node = value as Record<string, unknown>;
70
+ const restated = node.discriminator !== undefined && node.properties === undefined;
71
+ return Object.fromEntries(
72
+ Object.entries(node)
73
+ .filter(([key]) => key !== 'discriminator' && !(restated && (key === 'type' || key === 'required')))
74
+ .map(([key, item]) => [key, withoutDiscriminatorHints(item)]),
75
+ );
76
+ }
77
+
78
+ function $defsOf(schema: unknown): unknown {
79
+ return (schema as { $defs: unknown }).$defs;
80
+ }
81
+
82
+ describe.skipIf(!publishedDocument)('gate — generated artifact = canonical component = published component', () => {
83
+ it('is the exact bundle the registry emits, so the artifact is compiled output', () => {
84
+ // Deep equality, not a spot check: the file is generated by `pnpm run gen:schemas` from this
85
+ // same function, so any difference means someone hand-edited it or forgot to regenerate.
86
+ expect(GeneratedIntakePolicySchema).toEqual(bundleCanonicalComponent('ContentTypeIntakePolicy'));
87
+ });
88
+
89
+ it('describes the same shape as the component the OpenAPI document publishes', () => {
90
+ // The artifact re-roots `#/components/schemas/X` to `#/$defs/X` so AJV and Monaco can compile
91
+ // it standalone. Undoing that is what makes the two directly comparable.
92
+ const { $defs, ...body } = GeneratedIntakePolicySchema as { $defs: Record<string, unknown> };
93
+ const rerooted = JSON.parse(JSON.stringify(body).replaceAll('#/$defs/', '#/components/schemas/'));
94
+ expect(rerooted).toEqual(withoutDiscriminatorHints(published.ContentTypeIntakePolicy));
95
+
96
+ // ...and every definition it carries is the published component of that name, so the bundle
97
+ // cannot describe a private variant of a shared type.
98
+ for (const [name, definition] of Object.entries($defs)) {
99
+ const asComponent = JSON.parse(JSON.stringify(definition).replaceAll('#/$defs/', '#/components/schemas/'));
100
+ expect(asComponent, `$defs.${name} disagrees with the published component`).toEqual(
101
+ withoutDiscriminatorHints(published[name]),
102
+ );
103
+ }
104
+ });
105
+
106
+ it('drops the discriminator hint the published component keeps, and only that', () => {
107
+ // The one place the artifact and the component are allowed to differ, pinned from both sides
108
+ // so neither can move alone. `synthesizeDiscriminator` restates `type` and `required` on the
109
+ // union node for the generated Java/Go clients; the node has no `properties`, and Gemini
110
+ // rejects the whole tool schema over it ("requires unspecified property '_option_id'") when
111
+ // the artifact reaches Vertex inside `create_or_update_type`'s input schema.
112
+ expect(published.ModelOptions).toMatchObject({
113
+ discriminator: { propertyName: '_option_id' },
114
+ type: 'object',
115
+ required: ['_option_id'],
116
+ });
117
+
118
+ const bundled = ($defsOf(GeneratedIntakePolicySchema) as Record<string, Record<string, unknown>>).ModelOptions;
119
+ expect(bundled.discriminator).toBeUndefined();
120
+ expect(bundled.required).toBeUndefined();
121
+ expect(bundled.type).toBeUndefined();
122
+ // The branches are what carried the contract all along, so nothing was validated away.
123
+ expect((bundled.oneOf as unknown[]).length).toBe(
124
+ ((published.ModelOptions as { oneOf: unknown[] }).oneOf ?? []).length,
125
+ );
126
+ });
127
+
128
+ it('registers the component the alias claims, under the id the alias name requires', () => {
129
+ expect(Object.keys(ApiSchemaComponents)).toContain('ContentTypeIntakePolicy');
130
+ assertType<Equals<ContentTypeIntakePolicy, (typeof ContentTypeIntakePolicySchema)['_zod']['output']>>(true);
131
+ });
132
+ });
133
+
134
+ describe('content object response classification', () => {
135
+ it('accepts the current sensitivity and compartments fields', () => {
136
+ const result = validateApiResponse('ContentObjectApiResponse', {
137
+ id: 'content-object-id',
138
+ name: 'Classified document',
139
+ updated_by: 'user-id',
140
+ created_by: 'user-id',
141
+ created_at: '2026-08-06T09:00:00.000Z',
142
+ updated_at: '2026-08-06T09:00:00.000Z',
143
+ location: '/',
144
+ status: 'completed',
145
+ properties: {},
146
+ revision: { root: 'content-object-id', head: true },
147
+ sensitivity: 3,
148
+ compartments: ['legal'],
149
+ });
150
+
151
+ expect(result).toMatchObject({ valid: true });
152
+ });
153
+ });
154
+
155
+ /**
156
+ * Bodies that probe where the two validators could disagree.
157
+ *
158
+ * The gate above compares the artifact to the component, and both are produced by the SAME adapter
159
+ * from the SAME Zod schema — so any transform applied on the way out is invisible to it. That blind
160
+ * spot shipped once: an adapter pass stripped the bounds `z.int()` attaches for the JavaScript
161
+ * safe-integer range, on the reasoning that no JSON value could fall outside them. `1e20` does, and
162
+ * the Zod schema rejected it while the generated schema accepted it. Nothing in a
163
+ * schema-versus-schema comparison can see that; only running both validators over the same value can.
164
+ */
165
+ const PROBES: unknown[] = [
166
+ // Numeric range, including the values that made the sentinel-stripping bug observable.
167
+ {},
168
+ { extraction: { max_pages: 1 } },
169
+ { extraction: { max_pages: 0 } },
170
+ { extraction: { max_pages: 2.5 } },
171
+ { extraction: { max_pages: 1e20 } },
172
+ { extraction: { max_pages: 2147483647 } },
173
+ { extraction: { max_pages: 2147483648 } },
174
+ { extraction: { max_pages: Number.MAX_SAFE_INTEGER + 1 } },
175
+ { extraction: { max_pages: -1 } },
176
+ { locate: { instructions: 'x', min_pages: 0 } },
177
+ { locate: { instructions: 'x', min_pages: -1 } },
178
+ { locate: { instructions: 'x', min_pages: 1e20 } },
179
+ { locate: { detail: 8 } },
180
+ { text_conversion: { render_dpi: 72 } },
181
+ { text_conversion: { render_dpi: 71 } },
182
+ { text_conversion: { render_dpi: 1e20 } },
183
+ { extraction: { verification: { threshold: 0 } } },
184
+ { extraction: { verification: { threshold: 1 } } },
185
+ { extraction: { verification: { threshold: 1.000001 } } },
186
+ { extraction: { verification: { max_retries: 1e20 } } },
187
+ { extraction: { vision: { max_image_tokens: 1e20, max_payload_mb: 1e20 } } },
188
+ { extraction: { grounding: { window_pages: 1e20, grid_cell_pt: 1e20 } } },
189
+ { extraction: { grounding: { hardness_threshold: 1e20 } } },
190
+ // Page ranges: length, element type, and element magnitude.
191
+ { extraction: { page_ranges: [[1, 2]] } },
192
+ { extraction: { page_ranges: [[-1, -1]] } },
193
+ { extraction: { page_ranges: [[1]] } },
194
+ { extraction: { page_ranges: [[1, 2, 3]] } },
195
+ { extraction: { page_ranges: [[1.5, 2]] } },
196
+ { extraction: { page_ranges: [[1e20, 2]] } },
197
+ // Nullability, unknown keys, and the enums.
198
+ { generate_toc: null },
199
+ { extraction: null },
200
+ { extraction: { max_pages: null } },
201
+ { grounded_extraction: { enabled: true } },
202
+ { locate: { instructions: 'x', dpi: 300 } },
203
+ { extraction: { scope: 'first-two' } },
204
+ { extraction: { vision: { default_detail: 'ultra' } } },
205
+ { default_view: 'pdf' },
206
+ { mode: 'agentic' },
207
+ // The execution config: closedness, the option union, the two enums.
208
+ { extraction: { config: { model: 'm' } } },
209
+ { extraction: { config: { temperature: 0.5 } } },
210
+ { extraction: { config: { http_timeout: { bodyTimeout: 1000 } } } },
211
+ { extraction: { config: { http_timeout: { socketTimeout: 1000 } } } },
212
+ { extraction: { config: { model_options: { _option_id: 'openai-text', temperature: 0.5 } } } },
213
+ { extraction: { config: { model_options: { temperature: 0.5 } } } },
214
+ { extraction: { config: { model_options: { _option_id: 'not-a-driver' } } } },
215
+ { extraction: { config: { run_data: 'STANDARD' } } },
216
+ { extraction: { config: { run_data: 'WHATEVER' } } },
217
+ { extraction: { config: { configMode: 'RUN_CONFIG_ONLY' } } },
218
+ // Wrong types where a shape is expected.
219
+ { extraction: 'nope' },
220
+ { embeddings: { text: 'yes' } },
221
+ { identification: { examples: 'not-a-list' } },
222
+ ];
223
+
224
+ describe('gate — the artifact accepts exactly what the Zod schema accepts', () => {
225
+ it.each(PROBES.map((probe) => [JSON.stringify(probe), probe] as const))('agrees on %s', (_label, probe) => {
226
+ // The point of the migration is that ONE schema is enforced. Two validators built from it
227
+ // that disagree on a value means one of the consumers is enforcing something the source
228
+ // never said, which is the drift this whole exercise removes.
229
+ expect(validate(probe)).toBe(ContentTypeIntakePolicySchema.safeParse(probe).success);
230
+ });
231
+ });
232
+
233
+ describe.skipIf(!publishedDocument)('the fixture the generated Java and Go clients deserialize', () => {
234
+ // `openapi/fixtures/content-type-intake-policy.json` is read by
235
+ // `openapi/java/src/test/.../ContentTypeIntakePolicyDeserializationTest.java` and by
236
+ // `openapi/go/tests/intake_policy_deserialization_test.go`. Asserting it HERE is what stops it
237
+ // going stale: a schema change that the fixture no longer satisfies fails in this package,
238
+ // beside the schema, rather than in a client harness that only CI runs.
239
+ const fixture = readFromStudioRepo('../../../../../openapi/fixtures/content-type-intake-policy.json') ?? {};
240
+
241
+ it('is a policy the canonical schema and the generated artifact both accept', () => {
242
+ expect(ContentTypeIntakePolicySchema.safeParse(fixture).success).toBe(true);
243
+ expect(validate(fixture), errors()).toBe(true);
244
+ });
245
+
246
+ it('exercises the shapes the number -> integer correction changed', () => {
247
+ // The fields whose generated Java type moved from Double to Integer and whose Go type moved
248
+ // from float32 to int32. A fixture that omitted them would let the clients compile and
249
+ // deserialize while proving nothing about the change this batch makes.
250
+ const policy = fixture as ContentTypeIntakePolicy;
251
+ expect(policy.extraction?.max_pages).toBe(6);
252
+ expect(policy.extraction?.page_ranges).toEqual([
253
+ [1, 2],
254
+ [-1, -1],
255
+ ]);
256
+ expect(policy.text_conversion?.render_dpi).toBe(150);
257
+ expect(policy.extraction?.vision?.max_image_tokens).toBe(9000);
258
+ expect(policy.extraction?.grounding?.window_pages).toBe(4);
259
+ // ...and the discriminated union, which is what a Go oneOf decoder gets wrong when the
260
+ // discriminator is missing from the document.
261
+ expect(policy.extraction?.config?.model_options?._option_id).toBe('vertexai-claude');
262
+ });
263
+ });
264
+
265
+ describe('the TypeScript type says what the schema says', () => {
266
+ it('widens page ranges to number[][], which is what the component has always described', () => {
267
+ // `[number, number][]` is what the interface used to claim. The published component is
268
+ // `items: {type: integer}` with `minItems`/`maxItems` — a two-element ARRAY, not a tuple —
269
+ // because a Zod tuple emits `prefixItems`, which generated Java and Go clients read
270
+ // differently. The wire shape is unchanged; the SDK type is corrected to match it.
271
+ assertType<Equals<IntakePageRanges, number[][]>>(true);
272
+ expect(validate({ extraction: { page_ranges: [[1, 2]] } }), errors()).toBe(true);
273
+ });
274
+
275
+ it('keeps the two type refs’ default_view in step with the policy', () => {
276
+ // Those refs spell the union out rather than writing `ContentTypeIntakePolicy['default_view']`,
277
+ // because indexing into a canonical alias makes the generator DROP the property instead of
278
+ // failing. This is what stops the restatement from drifting.
279
+ assertType<
280
+ Equals<
281
+ NonNullable<ContentObjectTypeRef['default_view']>,
282
+ NonNullable<ContentTypeIntakePolicy['default_view']>
283
+ >
284
+ >(true);
285
+ });
286
+ });
287
+
288
+ describe('parity with the hand-written AJV schema it replaces', () => {
289
+ it('still accepts a full policy across every block', () => {
290
+ const policy: ContentTypeIntakePolicy = {
291
+ mode: 'programmatic',
292
+ identification: { guidance: 'Investor reports' },
293
+ locate: { instructions: 'allocation tables', detail: 8, min_pages: 10 },
294
+ text_conversion: { method: 'llm', scope: 'located', render_dpi: 150 },
295
+ extraction: {
296
+ source: 'vision',
297
+ page_ranges: [
298
+ [1, 2],
299
+ [-1, -1],
300
+ ],
301
+ max_pages: 6,
302
+ vision: { default_detail: 'high', max_image_tokens: 9000, max_payload_mb: 12 },
303
+ verification: { threshold: 0.7, max_retries: 2 },
304
+ grounding: {
305
+ enabled: true,
306
+ max_pages: 12,
307
+ hardness_threshold: 0.5,
308
+ config: { model: 'claude-sonnet-4-5' },
309
+ review: { threshold: 0.7, coverage_threshold: 0.2 },
310
+ },
311
+ },
312
+ embeddings: { text: true, properties: true },
313
+ default_view: 'pdf',
314
+ };
315
+ expect(validate(policy), errors()).toBe(true);
316
+ });
317
+
318
+ it('keeps every numeric bound the hand-written schema enforced', () => {
319
+ // These were NOT in the published component — the interface carried no `@minimum` tags — so
320
+ // converting to Zod dropped all eighteen of them until this test caught it. They are restored
321
+ // in the schema, which means the document now publishes constraints the server has enforced
322
+ // all along.
323
+ expect(validate({ locate: { instructions: 'x', min_pages: -1 } })).toBe(false);
324
+ expect(validate({ text_conversion: { render_dpi: 71 } })).toBe(false);
325
+ expect(validate({ extraction: { max_pages: 0 } })).toBe(false);
326
+ expect(validate({ extraction: { verification: { threshold: 1.2 } } })).toBe(false);
327
+ expect(validate({ extraction: { verification: { max_retries: -1 } } })).toBe(false);
328
+ expect(validate({ extraction: { vision: { max_image_tokens: 0 } } })).toBe(false);
329
+ expect(validate({ extraction: { vision: { max_payload_mb: 0 } } })).toBe(false);
330
+ expect(validate({ extraction: { vision: { max_pages_per_call: 0 } } })).toBe(false);
331
+ expect(validate({ extraction: { grounding: { max_pages: 0 } } })).toBe(false);
332
+ expect(validate({ extraction: { grounding: { window_pages: 0 } } })).toBe(false);
333
+ expect(validate({ extraction: { grounding: { grid_cell_pt: 0 } } })).toBe(false);
334
+ expect(validate({ extraction: { grounding: { hardness_threshold: -0.1 } } })).toBe(false);
335
+ expect(validate({ extraction: { grounding: { min_citation_density: 1.1 } } })).toBe(false);
336
+ expect(validate({ extraction: { grounding: { review: { threshold: 1.1 } } } })).toBe(false);
337
+ expect(validate({ extraction: { grounding: { review: { coverage_threshold: -0.1 } } } })).toBe(false);
338
+ });
339
+
340
+ it('keeps the page and DPI counters integral', () => {
341
+ // `type: 'integer'`, which the published component also never stated. A fractional page cap
342
+ // was rejected before this conversion and is rejected after it.
343
+ expect(validate({ extraction: { max_pages: 2.5 } })).toBe(false);
344
+ expect(validate({ text_conversion: { render_dpi: 150.5 } })).toBe(false);
345
+ expect(validate({ extraction: { page_ranges: [[1.5, 2]] } })).toBe(false);
346
+ expect(validate({ extraction: { page_ranges: [[1]] } })).toBe(false);
347
+ expect(validate({ locate: { instructions: 'x', min_pages: 8.5 } })).toBe(false);
348
+ });
349
+
350
+ it('keeps rejecting unknown keys and the obsolete root block', () => {
351
+ expect(validate({ grounded_extraction: { enabled: true } })).toBe(false);
352
+ expect(validate({ locate: { instructions: 'x', dpi: 300 } })).toBe(false);
353
+ expect(validate({ extraction: { vision: { default_detail: 'ultra' } } })).toBe(false);
354
+ });
355
+ });
356
+
357
+ describe('runtime tightenings — recorded as operation 25 of the 1.5 runbook', () => {
358
+ it('rejects an explicit null where the hand-written schema accepted one', () => {
359
+ // The replaced schema carried `nullable: true` on 112 subschemas and AJV honours that keyword
360
+ // for OpenAPI compatibility, so 101 of them accepted `null` — which neither the TypeScript
361
+ // type nor the published component has ever allowed. The fields are optional, not nullable.
362
+ expect(validate({ generate_toc: null })).toBe(false);
363
+ expect(validate({ rendering_template: null })).toBe(false);
364
+ expect(validate({ extraction: { max_pages: null } })).toBe(false);
365
+ expect(validate({ extraction: null })).toBe(false);
366
+ // Omission is still how you say "inherit", which is what every one of those fields meant.
367
+ expect(validate({}), errors()).toBe(true);
368
+ expect(validate({ extraction: {} }), errors()).toBe(true);
369
+ });
370
+
371
+ it('closes the execution config, which the published component already described closed', () => {
372
+ // `config` was `additionalProperties: true` in the hand-written schema while
373
+ // `InteractionExecutionConfiguration` has always been published closed. A stored policy
374
+ // carrying an undeclared key there is now rejected at write time.
375
+ expect(ApiSchemaComponents.InteractionExecutionConfiguration.additionalProperties).toBe(false);
376
+ expect(validate({ extraction: { config: { model: 'claude-sonnet-4-5' } } }), errors()).toBe(true);
377
+ expect(validate({ extraction: { config: { temperature: 0.5 } } })).toBe(false);
378
+ expect(validate({ extraction: { config: { http_timeout: { socketTimeout: 1000 } } } })).toBe(false);
379
+ });
380
+
381
+ it('validates model_options against the union instead of accepting any object', () => {
382
+ // Same class: `model_options` was `{type: object, additionalProperties: true}` in the
383
+ // hand-written schema and `$ref: ModelOptions` in the published component. It now has to name
384
+ // a driver through `_option_id`, which is the discriminator generated clients already use.
385
+ expect(ApiSchemaComponents.ContentTypeIntakePolicy).toBeDefined();
386
+ expect(
387
+ validate({
388
+ extraction: { config: { model_options: { _option_id: 'openai-text', temperature: 0.5 } } },
389
+ }),
390
+ errors(),
391
+ ).toBe(true);
392
+ expect(validate({ extraction: { config: { model_options: { temperature: 0.5 } } } })).toBe(false);
393
+ expect(validate({ extraction: { config: { model_options: { _option_id: 'not-a-driver' } } } })).toBe(false);
394
+ // The empty object is rejected for the same reason, which is why nothing may PUT it on the
395
+ // wire — see `normalizeModelOptions`, which drops an options bag with no options in it.
396
+ expect(validate({ extraction: { config: { model_options: {} } } })).toBe(false);
397
+ });
398
+
399
+ it('constrains the two config enums that were unconstrained strings', () => {
400
+ expect(validate({ extraction: { config: { run_data: 'STANDARD' } } }), errors()).toBe(true);
401
+ expect(validate({ extraction: { config: { run_data: 'WHATEVER' } } })).toBe(false);
402
+ expect(validate({ extraction: { config: { configMode: 'RUN_CONFIG_ONLY' } } }), errors()).toBe(true);
403
+ expect(validate({ extraction: { config: { configMode: 'WHATEVER' } } })).toBe(false);
404
+ });
405
+ });
406
+
407
+ describe('the five content-type shapes are composed, not repeated', () => {
408
+ const properties = (name: string) =>
409
+ Object.keys((ApiSchemaComponents[name] as { properties: Record<string, unknown> }).properties);
410
+ const property = (name: string, key: string) =>
411
+ (ApiSchemaComponents[name] as { properties: Record<string, JsonObject> }).properties[key];
412
+
413
+ it('gives every shape the same definition for a shared field', () => {
414
+ // The drift this guards: five hand-transcribed copies of `table_layout` could disagree about
415
+ // its item type or its description and nothing would notice. They come from one dictionary now.
416
+ const shapes = [
417
+ 'ContentObjectTypeItem',
418
+ 'ContentObjectType',
419
+ 'ContentObjectTypeCatalogEntry',
420
+ 'InCodeTypeDefinition',
421
+ 'CreateContentObjectTypePayload',
422
+ ];
423
+ for (const field of ['table_layout', 'object_schema', 'strict_mode', 'intake', 'editing', 'status']) {
424
+ const rendered = shapes.map((shape) => JSON.stringify(property(shape, field)));
425
+ expect(new Set(rendered).size, `${field} differs across the content-type shapes`).toBe(1);
426
+ }
427
+ });
428
+
429
+ it('keeps the published property order, which composition must not reshuffle', () => {
430
+ // Order is contract: it decides the order of the generated clients' constructor arguments and
431
+ // model fields. The five orders differ because they were derived from five different types.
432
+ expect(properties('ContentObjectTypeItem')).toEqual(properties('ContentObjectType'));
433
+ expect(properties('ContentObjectTypeCatalogEntry').slice(0, 11)).toEqual(properties('InCodeTypeDefinition'));
434
+ expect(properties('CreateContentObjectTypePayload')).toEqual([
435
+ 'status',
436
+ 'is_chunkable',
437
+ 'intake',
438
+ 'editing',
439
+ 'table_layout',
440
+ 'object_schema',
441
+ 'strict_mode',
442
+ 'name',
443
+ 'description',
444
+ 'tags',
445
+ ]);
446
+ });
447
+
448
+ it('keeps the audit fields required on a stored type and optional in the catalog', () => {
449
+ // Not a detail: a catalog entry may be an in-code type contributed by a plugin, which nobody
450
+ // created and nobody has modified. Requiring the four there would reject a legitimate entry.
451
+ const audit = ['updated_by', 'created_by', 'created_at', 'updated_at'];
452
+ const required = (name: string) => (ApiSchemaComponents[name] as { required?: string[] }).required ?? [];
453
+
454
+ expect(required('ContentObjectTypeItem')).toEqual(expect.arrayContaining(audit));
455
+ expect(required('ContentObjectType')).toEqual(expect.arrayContaining(audit));
456
+ for (const field of audit) {
457
+ expect(required('ContentObjectTypeCatalogEntry')).not.toContain(field);
458
+ expect(property('ContentObjectTypeCatalogEntry', field)).toEqual({ type: 'string' });
459
+ }
460
+ });
461
+
462
+ it('accepts a catalog entry for an in-code type that has no audit trail', () => {
463
+ expect(
464
+ validateApiResponse('ContentObjectTypeCatalogEntry', {
465
+ id: 'sys:Invoice',
466
+ name: 'Invoice',
467
+ is_chunkable: false,
468
+ }).valid,
469
+ ).toBe(true);
470
+ });
471
+ });