@desplega.ai/agent-swarm 1.173.0 → 2.1.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 (511) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ccm9xrep.js → acp-adapter-kr4abrsk.js} +17 -16
  3. package/dist/{actions-sgeyv08k.js → actions-eh4g6w2r.js} +39 -34
  4. package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-7h7wdt8q.js} +8 -7
  5. package/dist/{app-km9qnv2f.js → app-7k8s9w5p.js} +18 -14
  6. package/dist/{assistant-5r8tcvvd.js → assistant-wswt2y7p.js} +40 -35
  7. package/dist/{boot-reembed-16rv9843.js → boot-reembed-9apm9qw6.js} +10 -9
  8. package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-whzbdthj.js} +10 -9
  9. package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-ndzmvmgt.js} +11 -10
  10. package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-e9sta0yt.js} +16 -13
  11. package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-4mqd3r6r.js} +19 -18
  12. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-9wswb52m.js} +7 -5
  13. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-tpe1effx.js} +6 -4
  14. package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-q49ghmh9.js} +12402 -11850
  15. package/dist/{cli-ne7smj1b.js → cli-01xvj1rq.js} +10 -10
  16. package/dist/{cli-nwrdx840.js → cli-035vekcw.js} +3 -3
  17. package/dist/{cli-9xf7fdtp.js → cli-0pd8hzhc.js} +29 -6
  18. package/dist/{cli-tmhsxhb8.js → cli-0veb92a3.js} +28 -6
  19. package/dist/{cli-c3rk1v0x.js → cli-10jesr25.js} +3 -3
  20. package/dist/{cli-6thk4jz3.js → cli-1y7yywmj.js} +6 -6
  21. package/dist/{cli-6r2f7edk.js → cli-20krdhz5.js} +47 -19
  22. package/dist/{cli-rfs4vddv.js → cli-29rja109.js} +39 -20
  23. package/dist/cli-2m1ktfzz.js +17795 -0
  24. package/dist/{cli-na2pxe4f.js → cli-2pwa0q4d.js} +15 -4
  25. package/dist/{cli-7a93cv8c.js → cli-4mengw46.js} +441 -43
  26. package/dist/{cli-94b48jhk.js → cli-5twdke5x.js} +16 -14
  27. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  28. package/dist/cli-6cvfxs8r.js +47 -0
  29. package/dist/{cli-w1apjecb.js → cli-711vwbxn.js} +2 -2
  30. package/dist/{cli-r4fqfpwf.js → cli-78vv7446.js} +50 -27
  31. package/dist/{cli-srqq3gc5.js → cli-7n6s5man.js} +5 -5
  32. package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
  33. package/dist/{cli-2bw3w47j.js → cli-8wwxw8a3.js} +1 -1
  34. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  35. package/dist/{cli-ywm1azg9.js → cli-9jzdj90z.js} +8 -4
  36. package/dist/cli-9traj3dn.js +638 -0
  37. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  38. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  39. package/dist/cli-cvv9k0hh.js +10143 -0
  40. package/dist/{cli-anzdk0z4.js → cli-d9286m9h.js} +2 -2
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/cli-f527ce74.js +781 -0
  43. package/dist/{cli-gmdajfw5.js → cli-gxzkg1de.js} +5020 -1729
  44. package/dist/{cli-451ks6aw.js → cli-h1arqn31.js} +1 -1
  45. package/dist/cli-hjwmhcg1.js +10622 -0
  46. package/dist/{cli-jpc4r224.js → cli-hqr88ew6.js} +19 -3
  47. package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
  48. package/dist/{cli-cd0hv9nh.js → cli-j67mh2vg.js} +2 -2
  49. package/dist/cli-jta2eyzc.js +619 -0
  50. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  51. package/dist/cli-kceah1eh.js +92 -0
  52. package/dist/{cli-d603qf86.js → cli-ksphgh48.js} +10 -8
  53. package/dist/{cli-3nxdmjrc.js → cli-mgz4nbgg.js} +4 -4
  54. package/dist/{cli-saqyage0.js → cli-mz5as5ha.js} +179 -27
  55. package/dist/cli-n2wq4j7m.js +6985 -0
  56. package/dist/{cli-ppy4nnnh.js → cli-n8ndw8j7.js} +2 -2
  57. package/dist/{cli-1w0vj3gw.js → cli-naqzr17j.js} +7 -7
  58. package/dist/{cli-0a7mm3zp.js → cli-nm1p8jfr.js} +25 -21
  59. package/dist/{cli-wrh08zjd.js → cli-p3zbc1rw.js} +5 -18
  60. package/dist/{cli-hsem16hb.js → cli-pe05f8yk.js} +29 -6
  61. package/dist/{cli-5wpw4rab.js → cli-qmzsbkvy.js} +5 -5
  62. package/dist/{cli-bv2etw2y.js → cli-qnm4e9e4.js} +99 -590
  63. package/dist/{cli-1x7da0de.js → cli-qqy4q48b.js} +8 -8
  64. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  65. package/dist/{cli-5er5gjbm.js → cli-r35rw5de.js} +15 -15
  66. package/dist/{cli-v3zhnxsb.js → cli-r610p9bs.js} +2 -2
  67. package/dist/{cli-7jykv7ef.js → cli-rc6pf5kv.js} +1 -1
  68. package/dist/{cli-x119kdba.js → cli-rdxm77k3.js} +1 -1
  69. package/dist/cli-rhs9pz33.js +294 -0
  70. package/dist/{cli-0p3enk35.js → cli-s69nfyeh.js} +9 -1
  71. package/dist/{cli-0kxf81jj.js → cli-sawv63e8.js} +2 -2
  72. package/dist/{cli-e3pmyt39.js → cli-sg19gbf0.js} +1 -1
  73. package/dist/{cli-d161g69q.js → cli-shk7r5cs.js} +57 -6
  74. package/dist/{cli-7pz3b7x5.js → cli-sksetb2q.js} +36 -1
  75. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  76. package/dist/{cli-db3m6zdt.js → cli-t02z59f2.js} +1 -1
  77. package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
  78. package/dist/{cli-s8z6x4b4.js → cli-v7g551te.js} +225 -113
  79. package/dist/{cli-rfz2ve55.js → cli-vgqzp4em.js} +3341 -955
  80. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  81. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  82. package/dist/cli-wfnemr1t.js +86 -0
  83. package/dist/cli-wmgrkscj.js +23254 -0
  84. package/dist/{cli-qm1448f9.js → cli-wms6x9db.js} +8 -8
  85. package/dist/{cli-tadfgd0t.js → cli-x1r545x8.js} +33 -4
  86. package/dist/{cli-xc7p7s3g.js → cli-xczsgshn.js} +6 -6
  87. package/dist/{cli-fmhj1ehj.js → cli-y3167wt1.js} +882 -271
  88. package/dist/{cli-r0byd61h.js → cli-yjmqpxt3.js} +17 -16
  89. package/dist/{cli-81r1wjyv.js → cli-z780ec7c.js} +1 -1
  90. package/dist/{cli-phcqp1b9.js → cli-zm9t2vde.js} +2 -2
  91. package/dist/cli.js +34 -49
  92. package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-4z16v9n0.js} +15 -14
  93. package/dist/{codex-login-841kv5fk.js → codex-login-pkepy2j1.js} +3 -2
  94. package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-rvms9y2x.js} +15 -14
  95. package/dist/{commands-z8fq9qna.js → commands-2a9rtyat.js} +11 -10
  96. package/dist/{controller-hq5ggpcp.js → controller-3k3madbn.js} +5 -4
  97. package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-v9yn8zb9.js} +42 -37
  98. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-98gbhyzn.js} +7 -6
  99. package/dist/{db-qfpq4bt7.js → db-eywwsnjw.js} +30 -9
  100. package/dist/{db-yyhqqrbf.js → db-ncypk9np.js} +12 -11
  101. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-zeq8b9gz.js} +3 -2
  102. package/dist/{dispatcher-x0x7qfcq.js → dispatcher-w94kc575.js} +38 -33
  103. package/dist/{docker-f503k9p0.js → docker-b1e4cqab.js} +3 -2
  104. package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-47ztej36.js} +7 -6
  105. package/dist/{e2b-66xra4az.js → e2b-bbt8ey45.js} +4 -3
  106. package/dist/{e2b-xwhyj8cw.js → e2b-dp804sen.js} +4 -3
  107. package/dist/{event-bus-vjtv82gm.js → event-bus-j2jdg3qb.js} +3 -2
  108. package/dist/{external-channel-h1fjecwe.js → external-channel-zrkg8ar9.js} +11 -10
  109. package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
  110. package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
  111. package/dist/{grok-adapter-e7mr287e.js → grok-adapter-s9ncp9vy.js} +18 -17
  112. package/dist/{handlers-znb9n7d4.js → handlers-kqftvjgw.js} +41 -36
  113. package/dist/{heartbeat-bm4qkn8d.js → heartbeat-9q96p8v9.js} +43 -38
  114. package/dist/{hook-254r4mza.js → hook-56qe10dp.js} +11 -23
  115. package/dist/{hook-xaa3q80s.js → hook-yy6rw42k.js} +12 -11
  116. package/dist/{http-3dgrgp8y.js → http-r2dnb8f8.js} +2411 -275
  117. package/dist/{index-fx3jqq1e.js → index-3gtmkhc6.js} +38 -33
  118. package/dist/{index-bdsqa799.js → index-3k5hkz7r.js} +43 -38
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-g2byveez.js → index-5e101240.js} +38 -33
  121. package/dist/{index-2ybk7khy.js → index-5wyfjc2c.js} +845 -683
  122. package/dist/index-9gw58n4k.js +193 -0
  123. package/dist/index-9j87mcm8.js +56305 -0
  124. package/dist/index-bsmcresk.js +79424 -0
  125. package/dist/index-mh85qhec.js +475 -0
  126. package/dist/{index-jd7sejm2.js → index-vxvhxxbn.js} +10 -9
  127. package/dist/index-we27kd31.js +12810 -0
  128. package/dist/{keepalive-6ywhpja1.js → keepalive-psj6j54c.js} +12 -11
  129. package/dist/{lead-cw45n21s.js → lead-hajz4688.js} +61 -56
  130. package/dist/{maintenance-ss1a1ge9.js → maintenance-ps02sb5m.js} +10 -9
  131. package/dist/{node-fkajaq96.js → node-mwb5r697.js} +2 -1
  132. package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-0284h93b.js} +11 -10
  133. package/dist/{onboard-8hzdhc1k.js → onboard-rbf6bg01.js} +11 -3
  134. package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-13dcatgq.js} +18 -13
  135. package/dist/{otel-impl-e6mnvc4v.js → otel-impl-zvqcbhp7.js} +242 -868
  136. package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-xxy47q4v.js} +244 -106
  137. package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-kefx9v3t.js} +12 -11
  138. package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-3m36rxm2.js} +11 -10
  139. package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-z76xv0hq.js} +12 -11
  140. package/dist/{render-v2-907cy6sa.js → render-v2-wz73bs25.js} +18 -14
  141. package/dist/{resume-42stcaz0.js → resume-k4wzge8w.js} +25 -21
  142. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  143. package/dist/{setup-adbc1c10.js → setup-2fp2pypp.js} +2 -2
  144. package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
  145. package/dist/{work-objects-wpj8ck95.js → work-objects-6k0ywz3m.js} +41 -36
  146. package/dist/{worker-bzdra9rf.js → worker-5v3rxsdh.js} +61 -56
  147. package/dist/{x-qfmygqqv.js → x-4mtdeym1.js} +3 -2
  148. package/openapi.json +1279 -329
  149. package/package.json +15 -15
  150. package/src/agentmail/handlers.ts +21 -11
  151. package/src/apps/definition.ts +16 -0
  152. package/src/azure-devops/api.ts +52 -2
  153. package/src/azure-devops/boards-sync.ts +50 -20
  154. package/src/azure-devops/index.ts +1 -0
  155. package/src/azure-devops/outbound.ts +95 -0
  156. package/src/be/boot-seeds.ts +11 -0
  157. package/src/be/config-refs.ts +60 -0
  158. package/src/be/db/model-profiles.ts +315 -0
  159. package/src/be/db/page-versions.ts +15 -0
  160. package/src/be/db/runtime.ts +35 -8
  161. package/src/be/db/skill-name-resolution.ts +36 -0
  162. package/src/be/db/tasks/read.ts +237 -0
  163. package/src/be/db/tasks/write.ts +7 -0
  164. package/src/be/db.ts +87 -36
  165. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  166. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  167. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  168. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  169. package/src/be/migrations/220_model_profiles.sql +137 -0
  170. package/src/be/model-catalog-store.ts +5 -1
  171. package/src/be/model-tier-resolution.ts +155 -10
  172. package/src/be/model-validation.ts +12 -2
  173. package/src/be/models-catalog.ts +26 -1
  174. package/src/be/modelsdev-cache.json +198 -63
  175. package/src/be/modelsdev-cache.ts +9 -1
  176. package/src/be/script-credential-broker.ts +39 -2
  177. package/src/be/scripts/run-saved.ts +1 -0
  178. package/src/be/scripts/typecheck.ts +22 -8
  179. package/src/be/secret-registry.ts +6 -2
  180. package/src/be/seed/runner.ts +13 -1
  181. package/src/be/seed/state-db.ts +5 -0
  182. package/src/be/seed/types.ts +6 -0
  183. package/src/be/seed-model-profiles.ts +41 -0
  184. package/src/be/seed-pricing.ts +19 -2
  185. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  186. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  187. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  188. package/src/be/seed-scripts/index.ts +9 -0
  189. package/src/be/seed-skills/bundled-files.generated.json +0 -18
  190. package/src/be/seed-skills/index.ts +104 -3
  191. package/src/be/swarm-config-guard.ts +53 -0
  192. package/src/cli.tsx +0 -16
  193. package/src/commands/onboard/non-interactive.ts +4 -2
  194. package/src/commands/provider-credentials.ts +52 -6
  195. package/src/commands/runner.ts +193 -71
  196. package/src/e2b/env.ts +5 -0
  197. package/src/extensions/catalog.generated.json +17 -0
  198. package/src/extensions/contract-types.generated.ts +1 -1
  199. package/src/extensions/contract.ts +45 -0
  200. package/src/extensions/dispatcher.ts +7 -0
  201. package/src/extensions/loader.ts +10 -5
  202. package/src/extensions/post-bridge.ts +40 -0
  203. package/src/github/handlers.ts +11 -4
  204. package/src/heartbeat/heartbeat.ts +2 -1
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/agents.ts +49 -2
  208. package/src/http/all-routes.ts +1 -1
  209. package/src/http/apps.ts +30 -3
  210. package/src/http/config.ts +62 -19
  211. package/src/http/core.ts +8 -0
  212. package/src/http/index.ts +25 -3
  213. package/src/http/integrations.ts +88 -1
  214. package/src/http/mcp.ts +15 -5
  215. package/src/http/model-profiles.ts +303 -0
  216. package/src/http/page-proxy.ts +2 -4
  217. package/src/http/pages-public.ts +13 -7
  218. package/src/http/pages.ts +3 -13
  219. package/src/http/poll.ts +42 -71
  220. package/src/http/requested-by.ts +54 -0
  221. package/src/http/script-runs.ts +1 -1
  222. package/src/http/scripts.ts +26 -2
  223. package/src/http/stats.ts +1 -30
  224. package/src/http/tasks.ts +79 -5
  225. package/src/http/utils.ts +14 -0
  226. package/src/http/webhooks.ts +160 -3
  227. package/src/http/x.ts +1 -0
  228. package/src/integrations/chat-sdk/adapters.ts +129 -0
  229. package/src/integrations/chat-sdk/attachments.ts +232 -0
  230. package/src/integrations/chat-sdk/background.ts +36 -0
  231. package/src/integrations/chat-sdk/commands.ts +194 -0
  232. package/src/integrations/chat-sdk/config.ts +198 -0
  233. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  234. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  235. package/src/integrations/chat-sdk/handlers.ts +28 -0
  236. package/src/integrations/chat-sdk/inbound.ts +426 -0
  237. package/src/integrations/chat-sdk/limits.ts +48 -0
  238. package/src/integrations/chat-sdk/logger.ts +81 -0
  239. package/src/integrations/chat-sdk/outbound.ts +123 -0
  240. package/src/integrations/chat-sdk/relay.ts +172 -0
  241. package/src/integrations/chat-sdk/router.ts +169 -0
  242. package/src/integrations/chat-sdk/runtime.ts +351 -0
  243. package/src/integrations/chat-sdk/schema.ts +245 -0
  244. package/src/integrations/chat-sdk/state.ts +243 -0
  245. package/src/integrations/chat-sdk/status.ts +244 -0
  246. package/src/integrations/chat-sdk/steering.ts +58 -0
  247. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  248. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  249. package/src/integrations/chat-sdk/templates.ts +16 -0
  250. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  251. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  252. package/src/integrations/chat-sdk/typing.ts +65 -0
  253. package/src/{artifact-sdk → pages}/feedback-overlay.ts +65 -6
  254. package/src/pages/version.ts +4 -5
  255. package/src/prompts/base-prompt.ts +111 -45
  256. package/src/providers/acp-target-catalog.ts +6 -0
  257. package/src/providers/acp-targets.ts +56 -3
  258. package/src/providers/amp-adapter.ts +1 -1
  259. package/src/providers/claude-adapter.ts +1 -1
  260. package/src/providers/claude-flag-settings.ts +17 -5
  261. package/src/providers/claude-managed-adapter.ts +1 -1
  262. package/src/providers/claude-session-events.ts +6 -1
  263. package/src/providers/dsh-adapter.ts +1 -1
  264. package/src/providers/opencode-adapter.ts +243 -26
  265. package/src/providers/opencode-swarm-plugin.ts +31 -0
  266. package/src/providers/pi-mono-adapter.ts +398 -153
  267. package/src/providers/pi-mono-extension.ts +17 -3
  268. package/src/providers/pricing-sources.md +33 -2
  269. package/src/providers/reasoning-effort.ts +37 -0
  270. package/src/providers/types.ts +6 -2
  271. package/src/rbac/legacy-policy.ts +16 -2
  272. package/src/rbac/permissions.ts +26 -0
  273. package/src/scheduler/deferred-task-waits.ts +18 -5
  274. package/src/scheduler/scheduler.ts +11 -3
  275. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  276. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  277. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  278. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  279. package/src/scripts-runtime/loader.ts +19 -7
  280. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  281. package/src/scripts-runtime/sdk-allowlist.ts +12 -6
  282. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  283. package/src/scripts-runtime/types/stdlib.d.ts +39 -15
  284. package/src/scripts-runtime/types/swarm-extension.d.ts +66 -1
  285. package/src/scripts-runtime/types/swarm-sdk.d.ts +39 -15
  286. package/src/server.ts +62 -19
  287. package/src/slack/blocks.ts +4 -2
  288. package/src/slack/event-dedup.ts +1 -1
  289. package/src/slack/reaction-shortcode.ts +14 -0
  290. package/src/slack/render-v2.ts +12 -7
  291. package/src/slack/responses.ts +5 -4
  292. package/src/slack/thread-buffer.ts +41 -22
  293. package/src/tasks/additive-buffer.ts +4 -2
  294. package/src/tasks/context-key.ts +60 -1
  295. package/src/tasks/model-pin.ts +67 -0
  296. package/src/tasks/worker-follow-up.ts +15 -33
  297. package/src/tests/acp-adapter.test.ts +42 -0
  298. package/src/tests/agentmail-filters.test.ts +47 -0
  299. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  300. package/src/tests/apps-spike2.test.ts +35 -0
  301. package/src/tests/azure-devops-outbound.test.ts +420 -0
  302. package/src/tests/base-prompt.test.ts +58 -54
  303. package/src/tests/chat-sdk-commands.test.ts +191 -0
  304. package/src/tests/chat-sdk-config.test.ts +334 -0
  305. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  306. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  307. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  308. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  309. package/src/tests/chat-sdk-harness.ts +146 -0
  310. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  311. package/src/tests/chat-sdk-relay.test.ts +470 -0
  312. package/src/tests/chat-sdk-reload.test.ts +128 -0
  313. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  314. package/src/tests/chat-sdk-slack.test.ts +268 -0
  315. package/src/tests/chat-sdk-state.test.ts +163 -0
  316. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  317. package/src/tests/chat-sdk-teams.test.ts +277 -0
  318. package/src/tests/chat-sdk-tools.test.ts +520 -0
  319. package/src/tests/chat-sdk-typing.test.ts +120 -0
  320. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  321. package/src/tests/claude-adapter-binary.test.ts +9 -4
  322. package/src/tests/claude-flag-settings.test.ts +11 -3
  323. package/src/tests/claude-managed-adapter.test.ts +1 -1
  324. package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
  325. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  326. package/src/tests/claude-worker-parity.test.ts +2 -7
  327. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  328. package/src/tests/config-refs.test.ts +66 -0
  329. package/src/tests/context-key.test.ts +19 -0
  330. package/src/tests/cors-allowlist.test.ts +25 -0
  331. package/src/tests/create-page-tool.test.ts +18 -0
  332. package/src/tests/credential-check.test.ts +139 -0
  333. package/src/tests/credentials.test.ts +21 -0
  334. package/src/tests/db-runtime.test.ts +61 -0
  335. package/src/tests/db-task-read-contract.test.ts +22 -0
  336. package/src/tests/db-task-write-contract.test.ts +11 -0
  337. package/src/tests/deferred-task-wake.test.ts +78 -1
  338. package/src/tests/docs-index-footprint.test.js +3 -3
  339. package/src/tests/dsh-adapter.test.ts +1 -1
  340. package/src/tests/enabled-capabilities.test.ts +20 -0
  341. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  342. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  343. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  344. package/src/tests/env-flag.test.ts +1 -0
  345. package/src/tests/explicit-model-validation.test.ts +105 -1
  346. package/src/tests/extensions-catalog.test.ts +1 -0
  347. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  348. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  349. package/src/tests/extensions-loader.test.ts +15 -0
  350. package/src/tests/extensions-post-bridge.test.ts +51 -0
  351. package/src/tests/fetch-resolved-env.test.ts +128 -0
  352. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  353. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  354. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  355. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  356. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  357. package/src/tests/github-handlers.test.ts +35 -0
  358. package/src/tests/harness-provider-resolution.test.ts +12 -0
  359. package/src/tests/heartbeat-checklist.test.ts +3 -2
  360. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  361. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  362. package/src/tests/hook-runtime-close.test.ts +0 -2
  363. package/src/tests/http-api-integration.test.ts +0 -25
  364. package/src/tests/migration-046-budgets.test.ts +17 -16
  365. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  366. package/src/tests/model-profile-backcompat.test.ts +327 -0
  367. package/src/tests/model-profile-providers.test.ts +302 -0
  368. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  369. package/src/tests/model-profiles-api.test.ts +614 -0
  370. package/src/tests/model-tier-resolution.test.ts +93 -0
  371. package/src/tests/models-catalog.test.ts +42 -1
  372. package/src/tests/openai-compatible-providers.test.ts +134 -0
  373. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  374. package/src/tests/opencode-adapter.test.ts +216 -2
  375. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  376. package/src/tests/opencode-shell-env.test.ts +145 -0
  377. package/src/tests/openrouter-base-url.test.ts +101 -151
  378. package/src/tests/page-proxy.test.ts +1 -1
  379. package/src/tests/pages-browser-sdk.test.ts +76 -0
  380. package/src/tests/pages-feedback-keys.test.ts +121 -0
  381. package/src/tests/pages-feedback.test.ts +4 -1
  382. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  383. package/src/tests/pi-context-compaction.test.ts +193 -0
  384. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  385. package/src/tests/pi-mono-adapter.test.ts +385 -5
  386. package/src/tests/pi-shell-env.test.ts +170 -0
  387. package/src/tests/profile-claim.test.ts +269 -0
  388. package/src/tests/prompt-template-remaining.test.ts +35 -0
  389. package/src/tests/quickjs-compat.test.ts +213 -0
  390. package/src/tests/rbac-engine.test.ts +32 -3
  391. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  392. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  393. package/src/tests/script-connections.test.ts +6 -0
  394. package/src/tests/script-executor-conformance.test.ts +252 -1
  395. package/src/tests/script-executor-quickjs.test.ts +96 -0
  396. package/src/tests/script-runs-http.test.ts +89 -0
  397. package/src/tests/scripts-http.test.ts +217 -1
  398. package/src/tests/scripts-only-gating.test.ts +2 -3
  399. package/src/tests/scripts-runtime.test.ts +58 -40
  400. package/src/tests/secret-scrubber.test.ts +96 -0
  401. package/src/tests/seed-model-profiles.test.ts +174 -0
  402. package/src/tests/seed-scripts.test.ts +2 -2
  403. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  404. package/src/tests/seed-skills-retire.test.ts +182 -0
  405. package/src/tests/send-task-requester-gate.test.ts +58 -0
  406. package/src/tests/session-cost-recompute-unit.test.ts +46 -0
  407. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  408. package/src/tests/skill-invocations.test.ts +4 -2
  409. package/src/tests/slack-blocks.test.ts +36 -0
  410. package/src/tests/slack-inline-output.test.ts +14 -0
  411. package/src/tests/slack-reaction-config.test.ts +20 -0
  412. package/src/tests/slack-render-v2.test.ts +37 -0
  413. package/src/tests/slack-thread-buffer.test.ts +98 -1
  414. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  415. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  416. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  417. package/src/tests/swarm-diff.test.ts +1 -1
  418. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  419. package/src/tests/task-session-prompts.test.ts +132 -0
  420. package/src/tests/task-tool-manifest.test.ts +14 -0
  421. package/src/tests/task-tools-ctx.test.ts +2 -0
  422. package/src/tests/tool-annotations.test.ts +6 -6
  423. package/src/tests/ui-logs-parser.test.ts +43 -0
  424. package/src/tests/used-by-route.test.ts +6 -0
  425. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  426. package/src/tests/workflow-llm.test.ts +61 -0
  427. package/src/tests/workflow-swarm-script.test.ts +38 -0
  428. package/src/tests/workflow-wait-filter.test.ts +5 -3
  429. package/src/tools/chat-access.ts +41 -0
  430. package/src/tools/chat-open-dm.ts +59 -0
  431. package/src/tools/chat-post.ts +74 -0
  432. package/src/tools/chat-read-thread.ts +100 -0
  433. package/src/tools/chat-reply.ts +75 -0
  434. package/src/tools/create-page.ts +3 -13
  435. package/src/tools/model-catalog/index.ts +2 -1
  436. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  437. package/src/tools/register-chat-channel.ts +139 -0
  438. package/src/tools/request-human-input.ts +11 -3
  439. package/src/tools/script-apis.ts +5 -1
  440. package/src/tools/script-upsert.ts +4 -1
  441. package/src/tools/send-task.ts +48 -1
  442. package/src/tools/skills/skill-get.ts +17 -9
  443. package/src/tools/swarm-config/get-config.ts +2 -1
  444. package/src/tools/swarm-config/list-config.ts +2 -1
  445. package/src/tools/swarm-config/set-config.ts +16 -3
  446. package/src/tools/system-one-decide.ts +104 -0
  447. package/src/tools/task-action.ts +22 -1
  448. package/src/tools/tool-config.ts +14 -6
  449. package/src/types.ts +48 -3
  450. package/src/utils/config-env-export.ts +74 -0
  451. package/src/utils/credentials.test.ts +92 -0
  452. package/src/utils/credentials.ts +52 -4
  453. package/src/utils/harness-provider.ts +15 -6
  454. package/src/utils/runtime-model-catalog.ts +11 -1
  455. package/src/utils/secret-scrubber.ts +86 -10
  456. package/src/utils/task-tool-manifest.ts +19 -2
  457. package/src/utils/vcs-repo-match.ts +29 -0
  458. package/src/workflows/executors/raw-llm.ts +8 -3
  459. package/src/workflows/executors/swarm-script.ts +1 -0
  460. package/src/workflows/executors/system-one-decision.ts +21 -11
  461. package/src/workflows/executors/workflow-llm.ts +22 -0
  462. package/src/workflows/index.ts +21 -12
  463. package/templates/extensions/README.md +1 -0
  464. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  465. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  466. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  467. package/templates/skills/agent-browser/SKILL.md +1 -1
  468. package/templates/skills/agent-browser/content.md +1 -1
  469. package/templates/skills/apps/SKILL.md +8 -1
  470. package/templates/skills/apps/content.md +8 -1
  471. package/templates/skills/chat-sdk/config.json +14 -0
  472. package/templates/skills/chat-sdk/content.md +84 -0
  473. package/templates/skills/composio-gmail/content.md +7 -0
  474. package/templates/skills/composio-google-docs/content.md +1 -1
  475. package/templates/skills/email-domain-health/config.json +14 -0
  476. package/templates/skills/email-domain-health/content.md +131 -0
  477. package/templates/skills/kv-storage/content.md +2 -2
  478. package/templates/skills/pages/content.md +8 -10
  479. package/templates/skills/swarm-extensions/content.md +2 -0
  480. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  481. package/templates/skills/swarm-scripts/config.json +1 -1
  482. package/templates/skills/swarm-scripts/content.md +4 -2
  483. package/templates/skills/workflow-iterate/content.md +38 -0
  484. package/dist/artifact-eczsknc3.js +0 -3843
  485. package/dist/cli-42qhyvwx.js +0 -33
  486. package/dist/cli-bd957dgb.js +0 -153
  487. package/dist/cli-q51yprfq.js +0 -1104
  488. package/dist/cli-t1ze64h3.js +0 -811
  489. package/dist/cli-tcc4wd5d.js +0 -56471
  490. package/dist/index-9ch1n761.js +0 -1102
  491. package/src/artifact-sdk/index.ts +0 -2
  492. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  493. package/src/artifact-sdk/port.ts +0 -12
  494. package/src/artifact-sdk/server.ts +0 -183
  495. package/src/artifact-sdk/tunnel.ts +0 -19
  496. package/src/commands/artifact.ts +0 -249
  497. package/src/http/ecosystem.ts +0 -77
  498. package/src/tests/artifact-commands.test.ts +0 -92
  499. package/src/tests/artifact-sdk.test.ts +0 -793
  500. package/src/tests/register-service-security.test.ts +0 -194
  501. package/src/tools/list-services.ts +0 -107
  502. package/src/tools/register-service.ts +0 -177
  503. package/src/tools/unregister-service.ts +0 -73
  504. package/src/tools/update-service-status.ts +0 -96
  505. package/templates/skills/artifacts/config.json +0 -14
  506. package/templates/skills/artifacts/content.md +0 -344
  507. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  508. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  509. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  510. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  511. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
