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

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 (521) hide show
  1. package/lib/access-control-values.d.ts +98 -0
  2. package/lib/access-control-values.d.ts.map +1 -0
  3. package/lib/access-control-values.js +101 -0
  4. package/lib/access-control-values.js.map +1 -0
  5. package/lib/access-control.d.ts +22 -119
  6. package/lib/access-control.d.ts.map +1 -1
  7. package/lib/access-control.js +6 -78
  8. package/lib/access-control.js.map +1 -1
  9. package/lib/account-values.d.ts +53 -0
  10. package/lib/account-values.d.ts.map +1 -0
  11. package/lib/account-values.js +91 -0
  12. package/lib/account-values.js.map +1 -0
  13. package/lib/analytics.d.ts +12 -38
  14. package/lib/analytics.d.ts.map +1 -1
  15. package/lib/api-schemas/access-control.d.ts +215 -0
  16. package/lib/api-schemas/access-control.d.ts.map +1 -0
  17. package/lib/api-schemas/access-control.js +165 -0
  18. package/lib/api-schemas/access-control.js.map +1 -0
  19. package/lib/api-schemas/account.d.ts +101 -0
  20. package/lib/api-schemas/account.d.ts.map +1 -0
  21. package/lib/api-schemas/account.js +136 -0
  22. package/lib/api-schemas/account.js.map +1 -0
  23. package/lib/api-schemas/adapter.d.ts +80 -0
  24. package/lib/api-schemas/adapter.d.ts.map +1 -0
  25. package/lib/api-schemas/adapter.js +726 -0
  26. package/lib/api-schemas/adapter.js.map +1 -0
  27. package/lib/api-schemas/agent-runs.d.ts +3781 -0
  28. package/lib/api-schemas/agent-runs.d.ts.map +1 -0
  29. package/lib/api-schemas/agent-runs.js +991 -0
  30. package/lib/api-schemas/agent-runs.js.map +1 -0
  31. package/lib/api-schemas/analytics.d.ts +86 -0
  32. package/lib/api-schemas/analytics.d.ts.map +1 -0
  33. package/lib/api-schemas/analytics.js +58 -0
  34. package/lib/api-schemas/analytics.js.map +1 -0
  35. package/lib/api-schemas/apikey.d.ts +231 -0
  36. package/lib/api-schemas/apikey.d.ts.map +1 -0
  37. package/lib/api-schemas/apikey.js +172 -0
  38. package/lib/api-schemas/apikey.js.map +1 -0
  39. package/lib/api-schemas/app-lifecycle.d.ts +1114 -0
  40. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
  41. package/lib/api-schemas/app-lifecycle.js +750 -0
  42. package/lib/api-schemas/app-lifecycle.js.map +1 -0
  43. package/lib/api-schemas/app-runtime.d.ts +9056 -0
  44. package/lib/api-schemas/app-runtime.d.ts.map +1 -0
  45. package/lib/api-schemas/app-runtime.js +782 -0
  46. package/lib/api-schemas/app-runtime.js.map +1 -0
  47. package/lib/api-schemas/apps.d.ts +247 -0
  48. package/lib/api-schemas/apps.d.ts.map +1 -0
  49. package/lib/api-schemas/apps.js +366 -0
  50. package/lib/api-schemas/apps.js.map +1 -0
  51. package/lib/api-schemas/audit-trail.d.ts +465 -0
  52. package/lib/api-schemas/audit-trail.d.ts.map +1 -0
  53. package/lib/api-schemas/audit-trail.js +218 -0
  54. package/lib/api-schemas/audit-trail.js.map +1 -0
  55. package/lib/api-schemas/bulk-operation.d.ts +104 -0
  56. package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
  57. package/lib/api-schemas/bulk-operation.js +66 -0
  58. package/lib/api-schemas/bulk-operation.js.map +1 -0
  59. package/lib/api-schemas/commands.d.ts +50 -0
  60. package/lib/api-schemas/commands.d.ts.map +1 -0
  61. package/lib/api-schemas/commands.js +58 -0
  62. package/lib/api-schemas/commands.js.map +1 -0
  63. package/lib/api-schemas/content.d.ts +3561 -0
  64. package/lib/api-schemas/content.d.ts.map +1 -0
  65. package/lib/api-schemas/content.js +842 -0
  66. package/lib/api-schemas/content.js.map +1 -0
  67. package/lib/api-schemas/cost-analytics.d.ts +300 -0
  68. package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
  69. package/lib/api-schemas/cost-analytics.js +218 -0
  70. package/lib/api-schemas/cost-analytics.js.map +1 -0
  71. package/lib/api-schemas/dashboard.d.ts +408 -0
  72. package/lib/api-schemas/dashboard.d.ts.map +1 -0
  73. package/lib/api-schemas/dashboard.js +311 -0
  74. package/lib/api-schemas/dashboard.js.map +1 -0
  75. package/lib/api-schemas/data-store.d.ts +1650 -0
  76. package/lib/api-schemas/data-store.d.ts.map +1 -0
  77. package/lib/api-schemas/data-store.js +504 -0
  78. package/lib/api-schemas/data-store.js.map +1 -0
  79. package/lib/api-schemas/document-processing.d.ts +1501 -0
  80. package/lib/api-schemas/document-processing.d.ts.map +1 -0
  81. package/lib/api-schemas/document-processing.js +312 -0
  82. package/lib/api-schemas/document-processing.js.map +1 -0
  83. package/lib/api-schemas/embeddings.d.ts +184 -0
  84. package/lib/api-schemas/embeddings.d.ts.map +1 -0
  85. package/lib/api-schemas/embeddings.js +102 -0
  86. package/lib/api-schemas/embeddings.js.map +1 -0
  87. package/lib/api-schemas/environment.d.ts +412 -0
  88. package/lib/api-schemas/environment.d.ts.map +1 -0
  89. package/lib/api-schemas/environment.js +170 -0
  90. package/lib/api-schemas/environment.js.map +1 -0
  91. package/lib/api-schemas/events.d.ts +4880 -0
  92. package/lib/api-schemas/events.d.ts.map +1 -0
  93. package/lib/api-schemas/events.js +832 -0
  94. package/lib/api-schemas/events.js.map +1 -0
  95. package/lib/api-schemas/files.d.ts +107 -0
  96. package/lib/api-schemas/files.d.ts.map +1 -0
  97. package/lib/api-schemas/files.js +137 -0
  98. package/lib/api-schemas/files.js.map +1 -0
  99. package/lib/api-schemas/group.d.ts +122 -0
  100. package/lib/api-schemas/group.d.ts.map +1 -0
  101. package/lib/api-schemas/group.js +142 -0
  102. package/lib/api-schemas/group.js.map +1 -0
  103. package/lib/api-schemas/index.d.ts +36 -0
  104. package/lib/api-schemas/index.d.ts.map +1 -0
  105. package/lib/api-schemas/index.js +36 -0
  106. package/lib/api-schemas/index.js.map +1 -0
  107. package/lib/api-schemas/indexing.d.ts +144 -0
  108. package/lib/api-schemas/indexing.d.ts.map +1 -0
  109. package/lib/api-schemas/indexing.js +217 -0
  110. package/lib/api-schemas/indexing.js.map +1 -0
  111. package/lib/api-schemas/integrations.d.ts +269 -0
  112. package/lib/api-schemas/integrations.d.ts.map +1 -0
  113. package/lib/api-schemas/integrations.js +335 -0
  114. package/lib/api-schemas/integrations.js.map +1 -0
  115. package/lib/api-schemas/interaction.d.ts +22454 -0
  116. package/lib/api-schemas/interaction.d.ts.map +1 -0
  117. package/lib/api-schemas/interaction.js +2065 -0
  118. package/lib/api-schemas/interaction.js.map +1 -0
  119. package/lib/api-schemas/invites.d.ts +162 -0
  120. package/lib/api-schemas/invites.d.ts.map +1 -0
  121. package/lib/api-schemas/invites.js +106 -0
  122. package/lib/api-schemas/invites.js.map +1 -0
  123. package/lib/api-schemas/oauth-server.d.ts +415 -0
  124. package/lib/api-schemas/oauth-server.d.ts.map +1 -0
  125. package/lib/api-schemas/oauth-server.js +193 -0
  126. package/lib/api-schemas/oauth-server.js.map +1 -0
  127. package/lib/api-schemas/oauth.d.ts +150 -0
  128. package/lib/api-schemas/oauth.d.ts.map +1 -0
  129. package/lib/api-schemas/oauth.js +148 -0
  130. package/lib/api-schemas/oauth.js.map +1 -0
  131. package/lib/api-schemas/parameters.d.ts +64 -0
  132. package/lib/api-schemas/parameters.d.ts.map +1 -0
  133. package/lib/api-schemas/parameters.js +246 -0
  134. package/lib/api-schemas/parameters.js.map +1 -0
  135. package/lib/api-schemas/process.d.ts +499 -0
  136. package/lib/api-schemas/process.d.ts.map +1 -0
  137. package/lib/api-schemas/process.js +817 -0
  138. package/lib/api-schemas/process.js.map +1 -0
  139. package/lib/api-schemas/project-configuration.d.ts +4900 -0
  140. package/lib/api-schemas/project-configuration.d.ts.map +1 -0
  141. package/lib/api-schemas/project-configuration.js +425 -0
  142. package/lib/api-schemas/project-configuration.js.map +1 -0
  143. package/lib/api-schemas/project.d.ts +7247 -0
  144. package/lib/api-schemas/project.d.ts.map +1 -0
  145. package/lib/api-schemas/project.js +185 -0
  146. package/lib/api-schemas/project.js.map +1 -0
  147. package/lib/api-schemas/prompt.d.ts +70 -0
  148. package/lib/api-schemas/prompt.d.ts.map +1 -0
  149. package/lib/api-schemas/prompt.js +77 -0
  150. package/lib/api-schemas/prompt.js.map +1 -0
  151. package/lib/api-schemas/quota.d.ts +90 -0
  152. package/lib/api-schemas/quota.d.ts.map +1 -0
  153. package/lib/api-schemas/quota.js +95 -0
  154. package/lib/api-schemas/quota.js.map +1 -0
  155. package/lib/api-schemas/registry.d.ts +97458 -0
  156. package/lib/api-schemas/registry.d.ts.map +1 -0
  157. package/lib/api-schemas/registry.js +2586 -0
  158. package/lib/api-schemas/registry.js.map +1 -0
  159. package/lib/api-schemas/schema-primitives.d.ts +5 -0
  160. package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
  161. package/lib/api-schemas/schema-primitives.js +11 -0
  162. package/lib/api-schemas/schema-primitives.js.map +1 -0
  163. package/lib/api-schemas/secrets.d.ts +497 -0
  164. package/lib/api-schemas/secrets.d.ts.map +1 -0
  165. package/lib/api-schemas/secrets.js +298 -0
  166. package/lib/api-schemas/secrets.js.map +1 -0
  167. package/lib/api-schemas/store.d.ts +22140 -0
  168. package/lib/api-schemas/store.d.ts.map +1 -0
  169. package/lib/api-schemas/store.js +557 -0
  170. package/lib/api-schemas/store.js.map +1 -0
  171. package/lib/api-schemas/sts.d.ts +156 -0
  172. package/lib/api-schemas/sts.d.ts.map +1 -0
  173. package/lib/api-schemas/sts.js +96 -0
  174. package/lib/api-schemas/sts.js.map +1 -0
  175. package/lib/api-schemas/task.d.ts +215 -0
  176. package/lib/api-schemas/task.d.ts.map +1 -0
  177. package/lib/api-schemas/task.js +95 -0
  178. package/lib/api-schemas/task.js.map +1 -0
  179. package/lib/api-schemas/tools.d.ts +111 -0
  180. package/lib/api-schemas/tools.d.ts.map +1 -0
  181. package/lib/api-schemas/tools.js +122 -0
  182. package/lib/api-schemas/tools.js.map +1 -0
  183. package/lib/api-schemas/user.d.ts +208 -0
  184. package/lib/api-schemas/user.d.ts.map +1 -0
  185. package/lib/api-schemas/user.js +180 -0
  186. package/lib/api-schemas/user.js.map +1 -0
  187. package/lib/api-schemas/view-execution.d.ts +3163 -0
  188. package/lib/api-schemas/view-execution.d.ts.map +1 -0
  189. package/lib/api-schemas/view-execution.js +172 -0
  190. package/lib/api-schemas/view-execution.js.map +1 -0
  191. package/lib/api-schemas/views.d.ts +5990 -0
  192. package/lib/api-schemas/views.d.ts.map +1 -0
  193. package/lib/api-schemas/views.js +396 -0
  194. package/lib/api-schemas/views.js.map +1 -0
  195. package/lib/api-schemas/workflow-runs.d.ts +2209 -0
  196. package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
  197. package/lib/api-schemas/workflow-runs.js +589 -0
  198. package/lib/api-schemas/workflow-runs.js.map +1 -0
  199. package/lib/apikey-values.d.ts +10 -0
  200. package/lib/apikey-values.d.ts.map +1 -0
  201. package/lib/apikey-values.js +11 -0
  202. package/lib/apikey-values.js.map +1 -0
  203. package/lib/apikey.d.ts +37 -36
  204. package/lib/apikey.d.ts.map +1 -1
  205. package/lib/apikey.js +5 -4
  206. package/lib/apikey.js.map +1 -1
  207. package/lib/apps.d.ts +107 -1151
  208. package/lib/apps.d.ts.map +1 -1
  209. package/lib/apps.js.map +1 -1
  210. package/lib/ask-user.d.ts +8 -1
  211. package/lib/ask-user.d.ts.map +1 -1
  212. package/lib/audit-trail.d.ts +17 -128
  213. package/lib/audit-trail.d.ts.map +1 -1
  214. package/lib/audit-trail.js.map +1 -1
  215. package/lib/browser-credentials.d.ts +11 -106
  216. package/lib/browser-credentials.d.ts.map +1 -1
  217. package/lib/common.d.ts +59 -81
  218. package/lib/common.d.ts.map +1 -1
  219. package/lib/cost-analytics.d.ts +14 -167
  220. package/lib/cost-analytics.d.ts.map +1 -1
  221. package/lib/cost-analytics.js.map +1 -1
  222. package/lib/data-platform.d.ts +122 -786
  223. package/lib/data-platform.d.ts.map +1 -1
  224. package/lib/data-platform.js +41 -61
  225. package/lib/data-platform.js.map +1 -1
  226. package/lib/email.d.ts +5 -17
  227. package/lib/email.d.ts.map +1 -1
  228. package/lib/email.js +0 -3
  229. package/lib/email.js.map +1 -1
  230. package/lib/embeddings.d.ts +14 -56
  231. package/lib/embeddings.d.ts.map +1 -1
  232. package/lib/environment.d.ts +19 -115
  233. package/lib/environment.d.ts.map +1 -1
  234. package/lib/environment.js +3 -0
  235. package/lib/environment.js.map +1 -1
  236. package/lib/facets.d.ts +4 -7
  237. package/lib/facets.d.ts.map +1 -1
  238. package/lib/group.d.ts +33 -39
  239. package/lib/group.d.ts.map +1 -1
  240. package/lib/group.js +0 -1
  241. package/lib/group.js.map +1 -1
  242. package/lib/index.d.ts +7 -0
  243. package/lib/index.d.ts.map +1 -1
  244. package/lib/index.js.map +1 -1
  245. package/lib/integrations.d.ts +20 -108
  246. package/lib/integrations.d.ts.map +1 -1
  247. package/lib/integrations.js.map +1 -1
  248. package/lib/interaction-values.d.ts +11 -0
  249. package/lib/interaction-values.d.ts.map +1 -0
  250. package/lib/interaction-values.js +24 -0
  251. package/lib/interaction-values.js.map +1 -0
  252. package/lib/interaction.d.ts +88 -778
  253. package/lib/interaction.d.ts.map +1 -1
  254. package/lib/interaction.js +8 -12
  255. package/lib/interaction.js.map +1 -1
  256. package/lib/meters.d.ts +11 -7
  257. package/lib/meters.d.ts.map +1 -1
  258. package/lib/meters.js.map +1 -1
  259. package/lib/oauth-server.d.ts +33 -119
  260. package/lib/oauth-server.d.ts.map +1 -1
  261. package/lib/oauth.d.ts +14 -96
  262. package/lib/oauth.d.ts.map +1 -1
  263. package/lib/oauth.js +0 -4
  264. package/lib/oauth.js.map +1 -1
  265. package/lib/payload.d.ts +15 -38
  266. package/lib/payload.d.ts.map +1 -1
  267. package/lib/platform-event.d.ts +49 -462
  268. package/lib/platform-event.d.ts.map +1 -1
  269. package/lib/platform-event.js.map +1 -1
  270. package/lib/principal-context.d.ts +10 -15
  271. package/lib/principal-context.d.ts.map +1 -1
  272. package/lib/project-values.d.ts +24 -0
  273. package/lib/project-values.d.ts.map +1 -0
  274. package/lib/project-values.js +42 -0
  275. package/lib/project-values.js.map +1 -0
  276. package/lib/project.d.ts +55 -503
  277. package/lib/project.d.ts.map +1 -1
  278. package/lib/project.js +6 -76
  279. package/lib/project.js.map +1 -1
  280. package/lib/prompt.d.ts +20 -51
  281. package/lib/prompt.d.ts.map +1 -1
  282. package/lib/prompt.js.map +1 -1
  283. package/lib/query.d.ts +27 -88
  284. package/lib/query.d.ts.map +1 -1
  285. package/lib/rate-limiter.d.ts +19 -70
  286. package/lib/rate-limiter.d.ts.map +1 -1
  287. package/lib/rate-limiter.js +0 -3
  288. package/lib/rate-limiter.js.map +1 -1
  289. package/lib/refs.d.ts +3 -11
  290. package/lib/refs.d.ts.map +1 -1
  291. package/lib/refs.js.map +1 -1
  292. package/lib/roles/types.d.ts +14 -20
  293. package/lib/roles/types.d.ts.map +1 -1
  294. package/lib/roles/types.js +5 -9
  295. package/lib/roles/types.js.map +1 -1
  296. package/lib/runs.d.ts +6 -25
  297. package/lib/runs.d.ts.map +1 -1
  298. package/lib/secrets.d.ts +20 -105
  299. package/lib/secrets.d.ts.map +1 -1
  300. package/lib/store/agent-approval.d.ts +5 -14
  301. package/lib/store/agent-approval.d.ts.map +1 -1
  302. package/lib/store/agent-approval.js.map +1 -1
  303. package/lib/store/agent-run.d.ts +57 -358
  304. package/lib/store/agent-run.d.ts.map +1 -1
  305. package/lib/store/collections.d.ts +11 -63
  306. package/lib/store/collections.d.ts.map +1 -1
  307. package/lib/store/collections.js.map +1 -1
  308. package/lib/store/conversation-state.d.ts +61 -61
  309. package/lib/store/conversation-state.d.ts.map +1 -1
  310. package/lib/store/conversation-state.js +2 -0
  311. package/lib/store/conversation-state.js.map +1 -1
  312. package/lib/store/doc-analyzer.d.ts +9 -32
  313. package/lib/store/doc-analyzer.d.ts.map +1 -1
  314. package/lib/store/dsl-workflow.d.ts +37 -151
  315. package/lib/store/dsl-workflow.d.ts.map +1 -1
  316. package/lib/store/dsl-workflow.js.map +1 -1
  317. package/lib/store/editing-policy-schema.generated.d.ts +3 -0
  318. package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
  319. package/lib/store/editing-policy-schema.generated.js +28 -0
  320. package/lib/store/editing-policy-schema.generated.js.map +1 -0
  321. package/lib/store/grounded-extraction.d.ts +7 -104
  322. package/lib/store/grounded-extraction.d.ts.map +1 -1
  323. package/lib/store/grounded-extraction.js.map +1 -1
  324. package/lib/store/index.d.ts +2 -0
  325. package/lib/store/index.d.ts.map +1 -1
  326. package/lib/store/index.js +3 -0
  327. package/lib/store/index.js.map +1 -1
  328. package/lib/store/intake-policy-schema.generated.d.ts +3 -0
  329. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
  330. package/lib/store/intake-policy-schema.generated.js +1425 -0
  331. package/lib/store/intake-policy-schema.generated.js.map +1 -0
  332. package/lib/store/process-schema.d.ts +80 -0
  333. package/lib/store/process-schema.d.ts.map +1 -1
  334. package/lib/store/process-schema.js +79 -0
  335. package/lib/store/process-schema.js.map +1 -1
  336. package/lib/store/process-validation.d.ts.map +1 -1
  337. package/lib/store/process-validation.js +70 -2
  338. package/lib/store/process-validation.js.map +1 -1
  339. package/lib/store/process.d.ts +36 -125
  340. package/lib/store/process.d.ts.map +1 -1
  341. package/lib/store/process.js.map +1 -1
  342. package/lib/store/rendering.d.ts +9 -64
  343. package/lib/store/rendering.d.ts.map +1 -1
  344. package/lib/store/rendering.js.map +1 -1
  345. package/lib/store/store.d.ts +98 -700
  346. package/lib/store/store.d.ts.map +1 -1
  347. package/lib/store/store.js +4 -456
  348. package/lib/store/store.js.map +1 -1
  349. package/lib/store/task.d.ts +15 -59
  350. package/lib/store/task.d.ts.map +1 -1
  351. package/lib/store/task.js +0 -3
  352. package/lib/store/task.js.map +1 -1
  353. package/lib/store/workflow.d.ts +54 -518
  354. package/lib/store/workflow.d.ts.map +1 -1
  355. package/lib/store/workflow.js +23 -11
  356. package/lib/store/workflow.js.map +1 -1
  357. package/lib/sts-token-types.d.ts +12 -66
  358. package/lib/sts-token-types.d.ts.map +1 -1
  359. package/lib/sts-token-types.js.map +1 -1
  360. package/lib/tools.d.ts +8 -100
  361. package/lib/tools.d.ts.map +1 -1
  362. package/lib/transient-tokens-values.d.ts +11 -0
  363. package/lib/transient-tokens-values.d.ts.map +1 -0
  364. package/lib/transient-tokens-values.js +12 -0
  365. package/lib/transient-tokens-values.js.map +1 -0
  366. package/lib/transient-tokens.d.ts +15 -13
  367. package/lib/transient-tokens.d.ts.map +1 -1
  368. package/lib/transient-tokens.js +5 -5
  369. package/lib/transient-tokens.js.map +1 -1
  370. package/lib/user.d.ts +54 -155
  371. package/lib/user.d.ts.map +1 -1
  372. package/lib/user.js +1 -78
  373. package/lib/user.js.map +1 -1
  374. package/lib/versions.d.ts +24 -1
  375. package/lib/versions.d.ts.map +1 -1
  376. package/lib/versions.js +23 -0
  377. package/lib/versions.js.map +1 -1
  378. package/lib/vertesia-common.js +6 -2
  379. package/lib/vertesia-common.js.map +1 -1
  380. package/lib/views-schema.d.ts +4 -4
  381. package/lib/views.d.ts +56 -312
  382. package/lib/views.d.ts.map +1 -1
  383. package/lib/views.js.map +1 -1
  384. package/package.json +13 -4
  385. package/src/access-control-values.ts +113 -0
  386. package/src/access-control.ts +33 -138
  387. package/src/account-values.ts +95 -0
  388. package/src/analytics.ts +18 -42
  389. package/src/api-schemas/access-control.contract.test.ts +209 -0
  390. package/src/api-schemas/access-control.ts +208 -0
  391. package/src/api-schemas/account.contract.test.ts +318 -0
  392. package/src/api-schemas/account.ts +150 -0
  393. package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
  394. package/src/api-schemas/adapter.ts +778 -0
  395. package/src/api-schemas/agent-runs.ts +1081 -0
  396. package/src/api-schemas/analytics.ts +65 -0
  397. package/src/api-schemas/apikey.contract.test.ts +270 -0
  398. package/src/api-schemas/apikey.ts +199 -0
  399. package/src/api-schemas/app-lifecycle.ts +841 -0
  400. package/src/api-schemas/app-runtime.ts +919 -0
  401. package/src/api-schemas/apps.ts +415 -0
  402. package/src/api-schemas/audit-trail.ts +243 -0
  403. package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
  404. package/src/api-schemas/bulk-operation.ts +75 -0
  405. package/src/api-schemas/bundle-isolation.test.ts +80 -0
  406. package/src/api-schemas/commands.contract.test.ts +51 -0
  407. package/src/api-schemas/commands.ts +62 -0
  408. package/src/api-schemas/content.ts +939 -0
  409. package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
  410. package/src/api-schemas/cost-analytics.ts +235 -0
  411. package/src/api-schemas/dashboard.contract.test.ts +127 -0
  412. package/src/api-schemas/dashboard.ts +351 -0
  413. package/src/api-schemas/data-store.contract.test.ts +91 -0
  414. package/src/api-schemas/data-store.ts +571 -0
  415. package/src/api-schemas/document-processing.contract.test.ts +76 -0
  416. package/src/api-schemas/document-processing.ts +344 -0
  417. package/src/api-schemas/embeddings.ts +113 -0
  418. package/src/api-schemas/environment.contract.test.ts +184 -0
  419. package/src/api-schemas/environment.ts +190 -0
  420. package/src/api-schemas/events.ts +921 -0
  421. package/src/api-schemas/files.ts +159 -0
  422. package/src/api-schemas/group.contract.test.ts +205 -0
  423. package/src/api-schemas/group.ts +155 -0
  424. package/src/api-schemas/index.ts +35 -0
  425. package/src/api-schemas/indexing.contract.test.ts +83 -0
  426. package/src/api-schemas/indexing.ts +234 -0
  427. package/src/api-schemas/integrations.ts +369 -0
  428. package/src/api-schemas/interaction.ts +2357 -0
  429. package/src/api-schemas/invites.contract.test.ts +268 -0
  430. package/src/api-schemas/invites.ts +127 -0
  431. package/src/api-schemas/llumiverse.contract.test.ts +108 -0
  432. package/src/api-schemas/oauth-server.ts +219 -0
  433. package/src/api-schemas/oauth.contract.test.ts +118 -0
  434. package/src/api-schemas/oauth.ts +166 -0
  435. package/src/api-schemas/parameters.test.ts +402 -0
  436. package/src/api-schemas/parameters.ts +310 -0
  437. package/src/api-schemas/process.ts +929 -0
  438. package/src/api-schemas/project-configuration.ts +478 -0
  439. package/src/api-schemas/project.contract.test.ts +365 -0
  440. package/src/api-schemas/project.ts +214 -0
  441. package/src/api-schemas/prompt.ts +88 -0
  442. package/src/api-schemas/pruning-limits.test.ts +189 -0
  443. package/src/api-schemas/quota.contract.test.ts +147 -0
  444. package/src/api-schemas/quota.ts +122 -0
  445. package/src/api-schemas/registry-groups.test.ts +91 -0
  446. package/src/api-schemas/registry.ts +3487 -0
  447. package/src/api-schemas/response-pruning.test.ts +260 -0
  448. package/src/api-schemas/schema-primitives.ts +12 -0
  449. package/src/api-schemas/secrets.ts +332 -0
  450. package/src/api-schemas/store.contract.test.ts +450 -0
  451. package/src/api-schemas/store.ts +604 -0
  452. package/src/api-schemas/sts.contract.test.ts +80 -0
  453. package/src/api-schemas/sts.ts +110 -0
  454. package/src/api-schemas/task.ts +104 -0
  455. package/src/api-schemas/tools.ts +140 -0
  456. package/src/api-schemas/user.contract.test.ts +191 -0
  457. package/src/api-schemas/user.ts +204 -0
  458. package/src/api-schemas/view-execution.ts +200 -0
  459. package/src/api-schemas/views.ts +437 -0
  460. package/src/api-schemas/workflow-runs.ts +653 -0
  461. package/src/apikey-values.ts +10 -0
  462. package/src/apikey.ts +49 -40
  463. package/src/apps.ts +234 -1213
  464. package/src/ask-user.ts +9 -1
  465. package/src/audit-trail.ts +45 -137
  466. package/src/browser-credentials.ts +21 -106
  467. package/src/common.ts +67 -78
  468. package/src/cost-analytics.ts +37 -176
  469. package/src/data-platform.ts +205 -776
  470. package/src/email.ts +5 -17
  471. package/src/embeddings.ts +22 -60
  472. package/src/environment.ts +52 -126
  473. package/src/facets.ts +4 -7
  474. package/src/group.ts +38 -42
  475. package/src/index.ts +11 -0
  476. package/src/integrations.ts +39 -129
  477. package/src/interaction-values.ts +23 -0
  478. package/src/interaction.ts +162 -902
  479. package/src/meters.ts +11 -7
  480. package/src/oauth-server.ts +58 -127
  481. package/src/oauth.ts +24 -108
  482. package/src/payload.ts +25 -40
  483. package/src/platform-event.ts +98 -484
  484. package/src/principal-context.ts +11 -15
  485. package/src/project-values.ts +41 -0
  486. package/src/project.ts +116 -588
  487. package/src/prompt.ts +34 -61
  488. package/src/query.ts +34 -93
  489. package/src/rate-limiter.ts +27 -75
  490. package/src/refs.ts +4 -11
  491. package/src/roles/types.ts +20 -20
  492. package/src/runs.ts +11 -24
  493. package/src/secrets.ts +38 -117
  494. package/src/store/agent-approval.ts +9 -14
  495. package/src/store/agent-run.ts +93 -450
  496. package/src/store/collections.ts +21 -63
  497. package/src/store/content-type-editing.test.ts +1 -1
  498. package/src/store/conversation-state.ts +75 -64
  499. package/src/store/doc-analyzer.ts +17 -33
  500. package/src/store/dsl-workflow.ts +62 -158
  501. package/src/store/editing-policy-schema.generated.ts +30 -0
  502. package/src/store/grounded-extraction.ts +13 -104
  503. package/src/store/index.ts +3 -0
  504. package/src/store/intake-policy-schema.generated.ts +1442 -0
  505. package/src/store/process-schema.test.ts +43 -0
  506. package/src/store/process-schema.ts +79 -0
  507. package/src/store/process-validation.test.ts +141 -0
  508. package/src/store/process-validation.ts +82 -2
  509. package/src/store/process.ts +70 -146
  510. package/src/store/rendering.ts +15 -64
  511. package/src/store/store.ts +197 -1204
  512. package/src/store/task.ts +25 -59
  513. package/src/store/workflow.ts +97 -557
  514. package/src/sts-token-types.ts +24 -75
  515. package/src/tools.ts +18 -97
  516. package/src/transient-tokens-values.ts +11 -0
  517. package/src/transient-tokens.ts +16 -13
  518. package/src/user.ts +74 -214
  519. package/src/versions.ts +24 -0
  520. package/src/views-schema.test.ts +9 -1
  521. package/src/views.ts +106 -329
