@vertesia/common 1.5.0-dev.20260722.120446Z → 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 (522) 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 +116 -1121
  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 -113
  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 +116 -734
  253. package/lib/interaction.d.ts.map +1 -1
  254. package/lib/interaction.js +56 -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 +63 -342
  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 +63 -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 -693
  346. package/lib/store/store.d.ts.map +1 -1
  347. package/lib/store/store.js +4 -443
  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 +56 -516
  354. package/lib/store/workflow.d.ts.map +1 -1
  355. package/lib/store/workflow.js +28 -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 +14 -5
  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/agent-resources.test.ts +100 -0
  389. package/src/analytics.ts +18 -42
  390. package/src/api-schemas/access-control.contract.test.ts +209 -0
  391. package/src/api-schemas/access-control.ts +208 -0
  392. package/src/api-schemas/account.contract.test.ts +318 -0
  393. package/src/api-schemas/account.ts +150 -0
  394. package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
  395. package/src/api-schemas/adapter.ts +778 -0
  396. package/src/api-schemas/agent-runs.ts +1081 -0
  397. package/src/api-schemas/analytics.ts +65 -0
  398. package/src/api-schemas/apikey.contract.test.ts +270 -0
  399. package/src/api-schemas/apikey.ts +199 -0
  400. package/src/api-schemas/app-lifecycle.ts +841 -0
  401. package/src/api-schemas/app-runtime.ts +919 -0
  402. package/src/api-schemas/apps.ts +415 -0
  403. package/src/api-schemas/audit-trail.ts +243 -0
  404. package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
  405. package/src/api-schemas/bulk-operation.ts +75 -0
  406. package/src/api-schemas/bundle-isolation.test.ts +80 -0
  407. package/src/api-schemas/commands.contract.test.ts +51 -0
  408. package/src/api-schemas/commands.ts +62 -0
  409. package/src/api-schemas/content.ts +939 -0
  410. package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
  411. package/src/api-schemas/cost-analytics.ts +235 -0
  412. package/src/api-schemas/dashboard.contract.test.ts +127 -0
  413. package/src/api-schemas/dashboard.ts +351 -0
  414. package/src/api-schemas/data-store.contract.test.ts +91 -0
  415. package/src/api-schemas/data-store.ts +571 -0
  416. package/src/api-schemas/document-processing.contract.test.ts +76 -0
  417. package/src/api-schemas/document-processing.ts +344 -0
  418. package/src/api-schemas/embeddings.ts +113 -0
  419. package/src/api-schemas/environment.contract.test.ts +184 -0
  420. package/src/api-schemas/environment.ts +190 -0
  421. package/src/api-schemas/events.ts +921 -0
  422. package/src/api-schemas/files.ts +159 -0
  423. package/src/api-schemas/group.contract.test.ts +205 -0
  424. package/src/api-schemas/group.ts +155 -0
  425. package/src/api-schemas/index.ts +35 -0
  426. package/src/api-schemas/indexing.contract.test.ts +83 -0
  427. package/src/api-schemas/indexing.ts +234 -0
  428. package/src/api-schemas/integrations.ts +369 -0
  429. package/src/api-schemas/interaction.ts +2357 -0
  430. package/src/api-schemas/invites.contract.test.ts +268 -0
  431. package/src/api-schemas/invites.ts +127 -0
  432. package/src/api-schemas/llumiverse.contract.test.ts +108 -0
  433. package/src/api-schemas/oauth-server.ts +219 -0
  434. package/src/api-schemas/oauth.contract.test.ts +118 -0
  435. package/src/api-schemas/oauth.ts +166 -0
  436. package/src/api-schemas/parameters.test.ts +402 -0
  437. package/src/api-schemas/parameters.ts +310 -0
  438. package/src/api-schemas/process.ts +929 -0
  439. package/src/api-schemas/project-configuration.ts +478 -0
  440. package/src/api-schemas/project.contract.test.ts +365 -0
  441. package/src/api-schemas/project.ts +214 -0
  442. package/src/api-schemas/prompt.ts +88 -0
  443. package/src/api-schemas/pruning-limits.test.ts +189 -0
  444. package/src/api-schemas/quota.contract.test.ts +147 -0
  445. package/src/api-schemas/quota.ts +122 -0
  446. package/src/api-schemas/registry-groups.test.ts +91 -0
  447. package/src/api-schemas/registry.ts +3487 -0
  448. package/src/api-schemas/response-pruning.test.ts +260 -0
  449. package/src/api-schemas/schema-primitives.ts +12 -0
  450. package/src/api-schemas/secrets.ts +332 -0
  451. package/src/api-schemas/store.contract.test.ts +450 -0
  452. package/src/api-schemas/store.ts +604 -0
  453. package/src/api-schemas/sts.contract.test.ts +80 -0
  454. package/src/api-schemas/sts.ts +110 -0
  455. package/src/api-schemas/task.ts +104 -0
  456. package/src/api-schemas/tools.ts +140 -0
  457. package/src/api-schemas/user.contract.test.ts +191 -0
  458. package/src/api-schemas/user.ts +204 -0
  459. package/src/api-schemas/view-execution.ts +200 -0
  460. package/src/api-schemas/views.ts +437 -0
  461. package/src/api-schemas/workflow-runs.ts +653 -0
  462. package/src/apikey-values.ts +10 -0
  463. package/src/apikey.ts +49 -40
  464. package/src/apps.ts +249 -1179
  465. package/src/ask-user.ts +9 -1
  466. package/src/audit-trail.ts +45 -137
  467. package/src/browser-credentials.ts +21 -106
  468. package/src/common.ts +67 -78
  469. package/src/cost-analytics.ts +37 -176
  470. package/src/data-platform.ts +205 -776
  471. package/src/email.ts +5 -17
  472. package/src/embeddings.ts +22 -60
  473. package/src/environment.ts +52 -124
  474. package/src/facets.ts +4 -7
  475. package/src/group.ts +38 -42
  476. package/src/index.ts +11 -0
  477. package/src/integrations.ts +39 -129
  478. package/src/interaction-values.ts +23 -0
  479. package/src/interaction.ts +231 -841
  480. package/src/meters.ts +11 -7
  481. package/src/oauth-server.ts +58 -127
  482. package/src/oauth.ts +24 -108
  483. package/src/payload.ts +25 -40
  484. package/src/platform-event.ts +98 -484
  485. package/src/principal-context.ts +11 -15
  486. package/src/project-values.ts +41 -0
  487. package/src/project.ts +116 -588
  488. package/src/prompt.ts +34 -61
  489. package/src/query.ts +34 -93
  490. package/src/rate-limiter.ts +27 -75
  491. package/src/refs.ts +4 -11
  492. package/src/roles/types.ts +20 -20
  493. package/src/runs.ts +11 -24
  494. package/src/secrets.ts +38 -117
  495. package/src/store/agent-approval.ts +9 -14
  496. package/src/store/agent-run.ts +106 -434
  497. package/src/store/collections.ts +21 -63
  498. package/src/store/content-type-editing.test.ts +17 -0
  499. package/src/store/conversation-state.ts +78 -64
  500. package/src/store/doc-analyzer.ts +17 -33
  501. package/src/store/dsl-workflow.ts +62 -158
  502. package/src/store/editing-policy-schema.generated.ts +30 -0
  503. package/src/store/grounded-extraction.ts +13 -104
  504. package/src/store/index.ts +3 -0
  505. package/src/store/intake-policy-schema.generated.ts +1442 -0
  506. package/src/store/process-schema.test.ts +43 -0
  507. package/src/store/process-schema.ts +79 -0
  508. package/src/store/process-validation.test.ts +141 -0
  509. package/src/store/process-validation.ts +82 -2
  510. package/src/store/process.ts +70 -146
  511. package/src/store/rendering.ts +15 -64
  512. package/src/store/store.ts +197 -1182
  513. package/src/store/task.ts +25 -59
  514. package/src/store/workflow.ts +103 -554
  515. package/src/sts-token-types.ts +24 -75
  516. package/src/tools.ts +18 -97
  517. package/src/transient-tokens-values.ts +11 -0
  518. package/src/transient-tokens.ts +16 -13
  519. package/src/user.ts +74 -214
  520. package/src/versions.ts +24 -0
  521. package/src/views-schema.test.ts +9 -1
  522. 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
+ });