@@ -1,467 +1,11 @@
1
+ import {
2
+ init_src,
3
+ withRegistryCatalogSections
4
+ } from "./cli-e3g5mbkz.js";
1
5
  import {
2
6
  __esm
3
7
  } from "./cli-bc05qbss.js";
4
8
 
5
- // packages/model-catalog/src/model-alias.ts
6
- function buildClaudeAliasMap(models) {
7
- const best = new Map;
8
- for (const model of models) {
9
- const id = model.id.toLowerCase();
10
- if (!id.startsWith("claude"))
11
- continue;
12
- if (DATED_ID_RE.test(id) || id.endsWith("-latest"))
13
- continue;
14
- for (const token of id.split("-")) {
15
- if (token === "claude" || !FAMILY_TOKEN_RE.test(token))
16
- continue;
17
- const current = best.get(token);
18
- if (!current || isNewer(model, current))
19
- best.set(token, model);
20
- }
21
- }
22
- const out = {};
23
- for (const [alias, model] of best)
24
- out[alias] = model.id;
25
- return out;
26
- }
27
- function isNewer(a, b) {
28
- const ra = a.releaseDate ?? "";
29
- const rb = b.releaseDate ?? "";
30
- if (ra !== rb)
31
- return ra > rb;
32
- return a.id > b.id;
33
- }
34
- var DATED_ID_RE, FAMILY_TOKEN_RE;
35
- var init_model_alias = __esm(() => {
36
- DATED_ID_RE = /-\d{8}$/;
37
- FAMILY_TOKEN_RE = /^[a-z]+$/;
38
- });
39
-
40
- // packages/model-catalog/src/resolve-alias.ts
41
- function isAlias(value) {
42
- return value.trim().toLowerCase().startsWith(LATEST_PREFIX);
43
- }
44
- function parseAlias(alias) {
45
- let value = alias.trim().toLowerCase();
46
- if (!value.startsWith(LATEST_PREFIX))
47
- return null;
48
- let channel = "stable";
49
- const at = value.lastIndexOf("@");
50
- if (at >= 0) {
51
- const suffix = value.slice(at + 1);
52
- if (suffix !== "stable" && suffix !== "any")
53
- return null;
54
- channel = suffix;
55
- value = value.slice(0, at);
56
- }
57
- const rest = value.slice(LATEST_PREFIX.length);
58
- const slash = rest.indexOf("/");
59
- if (slash <= 0)
60
- return null;
61
- const section = rest.slice(0, slash);
62
- const target = rest.slice(slash + 1);
63
- if (target.length === 0)
64
- return null;
65
- if (section === "anthropic") {
66
- return /^[a-z]+$/.test(target) ? { kind: "anthropic", family: target, channel } : null;
67
- }
68
- if (section === "openrouter" && !OPENROUTER_VENDOR_RE.test(target))
69
- return null;
70
- if (section === "openrouter" || section === "openai") {
71
- return GLOB_TARGET_RE.test(target) ? { kind: section, glob: target, channel } : null;
72
- }
73
- return null;
74
- }
75
- function globToRegExp(glob) {
76
- const escaped = glob.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
77
- return new RegExp(`^${escaped}$`);
78
- }
79
- function isNewer2(a, b) {
80
- if (a.releaseDate !== b.releaseDate)
81
- return a.releaseDate > b.releaseDate;
82
- return a.id > b.id;
83
- }
84
- function passesPolicy(id, releaseDate, channel, named, policy) {
85
- if (policy.isSupported && !policy.isSupported(id))
86
- return false;
87
- if (channel === "any")
88
- return true;
89
- const lower = id.toLowerCase();
90
- if (!named.includes("preview") && lower.includes("preview"))
91
- return false;
92
- if (!named.includes("experimental") && lower.includes("experimental"))
93
- return false;
94
- const soakDays = policy.soakDays ?? 0;
95
- if (soakDays > 0 && releaseDate) {
96
- const released = Date.parse(releaseDate);
97
- const now = (policy.now ?? new Date).getTime();
98
- if (!Number.isNaN(released) && now - released < soakDays * DAY_MS)
99
- return false;
100
- }
101
- return true;
102
- }
103
- function resolveAlias(alias, catalog, policy = {}) {
104
- const parsed = parseAlias(alias);
105
- if (!parsed)
106
- return null;
107
- if (parsed.kind === "anthropic") {
108
- const models = catalog.anthropic?.models ?? {};
109
- const map = buildClaudeAliasMap(Object.entries(models).filter(([id, m]) => passesPolicy(id, m.release_date, parsed.channel, "", policy)).map(([id, m]) => ({ id, releaseDate: m.release_date ?? null })));
110
- return map[parsed.family] ?? null;
111
- }
112
- const re = globToRegExp(parsed.glob);
113
- const allowFree = parsed.glob.includes(":free");
114
- const allowLatest = parsed.glob.includes("latest");
115
- const allowPreview = parsed.glob.includes("preview");
116
- let best = null;
117
- for (const [id, m] of Object.entries(catalog[parsed.kind]?.models ?? {})) {
118
- const lower = id.toLowerCase();
119
- if (!re.test(lower))
120
- continue;
121
- if (DATED_ID_RE2.test(lower))
122
- continue;
123
- if (!allowLatest && lower.endsWith("-latest"))
124
- continue;
125
- if (!allowFree && lower.endsWith(":free"))
126
- continue;
127
- if (parsed.channel === "stable" && !allowPreview && lower.includes("preview"))
128
- continue;
129
- if (!passesPolicy(id, m.release_date, parsed.channel, parsed.glob, policy))
130
- continue;
131
- const candidate = { id, releaseDate: m.release_date ?? "" };
132
- if (!best || isNewer2(candidate, best))
133
- best = candidate;
134
- }
135
- if (!best)
136
- return null;
137
- return parsed.kind === "openrouter" ? `openrouter/${best.id}` : best.id;
138
- }
139
- var LATEST_PREFIX = "latest:", DATED_ID_RE2, DAY_MS, GLOB_TARGET_RE, OPENROUTER_VENDOR_RE;
140
- var init_resolve_alias = __esm(() => {
141
- init_model_alias();
142
- DATED_ID_RE2 = /-\d{8}$/;
143
- DAY_MS = 24 * 60 * 60 * 1000;
144
- GLOB_TARGET_RE = /^[a-z0-9._:~*/-]+$/;
145
- OPENROUTER_VENDOR_RE = /^[a-z0-9._~-]+\//;
146
- });
147
-
148
- // packages/model-catalog/src/harness-models.ts
149
- function harnessCatalogSection(harness) {
150
- return HARNESS_CATALOG_SECTION[harness] ?? null;
151
- }
152
- function isHarnessModelJudged(harness) {
153
- return !!harness && (harnessCatalogSection(harness) !== null || harness === "grok");
154
- }
155
- function normalizeGrokModel(model) {
156
- return model.trim().replace(XAI_PREFIX_RE, "");
157
- }
158
- function isHarnessCatalogModel(harness, id, model = {}) {
159
- const lower = id.toLowerCase();
160
- if (model.status === "deprecated")
161
- return false;
162
- const section = harnessCatalogSection(harness);
163
- if (section === "anthropic") {
164
- if (!lower.startsWith("claude-"))
165
- return false;
166
- if (DATED_ID_RE3.test(lower) || lower.endsWith("-latest"))
167
- return false;
168
- if (/^claude-\d/.test(lower))
169
- return false;
170
- return true;
171
- }
172
- if (section === "openai") {
173
- const match = /^gpt-(\d+)/.exec(lower);
174
- if (!match || Number(match[1]) < CODEX_MIN_GPT_MAJOR)
175
- return false;
176
- if (DATED_ID_RE3.test(lower) || ISO_DATED_ID_RE.test(lower))
177
- return false;
178
- if (model.reasoning === false)
179
- return false;
180
- for (const token of lower.split("-")) {
181
- if (CODEX_EXCLUDED_TOKENS.has(token))
182
- return false;
183
- }
184
- return true;
185
- }
186
- return false;
187
- }
188
- function compareNewestFirst(a, b) {
189
- const ra = a.release_date ?? "9999";
190
- const rb = b.release_date ?? "9999";
191
- if (ra !== rb)
192
- return ra > rb ? -1 : 1;
193
- return a.id > b.id ? -1 : a.id < b.id ? 1 : 0;
194
- }
195
- function harnessModelIds(harness, models) {
196
- return Object.entries(models ?? {}).filter(([id, m]) => isHarnessCatalogModel(harness, id, m)).map(([id, m]) => ({ id, release_date: m.release_date ?? null })).sort(compareNewestFirst).map((m) => m.id);
197
- }
198
- function modelFamilyKey(id) {
199
- const slash = id.lastIndexOf("/");
200
- const tail = (slash >= 0 ? id.slice(slash + 1) : id).toLowerCase();
201
- return tail.split("-").filter((token) => token !== "" && !/^\d+(\.\d+)*$/.test(token)).join("-");
202
- }
203
- function buildClaudeShortnameMap(models) {
204
- const best = new Map;
205
- for (const [rawId, m] of Object.entries(models ?? {})) {
206
- const id = rawId.toLowerCase();
207
- if (!id.startsWith("claude"))
208
- continue;
209
- if (DATED_ID_RE3.test(id) || id.endsWith("-latest"))
210
- continue;
211
- if (m.status === "deprecated")
212
- continue;
213
- const candidate = { id: rawId, release_date: m.release_date ?? null };
214
- for (const token of id.split("-")) {
215
- if (token === "claude" || !/^[a-z]+$/.test(token))
216
- continue;
217
- const current = best.get(token);
218
- if (!current || compareNewestFirst(candidate, current) < 0)
219
- best.set(token, candidate);
220
- }
221
- }
222
- const out = {};
223
- for (const [alias, model] of best)
224
- out[alias] = model.id;
225
- return out;
226
- }
227
- function harnessModelMismatch(model, harness, sections, context = {}) {
228
- if (harness === "grok")
229
- return grokModelMismatch(model, sections, context);
230
- const section = harness ? harnessCatalogSection(harness) : null;
231
- if (!harness || !section)
232
- return null;
233
- const id = model.trim().replace(CONTEXT_SUFFIX_RE, "");
234
- if (!id)
235
- return null;
236
- const own = sections[section]?.models ?? {};
237
- const fail = () => harnessMismatchMessage(model.trim(), harness, section, own, context);
238
- if (isAlias(id)) {
239
- const parsed = parseAlias(id);
240
- if (!parsed)
241
- return null;
242
- return parsed.kind === section ? null : fail();
243
- }
244
- let bare = id;
245
- const slash = id.indexOf("/");
246
- if (slash > 0) {
247
- if (id.slice(0, slash) !== section)
248
- return fail();
249
- bare = id.slice(slash + 1);
250
- }
251
- if (section === "anthropic" && Object.hasOwn(buildClaudeShortnameMap(own), bare))
252
- return null;
253
- if (Object.hasOwn(own, bare)) {
254
- const familyId = section === "anthropic" ? bare.replace(DATED_ID_RE3, "").replace(/-latest$/i, "") : bare;
255
- return isHarnessCatalogModel(harness, familyId, own[bare]) ? null : fail();
256
- }
257
- for (const [name, other] of Object.entries(sections)) {
258
- if (name === section)
259
- continue;
260
- if (other?.models && Object.hasOwn(other.models, bare))
261
- return fail();
262
- }
263
- return null;
264
- }
265
- function grokModelMismatch(model, sections, context) {
266
- const id = model.trim();
267
- if (!id)
268
- return null;
269
- const fail = () => grokMismatchMessage(id, sections, context);
270
- if (isAlias(id)) {
271
- const parsed = parseAlias(id);
272
- if (!parsed)
273
- return null;
274
- return parsed.kind === "openrouter" ? null : fail();
275
- }
276
- if (/^openrouter\/./i.test(id))
277
- return null;
278
- const bare = normalizeGrokModel(id);
279
- if (!bare || bare.includes("/"))
280
- return fail();
281
- if (GROK_ID_RE.test(bare) || Object.hasOwn(sections.xai?.models ?? {}, bare))
282
- return null;
283
- for (const [name, other] of Object.entries(sections)) {
284
- if (name === "xai")
285
- continue;
286
- if (other?.models && Object.hasOwn(other.models, bare))
287
- return fail();
288
- }
289
- return null;
290
- }
291
- function grokMismatchMessage(model, sections, context) {
292
- const agent = context.agentId ? ` of agent "${context.agentName ?? context.agentId}" (${context.agentId})` : "";
293
- const pool = sections.xai?.models ? [sections.xai.models] : Object.values(sections).map((section) => section?.models ?? {});
294
- const best = new Map;
295
- for (const models of pool) {
296
- for (const [id, m] of Object.entries(models)) {
297
- if (m.status === "deprecated" || !GROK_ID_RE.test(id) || best.has(id))
298
- continue;
299
- best.set(id, { id, release_date: m.release_date ?? null });
300
- }
301
- }
302
- const ids = [...best.values()].sort(compareNewestFirst).map((m) => m.id);
303
- const extra = ids.length - MAX_EXAMPLE_IDS;
304
- const examples = ids.length ? ` (for example: ${ids.slice(0, MAX_EXAMPLE_IDS).join(", ")}${extra > 0 ? ` and ${extra} more` : ""})` : "";
305
- return `Model "${model}" does not run on the grok harness${agent}. The grok harness accepts xai catalog models${examples} and openrouter/<vendor>/<id>. Use modelTier (smol, regular, smart, ultra) for portable intent, or omit model and let the assignee resolve it.`;
306
- }
307
- function harnessMismatchMessage(model, harness, section, own, context) {
308
- const agent = context.agentId ? ` of agent "${context.agentName ?? context.agentId}" (${context.agentId})` : "";
309
- const ids = harnessModelIds(harness, own);
310
- const extra = ids.length - MAX_EXAMPLE_IDS;
311
- const examples = ids.slice(0, MAX_EXAMPLE_IDS).join(", ") + (extra > 0 ? ` and ${extra} more` : "");
312
- return `Model "${model}" does not run on the ${harness} harness${agent}. The ${harness} harness accepts ${section} catalog models, for example: ${examples}. Use modelTier (smol, regular, smart, ultra) for portable intent, or omit model and let the assignee resolve it.`;
313
- }
314
- var HARNESS_CATALOG_SECTION, XAI_PREFIX_RE, GROK_ID_RE, DATED_ID_RE3, ISO_DATED_ID_RE, CODEX_EXCLUDED_TOKENS, CODEX_MIN_GPT_MAJOR = 5, CONTEXT_SUFFIX_RE, MAX_EXAMPLE_IDS = 8;
315
- var init_harness_models = __esm(() => {
316
- init_resolve_alias();
317
- HARNESS_CATALOG_SECTION = {
318
- claude: "anthropic",
319
- "claude-managed": "anthropic",
320
- codex: "openai"
321
- };
322
- XAI_PREFIX_RE = /^xai\//i;
323
- GROK_ID_RE = /^grok-[^/]+$/i;
324
- DATED_ID_RE3 = /-\d{8}$/;
325
- ISO_DATED_ID_RE = /-\d{4}-\d{2}-\d{2}$/;
326
- CODEX_EXCLUDED_TOKENS = new Set([
327
- "chat",
328
- "latest",
329
- "pro",
330
- "nano",
331
- "spark",
332
- "realtime",
333
- "audio",
334
- "image",
335
- "search",
336
- "transcribe",
337
- "tts",
338
- "deep",
339
- "research",
340
- "oss"
341
- ]);
342
- CONTEXT_SUFFIX_RE = /\[1m\]$/i;
343
- });
344
-
345
- // packages/model-catalog/src/reasoning.ts
346
- function dshCatalogRef(model) {
347
- if (model.startsWith("openrouter/")) {
348
- return { providerId: "openrouter", modelId: model.slice("openrouter/".length) };
349
- }
350
- return { providerId: "deepseek", modelId: model };
351
- }
352
- function grokCatalogRef(model) {
353
- const id = normalizeGrokModel(model);
354
- if (id.startsWith("openrouter/")) {
355
- return { providerId: "openrouter", modelId: id.slice("openrouter/".length) };
356
- }
357
- return { providerId: "xai", modelId: id };
358
- }
359
- function cursorCatalogRef(model) {
360
- const id = model.trim().toLowerCase();
361
- if (/^(gpt-|o\d)/.test(id))
362
- return { providerId: "openai", modelId: id };
363
- if (id.startsWith("claude-"))
364
- return { providerId: "anthropic", modelId: id };
365
- if (id.startsWith("gemini-"))
366
- return { providerId: "google", modelId: id };
367
- if (id.startsWith("grok-"))
368
- return { providerId: "xai", modelId: id };
369
- return { providerId: "cursor", modelId: id };
370
- }
371
- function isDshDirectModel(catalogId) {
372
- return !catalogId.includes("/");
373
- }
374
- function isReasoningHarness(harness) {
375
- return REASONING_HARNESSES.includes(harness);
376
- }
377
- function levelsFromReasoningOptions(options) {
378
- const effortEntry = options?.find((o) => o.type === "effort");
379
- if (!effortEntry?.values?.length)
380
- return [];
381
- const mapped = new Set(effortEntry.values.map((v) => EFFORT_VALUE_MAP[v]).filter((v) => v !== undefined));
382
- return REASONING_EFFORT_LEVELS.filter((level) => mapped.has(level));
383
- }
384
- function applyHarnessOverrides(harness, modelId, facts, levels) {
385
- let result = levels;
386
- if (harness === "claude") {
387
- if (facts.reasoning_options?.some((o) => o.type === "budget_tokens") && !result.includes("off")) {
388
- result = ["off", ...result];
389
- }
390
- }
391
- if (harness === "dsh") {
392
- const direct = isDshDirectModel(modelId);
393
- const hasToggle = facts.reasoning_options?.some((o) => o.type === "toggle") ?? false;
394
- if (direct && hasToggle && !result.includes("off"))
395
- result = ["off", ...result];
396
- if (!direct)
397
- result = result.filter((l) => l !== "off");
398
- } else if (harness !== "codex" && harness !== "cursor") {
399
- result = result.filter((l) => l !== "max");
400
- }
401
- if (harness === "codex") {
402
- const isCodexMax = /-codex-max$/.test(modelId);
403
- const isCodexNonMax = /-codex$/.test(modelId) && !isCodexMax;
404
- if (isCodexMax && !result.includes("xhigh"))
405
- result = [...result, "xhigh"];
406
- if (isCodexNonMax)
407
- result = result.filter((l) => l !== "xhigh");
408
- }
409
- return REASONING_EFFORT_LEVELS.filter((level) => result.includes(level));
410
- }
411
- function reasoningLevelsFor(harness, modelId, facts) {
412
- if (!isReasoningHarness(harness) || !facts || !facts.reasoning)
413
- return [];
414
- let levels = levelsFromReasoningOptions(facts.reasoning_options);
415
- if (levels.length === 0)
416
- levels = [...FALLBACK_LEVELS];
417
- return applyHarnessOverrides(harness, modelId, facts, levels);
418
- }
419
- function claudeCatalogModelId(modelId, models) {
420
- if (!modelId || models?.[modelId])
421
- return modelId;
422
- return buildClaudeShortnameMap(models)[modelId] ?? modelId;
423
- }
424
- var REASONING_EFFORT_LEVELS, REASONING_HARNESSES, FALLBACK_LEVELS, EFFORT_VALUE_MAP;
425
- var init_reasoning = __esm(() => {
426
- init_harness_models();
427
- REASONING_EFFORT_LEVELS = ["off", "low", "medium", "high", "xhigh", "max"];
428
- REASONING_HARNESSES = [
429
- "claude",
430
- "codex",
431
- "pi",
432
- "opencode",
433
- "dsh",
434
- "cursor",
435
- "amp",
436
- "grok"
437
- ];
438
- FALLBACK_LEVELS = ["low", "medium", "high"];
439
- EFFORT_VALUE_MAP = {
440
- none: "off",
441
- low: "low",
442
- medium: "medium",
443
- high: "high",
444
- xhigh: "xhigh",
445
- max: "max"
446
- };
447
- });
448
-
449
- // packages/model-catalog/src/display.ts
450
- var init_display = () => {};
451
-
452
- // packages/model-catalog/src/merge.ts
453
- var init_merge = () => {};
454
-
455
- // packages/model-catalog/src/index.ts
456
- var init_src = __esm(() => {
457
- init_display();
458
- init_harness_models();
459
- init_merge();
460
- init_model_alias();
461
- init_reasoning();
462
- init_resolve_alias();
463
- });
464
-
465
9
  // src/be/modelsdev-cache.json