@@ -0,0 +1,480 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { type JsonObject, SchemaAdapterError, toOpenApiComponents } from './adapter.js';
3
+
4
+ describe('reference integrity', () => {
5
+ it('rejects a reference to a component that does not exist', () => {
6
+ // A dangling pointer produces a spec that validates structurally but breaks every
7
+ // generated client at deserialization time.
8
+ expect(() =>
9
+ toOpenApiComponents({
10
+ Account: { type: 'object', properties: { billing: { $ref: '#/$defs/Missing' } } },
11
+ }),
12
+ ).toThrow(SchemaAdapterError);
13
+ });
14
+
15
+ it('accepts a reference once its target is defined', () => {
16
+ const components = toOpenApiComponents({
17
+ Account: {
18
+ type: 'object',
19
+ properties: { billing: { $ref: '#/$defs/AccountBilling' } },
20
+ $defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
21
+ },
22
+ });
23
+ expect(Object.keys(components).sort()).toEqual(['Account', 'AccountBilling']);
24
+ });
25
+
26
+ it('resolves a reference against an external component without republishing it', () => {
27
+ const components = toOpenApiComponents(
28
+ {
29
+ AppManifest: {
30
+ type: 'object',
31
+ properties: { settings_schema: { $ref: '#/components/schemas/JSONSchema' } },
32
+ },
33
+ },
34
+ { referenceComponents: { JSONSchema: { type: 'object' } } },
35
+ );
36
+
37
+ expect(Object.keys(components)).toEqual(['AppManifest']);
38
+ expect((components.AppManifest.properties as JsonObject).settings_schema).toEqual({
39
+ $ref: '#/components/schemas/JSONSchema',
40
+ });
41
+ });
42
+ });
43
+
44
+ describe('additionalProperties policy', () => {
45
+ it('preserves a schema-valued additionalProperties on an open component', () => {
46
+ // Record<string, string> — deleting the keyword would widen the value type to `any`.
47
+ const components = toOpenApiComponents({
48
+ StringMap: { type: 'object', additionalProperties: { type: 'string' } },
49
+ });
50
+ expect(components.StringMap.additionalProperties).toEqual({ type: 'string' });
51
+ });
52
+
53
+ it('preserves additionalProperties:true on an open component', () => {
54
+ const components = toOpenApiComponents({
55
+ Freeform: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: true },
56
+ });
57
+ expect(components.Freeform.additionalProperties).toBe(true);
58
+ });
59
+
60
+ it('removes only an inherited additionalProperties:false', () => {
61
+ const components = toOpenApiComponents({
62
+ Closed: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: false },
63
+ });
64
+ expect(components.Closed.additionalProperties).toBeUndefined();
65
+ });
66
+ });
67
+
68
+ /**
69
+ * `{}` and `true` mean the same thing to a validator, and `propertyNames: {type: 'string'}`
70
+ * constrains nothing at all — but openapi-generator renders the two `additionalProperties` spellings
71
+ * as different Go types, so which one is published is a real decision rather than cosmetics.
72
+ */
73
+ describe('open-map normalization', () => {
74
+ it('publishes a nested empty additionalProperties as true', () => {
75
+ const components = toOpenApiComponents({
76
+ Holder: {
77
+ type: 'object',
78
+ properties: { map: { type: 'object', additionalProperties: {}, propertyNames: { type: 'string' } } },
79
+ },
80
+ });
81
+ const map = (components.Holder.properties as JsonObject).map as JsonObject;
82
+ expect(map.additionalProperties).toBe(true);
83
+ expect(map).not.toHaveProperty('propertyNames');
84
+ });
85
+
86
+ it('still deletes an empty additionalProperties at a component root', () => {
87
+ const components = toOpenApiComponents({
88
+ Root: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: {} },
89
+ });
90
+ expect(components.Root.additionalProperties).toBeUndefined();
91
+ });
92
+
93
+ it('keeps a propertyNames that actually constrains the keys', () => {
94
+ const components = toOpenApiComponents({
95
+ Holder: {
96
+ type: 'object',
97
+ properties: { map: { type: 'object', propertyNames: { type: 'string', pattern: '^x-' } } },
98
+ },
99
+ });
100
+ const map = (components.Holder.properties as JsonObject).map as JsonObject;
101
+ expect(map.propertyNames).toEqual({ type: 'string', pattern: '^x-' });
102
+ });
103
+
104
+ it('leaves a typed additionalProperties alone', () => {
105
+ const components = toOpenApiComponents({
106
+ Holder: {
107
+ type: 'object',
108
+ properties: { map: { type: 'object', additionalProperties: { type: 'string' } } },
109
+ },
110
+ });
111
+ expect(((components.Holder.properties as JsonObject).map as JsonObject).additionalProperties).toEqual({
112
+ type: 'string',
113
+ });
114
+ });
115
+
116
+ it('normalizes inside unions and arrays, not just properties', () => {
117
+ const components = toOpenApiComponents({
118
+ Holder: {
119
+ type: 'object',
120
+ properties: {
121
+ choice: { anyOf: [{ type: 'object', additionalProperties: {} }, { type: 'string' }] },
122
+ list: { type: 'array', items: { type: 'object', additionalProperties: {} } },
123
+ },
124
+ },
125
+ });
126
+ const properties = components.Holder.properties as Record<string, JsonObject>;
127
+ expect((properties.choice.anyOf as JsonObject[])[0].additionalProperties).toBe(true);
128
+ expect((properties.list.items as JsonObject).additionalProperties).toBe(true);
129
+ });
130
+ });
131
+
132
+ describe('conflicting definitions', () => {
133
+ it('reports two $defs entries that disagree instead of keeping the first', () => {
134
+ expect(() =>
135
+ toOpenApiComponents({
136
+ A: {
137
+ type: 'object',
138
+ properties: { x: { $ref: '#/$defs/Shared' } },
139
+ $defs: { Shared: { type: 'object', properties: { v: { type: 'string' } } } },
140
+ },
141
+ B: {
142
+ type: 'object',
143
+ properties: { y: { $ref: '#/$defs/Shared' } },
144
+ $defs: { Shared: { type: 'object', properties: { v: { type: 'number' } } } },
145
+ },
146
+ }),
147
+ ).toThrow(SchemaAdapterError);
148
+ });
149
+
150
+ it('accepts two $defs entries that agree', () => {
151
+ const shared = { type: 'object', properties: { v: { type: 'string' } } };
152
+ const components = toOpenApiComponents({
153
+ A: { type: 'object', properties: { x: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
154
+ B: { type: 'object', properties: { y: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
155
+ });
156
+ expect(components.Shared).toEqual(shared);
157
+ });
158
+ });
159
+
160
+ describe('$ref siblings', () => {
161
+ it('keeps sibling keywords alongside a rewritten reference', () => {
162
+ // 2020-12 allows annotations next to $ref; dropping them loses documentation and
163
+ // constraints that generated clients surface.
164
+ const components = toOpenApiComponents({
165
+ Account: {
166
+ type: 'object',
167
+ properties: {
168
+ billing: {
169
+ $ref: '#/$defs/AccountBilling',
170
+ description: 'Billing configuration',
171
+ deprecated: true,
172
+ },
173
+ },
174
+ $defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
175
+ },
176
+ });
177
+ expect((components.Account.properties as JsonObject).billing).toEqual({
178
+ $ref: '#/components/schemas/AccountBilling',
179
+ description: 'Billing configuration',
180
+ deprecated: true,
181
+ });
182
+ });
183
+ });
184
+
185
+ describe('reference scope', () => {
186
+ it('resolves a self-reference inside a nested $id to that nested component', () => {
187
+ // `{"$ref": "#"}` inside Child means Child, not the enclosing Account.
188
+ const components = toOpenApiComponents({
189
+ Account: {
190
+ type: 'object',
191
+ properties: {
192
+ child: {
193
+ $id: 'Child',
194
+ type: 'object',
195
+ properties: { next: { $ref: '#' } },
196
+ },
197
+ },
198
+ },
199
+ });
200
+ const child = components.Child.properties as JsonObject;
201
+ expect(child.next).toEqual({ $ref: '#/components/schemas/Child' });
202
+ expect(child.next).not.toEqual({ $ref: '#/components/schemas/Account' });
203
+ });
204
+
205
+ it('still resolves a root-level self-reference to the root', () => {
206
+ const components = toOpenApiComponents({
207
+ Node: { type: 'object', properties: { children: { type: 'array', items: { $ref: '#' } } } },
208
+ });
209
+ const props = components.Node.properties as JsonObject;
210
+ expect((props.children as JsonObject).items).toEqual({ $ref: '#/components/schemas/Node' });
211
+ });
212
+ });
213
+
214
+ describe('discriminator synthesis', () => {
215
+ it('does not synthesize a discriminator from an optional property', () => {
216
+ // OpenAPI treats the discriminator as always present; promoting an optional property
217
+ // would publish a guarantee the schema does not make.
218
+ const components = toOpenApiComponents({
219
+ Union: {
220
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
221
+ $defs: {
222
+ A: { type: 'object', properties: { kind: { const: 'a' } } },
223
+ B: { type: 'object', properties: { kind: { const: 'b' } } },
224
+ },
225
+ },
226
+ });
227
+ expect(components.Union.discriminator).toBeUndefined();
228
+ expect(components.Union.anyOf).toBeDefined();
229
+ });
230
+
231
+ it('synthesizes a discriminator when the property is required in every branch', () => {
232
+ const components = toOpenApiComponents({
233
+ Union: {
234
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
235
+ $defs: {
236
+ A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
237
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
238
+ },
239
+ },
240
+ });
241
+ expect(components.Union.discriminator).toEqual({
242
+ propertyName: 'kind',
243
+ mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
244
+ });
245
+ // Promoted to oneOf, which is what codegen needs.
246
+ expect(components.Union.oneOf).toBeDefined();
247
+ expect(components.Union.anyOf).toBeUndefined();
248
+ });
249
+
250
+ it('does not synthesize when two branches claim the same literal', () => {
251
+ const components = toOpenApiComponents({
252
+ Union: {
253
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
254
+ $defs: {
255
+ A: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
256
+ B: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
257
+ },
258
+ },
259
+ });
260
+ expect(components.Union.discriminator).toBeUndefined();
261
+ });
262
+
263
+ it('reads branches out of the reference components too', () => {
264
+ const components = toOpenApiComponents(
265
+ { Union: { anyOf: [{ $ref: 'A' }, { $ref: 'B' }] } },
266
+ {
267
+ referenceComponents: {
268
+ A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
269
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
270
+ },
271
+ },
272
+ );
273
+ expect(components.Union.discriminator).toEqual({
274
+ propertyName: 'kind',
275
+ mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
276
+ });
277
+ });
278
+
279
+ it('prefers a hoisted branch over a reference component of the same name', () => {
280
+ // A root that redefines an already-published name means the hoisted shape wins, so the
281
+ // literal that lands in the mapping has to be read off the hoisted copy.
282
+ const components = toOpenApiComponents(
283
+ {
284
+ Union: {
285
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
286
+ $defs: {
287
+ A: { type: 'object', properties: { kind: { const: 'hoisted-a' } }, required: ['kind'] },
288
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
289
+ },
290
+ },
291
+ },
292
+ { referenceComponents: { A: { type: 'object', properties: { kind: { const: 'a' } } } } },
293
+ );
294
+ expect(components.Union.discriminator).toEqual({
295
+ propertyName: 'kind',
296
+ mapping: { 'hoisted-a': '#/components/schemas/A', b: '#/components/schemas/B' },
297
+ });
298
+ });
299
+ });
300
+
301
+ describe('strictness reaches anonymous nested objects', () => {
302
+ /**
303
+ * Strictness is declared per component, but an object nested inline in one has no name to declare.
304
+ * The TypeScript-derived generator closed every object it emitted, so the document already publishes
305
+ * those inline objects closed — `QuotaStandingResponse.admission` and `.llm` were the first two
306
+ * converted, and leaving them open would have loosened a published contract while reproducing it.
307
+ */
308
+ const nested = {
309
+ Report: {
310
+ type: 'object',
311
+ properties: {
312
+ inline: { type: 'object', properties: { note: { type: 'string' } } },
313
+ deeper: {
314
+ type: 'array',
315
+ items: { type: 'object', properties: { value: { type: 'number' } } },
316
+ },
317
+ },
318
+ },
319
+ } as const;
320
+
321
+ it('closes an inline object inside a strict component', () => {
322
+ const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
323
+ const properties = components.Report.properties as Record<string, JsonObject>;
324
+ expect(components.Report.additionalProperties).toBe(false);
325
+ expect(properties.inline.additionalProperties).toBe(false);
326
+ });
327
+
328
+ it('closes an inline object nested under array items', () => {
329
+ const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
330
+ const properties = components.Report.properties as Record<string, JsonObject>;
331
+ expect((properties.deeper.items as JsonObject).additionalProperties).toBe(false);
332
+ });
333
+
334
+ it('leaves inline objects open in a component that is not strict', () => {
335
+ const components = toOpenApiComponents(nested);
336
+ const properties = components.Report.properties as Record<string, JsonObject>;
337
+ expect(components.Report.additionalProperties).toBeUndefined();
338
+ expect(properties.inline.additionalProperties).toBeUndefined();
339
+ });
340
+
341
+ it('never overwrites an existing additionalProperties', () => {
342
+ // `true` or a subschema is a deliberate statement about the extras — a Record<string, string>
343
+ // value type, say — so replacing it with `false` would reject data the schema explicitly allows.
344
+ const components = toOpenApiComponents(
345
+ {
346
+ Report: {
347
+ type: 'object',
348
+ properties: {
349
+ map: { type: 'object', additionalProperties: { type: 'string' } },
350
+ open: { type: 'object', additionalProperties: true },
351
+ },
352
+ },
353
+ },
354
+ { strictComponents: new Set(['Report']) },
355
+ );
356
+ const properties = components.Report.properties as Record<string, JsonObject>;
357
+ expect(properties.map.additionalProperties).toEqual({ type: 'string' });
358
+ expect(properties.open.additionalProperties).toBe(true);
359
+ });
360
+
361
+ it('does not close a $ref node, which is governed by its own component', () => {
362
+ const components = toOpenApiComponents(
363
+ {
364
+ Report: {
365
+ type: 'object',
366
+ properties: { billing: { $ref: '#/$defs/Billing' } },
367
+ $defs: { Billing: { $id: 'Billing', type: 'object', properties: {} } },
368
+ },
369
+ },
370
+ { strictComponents: new Set(['Report']) },
371
+ );
372
+ const properties = components.Report.properties as Record<string, JsonObject>;
373
+ expect(Object.keys(properties.billing)).toEqual(['$ref']);
374
+ // Billing was not listed, so it stays open.
375
+ expect(components.Billing.additionalProperties).toBeUndefined();
376
+ });
377
+ });
378
+
379
+ describe('description is emitted last', () => {
380
+ /**
381
+ * Key order carries no meaning to a consumer, but it decides byte-identity — which is how a
382
+ * conversion proves it reproduced the published contract rather than renegotiating it. The
383
+ * scanner's TypeScript-derived output puts `description` last, so matching it is what lets a
384
+ * converted component diff clean.
385
+ */
386
+ it('puts description after a sibling $ref', () => {
387
+ const components = toOpenApiComponents({
388
+ Account: {
389
+ type: 'object',
390
+ properties: { tier: { description: 'The tier.', $ref: '#/$defs/Tier' } },
391
+ $defs: { Tier: { $id: 'Tier', type: 'string' } },
392
+ },
393
+ });
394
+ const properties = components.Account.properties as Record<string, JsonObject>;
395
+ expect(Object.keys(properties.tier)).toEqual(['$ref', 'description']);
396
+ });
397
+
398
+ it('puts description after the additionalProperties the strict policy appends', () => {
399
+ const components = toOpenApiComponents(
400
+ { Payload: { type: 'object', description: 'A payload.', properties: { a: { type: 'string' } } } },
401
+ { strictComponents: new Set(['Payload']) },
402
+ );
403
+ // Declared as `type, description, properties`; the strict policy appends additionalProperties,
404
+ // and description then moves behind it.
405
+ expect(Object.keys(components.Payload)).toEqual(['type', 'properties', 'additionalProperties', 'description']);
406
+ });
407
+
408
+ it('does not reorder a property NAMED description', () => {
409
+ // The trap a generic "walk every object" pass falls into: `properties` keys are user data, and
410
+ // five published components have a property called `description`. Moving it would change the
411
+ // published property order.
412
+ const components = toOpenApiComponents({
413
+ Project: {
414
+ type: 'object',
415
+ properties: {
416
+ id: { type: 'string' },
417
+ description: { type: 'string' },
418
+ account: { type: 'string' },
419
+ },
420
+ },
421
+ });
422
+ expect(Object.keys(components.Project.properties as JsonObject)).toEqual(['id', 'description', 'account']);
423
+ });
424
+
425
+ it('leaves a description that is already last alone', () => {
426
+ const components = toOpenApiComponents({ Tier: { type: 'string', description: 'A tier.' } });
427
+ expect(Object.keys(components.Tier)).toEqual(['type', 'description']);
428
+ });
429
+ });
430
+
431
+ describe('hoisting a union and its members', () => {
432
+ /**
433
+ * A discriminated union's `discriminator` is SYNTHESIZED from its members, so the members have to
434
+ * be registered before the union that references them. `$defs` order is whatever Zod emitted, and
435
+ * the same union is routinely reachable from two roots — once where its members happen to come
436
+ * first and once where they do not. Hoisting in declaration order made those two emissions differ,
437
+ * and the adapter then reported a component "defined twice with different shapes" that nobody had
438
+ * defined twice. `EmbeddingsApiInput` was the first to hit it.
439
+ */
440
+ const MEMBERS = {
441
+ Text: { $id: 'Text', type: 'object', properties: { kind: { const: 'text' } }, required: ['kind'] },
442
+ Image: { $id: 'Image', type: 'object', properties: { kind: { const: 'image' } }, required: ['kind'] },
443
+ };
444
+ const UNION = { $id: 'Input', anyOf: [{ $ref: '#/$defs/Text' }, { $ref: '#/$defs/Image' }] };
445
+
446
+ it('synthesizes the discriminator whichever order $defs lists them in', () => {
447
+ const unionFirst = toOpenApiComponents({
448
+ Request: {
449
+ type: 'object',
450
+ properties: { input: { $ref: '#/$defs/Input' } },
451
+ $defs: { Input: UNION, ...MEMBERS },
452
+ },
453
+ });
454
+ const membersFirst = toOpenApiComponents({
455
+ Request: {
456
+ type: 'object',
457
+ properties: { input: { $ref: '#/$defs/Input' } },
458
+ $defs: { ...MEMBERS, Input: UNION },
459
+ },
460
+ });
461
+
462
+ expect(unionFirst.Input).toEqual(membersFirst.Input);
463
+ expect(unionFirst.Input).toMatchObject({ discriminator: { propertyName: 'kind' }, required: ['kind'] });
464
+ });
465
+
466
+ it('emits the same union from a root that declares it and a root that references it', () => {
467
+ // The shape that actually threw: one root IS the union, another reaches it through a property.
468
+ // `register` compares fingerprints, so two spellings of the same component are a hard failure.
469
+ expect(() =>
470
+ toOpenApiComponents({
471
+ Request: {
472
+ type: 'object',
473
+ properties: { input: { $ref: '#/$defs/Input' } },
474
+ $defs: { Input: UNION, ...MEMBERS },
475
+ },
476
+ Input: { ...UNION, $defs: MEMBERS },
477
+ }),
478
+ ).not.toThrow();
479
+ });
480
+ });