@vertesia/common 1.6.0-dev.20260923.085325Z → 1.6.0-dev.20261004.085740Z

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 (405) hide show
  1. package/lib/access-control-values.d.ts +2 -2
  2. package/lib/access-control-values.d.ts.map +1 -1
  3. package/lib/access-control-values.js +2 -2
  4. package/lib/access-control-values.js.map +1 -1
  5. package/lib/access-control.d.ts +7 -8
  6. package/lib/access-control.d.ts.map +1 -1
  7. package/lib/access-control.js +5 -0
  8. package/lib/access-control.js.map +1 -1
  9. package/lib/analytics.d.ts +6 -7
  10. package/lib/analytics.d.ts.map +1 -1
  11. package/lib/api-contract/components.generated.json +1389 -45
  12. package/lib/api-schemas/access-control.d.ts +33 -10
  13. package/lib/api-schemas/access-control.d.ts.map +1 -1
  14. package/lib/api-schemas/access-control.js +7 -6
  15. package/lib/api-schemas/access-control.js.map +1 -1
  16. package/lib/api-schemas/account.d.ts +5 -4
  17. package/lib/api-schemas/account.d.ts.map +1 -1
  18. package/lib/api-schemas/account.js.map +1 -1
  19. package/lib/api-schemas/agent-budget.d.ts +15 -0
  20. package/lib/api-schemas/agent-budget.d.ts.map +1 -0
  21. package/lib/api-schemas/agent-budget.js +55 -0
  22. package/lib/api-schemas/agent-budget.js.map +1 -0
  23. package/lib/api-schemas/agent-runs.d.ts +1525 -100
  24. package/lib/api-schemas/agent-runs.d.ts.map +1 -1
  25. package/lib/api-schemas/agent-runs.js +60 -28
  26. package/lib/api-schemas/agent-runs.js.map +1 -1
  27. package/lib/api-schemas/apikey.d.ts +11 -10
  28. package/lib/api-schemas/apikey.d.ts.map +1 -1
  29. package/lib/api-schemas/apikey.js.map +1 -1
  30. package/lib/api-schemas/app-lifecycle.d.ts +13 -0
  31. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -1
  32. package/lib/api-schemas/app-lifecycle.js +4 -0
  33. package/lib/api-schemas/app-lifecycle.js.map +1 -1
  34. package/lib/api-schemas/app-runtime.d.ts +1821 -108
  35. package/lib/api-schemas/app-runtime.d.ts.map +1 -1
  36. package/lib/api-schemas/audit-trail.d.ts +20 -0
  37. package/lib/api-schemas/audit-trail.d.ts.map +1 -1
  38. package/lib/api-schemas/audit-trail.js +7 -1
  39. package/lib/api-schemas/audit-trail.js.map +1 -1
  40. package/lib/api-schemas/content.d.ts +665 -30
  41. package/lib/api-schemas/content.d.ts.map +1 -1
  42. package/lib/api-schemas/content.js +47 -0
  43. package/lib/api-schemas/content.js.map +1 -1
  44. package/lib/api-schemas/cost-analytics.d.ts +18 -0
  45. package/lib/api-schemas/cost-analytics.d.ts.map +1 -1
  46. package/lib/api-schemas/cost-analytics.js +31 -2
  47. package/lib/api-schemas/cost-analytics.js.map +1 -1
  48. package/lib/api-schemas/document-processing.d.ts +381 -18
  49. package/lib/api-schemas/document-processing.d.ts.map +1 -1
  50. package/lib/api-schemas/environment.d.ts +0 -5
  51. package/lib/api-schemas/environment.d.ts.map +1 -1
  52. package/lib/api-schemas/environment.js +0 -1
  53. package/lib/api-schemas/environment.js.map +1 -1
  54. package/lib/api-schemas/events.d.ts +1143 -54
  55. package/lib/api-schemas/events.d.ts.map +1 -1
  56. package/lib/api-schemas/group.d.ts +2 -1
  57. package/lib/api-schemas/group.d.ts.map +1 -1
  58. package/lib/api-schemas/group.js.map +1 -1
  59. package/lib/api-schemas/index.d.ts +1 -0
  60. package/lib/api-schemas/index.d.ts.map +1 -1
  61. package/lib/api-schemas/index.js +1 -0
  62. package/lib/api-schemas/index.js.map +1 -1
  63. package/lib/api-schemas/inference-profile.d.ts +5017 -0
  64. package/lib/api-schemas/inference-profile.d.ts.map +1 -0
  65. package/lib/api-schemas/inference-profile.js +135 -0
  66. package/lib/api-schemas/inference-profile.js.map +1 -0
  67. package/lib/api-schemas/integrations.d.ts +6 -6
  68. package/lib/api-schemas/interaction.d.ts +34391 -703
  69. package/lib/api-schemas/interaction.d.ts.map +1 -1
  70. package/lib/api-schemas/interaction.js +34 -1
  71. package/lib/api-schemas/interaction.js.map +1 -1
  72. package/lib/api-schemas/invites.d.ts +10 -9
  73. package/lib/api-schemas/invites.d.ts.map +1 -1
  74. package/lib/api-schemas/invites.js.map +1 -1
  75. package/lib/api-schemas/process.d.ts +653 -34
  76. package/lib/api-schemas/process.d.ts.map +1 -1
  77. package/lib/api-schemas/process.js +66 -0
  78. package/lib/api-schemas/process.js.map +1 -1
  79. package/lib/api-schemas/project-configuration.d.ts +1323 -62
  80. package/lib/api-schemas/project-configuration.d.ts.map +1 -1
  81. package/lib/api-schemas/project-configuration.js +15 -1
  82. package/lib/api-schemas/project-configuration.js.map +1 -1
  83. package/lib/api-schemas/project.d.ts +2031 -116
  84. package/lib/api-schemas/project.d.ts.map +1 -1
  85. package/lib/api-schemas/project.js +9 -1
  86. package/lib/api-schemas/project.js.map +1 -1
  87. package/lib/api-schemas/quota.d.ts +7 -6
  88. package/lib/api-schemas/quota.d.ts.map +1 -1
  89. package/lib/api-schemas/quota.js.map +1 -1
  90. package/lib/api-schemas/registry.d.ts +27820 -35892
  91. package/lib/api-schemas/registry.d.ts.map +1 -1
  92. package/lib/api-schemas/registry.js +55 -5
  93. package/lib/api-schemas/registry.js.map +1 -1
  94. package/lib/api-schemas/run-budget.d.ts +52 -0
  95. package/lib/api-schemas/run-budget.d.ts.map +1 -0
  96. package/lib/api-schemas/run-budget.js +55 -0
  97. package/lib/api-schemas/run-budget.js.map +1 -0
  98. package/lib/api-schemas/store.d.ts +6388 -338
  99. package/lib/api-schemas/store.d.ts.map +1 -1
  100. package/lib/api-schemas/store.js +11 -0
  101. package/lib/api-schemas/store.js.map +1 -1
  102. package/lib/api-schemas/user.d.ts +9 -8
  103. package/lib/api-schemas/user.d.ts.map +1 -1
  104. package/lib/api-schemas/user.js.map +1 -1
  105. package/lib/api-schemas/view-execution.d.ts +8 -0
  106. package/lib/api-schemas/view-execution.d.ts.map +1 -1
  107. package/lib/api-schemas/views.d.ts +14 -0
  108. package/lib/api-schemas/views.d.ts.map +1 -1
  109. package/lib/api-schemas/workflow-runs.d.ts +335 -12
  110. package/lib/api-schemas/workflow-runs.d.ts.map +1 -1
  111. package/lib/api-schemas/workflow-runs.js +2 -0
  112. package/lib/api-schemas/workflow-runs.js.map +1 -1
  113. package/lib/apikey.d.ts +30 -25
  114. package/lib/apikey.d.ts.map +1 -1
  115. package/lib/apikey.js.map +1 -1
  116. package/lib/apps.d.ts +116 -121
  117. package/lib/apps.d.ts.map +1 -1
  118. package/lib/apps.js.map +1 -1
  119. package/lib/audit-trail.d.ts +17 -18
  120. package/lib/audit-trail.d.ts.map +1 -1
  121. package/lib/audit-trail.js +2 -0
  122. package/lib/audit-trail.js.map +1 -1
  123. package/lib/browser-credentials.d.ts +11 -12
  124. package/lib/browser-credentials.d.ts.map +1 -1
  125. package/lib/common.d.ts +17 -24
  126. package/lib/common.d.ts.map +1 -1
  127. package/lib/content-query.d.ts +3 -4
  128. package/lib/content-query.d.ts.map +1 -1
  129. package/lib/cost-analytics.d.ts +13 -21
  130. package/lib/cost-analytics.d.ts.map +1 -1
  131. package/lib/cost-analytics.js +0 -7
  132. package/lib/cost-analytics.js.map +1 -1
  133. package/lib/data-platform.d.ts +79 -88
  134. package/lib/data-platform.d.ts.map +1 -1
  135. package/lib/data-platform.js.map +1 -1
  136. package/lib/delegation.d.ts +4 -5
  137. package/lib/delegation.d.ts.map +1 -1
  138. package/lib/email.d.ts +15 -17
  139. package/lib/email.d.ts.map +1 -1
  140. package/lib/email.js.map +1 -1
  141. package/lib/embeddings.d.ts +25 -26
  142. package/lib/embeddings.d.ts.map +1 -1
  143. package/lib/environment.d.ts +16 -17
  144. package/lib/environment.d.ts.map +1 -1
  145. package/lib/environment.js.map +1 -1
  146. package/lib/facets.d.ts +3 -4
  147. package/lib/facets.d.ts.map +1 -1
  148. package/lib/group.d.ts +6 -7
  149. package/lib/group.d.ts.map +1 -1
  150. package/lib/group.js.map +1 -1
  151. package/lib/index.d.ts +3 -1
  152. package/lib/index.d.ts.map +1 -1
  153. package/lib/index.js.map +1 -1
  154. package/lib/inference-profile.d.ts +17 -0
  155. package/lib/inference-profile.d.ts.map +1 -0
  156. package/lib/inference-profile.js +2 -0
  157. package/lib/inference-profile.js.map +1 -0
  158. package/lib/integrations.d.ts +19 -20
  159. package/lib/integrations.d.ts.map +1 -1
  160. package/lib/integrations.js.map +1 -1
  161. package/lib/interaction.d.ts +68 -73
  162. package/lib/interaction.d.ts.map +1 -1
  163. package/lib/interaction.js.map +1 -1
  164. package/lib/meters.d.ts +4 -5
  165. package/lib/meters.d.ts.map +1 -1
  166. package/lib/oauth-server.d.ts +40 -41
  167. package/lib/oauth-server.d.ts.map +1 -1
  168. package/lib/oauth.d.ts +9 -10
  169. package/lib/oauth.d.ts.map +1 -1
  170. package/lib/payload.d.ts +11 -14
  171. package/lib/payload.d.ts.map +1 -1
  172. package/lib/pending-asks.d.ts +8 -13
  173. package/lib/pending-asks.d.ts.map +1 -1
  174. package/lib/pending-asks.js +0 -4
  175. package/lib/pending-asks.js.map +1 -1
  176. package/lib/platform-event.d.ts +48 -51
  177. package/lib/platform-event.d.ts.map +1 -1
  178. package/lib/platform-event.js.map +1 -1
  179. package/lib/principal-context.d.ts +3 -3
  180. package/lib/principal-context.d.ts.map +1 -1
  181. package/lib/project.d.ts +42 -43
  182. package/lib/project.d.ts.map +1 -1
  183. package/lib/project.js.map +1 -1
  184. package/lib/prompt.d.ts +14 -16
  185. package/lib/prompt.d.ts.map +1 -1
  186. package/lib/prompt.js.map +1 -1
  187. package/lib/query.d.ts +10 -13
  188. package/lib/query.d.ts.map +1 -1
  189. package/lib/rate-limiter.d.ts +7 -11
  190. package/lib/rate-limiter.d.ts.map +1 -1
  191. package/lib/refs.d.ts +2 -3
  192. package/lib/refs.d.ts.map +1 -1
  193. package/lib/refs.js.map +1 -1
  194. package/lib/roles/types.d.ts +5 -6
  195. package/lib/roles/types.d.ts.map +1 -1
  196. package/lib/roles/types.js.map +1 -1
  197. package/lib/run-budget.d.ts +8 -0
  198. package/lib/run-budget.d.ts.map +1 -0
  199. package/lib/run-budget.js +2 -0
  200. package/lib/run-budget.js.map +1 -0
  201. package/lib/runs.d.ts +9 -10
  202. package/lib/runs.d.ts.map +1 -1
  203. package/lib/secrets.d.ts +20 -21
  204. package/lib/secrets.d.ts.map +1 -1
  205. package/lib/store/agent-approval.d.ts +4 -5
  206. package/lib/store/agent-approval.d.ts.map +1 -1
  207. package/lib/store/agent-approval.js.map +1 -1
  208. package/lib/store/agent-run.d.ts +50 -52
  209. package/lib/store/agent-run.d.ts.map +1 -1
  210. package/lib/store/agent-run.js.map +1 -1
  211. package/lib/store/collections.d.ts +11 -12
  212. package/lib/store/collections.d.ts.map +1 -1
  213. package/lib/store/collections.js.map +1 -1
  214. package/lib/store/conversation-state.d.ts +14 -8
  215. package/lib/store/conversation-state.d.ts.map +1 -1
  216. package/lib/store/doc-analyzer.d.ts +7 -8
  217. package/lib/store/doc-analyzer.d.ts.map +1 -1
  218. package/lib/store/dsl-workflow.d.ts +10 -12
  219. package/lib/store/dsl-workflow.d.ts.map +1 -1
  220. package/lib/store/dsl-workflow.js.map +1 -1
  221. package/lib/store/duration.d.ts +12 -0
  222. package/lib/store/duration.d.ts.map +1 -0
  223. package/lib/store/duration.js +2 -0
  224. package/lib/store/duration.js.map +1 -0
  225. package/lib/store/grounded-extraction.d.ts +6 -7
  226. package/lib/store/grounded-extraction.d.ts.map +1 -1
  227. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -1
  228. package/lib/store/intake-policy-schema.generated.js +143 -2
  229. package/lib/store/intake-policy-schema.generated.js.map +1 -1
  230. package/lib/store/process.d.ts +70 -69
  231. package/lib/store/process.d.ts.map +1 -1
  232. package/lib/store/process.js.map +1 -1
  233. package/lib/store/rendering.d.ts +6 -12
  234. package/lib/store/rendering.d.ts.map +1 -1
  235. package/lib/store/rendering.js +0 -5
  236. package/lib/store/rendering.js.map +1 -1
  237. package/lib/store/signals.d.ts +43 -0
  238. package/lib/store/signals.d.ts.map +1 -1
  239. package/lib/store/signals.js +6 -1
  240. package/lib/store/signals.js.map +1 -1
  241. package/lib/store/store.d.ts +92 -91
  242. package/lib/store/store.d.ts.map +1 -1
  243. package/lib/store/store.js.map +1 -1
  244. package/lib/store/task.d.ts +10 -14
  245. package/lib/store/task.d.ts.map +1 -1
  246. package/lib/store/workflow.d.ts +35 -41
  247. package/lib/store/workflow.d.ts.map +1 -1
  248. package/lib/store/workflow.js.map +1 -1
  249. package/lib/sts-token-types.d.ts +14 -19
  250. package/lib/sts-token-types.d.ts.map +1 -1
  251. package/lib/tools.d.ts +12 -13
  252. package/lib/tools.d.ts.map +1 -1
  253. package/lib/transient-tokens.d.ts +3 -3
  254. package/lib/transient-tokens.d.ts.map +1 -1
  255. package/lib/user.d.ts +17 -20
  256. package/lib/user.d.ts.map +1 -1
  257. package/lib/user.js.map +1 -1
  258. package/lib/vertesia-common.js +2 -2
  259. package/lib/vertesia-common.js.map +1 -1
  260. package/lib/views.d.ts +61 -64
  261. package/lib/views.d.ts.map +1 -1
  262. package/lib/views.js.map +1 -1
  263. package/lib/wire-types.generated.d.ts +11231 -0
  264. package/lib/wire-types.generated.d.ts.map +1 -0
  265. package/lib/wire-types.generated.js +4 -0
  266. package/lib/wire-types.generated.js.map +1 -0
  267. package/lib/workflow-analytics.d.ts +21 -19
  268. package/lib/workflow-analytics.d.ts.map +1 -1
  269. package/lib/workflow-analytics.js +2 -2
  270. package/lib/workflow-analytics.js.map +1 -1
  271. package/package.json +15 -10
  272. package/src/access-control-values.ts +2 -2
  273. package/src/access-control.ts +7 -15
  274. package/src/analytics.ts +6 -13
  275. package/src/api-contract/components.generated.json +1389 -45
  276. package/src/api-schemas/access-control.ts +18 -16
  277. package/src/api-schemas/account.ts +5 -4
  278. package/src/api-schemas/agent-budget.ts +60 -0
  279. package/src/api-schemas/agent-runs.ts +63 -27
  280. package/src/api-schemas/apikey.ts +11 -10
  281. package/src/api-schemas/app-lifecycle.ts +5 -0
  282. package/src/api-schemas/audit-trail.ts +7 -1
  283. package/src/api-schemas/content.ts +55 -0
  284. package/src/api-schemas/cost-analytics.ts +34 -2
  285. package/src/api-schemas/environment.ts +0 -1
  286. package/src/api-schemas/group.ts +2 -1
  287. package/src/api-schemas/index.ts +1 -0
  288. package/src/api-schemas/inference-profile.ts +151 -0
  289. package/src/api-schemas/interaction.ts +40 -1
  290. package/src/api-schemas/invites.ts +10 -9
  291. package/src/api-schemas/process.ts +78 -2
  292. package/src/api-schemas/project-configuration.ts +19 -1
  293. package/src/api-schemas/project.ts +19 -10
  294. package/src/api-schemas/quota.ts +7 -6
  295. package/src/api-schemas/registry.ts +131 -33
  296. package/src/api-schemas/run-budget.ts +60 -0
  297. package/src/api-schemas/store.ts +12 -0
  298. package/src/api-schemas/user.ts +9 -8
  299. package/src/api-schemas/workflow-runs.ts +2 -0
  300. package/src/apikey.ts +30 -39
  301. package/src/apps.ts +116 -239
  302. package/src/audit-trail.ts +18 -33
  303. package/src/browser-credentials.ts +11 -23
  304. package/src/common.ts +17 -37
  305. package/src/content-query.ts +3 -4
  306. package/src/cost-analytics.ts +13 -35
  307. package/src/data-platform.ts +79 -168
  308. package/src/delegation.ts +4 -9
  309. package/src/email.ts +15 -29
  310. package/src/embeddings.ts +25 -51
  311. package/src/environment.ts +16 -33
  312. package/src/facets.ts +3 -4
  313. package/src/group.ts +6 -13
  314. package/src/index.ts +27 -0
  315. package/src/inference-profile.ts +20 -0
  316. package/src/integrations.ts +21 -41
  317. package/src/interaction.ts +68 -137
  318. package/src/meters.ts +4 -9
  319. package/src/oauth-server.ts +40 -81
  320. package/src/oauth.ts +9 -19
  321. package/src/payload.ts +11 -25
  322. package/src/pending-asks.ts +8 -22
  323. package/src/platform-event.ts +48 -97
  324. package/src/principal-context.ts +3 -3
  325. package/src/project.ts +43 -86
  326. package/src/prompt.ts +14 -31
  327. package/src/query.ts +10 -20
  328. package/src/rate-limiter.ts +7 -19
  329. package/src/refs.ts +2 -3
  330. package/src/roles/types.ts +5 -11
  331. package/src/run-budget.ts +8 -0
  332. package/src/runs.ts +9 -19
  333. package/src/secrets.ts +20 -41
  334. package/src/store/agent-approval.ts +4 -9
  335. package/src/store/agent-run.ts +53 -99
  336. package/src/store/collections.ts +11 -23
  337. package/src/store/conversation-state.ts +15 -15
  338. package/src/store/doc-analyzer.ts +7 -15
  339. package/src/store/dsl-workflow.ts +10 -23
  340. package/src/store/duration.ts +45 -0
  341. package/src/store/grounded-extraction.ts +6 -13
  342. package/src/store/intake-policy-schema.generated.ts +148 -2
  343. package/src/store/process.ts +70 -140
  344. package/src/store/rendering.ts +6 -19
  345. package/src/store/signals.ts +48 -0
  346. package/src/store/store.ts +92 -181
  347. package/src/store/task.ts +10 -24
  348. package/src/store/workflow.ts +35 -71
  349. package/src/sts-token-types.ts +14 -33
  350. package/src/tools.ts +12 -25
  351. package/src/transient-tokens.ts +3 -3
  352. package/src/user.ts +17 -39
  353. package/src/views.ts +61 -125
  354. package/src/wire-types.generated.ts +11889 -0
  355. package/src/workflow-analytics.ts +21 -19
  356. package/src/agent-resources.test.ts +0 -89
  357. package/src/api-contract/components.contract.test.ts +0 -99
  358. package/src/api-schemas/access-control.contract.test.ts +0 -209
  359. package/src/api-schemas/account-apikey.test.ts +0 -60
  360. package/src/api-schemas/account.contract.test.ts +0 -319
  361. package/src/api-schemas/adapter-edge-cases.test.ts +0 -499
  362. package/src/api-schemas/agent-communication.contract.test.ts +0 -90
  363. package/src/api-schemas/agent-history.contract.test.ts +0 -42
  364. package/src/api-schemas/agent-runs.contract.test.ts +0 -240
  365. package/src/api-schemas/api-discriminators.test.ts +0 -185
  366. package/src/api-schemas/apikey.contract.test.ts +0 -270
  367. package/src/api-schemas/app-delete-summary.contract.test.ts +0 -67
  368. package/src/api-schemas/bulk-operation.contract.test.ts +0 -39
  369. package/src/api-schemas/bundle-isolation.test.ts +0 -44
  370. package/src/api-schemas/commands.contract.test.ts +0 -51
  371. package/src/api-schemas/cost-analytics.contract.test.ts +0 -64
  372. package/src/api-schemas/dashboard.contract.test.ts +0 -138
  373. package/src/api-schemas/data-store.contract.test.ts +0 -97
  374. package/src/api-schemas/document-processing.contract.test.ts +0 -76
  375. package/src/api-schemas/emit-json-schema.test.ts +0 -36
  376. package/src/api-schemas/environment.contract.test.ts +0 -202
  377. package/src/api-schemas/group.contract.test.ts +0 -205
  378. package/src/api-schemas/indexing.contract.test.ts +0 -122
  379. package/src/api-schemas/interaction.contract.test.ts +0 -307
  380. package/src/api-schemas/invites.contract.test.ts +0 -268
  381. package/src/api-schemas/llumiverse.contract.test.ts +0 -179
  382. package/src/api-schemas/mcp-api-key.contract.test.ts +0 -125
  383. package/src/api-schemas/oauth.contract.test.ts +0 -181
  384. package/src/api-schemas/parameters.test.ts +0 -402
  385. package/src/api-schemas/process.contract.test.ts +0 -115
  386. package/src/api-schemas/project.contract.test.ts +0 -472
  387. package/src/api-schemas/pruning-limits.test.ts +0 -189
  388. package/src/api-schemas/quota.contract.test.ts +0 -147
  389. package/src/api-schemas/registry-groups.test.ts +0 -99
  390. package/src/api-schemas/response-pruning.test.ts +0 -260
  391. package/src/api-schemas/store.contract.test.ts +0 -378
  392. package/src/api-schemas/sts.contract.test.ts +0 -112
  393. package/src/api-schemas/user.contract.test.ts +0 -197
  394. package/src/api-schemas/views.contract.test.ts +0 -112
  395. package/src/api-schemas/zeno-response-contracts.test.ts +0 -380
  396. package/src/apps.test.ts +0 -89
  397. package/src/oauth-scopes.test.ts +0 -15
  398. package/src/roles.test.ts +0 -33
  399. package/src/schema-for-extraction.test.ts +0 -191
  400. package/src/store/agent-approval.test.ts +0 -18
  401. package/src/store/content-type-editing.test.ts +0 -17
  402. package/src/store/ms.d.ts +0 -42
  403. package/src/store/schedule.test.ts +0 -59
  404. package/src/store/workflow.test.ts +0 -640
  405. package/src/versions.test.ts +0 -13