466
10
  var modelsdev_cache_default;
467
11
  var init_modelsdev_cache = __esm(() => {
@@ -147725,7 +147269,7 @@ var init_modelsdev_cache = __esm(() => {
147725
147269
  cost: {
147726
147270
  input: 2,
147727
147271
  output: 10,
147728
- cache_read: 0.2,
147272
+ cache_read: 0.1,
147729
147273
  cache_write: 2.5
147730
147274
  },
147731
147275
  limit: {
@@ -314625,23 +314169,59 @@ var init_modelsdev_cache = __esm(() => {
314625
314169
  name: "NaN",
314626
314170
  doc: "https://nan.builders/docs/models",
314627
314171
  models: {
314628
- "qwen3.6": {
314629
- id: "qwen3.6",
314630
- name: "Qwen3.6 35B-A3B",
314631
- description: "Open multimodal Qwen MoE for local agents that need vision, audio, and code",
314172
+ "qwen-image-2.1": {
314173
+ id: "qwen-image-2.1",
314174
+ name: "Qwen-Image-2.1",
314175
+ description: "Unified text-to-image generation and image editing model with native RGBA transparency and reference-image editing",
314632
314176
  family: "qwen",
314177
+ attachment: false,
314178
+ reasoning: false,
314179
+ tool_call: false,
314180
+ temperature: true,
314181
+ release_date: "2026-09-14",
314182
+ last_updated: "2026-09-21",
314183
+ modalities: {
314184
+ input: [
314185
+ "text"
314186
+ ],
314187
+ output: [
314188
+ "image"
314189
+ ]
314190
+ },
314191
+ open_weights: true,
314192
+ limit: {
314193
+ context: 8192,
314194
+ output: 0
314195
+ },
314196
+ cost: {
314197
+ input: 0,
314198
+ output: 0
314199
+ },
314200
+ canonical_model_id: "alibaba/qwen-image-2.1"
314201
+ },
314202
+ "glm5.3-flash": {
314203
+ id: "glm5.3-flash",
314204
+ name: "GLM-5.3-Flash",
314205
+ description: "Native multimodal GLM model for efficient coding and long-horizon agent tasks",
314206
+ family: "glm-flash",
314633
314207
  attachment: true,
314634
314208
  reasoning: true,
314635
314209
  reasoning_options: [
314636
314210
  {
314637
- type: "toggle"
314211
+ type: "effort",
314212
+ values: [
314213
+ "low",
314214
+ "medium",
314215
+ "high",
314216
+ "max"
314217
+ ]
314638
314218
  }
314639
314219
  ],
314640
314220
  tool_call: true,
314641
314221
  structured_output: true,
314642
314222
  temperature: true,
314643
- release_date: "2026-04-17",
314644
- last_updated: "2026-04-17",
314223
+ release_date: "2026-08-26",
314224
+ last_updated: "2026-08-26",
314645
314225
  modalities: {
314646
314226
  input: [
314647
314227
  "text",
@@ -314653,31 +314233,43 @@ var init_modelsdev_cache = __esm(() => {
314653
314233
  },
314654
314234
  open_weights: true,
314655
314235
  limit: {
314656
- context: 262144,
314657
- output: 65536
314236
+ context: 1e6,
314237
+ output: 131072
314658
314238
  },
314659
314239
  cost: {
314660
314240
  input: 0,
314661
314241
  output: 0
314662
- }
314242
+ },
314243
+ canonical_model_id: "zhipuai/glm-5.3-flash"
314663
314244
  },
314664
- "deepseek-v4-flash": {
314665
- id: "deepseek-v4-flash",
314666
- name: "DeepSeek V4 Flash",
314667
- description: "Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work",
314668
- family: "deepseek-flash",
314669
- attachment: false,
314245
+ gemma4: {
314246
+ id: "gemma4",
314247
+ name: "Gemma 4 26B A4B IT",
314248
+ description: "Open Gemma instruction model for efficient chat and self-hosted deployments",
314249
+ family: "gemma",
314250
+ attachment: true,
314670
314251
  reasoning: true,
314671
- reasoning_options: [],
314252
+ reasoning_options: [
314253
+ {
314254
+ type: "effort",
314255
+ values: [
314256
+ "none",
314257
+ "low",
314258
+ "medium",
314259
+ "high",
314260
+ "max"
314261
+ ]
314262
+ }
314263
+ ],
314672
314264
  tool_call: true,
314673
314265
  structured_output: true,
314674
314266
  temperature: true,
314675
- knowledge: "2025-05",
314676
- release_date: "2026-04-24",
314677
- last_updated: "2026-04-24",
314267
+ release_date: "2026-04-02",
314268
+ last_updated: "2026-04-02",
314678
314269
  modalities: {
314679
314270
  input: [
314680
- "text"
314271
+ "text",
314272
+ "image"
314681
314273
  ],
314682
314274
  output: [
314683
314275
  "text"
@@ -314685,30 +314277,43 @@ var init_modelsdev_cache = __esm(() => {
314685
314277
  },
314686
314278
  open_weights: true,
314687
314279
  limit: {
314688
- context: 1e6,
314689
- output: 384000
314280
+ context: 262144,
314281
+ output: 32768
314690
314282
  },
314691
314283
  cost: {
314692
314284
  input: 0,
314693
314285
  output: 0
314694
- }
314286
+ },
314287
+ canonical_model_id: "google/gemma-4-26b-a4b-it"
314695
314288
  },
314696
- "glm5.2": {
314697
- id: "glm5.2",
314698
- name: "GLM-5.2",
314699
- description: "Open flagship GLM for long-horizon coding agents, served at 500K context on the NaN premium tier",
314700
- family: "glm",
314701
- attachment: false,
314289
+ "qwen3.6": {
314290
+ id: "qwen3.6",
314291
+ name: "Qwen3.6 35B-A3B",
314292
+ description: "Open multimodal Qwen MoE for local agents that need vision, audio, and code",
314293
+ family: "qwen",
314294
+ attachment: true,
314702
314295
  reasoning: true,
314703
- reasoning_options: [],
314296
+ reasoning_options: [
314297
+ {
314298
+ type: "effort",
314299
+ values: [
314300
+ "none",
314301
+ "low",
314302
+ "medium",
314303
+ "high",
314304
+ "max"
314305
+ ]
314306
+ }
314307
+ ],
314704
314308
  tool_call: true,
314705
314309
  structured_output: true,
314706
314310
  temperature: true,
314707
- release_date: "2026-06-13",
314708
- last_updated: "2026-06-13",
314311
+ release_date: "2026-04-17",
314312
+ last_updated: "2026-04-17",
314709
314313
  modalities: {
314710
314314
  input: [
314711
- "text"
314315
+ "text",
314316
+ "image"
314712
314317
  ],
314713
314318
  output: [
314714
314319
  "text"
@@ -314716,35 +314321,32 @@ var init_modelsdev_cache = __esm(() => {
314716
314321
  },
314717
314322
  open_weights: true,
314718
314323
  limit: {
314719
- context: 500000,
314720
- output: 131072
314324
+ context: 262144,
314325
+ output: 65536
314721
314326
  },
314722
314327
  cost: {
314723
314328
  input: 0,
314724
314329
  output: 0
314725
- }
314330
+ },
314331
+ canonical_model_id: "alibaba/qwen3.6-35b-a3b"
314726
314332
  },
314727
- gemma4: {
314728
- id: "gemma4",
314729
- name: "Gemma 4 26B A4B IT",
314730
- description: "Open Gemma instruction model for efficient chat and self-hosted deployments",
314731
- family: "gemma",
314333
+ "mimo-v2.6-flash": {
314334
+ id: "mimo-v2.6-flash",
314335
+ name: "MiMo-V2.6-Flash",
314336
+ description: "MiMo Flash model for multimodal coding agents and long-context automation",
314337
+ family: "mimo",
314732
314338
  attachment: true,
314733
314339
  reasoning: true,
314734
- reasoning_options: [
314735
- {
314736
- type: "toggle"
314737
- }
314738
- ],
314340
+ reasoning_options: [],
314739
314341
  tool_call: true,
314740
- structured_output: true,
314741
314342
  temperature: true,
314742
- release_date: "2026-04-02",
314743
- last_updated: "2026-04-02",
314343
+ release_date: "2026-09-22",
314344
+ last_updated: "2026-09-22",
314744
314345
  modalities: {
314745
314346
  input: [
314746
314347
  "text",
314747
- "image"
314348
+ "image",
314349
+ "audio"
314748
314350
  ],
314749
314351
  output: [
314750
314352
  "text"
@@ -314752,13 +314354,14 @@ var init_modelsdev_cache = __esm(() => {
314752
314354
  },
314753
314355
  open_weights: true,
314754
314356
  limit: {
314755
- context: 262144,
314756
- output: 32768
314357
+ context: 1048576,
314358
+ output: 131072
314757
314359
  },
314758
314360
  cost: {
314759
314361
  input: 0,
314760
314362
  output: 0
314761
- }
314363
+ },
314364
+ canonical_model_id: "xiaomi/mimo-v2.6-flash"
314762
314365
  },
314763
314366
  "qwen3.8-flash": {
314764
314367
  id: "qwen3.8-flash",
@@ -314789,21 +314392,65 @@ var init_modelsdev_cache = __esm(() => {
314789
314392
  cost: {
314790
314393
  input: 0,
314791
314394
  output: 0
314792
- }
314395
+ },
314396
+ canonical_model_id: "alibaba/qwen3.8-flash"
314793
314397
  },
314794
- "glm5.3-flash": {
314795
- id: "glm5.3-flash",
314796
- name: "GLM-5.3-Flash",
314797
- description: "Native multimodal GLM model for efficient coding and long-horizon agent tasks",
314398
+ "glm5.3": {
314399
+ id: "glm5.3",
314400
+ name: "GLM-5.3",
314401
+ description: "Flagship GLM model for long-horizon coding, agents, and complex project delivery",
314798
314402
  family: "glm",
314403
+ attachment: false,
314404
+ reasoning: true,
314405
+ reasoning_options: [
314406
+ {
314407
+ type: "effort",
314408
+ values: [
314409
+ "low",
314410
+ "medium",
314411
+ "high",
314412
+ "max"
314413
+ ]
314414
+ }
314415
+ ],
314416
+ tool_call: true,
314417
+ structured_output: true,
314418
+ temperature: true,
314419
+ release_date: "2026-08-14",
314420
+ last_updated: "2026-08-14",
314421
+ modalities: {
314422
+ input: [
314423
+ "text"
314424
+ ],
314425
+ output: [
314426
+ "text"
314427
+ ]
314428
+ },
314429
+ open_weights: true,
314430
+ limit: {
314431
+ context: 1e6,
314432
+ output: 131072
314433
+ },
314434
+ cost: {
314435
+ input: 0,
314436
+ output: 0
314437
+ },
314438
+ canonical_model_id: "zhipuai/glm-5.3"
314439
+ },
314440
+ "deepseek-v4-flash": {
314441
+ id: "deepseek-v4-flash",
314442
+ name: "DeepSeek V4.1 Flash",
314443
+ description: "DeepSeek V4.1 Flash model for reasoning and agentic coding",
314444
+ family: "deepseek-flash",
314799
314445
  attachment: true,
314800
314446
  reasoning: true,
314801
314447
  reasoning_options: [],
314802
314448
  tool_call: true,
314803
314449
  structured_output: true,
314804
314450
  temperature: true,
314805
- release_date: "2026-08-26",
314806
- last_updated: "2026-08-26",
314451
+ knowledge: "2025-05",
314452
+ release_date: "2026-09-10",
314453
+ last_updated: "2026-09-10",
314807
314454
  modalities: {
314808
314455
  input: [
314809
314456
  "text",
@@ -314813,9 +314460,41 @@ var init_modelsdev_cache = __esm(() => {
314813
314460
  "text"
314814
314461
  ]
314815
314462
  },
314816
- open_weights: false,
314463
+ open_weights: true,
314817
314464
  limit: {
314818
314465
  context: 1e6,
314466
+ output: 384000
314467
+ },
314468
+ cost: {
314469
+ input: 0,
314470
+ output: 0
314471
+ },
314472
+ canonical_model_id: "deepseek/deepseek-v4.1-flash"
314473
+ },
314474
+ "glm5.2": {
314475
+ id: "glm5.2",
314476
+ name: "GLM-5.2",
314477
+ description: "Open flagship GLM for long-horizon coding agents, served at 500K context on the NaN premium tier",
314478
+ family: "glm",
314479
+ attachment: false,
314480
+ reasoning: true,
314481
+ reasoning_options: [],
314482
+ tool_call: true,
314483
+ structured_output: true,
314484
+ temperature: true,
314485
+ release_date: "2026-06-13",
314486
+ last_updated: "2026-06-13",
314487
+ modalities: {
314488
+ input: [
314489
+ "text"
314490
+ ],
314491
+ output: [
314492
+ "text"
314493
+ ]
314494
+ },
314495
+ open_weights: true,
314496
+ limit: {
314497
+ context: 500000,
314819
314498
  output: 131072
314820
314499
  },
314821
314500
  cost: {
@@ -333944,6 +333623,9 @@ var init_modelsdev_cache = __esm(() => {
333944
333623
  });
333945
333624
 
333946
333625
  // src/utils/runtime-model-catalog.ts
333626
+ function snapshotCatalogRows(provider) {
333627
+ return SNAPSHOT[provider]?.models ?? {};
333628
+ }
333947
333629
  function setRuntimeModelCatalog(providers, at = Date.now(), source = "live") {
333948
333630
  live = providers;
333949
333631
  liveAt = at;
@@ -334005,10 +333687,11 @@ async function refreshRuntimeModelCatalog(opts) {
334005
333687
  }
334006
333688
  var SNAPSHOT, RUNTIME_CATALOG_TTL_MS, FETCH_TIMEOUT_MS = 5000, live = null, liveAt = 0, liveSource = null, mergedSections, inFlight = null;
334007
333689
  var init_runtime_model_catalog = __esm(() => {
333690
+ init_src();
334008
333691
  init_modelsdev_cache();
334009
- SNAPSHOT = modelsdev_cache_default;
333692
+ SNAPSHOT = withRegistryCatalogSections(modelsdev_cache_default);
334010
333693
  RUNTIME_CATALOG_TTL_MS = 10 * 60000;
334011
333694
  mergedSections = new Map;
334012
333695
  });
334013
333696
 
334014
- export { isAlias, parseAlias, resolveAlias, harnessCatalogSection, isHarnessModelJudged, normalizeGrokModel, harnessModelIds, modelFamilyKey, buildClaudeShortnameMap, harnessModelMismatch, dshCatalogRef, grokCatalogRef, cursorCatalogRef, reasoningLevelsFor, claudeCatalogModelId, init_src, setRuntimeModelCatalog, runtimeCatalogSection, runtimeHarnessSections, runtimeCatalogModel, refreshRuntimeModelCatalog, init_runtime_model_catalog };
333697
+ export { snapshotCatalogRows, setRuntimeModelCatalog, runtimeCatalogSection, runtimeHarnessSections, runtimeCatalogModel, refreshRuntimeModelCatalog, init_runtime_model_catalog };