@atomic-chat/core 0.13.2 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +1 -1
  2. package/dist/backend/advisor/advisor.d.ts +8 -7
  3. package/dist/backend/advisor/advisor.js +17 -25
  4. package/dist/backend/advisor/advisor.js.map +1 -1
  5. package/dist/backend/catalog/index.d.ts +4 -2
  6. package/dist/backend/catalog/index.js +4 -2
  7. package/dist/backend/catalog/index.js.map +1 -1
  8. package/dist/backend/catalog/manifest.d.ts +5 -51
  9. package/dist/backend/catalog/manifest.js +5 -93
  10. package/dist/backend/catalog/manifest.js.map +1 -1
  11. package/dist/backend/catalog/upstream-releases-baseline.d.ts +2 -0
  12. package/dist/backend/catalog/upstream-releases-baseline.js +12 -0
  13. package/dist/backend/catalog/upstream-releases-baseline.js.map +1 -0
  14. package/dist/backend/catalog/upstream-releases-baseline.json +101 -0
  15. package/dist/backend/catalog/upstream-releases-catalog.d.ts +54 -0
  16. package/dist/backend/catalog/upstream-releases-catalog.js +148 -0
  17. package/dist/backend/catalog/upstream-releases-catalog.js.map +1 -0
  18. package/dist/backend/catalog/upstream-releases.d.ts +75 -0
  19. package/dist/backend/catalog/upstream-releases.js +155 -0
  20. package/dist/backend/catalog/upstream-releases.js.map +1 -0
  21. package/dist/backend/install/service.d.ts +7 -4
  22. package/dist/backend/install/service.js +4 -4
  23. package/dist/backend/install/service.js.map +1 -1
  24. package/dist/cli/commands/serve.js +10 -28
  25. package/dist/cli/commands/serve.js.map +1 -1
  26. package/dist/cli/main.d.ts +1 -1
  27. package/dist/cli/main.js +0 -1
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/client/control-client.d.ts +7 -19
  30. package/dist/client/control-client.js +9 -29
  31. package/dist/client/control-client.js.map +1 -1
  32. package/dist/cloud/registry.d.ts +14 -1
  33. package/dist/cloud/registry.js +73 -2
  34. package/dist/cloud/registry.js.map +1 -1
  35. package/dist/config/paths.d.ts +4 -3
  36. package/dist/config/paths.js +15 -14
  37. package/dist/config/paths.js.map +1 -1
  38. package/dist/contracts/diffusion.d.ts +45 -18
  39. package/dist/contracts/diffusion.js +1 -1
  40. package/dist/contracts/diffusion.js.map +1 -1
  41. package/dist/contracts/engines.d.ts +1 -1
  42. package/dist/contracts/engines.js +2 -0
  43. package/dist/contracts/engines.js.map +1 -1
  44. package/dist/contracts/errors.d.ts +1 -3
  45. package/dist/contracts/errors.js +16 -0
  46. package/dist/contracts/errors.js.map +1 -1
  47. package/dist/contracts/events.d.ts +11 -6
  48. package/dist/contracts/index.d.ts +1 -1
  49. package/dist/contracts/index.js +1 -1
  50. package/dist/contracts/index.js.map +1 -1
  51. package/dist/contracts/media.d.ts +186 -0
  52. package/dist/contracts/media.js +55 -0
  53. package/dist/contracts/media.js.map +1 -0
  54. package/dist/contracts/session.d.ts +10 -1
  55. package/dist/contracts/session.js +10 -0
  56. package/dist/contracts/session.js.map +1 -1
  57. package/dist/contracts/settings.d.ts +36 -1
  58. package/dist/contracts/settings.js.map +1 -1
  59. package/dist/core/atomic-core.d.ts +7 -5
  60. package/dist/core/atomic-core.js +1 -0
  61. package/dist/core/atomic-core.js.map +1 -1
  62. package/dist/core/create.js +48 -58
  63. package/dist/core/create.js.map +1 -1
  64. package/dist/core/managed-engines.js +2 -0
  65. package/dist/core/managed-engines.js.map +1 -1
  66. package/dist/core/prism.d.ts +23 -6
  67. package/dist/core/prism.js +45 -0
  68. package/dist/core/prism.js.map +1 -1
  69. package/dist/core/public-server.js +3 -2
  70. package/dist/core/public-server.js.map +1 -1
  71. package/dist/core/types.d.ts +11 -0
  72. package/dist/core/types.js.map +1 -1
  73. package/dist/decision/process.d.ts +4 -0
  74. package/dist/decision/process.js +10 -1
  75. package/dist/decision/process.js.map +1 -1
  76. package/dist/diffusion/args.d.ts +3 -2
  77. package/dist/diffusion/args.js +21 -4
  78. package/dist/diffusion/args.js.map +1 -1
  79. package/dist/diffusion/compat.d.ts +1 -1
  80. package/dist/diffusion/compat.js +6 -2
  81. package/dist/diffusion/compat.js.map +1 -1
  82. package/dist/diffusion/gallery.d.ts +24 -3
  83. package/dist/diffusion/gallery.js +151 -21
  84. package/dist/diffusion/gallery.js.map +1 -1
  85. package/dist/diffusion/index.d.ts +3 -0
  86. package/dist/diffusion/index.js +3 -0
  87. package/dist/diffusion/index.js.map +1 -1
  88. package/dist/diffusion/jobs.d.ts +6 -1
  89. package/dist/diffusion/jobs.js +10 -1
  90. package/dist/diffusion/jobs.js.map +1 -1
  91. package/dist/diffusion/media-header.d.ts +22 -0
  92. package/dist/diffusion/media-header.js +149 -0
  93. package/dist/diffusion/media-header.js.map +1 -0
  94. package/dist/diffusion/parse.d.ts +3 -1
  95. package/dist/diffusion/parse.js +36 -0
  96. package/dist/diffusion/parse.js.map +1 -1
  97. package/dist/diffusion/recipe.d.ts +10 -1
  98. package/dist/diffusion/recipe.js +85 -21
  99. package/dist/diffusion/recipe.js.map +1 -1
  100. package/dist/diffusion/remote-job.d.ts +76 -0
  101. package/dist/diffusion/remote-job.js +643 -0
  102. package/dist/diffusion/remote-job.js.map +1 -0
  103. package/dist/diffusion/remote-store.d.ts +38 -0
  104. package/dist/diffusion/remote-store.js +91 -0
  105. package/dist/diffusion/remote-store.js.map +1 -0
  106. package/dist/diffusion/service.d.ts +9 -1
  107. package/dist/diffusion/service.js +49 -9
  108. package/dist/diffusion/service.js.map +1 -1
  109. package/dist/diffusion/state.d.ts +13 -1
  110. package/dist/diffusion/state.js +8 -0
  111. package/dist/diffusion/state.js.map +1 -1
  112. package/dist/diffusion/tracker.d.ts +6 -0
  113. package/dist/diffusion/tracker.js +11 -0
  114. package/dist/diffusion/tracker.js.map +1 -1
  115. package/dist/diffusion/validate.js +2 -2
  116. package/dist/diffusion/validate.js.map +1 -1
  117. package/dist/diffusion/video-gallery.d.ts +11 -4
  118. package/dist/diffusion/video-gallery.js +62 -25
  119. package/dist/diffusion/video-gallery.js.map +1 -1
  120. package/dist/diffusion/video-history.js +4 -1
  121. package/dist/diffusion/video-history.js.map +1 -1
  122. package/dist/diffusion/video-recipe.js +58 -25
  123. package/dist/diffusion/video-recipe.js.map +1 -1
  124. package/dist/diffusion/wiring.d.ts +3 -0
  125. package/dist/diffusion/wiring.js +1 -0
  126. package/dist/diffusion/wiring.js.map +1 -1
  127. package/dist/diffusion/workflow.d.ts +8 -2
  128. package/dist/diffusion/workflow.js +13 -5
  129. package/dist/diffusion/workflow.js.map +1 -1
  130. package/dist/downloads/downloader.d.ts +6 -1
  131. package/dist/downloads/downloader.js +12 -1
  132. package/dist/downloads/downloader.js.map +1 -1
  133. package/dist/embedding/process.d.ts +4 -0
  134. package/dist/embedding/process.js +10 -1
  135. package/dist/embedding/process.js.map +1 -1
  136. package/dist/media/adapters/a1111.d.ts +32 -0
  137. package/dist/media/adapters/a1111.js +207 -0
  138. package/dist/media/adapters/a1111.js.map +1 -0
  139. package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
  140. package/dist/media/adapters/aimlapi-videos.js +172 -0
  141. package/dist/media/adapters/aimlapi-videos.js.map +1 -0
  142. package/dist/media/adapters/dashscope-image.d.ts +26 -0
  143. package/dist/media/adapters/dashscope-image.js +160 -0
  144. package/dist/media/adapters/dashscope-image.js.map +1 -0
  145. package/dist/media/adapters/dashscope-video.d.ts +47 -0
  146. package/dist/media/adapters/dashscope-video.js +251 -0
  147. package/dist/media/adapters/dashscope-video.js.map +1 -0
  148. package/dist/media/adapters/gemini-image.d.ts +27 -0
  149. package/dist/media/adapters/gemini-image.js +181 -0
  150. package/dist/media/adapters/gemini-image.js.map +1 -0
  151. package/dist/media/adapters/gemini-veo.d.ts +39 -0
  152. package/dist/media/adapters/gemini-veo.js +196 -0
  153. package/dist/media/adapters/gemini-veo.js.map +1 -0
  154. package/dist/media/adapters/hf-images.d.ts +85 -0
  155. package/dist/media/adapters/hf-images.js +439 -0
  156. package/dist/media/adapters/hf-images.js.map +1 -0
  157. package/dist/media/adapters/hf-videos.d.ts +44 -0
  158. package/dist/media/adapters/hf-videos.js +265 -0
  159. package/dist/media/adapters/hf-videos.js.map +1 -0
  160. package/dist/media/adapters/minimax-image.d.ts +26 -0
  161. package/dist/media/adapters/minimax-image.js +111 -0
  162. package/dist/media/adapters/minimax-image.js.map +1 -0
  163. package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
  164. package/dist/media/adapters/minimax-video-v2.js +191 -0
  165. package/dist/media/adapters/minimax-video-v2.js.map +1 -0
  166. package/dist/media/adapters/minimax-video.d.ts +28 -0
  167. package/dist/media/adapters/minimax-video.js +155 -0
  168. package/dist/media/adapters/minimax-video.js.map +1 -0
  169. package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
  170. package/dist/media/adapters/mistral-agent-image.js +108 -0
  171. package/dist/media/adapters/mistral-agent-image.js.map +1 -0
  172. package/dist/media/adapters/nvidia-genai.d.ts +28 -0
  173. package/dist/media/adapters/nvidia-genai.js +182 -0
  174. package/dist/media/adapters/nvidia-genai.js.map +1 -0
  175. package/dist/media/adapters/openai-images.d.ts +23 -0
  176. package/dist/media/adapters/openai-images.js +164 -0
  177. package/dist/media/adapters/openai-images.js.map +1 -0
  178. package/dist/media/adapters/openai-videos.d.ts +34 -0
  179. package/dist/media/adapters/openai-videos.js +175 -0
  180. package/dist/media/adapters/openai-videos.js.map +1 -0
  181. package/dist/media/adapters/openrouter-images.d.ts +25 -0
  182. package/dist/media/adapters/openrouter-images.js +161 -0
  183. package/dist/media/adapters/openrouter-images.js.map +1 -0
  184. package/dist/media/adapters/openrouter-videos.d.ts +43 -0
  185. package/dist/media/adapters/openrouter-videos.js +208 -0
  186. package/dist/media/adapters/openrouter-videos.js.map +1 -0
  187. package/dist/media/adapters/registry.d.ts +7 -0
  188. package/dist/media/adapters/registry.js +45 -0
  189. package/dist/media/adapters/registry.js.map +1 -0
  190. package/dist/media/adapters/types.d.ts +133 -0
  191. package/dist/media/adapters/types.js +15 -0
  192. package/dist/media/adapters/types.js.map +1 -0
  193. package/dist/media/adapters/xai-images.d.ts +19 -0
  194. package/dist/media/adapters/xai-images.js +83 -0
  195. package/dist/media/adapters/xai-images.js.map +1 -0
  196. package/dist/media/adapters/xai-videos.d.ts +29 -0
  197. package/dist/media/adapters/xai-videos.js +148 -0
  198. package/dist/media/adapters/xai-videos.js.map +1 -0
  199. package/dist/media/catalog-baseline.d.ts +2 -0
  200. package/dist/media/catalog-baseline.js +10 -0
  201. package/dist/media/catalog-baseline.js.map +1 -0
  202. package/dist/media/catalog-baseline.json +1819 -0
  203. package/dist/media/catalog-service.d.ts +42 -0
  204. package/dist/media/catalog-service.js +111 -0
  205. package/dist/media/catalog-service.js.map +1 -0
  206. package/dist/media/catalog.d.ts +50 -0
  207. package/dist/media/catalog.js +315 -0
  208. package/dist/media/catalog.js.map +1 -0
  209. package/dist/media/http.d.ts +125 -0
  210. package/dist/media/http.js +308 -0
  211. package/dist/media/http.js.map +1 -0
  212. package/dist/media/index.d.ts +14 -0
  213. package/dist/media/index.js +15 -0
  214. package/dist/media/index.js.map +1 -0
  215. package/dist/media/mask.d.ts +12 -0
  216. package/dist/media/mask.js +57 -0
  217. package/dist/media/mask.js.map +1 -0
  218. package/dist/media/service.d.ts +42 -0
  219. package/dist/media/service.js +144 -0
  220. package/dist/media/service.js.map +1 -0
  221. package/dist/models/compatibility/inspect.d.ts +11 -2
  222. package/dist/models/compatibility/inspect.js +44 -13
  223. package/dist/models/compatibility/inspect.js.map +1 -1
  224. package/dist/models/compatibility/service.d.ts +3 -0
  225. package/dist/models/compatibility/service.js +1 -0
  226. package/dist/models/compatibility/service.js.map +1 -1
  227. package/dist/models/gguf/tensors.d.ts +1 -0
  228. package/dist/models/gguf/tensors.js +4 -1
  229. package/dist/models/gguf/tensors.js.map +1 -1
  230. package/dist/models/hf.d.ts +3 -16
  231. package/dist/models/hf.js +4 -42
  232. package/dist/models/hf.js.map +1 -1
  233. package/dist/router/resolve.d.ts +15 -4
  234. package/dist/router/resolve.js +25 -3
  235. package/dist/router/resolve.js.map +1 -1
  236. package/dist/runtime/environment/linux-provisioner.js +7 -67
  237. package/dist/runtime/environment/linux-provisioner.js.map +1 -1
  238. package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
  239. package/dist/runtime/environment/runtime-removal-plan.js +74 -0
  240. package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
  241. package/dist/runtime/environment/windows-provisioner.js +20 -4
  242. package/dist/runtime/environment/windows-provisioner.js.map +1 -1
  243. package/dist/runtime/managed-engines/spec.d.ts +2 -2
  244. package/dist/runtime/managed-engines/spec.js +6 -0
  245. package/dist/runtime/managed-engines/spec.js.map +1 -1
  246. package/dist/runtime/managed-models/compatibility.d.ts +10 -0
  247. package/dist/runtime/managed-models/compatibility.js +18 -0
  248. package/dist/runtime/managed-models/compatibility.js.map +1 -1
  249. package/dist/runtime/managed-text/adapter.d.ts +17 -0
  250. package/dist/runtime/managed-text/adapter.js.map +1 -1
  251. package/dist/runtime/managed-text/lifecycle.d.ts +8 -0
  252. package/dist/runtime/managed-text/lifecycle.js +38 -1
  253. package/dist/runtime/managed-text/lifecycle.js.map +1 -1
  254. package/dist/runtime/managed-text/readiness.d.ts +21 -1
  255. package/dist/runtime/managed-text/readiness.js +64 -0
  256. package/dist/runtime/managed-text/readiness.js.map +1 -1
  257. package/dist/runtime/managed-text/request-rules.d.ts +9 -7
  258. package/dist/runtime/managed-text/request-rules.js +58 -2
  259. package/dist/runtime/managed-text/request-rules.js.map +1 -1
  260. package/dist/runtime/managed-text/setting-values.d.ts +9 -0
  261. package/dist/runtime/managed-text/setting-values.js +44 -0
  262. package/dist/runtime/managed-text/setting-values.js.map +1 -0
  263. package/dist/runtime/sglang/adapter.d.ts +50 -0
  264. package/dist/runtime/sglang/adapter.js +393 -0
  265. package/dist/runtime/sglang/adapter.js.map +1 -0
  266. package/dist/runtime/sglang/engine.d.ts +16 -0
  267. package/dist/runtime/sglang/engine.js +38 -0
  268. package/dist/runtime/sglang/engine.js.map +1 -0
  269. package/dist/runtime/sglang/index.d.ts +11 -0
  270. package/dist/runtime/sglang/index.js +12 -0
  271. package/dist/runtime/sglang/index.js.map +1 -0
  272. package/dist/runtime/sglang/memory.d.ts +64 -0
  273. package/dist/runtime/sglang/memory.js +90 -0
  274. package/dist/runtime/sglang/memory.js.map +1 -0
  275. package/dist/runtime/sglang/settings.d.ts +49 -0
  276. package/dist/runtime/sglang/settings.js +118 -0
  277. package/dist/runtime/sglang/settings.js.map +1 -0
  278. package/dist/runtime/shared/external-sessions.js +1 -0
  279. package/dist/runtime/shared/external-sessions.js.map +1 -1
  280. package/dist/runtime/shared/ports.d.ts +10 -0
  281. package/dist/runtime/shared/ports.js +30 -0
  282. package/dist/runtime/shared/ports.js.map +1 -1
  283. package/dist/runtime/tensorrt-llm/adapter.d.ts +1 -4
  284. package/dist/runtime/tensorrt-llm/adapter.js +28 -11
  285. package/dist/runtime/tensorrt-llm/adapter.js.map +1 -1
  286. package/dist/runtime/tensorrt-llm/check.js +1 -0
  287. package/dist/runtime/tensorrt-llm/check.js.map +1 -1
  288. package/dist/runtime/tensorrt-llm/compatibility.d.ts +30 -6
  289. package/dist/runtime/tensorrt-llm/compatibility.js +41 -9
  290. package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -1
  291. package/dist/runtime/tensorrt-llm/cuda-graphs.d.ts +32 -0
  292. package/dist/runtime/tensorrt-llm/cuda-graphs.js +33 -0
  293. package/dist/runtime/tensorrt-llm/cuda-graphs.js.map +1 -0
  294. package/dist/runtime/tensorrt-llm/engine.js +11 -5
  295. package/dist/runtime/tensorrt-llm/engine.js.map +1 -1
  296. package/dist/runtime/tensorrt-llm/kv-cache.d.ts +16 -0
  297. package/dist/runtime/tensorrt-llm/kv-cache.js +21 -1
  298. package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -1
  299. package/dist/runtime/vllm/adapter.js +2 -47
  300. package/dist/runtime/vllm/adapter.js.map +1 -1
  301. package/dist/runtime/vllm/memory.js +3 -16
  302. package/dist/runtime/vllm/memory.js.map +1 -1
  303. package/dist/runtime/vllm/settings.d.ts +7 -0
  304. package/dist/runtime/vllm/settings.js +2 -30
  305. package/dist/runtime/vllm/settings.js.map +1 -1
  306. package/dist/server/control/router.js +5 -4
  307. package/dist/server/control/router.js.map +1 -1
  308. package/dist/server/control/routes/media.d.ts +9 -0
  309. package/dist/server/control/routes/media.js +24 -0
  310. package/dist/server/control/routes/media.js.map +1 -0
  311. package/dist/server/control/routes/model-compatibility.d.ts +9 -0
  312. package/dist/server/control/routes/model-compatibility.js +31 -0
  313. package/dist/server/control/routes/model-compatibility.js.map +1 -0
  314. package/dist/server/control/types.d.ts +18 -20
  315. package/dist/server/http.js +15 -2
  316. package/dist/server/http.js.map +1 -1
  317. package/dist/server/public/gates.d.ts +6 -1
  318. package/dist/server/public/gates.js +7 -3
  319. package/dist/server/public/gates.js.map +1 -1
  320. package/dist/server/public/images-params.js +18 -1
  321. package/dist/server/public/images-params.js.map +1 -1
  322. package/dist/server/public/images.d.ts +11 -2
  323. package/dist/server/public/images.js +73 -9
  324. package/dist/server/public/images.js.map +1 -1
  325. package/dist/server/public/index.d.ts +1 -0
  326. package/dist/server/public/index.js +16 -7
  327. package/dist/server/public/index.js.map +1 -1
  328. package/dist/server/public/listing.js +1 -0
  329. package/dist/server/public/listing.js.map +1 -1
  330. package/dist/server/public/remote-media.d.ts +51 -0
  331. package/dist/server/public/remote-media.js +225 -0
  332. package/dist/server/public/remote-media.js.map +1 -0
  333. package/dist/server/public/responses.js +4 -2
  334. package/dist/server/public/responses.js.map +1 -1
  335. package/dist/server/public/static-assets.generated.js +1 -1
  336. package/dist/server/public/static-assets.generated.js.map +1 -1
  337. package/dist/server/public/trace.js +2 -0
  338. package/dist/server/public/trace.js.map +1 -1
  339. package/dist/server/public/types.d.ts +12 -1
  340. package/dist/server/public/videos-params.js +13 -3
  341. package/dist/server/public/videos-params.js.map +1 -1
  342. package/dist/server/public/videos.d.ts +1 -0
  343. package/dist/server/public/videos.js +21 -3
  344. package/dist/server/public/videos.js.map +1 -1
  345. package/dist/settings/schema/llamacpp-upstream.json +9 -0
  346. package/dist/settings/schema/sglang.json +251 -0
  347. package/dist/settings/schema.js +27 -1
  348. package/dist/settings/schema.js.map +1 -1
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/package.json +2 -6
  352. package/src/settings/schema/llamacpp-upstream.json +9 -0
  353. package/src/settings/schema/sglang.json +251 -0
  354. package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
  355. package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
  356. package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
  357. package/dist/contracts/model-setup.d.ts +0 -115
  358. package/dist/contracts/model-setup.js +0 -33
  359. package/dist/contracts/model-setup.js.map +0 -1
  360. package/dist/core/model-setup/index.d.ts +0 -4
  361. package/dist/core/model-setup/index.js +0 -5
  362. package/dist/core/model-setup/index.js.map +0 -1
  363. package/dist/core/model-setup/plan.d.ts +0 -56
  364. package/dist/core/model-setup/plan.js +0 -158
  365. package/dist/core/model-setup/plan.js.map +0 -1
  366. package/dist/core/model-setup/service.d.ts +0 -92
  367. package/dist/core/model-setup/service.js +0 -329
  368. package/dist/core/model-setup/service.js.map +0 -1
  369. package/dist/core/model-setup/store.d.ts +0 -29
  370. package/dist/core/model-setup/store.js +0 -116
  371. package/dist/core/model-setup/store.js.map +0 -1
  372. package/dist/core/model-setup/wiring.d.ts +0 -59
  373. package/dist/core/model-setup/wiring.js +0 -132
  374. package/dist/core/model-setup/wiring.js.map +0 -1
  375. package/dist/server/control/routes/model-setups.d.ts +0 -11
  376. package/dist/server/control/routes/model-setups.js +0 -55
  377. package/dist/server/control/routes/model-setups.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The remote media catalog, I/O half: live conf document → memory (`MEDIA_CATALOG_TTL_MS`) →
