@clinebot/core 0.0.35 → 0.0.37

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 (441) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +362 -39
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/cline-account-service.d.ts.map +1 -1
  5. package/dist/account/index.d.ts +1 -1
  6. package/dist/account/index.d.ts.map +1 -1
  7. package/dist/account/rpc.d.ts +6 -6
  8. package/dist/account/rpc.d.ts.map +1 -1
  9. package/dist/cron/cron-event-ingress.d.ts +38 -0
  10. package/dist/cron/cron-event-ingress.d.ts.map +1 -0
  11. package/dist/cron/cron-materializer.d.ts +36 -0
  12. package/dist/cron/cron-materializer.d.ts.map +1 -0
  13. package/dist/cron/cron-reconciler.d.ts +62 -0
  14. package/dist/cron/cron-reconciler.d.ts.map +1 -0
  15. package/dist/cron/cron-report-writer.d.ts +41 -0
  16. package/dist/cron/cron-report-writer.d.ts.map +1 -0
  17. package/dist/cron/cron-runner.d.ts +43 -0
  18. package/dist/cron/cron-runner.d.ts.map +1 -0
  19. package/dist/cron/cron-schema.d.ts +3 -0
  20. package/dist/cron/cron-schema.d.ts.map +1 -0
  21. package/dist/cron/cron-service.d.ts +57 -0
  22. package/dist/cron/cron-service.d.ts.map +1 -0
  23. package/dist/cron/cron-spec-parser.d.ts +27 -0
  24. package/dist/cron/cron-spec-parser.d.ts.map +1 -0
  25. package/dist/cron/cron-watcher.d.ts +23 -0
  26. package/dist/cron/cron-watcher.d.ts.map +1 -0
  27. package/dist/cron/resource-limiter.d.ts +9 -0
  28. package/dist/cron/resource-limiter.d.ts.map +1 -0
  29. package/dist/cron/schedule-command-service.d.ts +10 -0
  30. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  31. package/dist/cron/schedule-service.d.ts +100 -0
  32. package/dist/cron/schedule-service.d.ts.map +1 -0
  33. package/dist/cron/scheduler.d.ts +68 -0
  34. package/dist/cron/scheduler.d.ts.map +1 -0
  35. package/dist/cron/sqlite-cron-store.d.ts +230 -0
  36. package/dist/cron/sqlite-cron-store.d.ts.map +1 -0
  37. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  38. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  39. package/dist/extensions/config/agent-config-loader.d.ts +4 -3
  40. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  41. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  42. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  43. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  44. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  45. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  46. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  47. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  48. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  49. package/dist/extensions/context/compaction.d.ts.map +1 -1
  50. package/dist/extensions/plugin/plugin-config-loader.d.ts +15 -2
  51. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  52. package/dist/extensions/plugin/plugin-loader.d.ts +13 -7
  53. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  54. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  55. package/dist/extensions/plugin/plugin-sandbox.d.ts +21 -2
  56. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  57. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  58. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  59. package/dist/extensions/plugin-sandbox-bootstrap.js +237 -276
  60. package/dist/extensions/tools/constants.d.ts +1 -0
  61. package/dist/extensions/tools/constants.d.ts.map +1 -1
  62. package/dist/extensions/tools/definitions.d.ts +3 -4
  63. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  64. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  65. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  66. package/dist/extensions/tools/executors/editor.d.ts.map +1 -1
  67. package/dist/extensions/tools/executors/search.d.ts +1 -1
  68. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  69. package/dist/extensions/tools/helpers.d.ts +1 -0
  70. package/dist/extensions/tools/helpers.d.ts.map +1 -1
  71. package/dist/extensions/tools/index.d.ts +3 -2
  72. package/dist/extensions/tools/index.d.ts.map +1 -1
  73. package/dist/extensions/tools/presets.d.ts +27 -44
  74. package/dist/extensions/tools/presets.d.ts.map +1 -1
  75. package/dist/extensions/tools/runtime.d.ts +25 -0
  76. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  77. package/dist/extensions/tools/schemas.d.ts +25 -3
  78. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  79. package/dist/extensions/tools/team/delegated-agent.d.ts +2 -2
  80. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -1
  81. package/dist/extensions/tools/team/multi-agent.d.ts +7 -3
  82. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -1
  83. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  84. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  85. package/dist/extensions/tools/types.d.ts +0 -5
  86. package/dist/extensions/tools/types.d.ts.map +1 -1
  87. package/dist/hooks/hook-bridge.d.ts +118 -0
  88. package/dist/hooks/hook-bridge.d.ts.map +1 -0
  89. package/dist/hooks/hook-file-hooks.d.ts +6 -2
  90. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  91. package/dist/hooks/hook-registry.d.ts +16 -0
  92. package/dist/hooks/hook-registry.d.ts.map +1 -0
  93. package/dist/hooks/index.d.ts +0 -1
  94. package/dist/hooks/index.d.ts.map +1 -1
  95. package/dist/hooks/subprocess.d.ts +8 -1
  96. package/dist/hooks/subprocess.d.ts.map +1 -1
  97. package/dist/hub/browser-websocket.d.ts +18 -0
  98. package/dist/hub/browser-websocket.d.ts.map +1 -0
  99. package/dist/hub/client.d.ts +51 -0
  100. package/dist/hub/client.d.ts.map +1 -0
  101. package/dist/hub/connect.d.ts +15 -0
  102. package/dist/hub/connect.d.ts.map +1 -0
  103. package/dist/hub/daemon-entry.d.ts +2 -0
  104. package/dist/hub/daemon-entry.d.ts.map +1 -0
  105. package/dist/hub/daemon-entry.js +1305 -0
  106. package/dist/hub/daemon.d.ts +5 -0
  107. package/dist/hub/daemon.d.ts.map +1 -0
  108. package/dist/hub/defaults.d.ts +17 -0
  109. package/dist/hub/defaults.d.ts.map +1 -0
  110. package/dist/hub/discovery.d.ts +29 -0
  111. package/dist/hub/discovery.d.ts.map +1 -0
  112. package/dist/hub/index.d.ts +15 -0
  113. package/dist/hub/index.d.ts.map +1 -0
  114. package/dist/hub/index.js +1294 -0
  115. package/dist/hub/native-transport.d.ts +17 -0
  116. package/dist/hub/native-transport.d.ts.map +1 -0
  117. package/dist/hub/runtime-handlers.d.ts +11 -0
  118. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  119. package/dist/hub/server.d.ts +104 -0
  120. package/dist/hub/server.d.ts.map +1 -0
  121. package/dist/hub/session-client.d.ts +90 -0
  122. package/dist/hub/session-client.d.ts.map +1 -0
  123. package/dist/hub/start-shared-server.d.ts +19 -0
  124. package/dist/hub/start-shared-server.d.ts.map +1 -0
  125. package/dist/hub/transport.d.ts +8 -0
  126. package/dist/hub/transport.d.ts.map +1 -0
  127. package/dist/hub/ui-client.d.ts +45 -0
  128. package/dist/hub/ui-client.d.ts.map +1 -0
  129. package/dist/hub/workspace.d.ts +4 -0
  130. package/dist/hub/workspace.d.ts.map +1 -0
  131. package/dist/index.d.ts +29 -16
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +782 -471
  134. package/dist/llms/cline-recommended-models.d.ts +20 -0
  135. package/dist/llms/cline-recommended-models.d.ts.map +1 -0
  136. package/dist/llms/configured-provider-registry.d.ts +28 -0
  137. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  138. package/dist/llms/handler-factory.d.ts +16 -0
  139. package/dist/llms/handler-factory.d.ts.map +1 -0
  140. package/dist/llms/provider-defaults.d.ts +27 -0
  141. package/dist/llms/provider-defaults.d.ts.map +1 -0
  142. package/dist/llms/provider-settings.d.ts +245 -0
  143. package/dist/llms/provider-settings.d.ts.map +1 -0
  144. package/dist/llms/runtime-config.d.ts +4 -0
  145. package/dist/llms/runtime-config.d.ts.map +1 -0
  146. package/dist/llms/runtime-registry.d.ts +20 -0
  147. package/dist/llms/runtime-registry.d.ts.map +1 -0
  148. package/dist/llms/runtime-types.d.ts +85 -0
  149. package/dist/llms/runtime-types.d.ts.map +1 -0
  150. package/dist/runtime/agent-config-adapter.d.ts +148 -0
  151. package/dist/runtime/agent-config-adapter.d.ts.map +1 -0
  152. package/dist/runtime/agent-runtime-config-builder.d.ts +96 -0
  153. package/dist/runtime/agent-runtime-config-builder.d.ts.map +1 -0
  154. package/dist/runtime/history.d.ts +6 -0
  155. package/dist/runtime/history.d.ts.map +1 -1
  156. package/dist/runtime/host.d.ts +1 -2
  157. package/dist/runtime/host.d.ts.map +1 -1
  158. package/dist/runtime/loop-detection.d.ts +59 -0
  159. package/dist/runtime/loop-detection.d.ts.map +1 -0
  160. package/dist/runtime/mistake-tracker.d.ts +69 -0
  161. package/dist/runtime/mistake-tracker.d.ts.map +1 -0
  162. package/dist/runtime/rules.d.ts +1 -0
  163. package/dist/runtime/rules.d.ts.map +1 -1
  164. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  165. package/dist/runtime/runtime-event-adapter.d.ts +102 -0
  166. package/dist/runtime/runtime-event-adapter.d.ts.map +1 -0
  167. package/dist/runtime/runtime-host.d.ts +49 -26
  168. package/dist/runtime/runtime-host.d.ts.map +1 -1
  169. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  170. package/dist/runtime/session-runtime-orchestrator.d.ts +261 -0
  171. package/dist/runtime/session-runtime-orchestrator.d.ts.map +1 -0
  172. package/dist/runtime/session-runtime.d.ts +16 -21
  173. package/dist/runtime/session-runtime.d.ts.map +1 -1
  174. package/dist/runtime/user-input-builder.d.ts +24 -0
  175. package/dist/runtime/user-input-builder.d.ts.map +1 -0
  176. package/dist/services/global-settings.d.ts +12 -0
  177. package/dist/services/global-settings.d.ts.map +1 -0
  178. package/dist/services/index.js +28 -0
  179. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  180. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  181. package/dist/services/plugin-tools.d.ts +16 -0
  182. package/dist/services/plugin-tools.d.ts.map +1 -0
  183. package/dist/services/providers/local-provider-registry.d.ts +199 -23
  184. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  185. package/dist/services/providers/local-provider-service.d.ts +15 -13
  186. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  187. package/dist/services/session-data.d.ts +1 -1
  188. package/dist/services/session-data.d.ts.map +1 -1
  189. package/dist/services/session-telemetry.d.ts +7 -2
  190. package/dist/services/session-telemetry.d.ts.map +1 -1
  191. package/dist/services/storage/file-team-store.d.ts.map +1 -1
  192. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  193. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  194. package/dist/services/storage/provider-settings-manager.d.ts +1 -0
  195. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -1
  196. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -1
  197. package/dist/services/workspace-manifest.d.ts +11 -0
  198. package/dist/services/workspace-manifest.d.ts.map +1 -1
  199. package/dist/session/conversation-store.d.ts +30 -0
  200. package/dist/session/conversation-store.d.ts.map +1 -0
  201. package/dist/session/message-builder.d.ts +65 -0
  202. package/dist/session/message-builder.d.ts.map +1 -0
  203. package/dist/session/persistence-service.d.ts +11 -23
  204. package/dist/session/persistence-service.d.ts.map +1 -1
  205. package/dist/session/session-manifest-store.d.ts +22 -0
  206. package/dist/session/session-manifest-store.d.ts.map +1 -0
  207. package/dist/session/session-manifest.d.ts +1 -1
  208. package/dist/session/session-row.d.ts +93 -0
  209. package/dist/session/session-row.d.ts.map +1 -0
  210. package/dist/session/session-service.d.ts +2 -102
  211. package/dist/session/session-service.d.ts.map +1 -1
  212. package/dist/session/subagent-session-manager.d.ts +36 -0
  213. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  214. package/dist/session/team-persistence-store.d.ts +24 -0
  215. package/dist/session/team-persistence-store.d.ts.map +1 -0
  216. package/dist/transports/hub.d.ts +58 -0
  217. package/dist/transports/hub.d.ts.map +1 -0
  218. package/dist/transports/local.d.ts +23 -9
  219. package/dist/transports/local.d.ts.map +1 -1
  220. package/dist/transports/remote.d.ts +10 -0
  221. package/dist/transports/remote.d.ts.map +1 -0
  222. package/dist/transports/runtime-host-support.d.ts +3 -2
  223. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  224. package/dist/types/chat-schema.d.ts +15 -17
  225. package/dist/types/chat-schema.d.ts.map +1 -1
  226. package/dist/types/config.d.ts +17 -7
  227. package/dist/types/config.d.ts.map +1 -1
  228. package/dist/types/events.d.ts +7 -6
  229. package/dist/types/events.d.ts.map +1 -1
  230. package/dist/types/provider-settings.d.ts +4 -5
  231. package/dist/types/provider-settings.d.ts.map +1 -1
  232. package/dist/types/session.d.ts +7 -3
  233. package/dist/types/session.d.ts.map +1 -1
  234. package/dist/types.d.ts +11 -4
  235. package/dist/types.d.ts.map +1 -1
  236. package/package.json +20 -6
  237. package/src/ClineCore.ts +757 -44
  238. package/src/account/cline-account-service.ts +44 -6
  239. package/src/account/index.ts +3 -3
  240. package/src/account/rpc.ts +12 -12
  241. package/src/cron/cron-event-ingress.ts +357 -0
  242. package/src/cron/cron-materializer.ts +97 -0
  243. package/src/cron/cron-reconciler.ts +241 -0
  244. package/src/cron/cron-report-writer.ts +153 -0
  245. package/src/cron/cron-runner.ts +495 -0
  246. package/src/cron/cron-schema.ts +127 -0
  247. package/src/cron/cron-service.ts +163 -0
  248. package/src/cron/cron-spec-parser.ts +489 -0
  249. package/src/cron/cron-watcher.ts +102 -0
  250. package/src/cron/index.ts +15 -0
  251. package/src/cron/resource-limiter.ts +46 -0
  252. package/src/cron/schedule-command-service.ts +193 -0
  253. package/src/cron/schedule-service.ts +703 -0
  254. package/src/cron/scheduler.ts +772 -0
  255. package/src/cron/sqlite-cron-store.ts +1286 -0
  256. package/src/cron/sqlite-schedule-store.ts +708 -0
  257. package/src/extensions/config/agent-config-loader.ts +17 -7
  258. package/src/extensions/config/runtime-commands.ts +6 -0
  259. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  260. package/src/extensions/context/agentic-compaction.ts +3 -3
  261. package/src/extensions/context/basic-compaction.ts +2 -2
  262. package/src/extensions/context/compaction-shared.ts +5 -4
  263. package/src/extensions/context/compaction.ts +3 -3
  264. package/src/extensions/plugin/plugin-config-loader.ts +37 -2
  265. package/src/extensions/plugin/plugin-loader.ts +69 -9
  266. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  267. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +243 -39
  268. package/src/extensions/plugin/plugin-sandbox.ts +173 -29
  269. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  270. package/src/extensions/tools/constants.ts +2 -0
  271. package/src/extensions/tools/definitions.ts +61 -71
  272. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  273. package/src/extensions/tools/executors/editor.ts +4 -3
  274. package/src/extensions/tools/executors/search.ts +195 -3
  275. package/src/extensions/tools/helpers.ts +24 -0
  276. package/src/extensions/tools/index.ts +11 -2
  277. package/src/extensions/tools/presets.ts +32 -47
  278. package/src/extensions/tools/runtime.ts +261 -0
  279. package/src/extensions/tools/schemas.ts +17 -20
  280. package/src/extensions/tools/team/delegated-agent.ts +8 -3
  281. package/src/extensions/tools/team/multi-agent.ts +135 -19
  282. package/src/extensions/tools/team/team-tools.ts +172 -91
  283. package/src/extensions/tools/types.ts +0 -6
  284. package/src/hooks/hook-bridge.ts +489 -0
  285. package/src/hooks/hook-file-hooks.ts +66 -5
  286. package/src/hooks/hook-registry.ts +257 -0
  287. package/src/hooks/index.ts +0 -7
  288. package/src/hooks/subprocess-runner.ts +1 -1
  289. package/src/hooks/subprocess.ts +9 -0
  290. package/src/hub/browser-websocket.ts +159 -0
  291. package/src/hub/client.ts +633 -0
  292. package/src/hub/connect.ts +156 -0
  293. package/src/hub/daemon-entry.ts +122 -0
  294. package/src/hub/daemon.ts +284 -0
  295. package/src/hub/defaults.ts +70 -0
  296. package/src/hub/discovery.ts +247 -0
  297. package/src/hub/index.ts +14 -0
  298. package/src/hub/native-transport.ts +31 -0
  299. package/src/hub/runtime-handlers.ts +141 -0
  300. package/src/hub/server.ts +2317 -0
  301. package/src/hub/session-client.ts +502 -0
  302. package/src/hub/start-shared-server.ts +61 -0
  303. package/src/hub/transport.ts +14 -0
  304. package/src/hub/ui-client.ts +126 -0
  305. package/src/hub/workspace.ts +19 -0
  306. package/src/index.ts +169 -68
  307. package/src/llms/cline-recommended-models.ts +167 -0
  308. package/src/llms/configured-provider-registry.ts +193 -0
  309. package/src/llms/handler-factory.ts +56 -0
  310. package/src/llms/provider-defaults.ts +653 -0
  311. package/src/llms/provider-settings.ts +310 -0
  312. package/src/llms/runtime-config.ts +43 -0
  313. package/src/llms/runtime-registry.ts +172 -0
  314. package/src/llms/runtime-types.ts +121 -0
  315. package/src/runtime/agent-config-adapter.ts +636 -0
  316. package/src/runtime/agent-runtime-config-builder.ts +205 -0
  317. package/src/runtime/error-feedback.ts +142 -0
  318. package/src/runtime/history.ts +137 -0
  319. package/src/runtime/host.ts +127 -267
  320. package/src/runtime/index.ts +1 -0
  321. package/src/runtime/loop-detection.ts +162 -0
  322. package/src/runtime/mistake-tracker.ts +221 -0
  323. package/src/runtime/rules.ts +12 -0
  324. package/src/runtime/runtime-builder.ts +85 -13
  325. package/src/runtime/runtime-event-adapter.ts +412 -0
  326. package/src/runtime/runtime-host.ts +134 -62
  327. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  328. package/src/runtime/session-runtime-orchestrator.ts +1253 -0
  329. package/src/runtime/session-runtime.ts +16 -26
  330. package/src/runtime/user-input-builder.ts +167 -0
  331. package/src/services/global-settings.ts +122 -0
  332. package/src/services/local-runtime-bootstrap.ts +175 -31
  333. package/src/services/plugin-tools.ts +86 -0
  334. package/src/services/providers/local-provider-registry.ts +277 -61
  335. package/src/services/providers/local-provider-service.ts +109 -44
  336. package/src/services/session-data.ts +18 -10
  337. package/src/services/session-telemetry.ts +6 -15
  338. package/src/services/storage/file-team-store.ts +1 -5
  339. package/src/services/storage/provider-settings-legacy-migration.ts +14 -51
  340. package/src/services/storage/provider-settings-manager.ts +17 -2
  341. package/src/services/storage/sqlite-team-store.ts +1 -5
  342. package/src/services/workspace-manifest.ts +18 -0
  343. package/src/session/conversation-store.ts +77 -0
  344. package/src/session/file-session-service.ts +1 -1
  345. package/src/session/index.ts +6 -27
  346. package/src/session/message-builder.ts +941 -0
  347. package/src/session/persistence-service.ts +119 -504
  348. package/src/session/session-manifest-store.ts +158 -0
  349. package/src/session/session-row.ts +199 -0
  350. package/src/session/session-service.ts +17 -376
  351. package/src/session/session-team-coordination.ts +1 -1
  352. package/src/session/subagent-session-manager.ts +397 -0
  353. package/src/session/team-persistence-store.ts +176 -0
  354. package/src/transports/hub.ts +1081 -0
  355. package/src/transports/local.ts +419 -93
  356. package/src/transports/remote.ts +27 -0
  357. package/src/transports/runtime-host-support.ts +63 -9
  358. package/src/types/chat-schema.ts +4 -5
  359. package/src/types/config.ts +17 -7
  360. package/src/types/events.ts +8 -6
  361. package/src/types/index.ts +3 -0
  362. package/src/types/provider-settings.ts +18 -7
  363. package/src/types/session.ts +7 -6
  364. package/src/types.ts +42 -2
  365. package/dist/hooks/persistent.d.ts +0 -64
  366. package/dist/hooks/persistent.d.ts.map +0 -1
  367. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  368. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  369. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  370. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  371. package/dist/services/telemetry/index.js +0 -15
  372. package/dist/session/rpc-session-service.d.ts +0 -16
  373. package/dist/session/rpc-session-service.d.ts.map +0 -1
  374. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  375. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  376. package/dist/transports/rpc.d.ts +0 -51
  377. package/dist/transports/rpc.d.ts.map +0 -1
  378. package/src/ClineCore.test.ts +0 -226
  379. package/src/account/cline-account-service.test.ts +0 -185
  380. package/src/account/featurebase-token.test.ts +0 -175
  381. package/src/account/rpc.test.ts +0 -63
  382. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  383. package/src/auth/client.test.ts +0 -69
  384. package/src/auth/cline.test.ts +0 -267
  385. package/src/auth/codex.test.ts +0 -170
  386. package/src/auth/oca.test.ts +0 -340
  387. package/src/auth/server.test.ts +0 -287
  388. package/src/auth/utils.test.ts +0 -128
  389. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  390. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  391. package/src/extensions/config/runtime-commands.test.ts +0 -115
  392. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  393. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  394. package/src/extensions/context/compaction.test.ts +0 -483
  395. package/src/extensions/mcp/config-loader.test.ts +0 -238
  396. package/src/extensions/mcp/manager.test.ts +0 -105
  397. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  398. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  399. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  400. package/src/extensions/tools/definitions.test.ts +0 -780
  401. package/src/extensions/tools/executors/bash.test.ts +0 -87
  402. package/src/extensions/tools/executors/editor.test.ts +0 -35
  403. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  404. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  405. package/src/extensions/tools/presets.test.ts +0 -70
  406. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  407. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  408. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  409. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  410. package/src/hooks/hook-file-hooks.test.ts +0 -311
  411. package/src/hooks/persistent.ts +0 -661
  412. package/src/runtime/history.test.ts +0 -114
  413. package/src/runtime/host.test.ts +0 -230
  414. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  415. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  416. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  417. package/src/runtime/rpc-spawn-lease.ts +0 -156
  418. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  419. package/src/runtime/runtime-builder.test.ts +0 -615
  420. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  421. package/src/runtime/runtime-parity.test.ts +0 -143
  422. package/src/services/providers/local-provider-service.test.ts +0 -1062
  423. package/src/services/session-data.test.ts +0 -160
  424. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  425. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  426. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  427. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  428. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  429. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  430. package/src/services/telemetry/distinct-id.test.ts +0 -57
  431. package/src/services/workspace/file-indexer.d.ts +0 -11
  432. package/src/services/workspace/file-indexer.test.ts +0 -156
  433. package/src/services/workspace/mention-enricher.test.ts +0 -106
  434. package/src/session/persistence-service.test.ts +0 -300
  435. package/src/session/rpc-session-service.ts +0 -114
  436. package/src/session/session-service.team-persistence.test.ts +0 -48
  437. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  438. package/src/transports/local.e2e.test.ts +0 -380
  439. package/src/transports/local.test.ts +0 -2559
  440. package/src/transports/rpc.test.ts +0 -82
  441. package/src/transports/rpc.ts +0 -665