@@ -1,640 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import {
3
- type AgentMessage,
4
- AgentMessageType,
5
- type CompactMessage,
6
- createCompactMessage,
7
- isCompactMessage,
8
- isLegacyMessage,
9
- normalizeMessageType,
10
- parseMessage,
11
- toAgentMessage,
12
- toCompactMessage,
13
- } from './workflow.js';
14
-
15
- describe('CompactMessage converters', () => {
16
- describe('normalizeMessageType', () => {
17
- it('handles integer values (current format)', () => {
18
- expect(normalizeMessageType(0)).toBe(AgentMessageType.SYSTEM);
19
- expect(normalizeMessageType(1)).toBe(AgentMessageType.THOUGHT);
20
- expect(normalizeMessageType(2)).toBe(AgentMessageType.PLAN);
21
- expect(normalizeMessageType(3)).toBe(AgentMessageType.UPDATE);
22
- expect(normalizeMessageType(4)).toBe(AgentMessageType.COMPLETE);
23
- expect(normalizeMessageType(5)).toBe(AgentMessageType.WARNING);
24
- expect(normalizeMessageType(6)).toBe(AgentMessageType.ERROR);
25
- expect(normalizeMessageType(7)).toBe(AgentMessageType.ANSWER);
26
- expect(normalizeMessageType(8)).toBe(AgentMessageType.QUESTION);
27
- expect(normalizeMessageType(9)).toBe(AgentMessageType.REQUEST_INPUT);
28
- expect(normalizeMessageType(10)).toBe(AgentMessageType.IDLE);
29
- expect(normalizeMessageType(11)).toBe(AgentMessageType.TERMINATED);
30
- expect(normalizeMessageType(12)).toBe(AgentMessageType.STREAMING_CHUNK);
31
- expect(normalizeMessageType(13)).toBe(AgentMessageType.BATCH_PROGRESS);
32
- });
33
-
34
- it('handles string values (legacy format)', () => {
35
- expect(normalizeMessageType('system')).toBe(AgentMessageType.SYSTEM);
36
- expect(normalizeMessageType('thought')).toBe(AgentMessageType.THOUGHT);
37
- expect(normalizeMessageType('plan')).toBe(AgentMessageType.PLAN);
38
- expect(normalizeMessageType('update')).toBe(AgentMessageType.UPDATE);
39
- expect(normalizeMessageType('complete')).toBe(AgentMessageType.COMPLETE);
40
- expect(normalizeMessageType('warning')).toBe(AgentMessageType.WARNING);
41
- expect(normalizeMessageType('error')).toBe(AgentMessageType.ERROR);
42
- expect(normalizeMessageType('answer')).toBe(AgentMessageType.ANSWER);
43
- expect(normalizeMessageType('question')).toBe(AgentMessageType.QUESTION);
44
- expect(normalizeMessageType('request_input')).toBe(AgentMessageType.REQUEST_INPUT);
45
- expect(normalizeMessageType('idle')).toBe(AgentMessageType.IDLE);
46
- expect(normalizeMessageType('terminated')).toBe(AgentMessageType.TERMINATED);
47
- expect(normalizeMessageType('streaming_chunk')).toBe(AgentMessageType.STREAMING_CHUNK);
48
- expect(normalizeMessageType('batch_progress')).toBe(AgentMessageType.BATCH_PROGRESS);
49
- });
50
-
51
- it('handles AgentMessageType enum values', () => {
52
- expect(normalizeMessageType(AgentMessageType.SYSTEM)).toBe(AgentMessageType.SYSTEM);
53
- expect(normalizeMessageType(AgentMessageType.ERROR)).toBe(AgentMessageType.ERROR);
54
- expect(normalizeMessageType(AgentMessageType.ANSWER)).toBe(AgentMessageType.ANSWER);
55
- });
56
-
57
- it('returns UPDATE for unknown values', () => {
58
- expect(normalizeMessageType(999)).toBe(AgentMessageType.UPDATE);
59
- expect(normalizeMessageType('unknown')).toBe(AgentMessageType.UPDATE);
60
- });
61
- });
62
-
63
- describe('isCompactMessage', () => {
64
- it('returns true for compact messages', () => {
65
- expect(isCompactMessage({ t: AgentMessageType.UPDATE })).toBe(true);
66
- expect(isCompactMessage({ t: 0, m: 'test' })).toBe(true);
67
- });
68
-
69
- it('returns false for non-compact messages', () => {
70
- expect(isCompactMessage({ type: AgentMessageType.UPDATE })).toBe(false);
71
- expect(isCompactMessage(null)).toBe(false);
72
- expect(isCompactMessage(undefined)).toBe(false);
73
- expect(isCompactMessage('string')).toBe(false);
74
- expect(isCompactMessage(123)).toBe(false);
75
- });
76
- });
77
-
78
- describe('isLegacyMessage', () => {
79
- it('returns true for legacy messages', () => {
80
- expect(isLegacyMessage({ type: AgentMessageType.UPDATE })).toBe(true);
81
- expect(
82
- isLegacyMessage({
83
- type: AgentMessageType.ANSWER,
84
- timestamp: 12345,
85
- workflow_run_id: 'run-1',
86
- message: 'test',
87
- }),
88
- ).toBe(true);
89
- });
90
-
91
- it('returns false for compact messages', () => {
92
- expect(isLegacyMessage({ t: AgentMessageType.UPDATE })).toBe(false);
93
- // Has both type and t - compact takes precedence
94
- expect(isLegacyMessage({ type: AgentMessageType.UPDATE, t: AgentMessageType.UPDATE })).toBe(false);
95
- });
96
-
97
- it('returns false for non-messages', () => {
98
- expect(isLegacyMessage(null)).toBe(false);
99
- expect(isLegacyMessage(undefined)).toBe(false);
100
- expect(isLegacyMessage({})).toBe(false);
101
- });
102
- });
103
-
104
- describe('toCompactMessage', () => {
105
- it('converts basic legacy message', () => {
106
- const legacy: AgentMessage = {
107
- type: AgentMessageType.UPDATE,
108
- timestamp: 1234567890,
109
- workflow_run_id: 'run-123',
110
- message: 'Test message',
111
- };
112
-
113
- const compact = toCompactMessage(legacy);
114
-
115
- expect(compact.t).toBe(AgentMessageType.UPDATE);
116
- expect(compact.m).toBe('Test message');
117
- expect(compact.ts).toBe(1234567890);
118
- expect(compact.w).toBeUndefined(); // main is default, not included
119
- });
120
-
121
- it('includes workstream_id when not main', () => {
122
- const legacy: AgentMessage = {
123
- type: AgentMessageType.THOUGHT,
124
- timestamp: 1234567890,
125
- workflow_run_id: 'run-123',
126
- message: 'Thinking...',
127
- workstream_id: 'research',
128
- };
129
-
130
- const compact = toCompactMessage(legacy);
131
-
132
- expect(compact.w).toBe('research');
133
- });
134
-
135
- it('excludes workstream_id when main', () => {
136
- const legacy: AgentMessage = {
137
- type: AgentMessageType.UPDATE,
138
- timestamp: 1234567890,
139
- workflow_run_id: 'run-123',
140
- message: 'Update',
141
- workstream_id: 'main',
142
- };
143
-
144
- const compact = toCompactMessage(legacy);
145
-
146
- expect(compact.w).toBeUndefined();
147
- });
148
-
149
- it('includes details for non-streaming messages', () => {
150
- const legacy: AgentMessage = {
151
- type: AgentMessageType.PLAN,
152
- timestamp: 1234567890,
153
- workflow_run_id: 'run-123',
154
- message: 'Plan created',
155
- details: { plan: [{ id: 1, goal: 'Step 1' }] },
156
- };
157
-
158
- const compact = toCompactMessage(legacy);
159
-
160
- expect(compact.d).toEqual({ plan: [{ id: 1, goal: 'Step 1' }] });
161
- });
162
-
163
- it('preserves user message acknowledgement details', () => {
164
- const legacy: AgentMessage = {
165
- type: AgentMessageType.QUESTION,
166
- timestamp: 1234567890,
167
- workflow_run_id: 'run-123',
168
- message: 'Follow up',
169
- details: {
170
- event_class: 'user_content',
171
- ack: 'message-1',
172
- _deliveryStatus: 'consumed',
173
- },
174
- };
175
-
176
- const compact = toCompactMessage(legacy);
177
-
178
- expect(compact.d).toEqual({
179
- event_class: 'user_content',
180
- ack: 'message-1',
181
- _deliveryStatus: 'consumed',
182
- });
183
- });
184
-
185
- it('handles streaming chunk with is_final flag', () => {
186
- const legacy: AgentMessage = {
187
- type: AgentMessageType.STREAMING_CHUNK,
188
- timestamp: 1234567890,
189
- workflow_run_id: 'run-123',
190
- message: 'chunk content',
191
- details: {
192
- streaming_id: 'stream-1',
193
- chunk_index: 5,
194
- is_final: true,
195
- },
196
- };
197
-
198
- const compact = toCompactMessage(legacy);
199
-
200
- expect(compact.t).toBe(AgentMessageType.STREAMING_CHUNK);
201
- expect(compact.m).toBe('chunk content');
202
- expect(compact.f).toBe(1);
203
- expect(compact.d).toBeUndefined(); // streaming_id and chunk_index removed
204
- });
205
-
206
- it('handles streaming chunk without is_final', () => {
207
- const legacy: AgentMessage = {
208
- type: AgentMessageType.STREAMING_CHUNK,
209
- timestamp: 1234567890,
210
- workflow_run_id: 'run-123',
211
- message: 'chunk content',
212
- details: {
213
- streaming_id: 'stream-1',
214
- chunk_index: 2,
215
- is_final: false,
216
- },
217
- };
218
-
219
- const compact = toCompactMessage(legacy);
220
-
221
- expect(compact.f).toBeUndefined();
222
- });
223
-
224
- it('restores run-scoped streaming id from compact streaming chunk details', () => {
225
- const compact: CompactMessage = {
226
- t: AgentMessageType.STREAMING_CHUNK,
227
- m: 'chunk content',
228
- i: 'activity-7',
229
- d: {
230
- streaming_id: 'run-2-activity-7',
231
- streaming_id_scope: 'workflow_run',
232
- },
233
- };
234
-
235
- const restored = toAgentMessage(compact, 'workflow-id');
236
-
237
- expect(restored.details?.streaming_id).toBe('run-2-activity-7');
238
- expect(restored.details?.streaming_id_scope).toBe('workflow_run');
239
- expect(restored.details?.activity_id).toBe('activity-7');
240
- });
241
-
242
- it('normalizes legacy string type values', () => {
243
- // Simulate a message from Redis with old string type
244
- const legacy = {
245
- type: 'answer' as unknown as AgentMessageType,
246
- timestamp: 1234567890,
247
- workflow_run_id: 'run-123',
248
- message: 'Response',
249
- };
250
-
251
- const compact = toCompactMessage(legacy);
252
-
253
- expect(compact.t).toBe(AgentMessageType.ANSWER);
254
- });
255
-
256
- it('omits empty/undefined fields', () => {
257
- const legacy: AgentMessage = {
258
- type: AgentMessageType.IDLE,
259
- timestamp: 0,
260
- workflow_run_id: 'run-123',
261
- message: '',
262
- };
263
-
264
- const compact = toCompactMessage(legacy);
265
-
266
- expect(compact).toEqual({ t: AgentMessageType.IDLE });
267
- expect(Object.keys(compact)).toEqual(['t']);
268
- });
269
- });
270
-
271
- describe('toAgentMessage', () => {
272
- it('converts compact message to legacy format', () => {
273
- const compact: CompactMessage = {
274
- t: AgentMessageType.ANSWER,
275
- m: 'Hello world',
276
- ts: 1234567890,
277
- };
278
-
279
- const legacy = toAgentMessage(compact, 'run-456');
280
-
281
- expect(legacy.type).toBe(AgentMessageType.ANSWER);
282
- expect(legacy.message).toBe('Hello world');
283
- expect(legacy.timestamp).toBe(1234567890);
284
- expect(legacy.workflow_run_id).toBe('run-456');
285
- expect(legacy.workstream_id).toBe('main');
286
- });
287
-
288
- it('restores workstream_id', () => {
289
- const compact: CompactMessage = {
290
- t: AgentMessageType.UPDATE,
291
- m: 'Working...',
292
- w: 'analysis',
293
- };
294
-
295
- const legacy = toAgentMessage(compact, 'run-789');
296
-
297
- expect(legacy.workstream_id).toBe('analysis');
298
- });
299
-
300
- it('provides defaults for missing fields', () => {
301
- const compact: CompactMessage = {
302
- t: AgentMessageType.SYSTEM,
303
- };
304
-
305
- const legacy = toAgentMessage(compact);
306
-
307
- expect(legacy.message).toBe('');
308
- expect(legacy.workflow_run_id).toBe('');
309
- expect(legacy.workstream_id).toBe('main');
310
- expect(legacy.timestamp).toBeGreaterThan(0); // Uses Date.now()
311
- });
312
-
313
- it('restores details', () => {
314
- const compact: CompactMessage = {
315
- t: AgentMessageType.BATCH_PROGRESS,
316
- m: 'Processing batch',
317
- d: { batch_id: 'batch-1', completed: 5, total: 10 },
318
- };
319
-
320
- const legacy = toAgentMessage(compact, 'run-1');
321
-
322
- expect(legacy.details).toEqual({ batch_id: 'batch-1', completed: 5, total: 10 });
323
- });
324
-
325
- it('restores user message acknowledgement details', () => {
326
- const compact: CompactMessage = {
327
- t: AgentMessageType.QUESTION,
328
- m: 'Follow up',
329
- d: {
330
- event_class: 'user_content',
331
- ack: 'message-1',
332
- _deliveryStatus: 'consumed',
333
- },
334
- };
335
-
336
- const legacy = toAgentMessage(compact, 'run-1');
337
-
338
- expect(legacy.details).toEqual({
339
- event_class: 'user_content',
340
- ack: 'message-1',
341
- _deliveryStatus: 'consumed',
342
- });
343
- });
344
-
345
- it('restores streaming chunk details with is_final', () => {
346
- const compact: CompactMessage = {
347
- t: AgentMessageType.STREAMING_CHUNK,
348
- m: 'chunk text',
349
- w: 'stream-workstream',
350
- f: 1,
351
- };
352
-
353
- const legacy = toAgentMessage(compact, 'run-1');
354
-
355
- expect(legacy.details).toEqual({
356
- streaming_id: 'stream-workstream',
357
- is_final: true,
358
- });
359
- });
360
-
361
- it('restores streaming chunk details without is_final', () => {
362
- const compact: CompactMessage = {
363
- t: AgentMessageType.STREAMING_CHUNK,
364
- m: 'chunk text',
365
- };
366
-
367
- const legacy = toAgentMessage(compact, 'run-1');
368
-
369
- expect(legacy.details).toEqual({
370
- streaming_id: 'main',
371
- is_final: false,
372
- });
373
- });
374
- });
375
-
376
- describe('parseMessage', () => {
377
- it('parses compact message from object', () => {
378
- const input: CompactMessage = { t: AgentMessageType.UPDATE, m: 'Test' };
379
-
380
- const result = parseMessage(input);
381
-
382
- expect(result).toEqual(input);
383
- });
384
-
385
- it('parses compact message from JSON string', () => {
386
- const input = JSON.stringify({ t: AgentMessageType.ERROR, m: 'Error occurred' });
387
-
388
- const result = parseMessage(input);
389
-
390
- expect(result.t).toBe(AgentMessageType.ERROR);
391
- expect(result.m).toBe('Error occurred');
392
- });
393
-
394
- it('converts legacy message object to compact', () => {
395
- const legacy: AgentMessage = {
396
- type: AgentMessageType.COMPLETE,
397
- timestamp: 1234567890,
398
- workflow_run_id: 'run-1',
399
- message: 'Done!',
400
- };
401
-
402
- const result = parseMessage(legacy);
403
-
404
- expect(isCompactMessage(result)).toBe(true);
405
- expect(result.t).toBe(AgentMessageType.COMPLETE);
406
- expect(result.m).toBe('Done!');
407
- });
408
-
409
- it('converts legacy message JSON string to compact', () => {
410
- const legacy = JSON.stringify({
411
- type: AgentMessageType.WARNING,
412
- timestamp: 1234567890,
413
- workflow_run_id: 'run-1',
414
- message: 'Warning message',
415
- });
416
-
417
- const result = parseMessage(legacy);
418
-
419
- expect(isCompactMessage(result)).toBe(true);
420
- expect(result.t).toBe(AgentMessageType.WARNING);
421
- });
422
-
423
- it('throws error for unknown format', () => {
424
- expect(() => parseMessage({})).toThrow('Unknown message format');
425
- expect(() => parseMessage({ foo: 'bar' })).toThrow('Unknown message format');
426
- });
427
-
428
- it('throws error for invalid JSON', () => {
429
- expect(() => parseMessage('not json')).toThrow();
430
- });
431
- });
432
-
433
- describe('createCompactMessage', () => {
434
- it('creates minimal compact message', () => {
435
- const msg = createCompactMessage(AgentMessageType.IDLE);
436
-
437
- expect(msg).toEqual({ t: AgentMessageType.IDLE });
438
- });
439
-
440
- it('creates compact message with all options', () => {
441
- const msg = createCompactMessage(AgentMessageType.PLAN, {
442
- message: 'Plan created',
443
- workstreamId: 'planning',
444
- details: { steps: 5 },
445
- timestamp: 1234567890,
446
- });
447
-
448
- expect(msg).toEqual({
449
- t: AgentMessageType.PLAN,
450
- m: 'Plan created',
451
- w: 'planning',
452
- d: { steps: 5 },
453
- ts: 1234567890,
454
- });
455
- });
456
-
457
- it('excludes workstreamId when main', () => {
458
- const msg = createCompactMessage(AgentMessageType.UPDATE, {
459
- message: 'Update',
460
- workstreamId: 'main',
461
- });
462
-
463
- expect(msg.w).toBeUndefined();
464
- });
465
-
466
- it('sets is_final flag for streaming chunks', () => {
467
- const msg = createCompactMessage(AgentMessageType.STREAMING_CHUNK, {
468
- message: 'final chunk',
469
- isFinal: true,
470
- });
471
-
472
- expect(msg.f).toBe(1);
473
- });
474
- });
475
-
476
- describe('round-trip conversion', () => {
477
- it('legacy -> compact -> legacy preserves essential data', () => {
478
- const original: AgentMessage = {
479
- type: AgentMessageType.ANSWER,
480
- timestamp: 1234567890,
481
- workflow_run_id: 'run-abc',
482
- message: 'This is a long response from the AI assistant.',
483
- workstream_id: 'conversation',
484
- details: { sources: ['doc1', 'doc2'] },
485
- };
486
-
487
- const compact = toCompactMessage(original);
488
- const restored = toAgentMessage(compact, original.workflow_run_id);
489
-
490
- expect(restored.type).toBe(original.type);
491
- expect(restored.timestamp).toBe(original.timestamp);
492
- expect(restored.workflow_run_id).toBe(original.workflow_run_id);
493
- expect(restored.message).toBe(original.message);
494
- expect(restored.workstream_id).toBe(original.workstream_id);
495
- expect(restored.details).toEqual(original.details);
496
- });
497
-
498
- it('compact -> legacy -> compact preserves essential data', () => {
499
- const original: CompactMessage = {
500
- t: AgentMessageType.THOUGHT,
501
- m: 'Analyzing the problem...',
502
- w: 'reasoning',
503
- d: { confidence: 0.85 },
504
- ts: 1234567890,
505
- };
506
-
507
- const legacy = toAgentMessage(original, 'run-xyz');
508
- const restored = toCompactMessage(legacy);
509
-
510
- expect(restored.t).toBe(original.t);
511
- expect(restored.m).toBe(original.m);
512
- expect(restored.w).toBe(original.w);
513
- expect(restored.d).toEqual(original.d);
514
- expect(restored.ts).toBe(original.ts);
515
- });
516
-
517
- it('handles all message types in round-trip', () => {
518
- const messageTypes = [
519
- AgentMessageType.SYSTEM,
520
- AgentMessageType.THOUGHT,
521
- AgentMessageType.PLAN,
522
- AgentMessageType.UPDATE,
523
- AgentMessageType.COMPLETE,
524
- AgentMessageType.WARNING,
525
- AgentMessageType.ERROR,
526
- AgentMessageType.ANSWER,
527
- AgentMessageType.QUESTION,
528
- AgentMessageType.REQUEST_INPUT,
529
- AgentMessageType.IDLE,
530
- AgentMessageType.TERMINATED,
531
- AgentMessageType.BATCH_PROGRESS,
532
- ];
533
-
534
- for (const type of messageTypes) {
535
- const original: AgentMessage = {
536
- type,
537
- timestamp: 1234567890,
538
- workflow_run_id: 'run-test',
539
- message: `Test message for type ${type}`,
540
- };
541
-
542
- const compact = toCompactMessage(original);
543
- const restored = toAgentMessage(compact, original.workflow_run_id);
544
-
545
- expect(restored.type).toBe(type);
546
- expect(restored.message).toBe(original.message);
547
- }
548
- });
549
-
550
- it('streaming chunk round-trip preserves is_final', () => {
551
- const original: AgentMessage = {
552
- type: AgentMessageType.STREAMING_CHUNK,
553
- timestamp: 1234567890,
554
- workflow_run_id: 'run-stream',
555
- message: 'Final chunk content',
556
- workstream_id: 'stream-1',
557
- details: {
558
- streaming_id: 'stream-1',
559
- chunk_index: 10,
560
- is_final: true,
561
- },
562
- };
563
-
564
- const compact = toCompactMessage(original);
565
- const restored = toAgentMessage(compact, original.workflow_run_id);
566
-
567
- expect(restored.type).toBe(AgentMessageType.STREAMING_CHUNK);
568
- expect(restored.details?.is_final).toBe(true);
569
- expect(restored.details?.streaming_id).toBe(original.workstream_id);
570
- });
571
- });
572
-
573
- describe('edge cases', () => {
574
- it('handles unicode and special characters', () => {
575
- const original: AgentMessage = {
576
- type: AgentMessageType.ANSWER,
577
- timestamp: 1234567890,
578
- workflow_run_id: 'run-1',
579
- message: 'Unicode: 你好世界 🎉 émojis & spëcial chars <script>alert(1)</script>',
580
- };
581
-
582
- const compact = toCompactMessage(original);
583
- const restored = toAgentMessage(compact, original.workflow_run_id);
584
-
585
- expect(restored.message).toBe(original.message);
586
- });
587
-
588
- it('handles very long messages', () => {
589
- const longMessage = 'A'.repeat(100000);
590
- const original: AgentMessage = {
591
- type: AgentMessageType.ANSWER,
592
- timestamp: 1234567890,
593
- workflow_run_id: 'run-1',
594
- message: longMessage,
595
- };
596
-
597
- const compact = toCompactMessage(original);
598
- const restored = toAgentMessage(compact, original.workflow_run_id);
599
-
600
- expect(restored.message).toBe(longMessage);
601
- expect(restored.message.length).toBe(100000);
602
- });
603
-
604
- it('handles null-like values in details', () => {
605
- const original: AgentMessage = {
606
- type: AgentMessageType.UPDATE,
607
- timestamp: 1234567890,
608
- workflow_run_id: 'run-1',
609
- message: 'Update',
610
- details: { value: null, empty: '', zero: 0, bool: false },
611
- };
612
-
613
- const compact = toCompactMessage(original);
614
- const restored = toAgentMessage(compact, original.workflow_run_id);
615
-
616
- expect(restored.details).toEqual(original.details);
617
- });
618
-
619
- it('handles nested object details', () => {
620
- const original: AgentMessage = {
621
- type: AgentMessageType.PLAN,
622
- timestamp: 1234567890,
623
- workflow_run_id: 'run-1',
624
- message: 'Plan',
625
- details: {
626
- plan: [
627
- { id: 1, goal: 'Step 1', instructions: ['Do this', 'Then that'] },
628
- { id: 2, goal: 'Step 2', instructions: ['Final step'] },
629
- ],
630
- metadata: { version: 1, author: 'agent' },
631
- },
632
- };
633
-
634
- const compact = toCompactMessage(original);
635
- const restored = toAgentMessage(compact, original.workflow_run_id);
636
-
637
- expect(restored.details).toEqual(original.details);
638
- });
639
- });
640
- });
@@ -1,13 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { ApiVersions, CURRENT_API_VERSION, CURRENT_API_VERSION_HEADER_VALUE } from './versions.js';
3
-
4
- describe('API versions', () => {
5
- it('keeps the current API version aligned with the latest milestone', () => {
6
- const milestones = Object.values(ApiVersions).filter(
7
- (version): version is number => typeof version === 'number',
8
- );
9
-
10
- expect(CURRENT_API_VERSION).toBe(Math.max(...milestones));
11
- expect(CURRENT_API_VERSION_HEADER_VALUE).toBe(String(CURRENT_API_VERSION));
12
- });
13
- });