3
+ * `<data>/atomic-core/media-catalog.cache.json` → the bundled baseline. The newest `catalog_version`
4
+ * of what was found and the baseline wins, so a stale CDN copy never undoes a shipped catalog.
5
+ * `ATOMIC_MEDIA_CATALOG_URL` (a test hook) may name an `https://` or a `file://` document. Concurrent
6
+ * callers share one fetch. Never throws.
7
+ */
8
+ import type { MediaCatalog } from './catalog.js';
9
+ export declare const MEDIA_CATALOG_TTL_MS: number;
10
+ export declare const MEDIA_CATALOG_FETCH_TIMEOUT_MS = 8000;
11
+ export type MediaCatalogOrigin = 'live' | 'cache' | 'baseline';
12
+ export interface ResolvedMediaCatalog {
13
+ catalog: MediaCatalog;
14
+ origin: MediaCatalogOrigin;
15
+ }
16
+ export interface MediaCatalogServiceDeps {
17
+ /** `<data>/atomic-core/media-catalog.cache.json` */
18
+ cachePath: string;
19
+ fetch: typeof fetch;
20
+ now?: () => number;
21
+ url?: string;
22
+ baseline?: MediaCatalog;
23
+ timeoutMs?: number;
24
+ log?: (level: 'info' | 'warn', message: string) => void;
25
+ }
26
+ export declare class MediaCatalogService {
27
+ private readonly deps;
28
+ private memory;
29
+ private inFlight;
30
+ constructor(deps: MediaCatalogServiceDeps);
31
+ /** The catalog to offer now; `force` skips the memory copy. */
32
+ catalog(options?: {
33
+ force?: boolean;
34
+ }): Promise<ResolvedMediaCatalog>;
35
+ /** Without the network: memory, disk, baseline. */
36
+ cachedCatalog(): Promise<ResolvedMediaCatalog>;
37
+ private newest;
38
+ private fetchDocument;
39
+ private resolve;
40
+ private readDiskCache;
41
+ private writeDiskCache;
42
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * The remote media catalog, I/O half: live conf document → memory (`MEDIA_CATALOG_TTL_MS`) →
3
+ * `<data>/atomic-core/media-catalog.cache.json` → the bundled baseline. The newest `catalog_version`
4
+ * of what was found and the baseline wins, so a stale CDN copy never undoes a shipped catalog.
5
+ * `ATOMIC_MEDIA_CATALOG_URL` (a test hook) may name an `https://` or a `file://` document. Concurrent
6
+ * callers share one fetch. Never throws.
7
+ */
8
+ import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
9
+ import { dirname } from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
11
+ import { MEDIA_CATALOG_BASELINE } from './catalog-baseline.js';
12
+ import { MEDIA_CATALOG_URL, parseMediaCatalog } from './catalog.js';
13
+ export const MEDIA_CATALOG_TTL_MS = 60 * 60 * 1000;
14
+ export const MEDIA_CATALOG_FETCH_TIMEOUT_MS = 8_000;
15
+ export class MediaCatalogService {
16
+ deps;
17
+ memory = null;
18
+ inFlight = null;
19
+ constructor(deps) {
20
+ this.deps = deps;
21
+ }
22
+ /** The catalog to offer now; `force` skips the memory copy. */
23
+ async catalog(options = {}) {
24
+ const now = this.deps.now ?? Date.now;
25
+ if (!options.force && this.memory && now() - this.memory.fetchedAt < MEDIA_CATALOG_TTL_MS)
26
+ return this.memory.resolved;
27
+ if (this.inFlight)
28
+ return this.inFlight;
29
+ this.inFlight = this.resolve().finally(() => {
30
+ this.inFlight = null;
31
+ });
32
+ return this.inFlight;
33
+ }
34
+ /** Without the network: memory, disk, baseline. */
35
+ async cachedCatalog() {
36
+ if (this.memory)
37
+ return this.memory.resolved;
38
+ return this.newest(await this.readDiskCache(), 'cache');
39
+ }
40
+ newest(candidate, origin) {
41
+ const baseline = this.deps.baseline ?? MEDIA_CATALOG_BASELINE;
42
+ return candidate && candidate.catalog_version >= baseline.catalog_version
43
+ ? { catalog: candidate, origin }
44
+ : { catalog: baseline, origin: 'baseline' };
45
+ }
46
+ async fetchDocument(url) {
47
+ if (url.startsWith('file:'))
48
+ return JSON.parse(await readFile(fileURLToPath(url), 'utf8'));
49
+ const controller = new AbortController();
50
+ const timer = setTimeout(() => controller.abort(), this.deps.timeoutMs ?? MEDIA_CATALOG_FETCH_TIMEOUT_MS);
51
+ try {
52
+ const response = await this.deps.fetch(url, {
53
+ headers: { 'Accept': 'application/json', 'User-Agent': 'atomic-chat' },
54
+ signal: controller.signal,
55
+ });
56
+ if (!response.ok)
57
+ throw new Error(`${url} returned ${response.status}`);
58
+ return (await response.json());
59
+ }
60
+ finally {
61
+ clearTimeout(timer);
62
+ }
63
+ }
64
+ async resolve() {
65
+ const now = this.deps.now ?? Date.now;
66
+ const url = this.deps.url ?? MEDIA_CATALOG_URL;
67
+ try {
68
+ const parsed = parseMediaCatalog(await this.fetchDocument(url));
69
+ if (!parsed)
70
+ throw new Error(`${url} is not a media catalog this core understands`);
71
+ const resolved = this.newest(parsed, 'live');
72
+ this.memory = { fetchedAt: now(), resolved };
73
+ if (resolved.catalog === parsed)
74
+ await this.writeDiskCache(parsed, now());
75
+ return resolved;
76
+ }
77
+ catch (err) {
78
+ this.deps.log?.('warn', `[media-catalog] live catalog unavailable: ${err instanceof Error ? err.message : String(err)}`);
79
+ }
80
+ const resolved = this.newest(await this.readDiskCache(), 'cache');
81
+ this.memory = { fetchedAt: now(), resolved };
82
+ return resolved;
83
+ }
84
+ async readDiskCache() {
85
+ try {
86
+ const raw = JSON.parse(await readFile(this.deps.cachePath, 'utf8'));
87
+ return raw && typeof raw === 'object'
88
+ ? (parseMediaCatalog(raw['catalog']) ?? null)
89
+ : null;
90
+ }
91
+ catch (err) {
92
+ if (err.code !== 'ENOENT')
93
+ this.deps.log?.('warn', `[media-catalog] failed to read disk cache: ${String(err)}`);
94
+ return null;
95
+ }
96
+ }
97
+ async writeDiskCache(catalog, fetchedAt) {
98
+ const path = this.deps.cachePath;
99
+ const temporary = `${path}.tmp-${process.pid}-${fetchedAt}`;
100
+ try {
101
+ await mkdir(dirname(path), { recursive: true });
102
+ await writeFile(temporary, JSON.stringify({ fetched_at: fetchedAt, catalog }), 'utf8');
103
+ await rename(temporary, path);
104
+ }
105
+ catch (err) {
106
+ await rm(temporary, { force: true }).catch(() => { });
107
+ this.deps.log?.('warn', `[media-catalog] failed to write disk cache: ${String(err)}`);
108
+ }
109
+ }
110
+ }
111
+ //# sourceMappingURL=catalog-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-service.js","sourceRoot":"","sources":["../../src/media/catalog-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The remote media catalog (conf `providers/media.json`), parsed leniently: conf reaches every
3
+ * released core within an hour, so an entry this core cannot read (a dialect it has no adapter for,
4
+ * a parameter it does not know) is dropped or ignored, never the whole document. Pure.
5
+ */
6
+ import type { MediaDialect, MediaDialectDefaults, MediaImageParams, MediaKind, MediaModelDescriptor, MediaModelOptions, MediaProviderSection, MediaVideoParams } from '../contracts/index.js';
7
+ export declare const MEDIA_CATALOG_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/providers/media.json";
8
+ export declare const SUPPORTED_MEDIA_SCHEMA_VERSION = 1;
9
+ export interface MediaCatalog {
10
+ catalog_version: number;
11
+ dialects: Partial<Record<MediaDialect, MediaDialectDefaults>>;
12
+ providers: Record<string, MediaProviderSection>;
13
+ }
14
+ export declare const isMediaDialect: (value: unknown) => value is MediaDialect;
15
+ /** An image model's parameters; each one that does not read is left out. */
16
+ export declare function parseImageParams(value: unknown): MediaImageParams;
17
+ /** A video model's parameters; each one that does not read is left out. */
18
+ export declare function parseVideoParams(value: unknown): MediaVideoParams;
19
+ /** One catalog model, or `undefined` when its adapter, id or workflows are unusable here. */
20
+ export declare function parseCatalogModel(kind: MediaKind, sectionApi: MediaDialect, raw: unknown): MediaModelDescriptor | undefined;
21
+ /** conf's document, or `undefined` when it is not a catalog this core reads at all. */
22
+ export declare function parseMediaCatalog(raw: unknown): MediaCatalog | undefined;
23
+ /**
24
+ * The adapter a provider's media of `kind` go through: the registration's own (a custom server)
25
+ * first, then the catalog's; `undefined` when it has none.
26
+ */
27
+ export declare function providerDialect(catalog: MediaCatalog, provider: string, kind: MediaKind, override?: MediaDialect | null): MediaDialect | undefined;
28
+ /** A model the catalog does not name, described by its adapter's defaults. */
29
+ export declare function defaultDescriptor(catalog: MediaCatalog, kind: MediaKind, api: MediaDialect, id: string, name?: string): MediaModelDescriptor;
30
+ /**
31
+ * What a model is: the catalog's entry under its provider when there is one (its own adapter
32
+ * applies), else the adapter's defaults.
33
+ */
34
+ export declare function describeModel(catalog: MediaCatalog, provider: string, kind: MediaKind, api: MediaDialect, id: string): MediaModelDescriptor;
35
+ /** A model a provider listed live, with whatever its listing said about it. */
36
+ export interface LiveMediaModel {
37
+ id: string;
38
+ name?: string;
39
+ description?: string;
40
+ workflows?: string[];
41
+ params?: MediaImageParams | MediaVideoParams;
42
+ options?: MediaModelOptions;
43
+ samplers?: string[];
44
+ }
45
+ /**
46
+ * The catalog's models of a provider, then what its listing adds: a model both name keeps the
47
+ * catalog's description (with the listing's samplers); a model only the listing names takes the
48
+ * listing's parameters over the adapter's defaults.
49
+ */
50
+ export declare function mergeLiveModels(catalog: MediaCatalog, provider: string, kind: MediaKind, api: MediaDialect, live: readonly LiveMediaModel[]): MediaModelDescriptor[];
@@ -0,0 +1,315 @@
1
+ /**
2
+ * The remote media catalog (conf `providers/media.json`), parsed leniently: conf reaches every
3
+ * released core within an hour, so an entry this core cannot read (a dialect it has no adapter for,
4
+ * a parameter it does not know) is dropped or ignored, never the whole document. Pure.
5
+ */
6
+ import { MEDIA_DIALECT_KIND, MEDIA_DIALECTS, REMOTE_IMAGE_WORKFLOWS, REMOTE_VIDEO_WORKFLOWS, } from '../contracts/index.js';
7
+ export const MEDIA_CATALOG_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/providers/media.json';
8
+ export const SUPPORTED_MEDIA_SCHEMA_VERSION = 1;
9
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
10
+ const isString = (value) => typeof value === 'string' && value !== '';
11
+ const isNumber = (value) => typeof value === 'number' && Number.isFinite(value);
12
+ export const isMediaDialect = (value) => typeof value === 'string' && MEDIA_DIALECTS.includes(value);
13
+ function choice(value) {
14
+ if (!isObject(value) || !Array.isArray(value['values']))
15
+ return undefined;
16
+ const values = value['values'].filter(isString);
17
+ if (values.length === 0)
18
+ return undefined;
19
+ const fallback = value['default'];
20
+ return isString(fallback) && values.includes(fallback) ? { values, default: fallback } : { values };
21
+ }
22
+ function range(value) {
23
+ if (!isObject(value) || !isNumber(value['min']) || !isNumber(value['max']))
24
+ return undefined;
25
+ if (value['min'] > value['max'])
26
+ return undefined;
27
+ const out = { min: value['min'], max: value['max'] };
28
+ const fallback = value['default'];
29
+ if (isNumber(fallback) && fallback >= out.min && fallback <= out.max)
30
+ out.default = fallback;
31
+ if (isNumber(value['step']) && value['step'] > 0)
32
+ out.step = value['step'];
33
+ return out;
34
+ }
35
+ const SIZE_TEXT = /^(auto|[1-9][0-9]*x[1-9][0-9]*)$/;
36
+ function size(value) {
37
+ if (!isObject(value))
38
+ return undefined;
39
+ if (value['kind'] === 'enum') {
40
+ const listed = choice(value);
41
+ if (!listed)
42
+ return undefined;
43
+ const values = listed.values.filter((v) => SIZE_TEXT.test(v));
44
+ if (values.length === 0)
45
+ return undefined;
46
+ return listed.default !== undefined && values.includes(listed.default)
47
+ ? { kind: 'enum', values, default: listed.default }
48
+ : { kind: 'enum', values };
49
+ }
50
+ if (value['kind'] === 'range') {
51
+ const { min, max, multiple } = value;
52
+ if (!isNumber(min) || !isNumber(max) || !isNumber(multiple) || min > max || multiple < 1)
53
+ return undefined;
54
+ const out = { kind: 'range', min, max, multiple };
55
+ for (const key of ['default_width', 'default_height']) {
56
+ const dim = value[key];
57
+ if (isNumber(dim) && dim >= min && dim <= max)
58
+ out[key] = dim;
59
+ }
60
+ return out;
61
+ }
62
+ return undefined;
63
+ }
64
+ /** An image model's parameters; each one that does not read is left out. */
65
+ export function parseImageParams(value) {
66
+ if (!isObject(value))
67
+ return {};
68
+ const out = {};
69
+ const sized = size(value['size']);
70
+ if (sized)
71
+ out.size = sized;
72
+ for (const key of ['aspect_ratios', 'resolutions', 'quality', 'background', 'output_format']) {
73
+ const listed = choice(value[key]);
74
+ if (listed)
75
+ out[key] = listed;
76
+ }
77
+ for (const key of ['steps', 'cfg', 'guidance', 'strength']) {
78
+ const ranged = range(value[key]);
79
+ if (ranged)
80
+ out[key] = ranged;
81
+ }
82
+ const n = value['n'];
83
+ if (isObject(n) && isNumber(n['max']) && Number.isInteger(n['max']) && n['max'] >= 1)
84
+ out.n = { max: Math.min(n['max'], 10) };
85
+ for (const key of ['seed', 'negative_prompt', 'sampler'])
86
+ if (value[key] === true)
87
+ out[key] = true;
88
+ const inputs = value['max_input_images'];
89
+ if (isNumber(inputs) && Number.isInteger(inputs) && inputs >= 1)
90
+ out.max_input_images = Math.min(inputs, 16);
91
+ return out;
92
+ }
93
+ function durations(value) {
94
+ if (!isObject(value))
95
+ return undefined;
96
+ const listed = Array.isArray(value['values']) ? value['values'].filter((v) => isNumber(v) && v > 0) : [];
97
+ const fallback = value['default'];
98
+ if (listed.length > 0) {
99
+ const out = { values: listed };
100
+ if (isNumber(fallback) && listed.includes(fallback))
101
+ out.default = fallback;
102
+ return out;
103
+ }
104
+ const { min, max } = value;
105
+ if (!isNumber(min) || !isNumber(max) || min <= 0 || min > max)
106
+ return undefined;
107
+ const out = { min, max };
108
+ if (isNumber(fallback) && fallback >= min && fallback <= max)
109
+ out.default = fallback;
110
+ return out;
111
+ }
112
+ /** A video model's parameters; each one that does not read is left out. */
113
+ export function parseVideoParams(value) {
114
+ if (!isObject(value))
115
+ return {};
116
+ const out = {};
117
+ const lengths = durations(value['durations']);
118
+ if (lengths)
119
+ out.durations = lengths;
120
+ for (const key of ['resolutions', 'aspect_ratios', 'sizes']) {
121
+ const listed = choice(value[key]);
122
+ if (listed)
123
+ out[key] = listed;
124
+ }
125
+ for (const key of ['audio', 'seed', 'negative_prompt', 'last_frame'])
126
+ if (value[key] === true)
127
+ out[key] = true;
128
+ return out;
129
+ }
130
+ function options(value) {
131
+ if (!isObject(value))
132
+ return undefined;
133
+ const out = {};
134
+ for (const [key, item] of Object.entries(value))
135
+ if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean')
136
+ out[key] = item;
137
+ return Object.keys(out).length > 0 ? out : undefined;
138
+ }
139
+ function workflowsOf(kind, value) {
140
+ const known = kind === 'image' ? REMOTE_IMAGE_WORKFLOWS : REMOTE_VIDEO_WORKFLOWS;
141
+ return Array.isArray(value)
142
+ ? [...new Set(value.filter((w) => isString(w) && known.includes(w)))]
143
+ : [];
144
+ }
145
+ /** One catalog model, or `undefined` when its adapter, id or workflows are unusable here. */
146
+ export function parseCatalogModel(kind, sectionApi, raw) {
147
+ if (!isObject(raw) || !isString(raw['id']))
148
+ return undefined;
149
+ const own = raw['api'];
150
+ if (own !== undefined && !isMediaDialect(own))
151
+ return undefined;
152
+ const api = own ?? sectionApi;
153
+ if (MEDIA_DIALECT_KIND[api] !== kind)
154
+ return undefined;
155
+ const workflows = workflowsOf(kind, raw['workflows']);
156
+ if (workflows.length === 0)
157
+ return undefined;
158
+ const common = {
159
+ id: raw['id'],
160
+ name: isString(raw['name']) ? raw['name'] : raw['id'],
161
+ api,
162
+ source: 'catalog',
163
+ ...(isString(raw['description']) ? { description: raw['description'] } : {}),
164
+ ...(raw['default'] === true ? { default: true } : {}),
165
+ };
166
+ const extra = options(raw['options']);
167
+ if (kind === 'image') {
168
+ const model = {
169
+ ...common,
170
+ kind: 'image',
171
+ workflows: workflows,
172
+ params: parseImageParams(raw['params']),
173
+ };
174
+ if (extra)
175
+ model.options = extra;
176
+ return model;
177
+ }
178
+ const model = {
179
+ ...common,
180
+ kind: 'video',
181
+ workflows: workflows,
182
+ params: parseVideoParams(raw['params']),
183
+ };
184
+ if (extra)
185
+ model.options = extra;
186
+ return model;
187
+ }
188
+ function section(kind, raw) {
189
+ if (!isObject(raw) || !isMediaDialect(raw['api']) || MEDIA_DIALECT_KIND[raw['api']] !== kind)
190
+ return undefined;
191
+ const api = raw['api'];
192
+ const models = [];
193
+ const seen = new Set();
194
+ let defaults = 0;
195
+ for (const item of Array.isArray(raw['models']) ? raw['models'] : []) {
196
+ const model = parseCatalogModel(kind, api, item);
197
+ if (!model || seen.has(model.id))
198
+ continue;
199
+ seen.add(model.id);
200
+ // At most one default per provider and kind: the first one wins.
201
+ if (model.default && defaults++ > 0)
202
+ delete model.default;
203
+ models.push(model);
204
+ }
205
+ return { api, models };
206
+ }
207
+ /** conf's document, or `undefined` when it is not a catalog this core reads at all. */
208
+ export function parseMediaCatalog(raw) {
209
+ if (!isObject(raw) || raw['schema_version'] !== SUPPORTED_MEDIA_SCHEMA_VERSION)
210
+ return undefined;
211
+ const version = raw['catalog_version'];
212
+ if (!isNumber(version) || !Number.isInteger(version) || version < 1)
213
+ return undefined;
214
+ const dialects = {};
215
+ if (isObject(raw['dialects']))
216
+ for (const [name, value] of Object.entries(raw['dialects'])) {
217
+ if (!isMediaDialect(name) || !isObject(value))
218
+ continue;
219
+ const kind = MEDIA_DIALECT_KIND[name];
220
+ const workflows = workflowsOf(kind, value['workflows']);
221
+ if (workflows.length === 0)
222
+ continue;
223
+ dialects[name] = {
224
+ kind,
225
+ workflows,
226
+ params: kind === 'image' ? parseImageParams(value['params']) : parseVideoParams(value['params']),
227
+ };
228
+ }
229
+ const providers = {};
230
+ if (isObject(raw['providers']))
231
+ for (const [name, value] of Object.entries(raw['providers'])) {
232
+ if (!isObject(value))
233
+ continue;
234
+ const entry = {};
235
+ const image = section('image', value['image']);
236
+ const video = section('video', value['video']);
237
+ if (image)
238
+ entry.image = image;
239
+ if (video)
240
+ entry.video = video;
241
+ if (entry.image || entry.video)
242
+ providers[name] = entry;
243
+ }
244
+ return { catalog_version: version, dialects, providers };
245
+ }
246
+ /**
247
+ * The adapter a provider's media of `kind` go through: the registration's own (a custom server)
248
+ * first, then the catalog's; `undefined` when it has none.
249
+ */
250
+ export function providerDialect(catalog, provider, kind, override) {
251
+ if (override && MEDIA_DIALECT_KIND[override] === kind)
252
+ return override;
253
+ return catalog.providers[provider]?.[kind]?.api;
254
+ }
255
+ /** A model the catalog does not name, described by its adapter's defaults. */
256
+ export function defaultDescriptor(catalog, kind, api, id, name) {
257
+ const defaults = catalog.dialects[api];
258
+ const base = { id, name: name ?? id, api, source: 'live' };
259
+ if (kind === 'image')
260
+ return {
261
+ ...base,
262
+ kind: 'image',
263
+ workflows: (defaults?.workflows ?? ['create']),
264
+ params: structuredClone((defaults?.params ?? {})),
265
+ };
266
+ return {
267
+ ...base,
268
+ kind: 'video',
269
+ workflows: (defaults?.workflows ?? ['create']),
270
+ params: structuredClone((defaults?.params ?? {})),
271
+ };
272
+ }
273
+ /**
274
+ * What a model is: the catalog's entry under its provider when there is one (its own adapter
275
+ * applies), else the adapter's defaults.
276
+ */
277
+ export function describeModel(catalog, provider, kind, api, id) {
278
+ const listed = catalog.providers[provider]?.[kind]?.models.find((model) => model.id === id);
279
+ if (listed)
280
+ return structuredClone(listed);
281
+ return defaultDescriptor(catalog, kind, api, id);
282
+ }
283
+ /**
284
+ * The catalog's models of a provider, then what its listing adds: a model both name keeps the
285
+ * catalog's description (with the listing's samplers); a model only the listing names takes the
286
+ * listing's parameters over the adapter's defaults.
287
+ */
288
+ export function mergeLiveModels(catalog, provider, kind, api, live) {
289
+ const out = (catalog.providers[provider]?.[kind]?.models ?? []).map((model) => structuredClone(model));
290
+ const byId = new Map(out.map((model) => [model.id, model]));
291
+ for (const entry of live) {
292
+ const known = byId.get(entry.id);
293
+ if (known) {
294
+ if (known.kind === 'image' && entry.samplers?.length)
295
+ known.samplers = [...entry.samplers];
296
+ continue;
297
+ }
298
+ const model = defaultDescriptor(catalog, kind, api, entry.id, entry.name);
299
+ if (entry.description)
300
+ model.description = entry.description;
301
+ const workflows = workflowsOf(kind, entry.workflows);
302
+ if (workflows.length > 0)
303
+ model.workflows = workflows;
304
+ if (entry.params)
305
+ model.params = structuredClone(entry.params);
306
+ if (entry.options)
307
+ model.options = { ...entry.options };
308
+ if (model.kind === 'image' && entry.samplers?.length)
309
+ model.samplers = [...entry.samplers];
310
+ byId.set(model.id, model);
311
+ out.push(model);
312
+ }
313
+ return out;
314
+ }
315
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/media/catalog.ts"],"names":[],"mappings":"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"}