@@ -0,0 +1,653 @@
1
+ /** biome-ignore-all lint/style/noNonNullAssertion: static */
2
+
3
+ import * as Llms from "@clinebot/llms";
4
+ import type {
5
+ ModelCatalogConfig,
6
+ ModelInfo,
7
+ ProviderCapability,
8
+ ProviderConfig,
9
+ } from "./provider-settings";
10
+
11
+ export interface BuiltInProviderManifest {
12
+ id: string;
13
+ baseUrl: string;
14
+ modelId: string;
15
+ knownModels?: Record<string, ModelInfo>;
16
+ capabilities?: Llms.CatalogProviderCapability[];
17
+ env?: readonly string[];
18
+ client: Llms.ProviderClient;
19
+ protocol?: Llms.ProviderProtocol;
20
+ }
21
+
22
+ function cloneKnownModels(
23
+ models: Record<string, ModelInfo>,
24
+ ): Record<string, ModelInfo> {
25
+ return Object.fromEntries(
26
+ Object.entries(models).map(([id, info]) => [id, { ...info }]),
27
+ ) as Record<string, ModelInfo>;
28
+ }
29
+
30
+ function isOpenAICompatibleManifest(
31
+ manifest: BuiltInProviderManifest,
32
+ ): boolean {
33
+ if (manifest.baseUrl.length === 0) {
34
+ return false;
35
+ }
36
+ switch (manifest.client) {
37
+ case "openai-compatible":
38
+ case "openai":
39
+ case "openai-r1":
40
+ case "fetch":
41
+ return true;
42
+ default:
43
+ return manifest.protocol === "openai-chat";
44
+ }
45
+ }
46
+
47
+ const BUILTIN_PROVIDER_MANIFESTS: BuiltInProviderManifest[] = Object.values(
48
+ Llms.MODEL_COLLECTIONS_BY_PROVIDER_ID,
49
+ ).map((collection) => ({
50
+ id: collection.provider.id,
51
+ baseUrl: collection.provider.baseUrl ?? "",
52
+ modelId: collection.provider.defaultModelId,
53
+ knownModels: cloneKnownModels(collection.models),
54
+ capabilities: collection.provider.capabilities
55
+ ? [...collection.provider.capabilities]
56
+ : undefined,
57
+ env: collection.provider.env ? [...collection.provider.env] : undefined,
58
+ client: collection.provider.client,
59
+ protocol: collection.provider.protocol,
60
+ }));
61
+
62
+ const BUILTIN_PROVIDER_MANIFESTS_BY_ID: Record<
63
+ string,
64
+ BuiltInProviderManifest
65
+ > = Object.fromEntries(
66
+ BUILTIN_PROVIDER_MANIFESTS.map((manifest) => [manifest.id, manifest]),
67
+ );
68
+
69
+ function getBuiltInProviderManifest(
70
+ providerId: string,
71
+ ): BuiltInProviderManifest | undefined {
72
+ return BUILTIN_PROVIDER_MANIFESTS_BY_ID[providerId];
73
+ }
74
+
75
+ function getOpenAICompatibleProviderManifests(): Record<
76
+ string,
77
+ BuiltInProviderManifest
78
+ > {
79
+ return Object.fromEntries(
80
+ Object.entries(BUILTIN_PROVIDER_MANIFESTS_BY_ID).filter(([, manifest]) =>
81
+ isOpenAICompatibleManifest(manifest),
82
+ ),
83
+ );
84
+ }
85
+
86
+ export interface ProviderDefaults {
87
+ baseUrl: string;
88
+ modelId: string;
89
+ knownModels?: Record<string, ModelInfo>;
90
+ capabilities?: ProviderCapability[];
91
+ }
92
+
93
+ function toRuntimeCapabilities(
94
+ capabilities: readonly Llms.CatalogProviderCapability[] = [],
95
+ ): ProviderCapability[] | undefined {
96
+ const next = capabilities.flatMap((capability) => {
97
+ switch (capability) {
98
+ case "reasoning":
99
+ case "prompt-cache":
100
+ case "tools":
101
+ case "oauth":
102
+ return [capability satisfies ProviderCapability];
103
+ default:
104
+ return [];
105
+ }
106
+ });
107
+ return next.length > 0 ? next : undefined;
108
+ }
109
+
110
+ export const DEFAULT_MODELS_CATALOG_URL = "https://models.dev/api.json";
111
+ const DEFAULT_MODELS_CATALOG_CACHE_TTL_MS = 10 * 60 * 1000;
112
+ const DEFAULT_PRIVATE_MODELS_CACHE_TTL_MS = 5 * 60 * 1000;
113
+ const DEFAULT_PRIVATE_MODELS_REQUEST_TIMEOUT_MS = 5_000;
114
+
115
+ const MODELS_CATALOG_CACHE = new Map<
116
+ string,
117
+ { expiresAt: number; data: Record<string, Record<string, ModelInfo>> }
118
+ >();
119
+ const MODELS_CATALOG_IN_FLIGHT = new Map<
120
+ string,
121
+ Promise<Record<string, Record<string, ModelInfo>>>
122
+ >();
123
+ const PRIVATE_MODELS_CACHE = new Map<
124
+ string,
125
+ { expiresAt: number; data: Record<string, ModelInfo> }
126
+ >();
127
+ const PRIVATE_MODELS_IN_FLIGHT = new Map<
128
+ string,
129
+ Promise<Record<string, ModelInfo>>
130
+ >();
131
+
132
+ async function loadGeneratedProviderModels(): Promise<
133
+ Record<string, Record<string, ModelInfo>>
134
+ > {
135
+ return Llms.getGeneratedProviderModels();
136
+ }
137
+
138
+ async function mergeKnownModels(
139
+ providerId: string,
140
+ defaultKnownModels: Record<string, ModelInfo> = {},
141
+ liveModels: Record<string, ModelInfo> = {},
142
+ privateModels: Record<string, ModelInfo> = {},
143
+ userKnownModels: Record<string, ModelInfo> = {},
144
+ ): Promise<Record<string, ModelInfo>> {
145
+ const generatedProviderModels = await loadGeneratedProviderModels();
146
+ const generatedKeys = Llms.resolveProviderModelCatalogKeys(providerId);
147
+ const generated = Object.assign(
148
+ {},
149
+ ...generatedKeys.map(
150
+ (generatedKey) => generatedProviderModels[generatedKey] ?? {},
151
+ ),
152
+ );
153
+ return Llms.sortModelsByReleaseDate({
154
+ ...generated,
155
+ ...defaultKnownModels,
156
+ ...liveModels,
157
+ ...privateModels,
158
+ ...userKnownModels,
159
+ });
160
+ }
161
+
162
+ function resolveCatalogModels(
163
+ providerId: string,
164
+ modelsByProviderId: Record<string, Record<string, ModelInfo>>,
165
+ ): Record<string, ModelInfo> {
166
+ // Runtime provider ids do not always match catalog keys. For example,
167
+ // Cline uses OpenRouter-backed catalog models, so live catalog lookups must
168
+ // apply the same key mapping as generated catalog lookups.
169
+ const catalogKeys = Llms.resolveProviderModelCatalogKeys(providerId);
170
+ return Object.assign(
171
+ {},
172
+ ...catalogKeys.map((catalogKey) => modelsByProviderId[catalogKey] ?? {}),
173
+ );
174
+ }
175
+
176
+ function normalizeBaseUrl(baseUrl: string | undefined): string {
177
+ const value = baseUrl?.trim();
178
+ return value && value.length > 0 ? value : "";
179
+ }
180
+
181
+ function resolveAuthToken(
182
+ config: Pick<ProviderConfig, "apiKey" | "accessToken">,
183
+ ): string | undefined {
184
+ const token = config.apiKey?.trim() || config.accessToken?.trim();
185
+ return token && token.length > 0 ? token : undefined;
186
+ }
187
+
188
+ function fingerprint(value: string): string {
189
+ let hash = 2166136261;
190
+ for (let i = 0; i < value.length; i += 1) {
191
+ hash ^= value.charCodeAt(i);
192
+ hash +=
193
+ (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
194
+ }
195
+ return (hash >>> 0).toString(16);
196
+ }
197
+
198
+ function resolvePrivateCacheKey(
199
+ providerId: string,
200
+ config: ProviderConfig,
201
+ ): string {
202
+ return `${providerId}:${normalizeBaseUrl(config.baseUrl)}:${fingerprint(resolveAuthToken(config) ?? "")}`;
203
+ }
204
+
205
+ async function fetchWithTimeout(
206
+ input: string,
207
+ init: RequestInit,
208
+ timeoutMs = DEFAULT_PRIVATE_MODELS_REQUEST_TIMEOUT_MS,
209
+ ): Promise<Response> {
210
+ const controller = new AbortController();
211
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
212
+ try {
213
+ return await fetch(input, {
214
+ ...init,
215
+ signal: controller.signal,
216
+ });
217
+ } finally {
218
+ clearTimeout(timer);
219
+ }
220
+ }
221
+
222
+ function includeCapability(
223
+ capabilities: NonNullable<ModelInfo["capabilities"]>,
224
+ capability: NonNullable<ModelInfo["capabilities"]>[number],
225
+ when: boolean,
226
+ ): void {
227
+ if (when && !capabilities.includes(capability)) {
228
+ capabilities.push(capability);
229
+ }
230
+ }
231
+
232
+ function buildModelFromPrivateSource(
233
+ id: string,
234
+ input: {
235
+ name?: string;
236
+ contextWindow?: number;
237
+ maxTokens?: number;
238
+ supportsImages?: boolean;
239
+ supportsPromptCache?: boolean;
240
+ supportsReasoning?: boolean;
241
+ releaseDate?: string;
242
+ },
243
+ ): ModelInfo {
244
+ const capabilities: NonNullable<ModelInfo["capabilities"]> = [
245
+ "streaming",
246
+ "tools",
247
+ ];
248
+ includeCapability(capabilities, "images", Boolean(input.supportsImages));
249
+ includeCapability(
250
+ capabilities,
251
+ "prompt-cache",
252
+ Boolean(input.supportsPromptCache),
253
+ );
254
+ includeCapability(
255
+ capabilities,
256
+ "reasoning",
257
+ Boolean(input.supportsReasoning),
258
+ );
259
+ return {
260
+ id,
261
+ name: input.name ?? id,
262
+ contextWindow: input.contextWindow,
263
+ maxTokens: input.maxTokens,
264
+ capabilities,
265
+ releaseDate: input.releaseDate,
266
+ status: "active",
267
+ };
268
+ }
269
+
270
+ interface BasetenModelResponse {
271
+ id?: string;
272
+ object?: string;
273
+ supported_features?: string[];
274
+ context_length?: number;
275
+ max_completion_tokens?: number;
276
+ }
277
+
278
+ async function fetchBasetenPrivateModels(
279
+ _config: ProviderConfig,
280
+ token: string,
281
+ ): Promise<Record<string, ModelInfo>> {
282
+ const response = await fetchWithTimeout(
283
+ "https://inference.baseten.co/v1/models",
284
+ {
285
+ method: "GET",
286
+ headers: {
287
+ Authorization: `Bearer ${token}`,
288
+ "Content-Type": "application/json",
289
+ },
290
+ },
291
+ );
292
+ if (!response.ok) {
293
+ throw new Error(`Baseten model refresh failed: HTTP ${response.status}`);
294
+ }
295
+
296
+ const payload = (await response.json()) as { data?: BasetenModelResponse[] };
297
+ const entries = payload?.data ?? [];
298
+ const models: Record<string, ModelInfo> = {};
299
+ for (const model of entries) {
300
+ const id = model.id?.trim();
301
+ if (!id) {
302
+ continue;
303
+ }
304
+ if (
305
+ id.includes("whisper") ||
306
+ id.includes("tts") ||
307
+ id.includes("embedding")
308
+ ) {
309
+ continue;
310
+ }
311
+ const features = model.supported_features ?? [];
312
+ models[id] = buildModelFromPrivateSource(id, {
313
+ name: id,
314
+ contextWindow: model.context_length,
315
+ maxTokens: model.max_completion_tokens,
316
+ supportsReasoning:
317
+ features.includes("reasoning") || features.includes("reasoning_effort"),
318
+ supportsImages: false,
319
+ });
320
+ }
321
+ return models;
322
+ }
323
+
324
+ interface HicapModelResponse {
325
+ id?: string;
326
+ }
327
+
328
+ async function fetchHicapPrivateModels(
329
+ _config: ProviderConfig,
330
+ token: string,
331
+ ): Promise<Record<string, ModelInfo>> {
332
+ const response = await fetchWithTimeout(
333
+ "https://api.hicap.ai/v2/openai/models",
334
+ {
335
+ method: "GET",
336
+ headers: {
337
+ "api-key": token,
338
+ },
339
+ },
340
+ );
341
+ if (!response.ok) {
342
+ throw new Error(`Hicap model refresh failed: HTTP ${response.status}`);
343
+ }
344
+
345
+ const payload = (await response.json()) as { data?: HicapModelResponse[] };
346
+ const entries = payload?.data ?? [];
347
+ const models: Record<string, ModelInfo> = {};
348
+ for (const model of entries) {
349
+ const id = model.id?.trim();
350
+ if (!id) {
351
+ continue;
352
+ }
353
+ models[id] = buildModelFromPrivateSource(id, {
354
+ name: id,
355
+ contextWindow: 128_000,
356
+ supportsImages: true,
357
+ supportsPromptCache: true,
358
+ });
359
+ }
360
+ return models;
361
+ }
362
+
363
+ interface LiteLlmModelInfoResponse {
364
+ model_name?: string;
365
+ litellm_params?: {
366
+ model?: string;
367
+ };
368
+ model_info?: {
369
+ max_output_tokens?: number;
370
+ max_tokens?: number;
371
+ max_input_tokens?: number;
372
+ supports_vision?: boolean;
373
+ supports_prompt_caching?: boolean;
374
+ supports_reasoning?: boolean;
375
+ };
376
+ }
377
+
378
+ function normalizeLiteLlmBaseUrl(baseUrl: string | undefined): string {
379
+ const normalized = normalizeBaseUrl(baseUrl);
380
+ if (!normalized) {
381
+ return "http://localhost:4000";
382
+ }
383
+ return normalized.endsWith("/v1") ? normalized.slice(0, -3) : normalized;
384
+ }
385
+
386
+ async function fetchLiteLlmPrivateModels(
387
+ config: ProviderConfig,
388
+ token: string,
389
+ ): Promise<Record<string, ModelInfo>> {
390
+ const baseUrl = normalizeLiteLlmBaseUrl(config.baseUrl);
391
+ const endpoint = `${baseUrl}/v1/model/info`;
392
+
393
+ const fetchWithHeaders = async (
394
+ headers: Record<string, string>,
395
+ ): Promise<Response> =>
396
+ fetchWithTimeout(endpoint, {
397
+ method: "GET",
398
+ headers: {
399
+ accept: "application/json",
400
+ ...headers,
401
+ },
402
+ });
403
+
404
+ let response = await fetchWithHeaders({ "x-litellm-api-key": token });
405
+ if (!response.ok) {
406
+ response = await fetchWithHeaders({ Authorization: `Bearer ${token}` });
407
+ }
408
+ if (!response.ok) {
409
+ throw new Error(`LiteLLM model refresh failed: HTTP ${response.status}`);
410
+ }
411
+
412
+ const payload = (await response.json()) as {
413
+ data?: LiteLlmModelInfoResponse[];
414
+ };
415
+ const entries = payload?.data ?? [];
416
+ const models: Record<string, ModelInfo> = {};
417
+ for (const model of entries) {
418
+ const displayName = model.model_name?.trim();
419
+ const actualModelId = model.litellm_params?.model?.trim();
420
+ const modelId = actualModelId || displayName;
421
+ if (!modelId) {
422
+ continue;
423
+ }
424
+ const info = model.model_info;
425
+ const converted = buildModelFromPrivateSource(modelId, {
426
+ name: displayName ?? modelId,
427
+ maxTokens: info?.max_output_tokens ?? info?.max_tokens,
428
+ contextWindow: info?.max_input_tokens ?? info?.max_tokens,
429
+ supportsImages: info?.supports_vision,
430
+ supportsPromptCache: info?.supports_prompt_caching,
431
+ supportsReasoning: info?.supports_reasoning,
432
+ });
433
+ models[modelId] = converted;
434
+ if (displayName) {
435
+ models[displayName] = {
436
+ ...converted,
437
+ id: displayName,
438
+ name: displayName,
439
+ };
440
+ }
441
+ }
442
+ return models;
443
+ }
444
+
445
+ type PrivateProviderModelFetcher = (
446
+ config: ProviderConfig,
447
+ token: string,
448
+ ) => Promise<Record<string, ModelInfo>>;
449
+
450
+ const PRIVATE_PROVIDER_MODEL_FETCHERS: Record<
451
+ string,
452
+ PrivateProviderModelFetcher
453
+ > = {
454
+ baseten: fetchBasetenPrivateModels,
455
+ hicap: fetchHicapPrivateModels,
456
+ litellm: fetchLiteLlmPrivateModels,
457
+ };
458
+
459
+ async function fetchPrivateProviderModels(
460
+ providerId: string,
461
+ config: ProviderConfig,
462
+ ): Promise<Record<string, ModelInfo>> {
463
+ const token = resolveAuthToken(config);
464
+ if (!token) {
465
+ return {};
466
+ }
467
+
468
+ const fetcher = PRIVATE_PROVIDER_MODEL_FETCHERS[providerId];
469
+ if (!fetcher) {
470
+ return {};
471
+ }
472
+ return fetcher(config, token);
473
+ }
474
+
475
+ function shouldLoadPrivateModels(
476
+ providerId: string,
477
+ modelCatalog: ModelCatalogConfig | undefined,
478
+ config: ProviderConfig | undefined,
479
+ ): boolean {
480
+ if (!config) {
481
+ return false;
482
+ }
483
+ if (!PRIVATE_PROVIDER_MODEL_FETCHERS[providerId]) {
484
+ return false;
485
+ }
486
+ if (modelCatalog?.loadPrivateOnAuth === false) {
487
+ return false;
488
+ }
489
+ return Boolean(resolveAuthToken(config));
490
+ }
491
+
492
+ async function getPrivateProviderModels(
493
+ providerId: string,
494
+ modelCatalog: ModelCatalogConfig | undefined,
495
+ config: ProviderConfig,
496
+ ): Promise<Record<string, ModelInfo>> {
497
+ const cacheTtlMs =
498
+ modelCatalog?.cacheTtlMs ?? DEFAULT_PRIVATE_MODELS_CACHE_TTL_MS;
499
+ const cacheKey = resolvePrivateCacheKey(providerId, config);
500
+ const now = Date.now();
501
+
502
+ const cached = PRIVATE_MODELS_CACHE.get(cacheKey);
503
+ if (cached && cached.expiresAt > now) {
504
+ return cached.data;
505
+ }
506
+
507
+ const inFlight = PRIVATE_MODELS_IN_FLIGHT.get(cacheKey);
508
+ if (inFlight) {
509
+ return inFlight;
510
+ }
511
+
512
+ const request = fetchPrivateProviderModels(providerId, config)
513
+ .then((data) => {
514
+ PRIVATE_MODELS_CACHE.set(cacheKey, {
515
+ data,
516
+ expiresAt: now + cacheTtlMs,
517
+ });
518
+ return data;
519
+ })
520
+ .finally(() => {
521
+ PRIVATE_MODELS_IN_FLIGHT.delete(cacheKey);
522
+ });
523
+
524
+ PRIVATE_MODELS_IN_FLIGHT.set(cacheKey, request);
525
+ return request;
526
+ }
527
+
528
+ async function fetchLiveModelsCatalog(
529
+ url: string,
530
+ ): Promise<Record<string, Record<string, ModelInfo>>> {
531
+ return Llms.fetchModelsDevProviderModels(url);
532
+ }
533
+
534
+ export async function getLiveModelsCatalog(
535
+ options: Pick<ModelCatalogConfig, "url" | "cacheTtlMs"> = {},
536
+ ): Promise<Record<string, Record<string, ModelInfo>>> {
537
+ const url = options.url ?? DEFAULT_MODELS_CATALOG_URL;
538
+ const cacheTtlMs = options.cacheTtlMs ?? DEFAULT_MODELS_CATALOG_CACHE_TTL_MS;
539
+ const now = Date.now();
540
+
541
+ const cached = MODELS_CATALOG_CACHE.get(url);
542
+ if (cached && cached.expiresAt > now) {
543
+ return cached.data;
544
+ }
545
+
546
+ const inFlight = MODELS_CATALOG_IN_FLIGHT.get(url);
547
+ if (inFlight) {
548
+ return inFlight;
549
+ }
550
+
551
+ const request = fetchLiveModelsCatalog(url)
552
+ .then((data) => {
553
+ MODELS_CATALOG_CACHE.set(url, { data, expiresAt: now + cacheTtlMs });
554
+ return data;
555
+ })
556
+ .finally(() => {
557
+ MODELS_CATALOG_IN_FLIGHT.delete(url);
558
+ });
559
+
560
+ MODELS_CATALOG_IN_FLIGHT.set(url, request);
561
+ return request;
562
+ }
563
+
564
+ export function clearLiveModelsCatalogCache(url?: string): void {
565
+ if (url) {
566
+ MODELS_CATALOG_CACHE.delete(url);
567
+ MODELS_CATALOG_IN_FLIGHT.delete(url);
568
+ return;
569
+ }
570
+
571
+ MODELS_CATALOG_CACHE.clear();
572
+ MODELS_CATALOG_IN_FLIGHT.clear();
573
+ }
574
+
575
+ export function clearPrivateModelsCatalogCache(): void {
576
+ PRIVATE_MODELS_CACHE.clear();
577
+ PRIVATE_MODELS_IN_FLIGHT.clear();
578
+ }
579
+
580
+ function toRuntimeProviderDefaults(
581
+ manifests: ReturnType<typeof getOpenAICompatibleProviderManifests>,
582
+ ): Record<string, ProviderDefaults> {
583
+ return Object.fromEntries(
584
+ Object.entries(manifests).map(([providerId, manifest]) => [
585
+ providerId,
586
+ {
587
+ baseUrl: manifest.baseUrl,
588
+ modelId: manifest.modelId,
589
+ capabilities: toRuntimeCapabilities(manifest.capabilities),
590
+ },
591
+ ]),
592
+ );
593
+ }
594
+
595
+ export const OPENAI_COMPATIBLE_PROVIDERS: Record<string, ProviderDefaults> =
596
+ toRuntimeProviderDefaults(getOpenAICompatibleProviderManifests());
597
+
598
+ export function getProviderConfig(
599
+ providerId: string,
600
+ ): ProviderDefaults | undefined {
601
+ const manifest = getBuiltInProviderManifest(providerId);
602
+ if (!manifest || !manifest.baseUrl) {
603
+ return undefined;
604
+ }
605
+
606
+ return {
607
+ baseUrl: manifest.baseUrl,
608
+ modelId: manifest.modelId,
609
+ knownModels: manifest.knownModels,
610
+ capabilities: toRuntimeCapabilities(manifest.capabilities),
611
+ };
612
+ }
613
+
614
+ export async function resolveProviderConfig(
615
+ providerId: string,
616
+ modelCatalog?: ModelCatalogConfig,
617
+ config?: ProviderConfig,
618
+ ): Promise<ProviderDefaults | undefined> {
619
+ const defaults = getProviderConfig(providerId);
620
+ if (!defaults) {
621
+ return undefined;
622
+ }
623
+
624
+ try {
625
+ const liveCatalog = modelCatalog?.loadLatestOnInit
626
+ ? await getLiveModelsCatalog(modelCatalog)
627
+ : undefined;
628
+ const liveModels = liveCatalog
629
+ ? resolveCatalogModels(providerId, liveCatalog)
630
+ : {};
631
+ const privateModels =
632
+ config && shouldLoadPrivateModels(providerId, modelCatalog, config)
633
+ ? await getPrivateProviderModels(providerId, modelCatalog, config)
634
+ : {};
635
+ const knownModels = await mergeKnownModels(
636
+ providerId,
637
+ defaults.knownModels,
638
+ liveModels,
639
+ privateModels,
640
+ config?.knownModels,
641
+ );
642
+
643
+ return {
644
+ ...defaults,
645
+ knownModels,
646
+ };
647
+ } catch (error) {
648
+ if (modelCatalog?.failOnError) {
649
+ throw error;
650
+ }
651
+ return defaults;
652
+ }
653
+ }