@clinebot/core 0.0.34 → 0.0.36

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 (546) hide show
  1. package/README.md +13 -10
  2. package/dist/ClineCore.d.ts +96 -63
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/index.d.ts +1 -1
  5. package/dist/account/index.d.ts.map +1 -1
  6. package/dist/account/rpc.d.ts +6 -6
  7. package/dist/account/rpc.d.ts.map +1 -1
  8. package/dist/cron/index.d.ts +6 -0
  9. package/dist/cron/index.d.ts.map +1 -0
  10. package/dist/cron/resource-limiter.d.ts +9 -0
  11. package/dist/cron/resource-limiter.d.ts.map +1 -0
  12. package/dist/cron/schedule-command-service.d.ts +10 -0
  13. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  14. package/dist/cron/schedule-service.d.ts +100 -0
  15. package/dist/cron/schedule-service.d.ts.map +1 -0
  16. package/dist/cron/scheduler.d.ts +66 -0
  17. package/dist/cron/scheduler.d.ts.map +1 -0
  18. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  19. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  20. package/dist/extensions/config/agent-config-loader.d.ts +6 -5
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/agent-config-parser.d.ts +1 -1
  23. package/dist/extensions/config/agent-config-parser.d.ts.map +1 -1
  24. package/dist/extensions/config/hooks-config-loader.d.ts +2 -2
  25. package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/config/index.d.ts +3 -3
  27. package/dist/extensions/config/index.d.ts.map +1 -1
  28. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  29. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  30. package/dist/extensions/config/user-instruction-config-loader.d.ts +3 -2
  31. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  32. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  33. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  34. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  35. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  36. package/dist/extensions/context/compaction.d.ts.map +1 -1
  37. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  38. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  39. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  40. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  41. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  42. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  43. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  44. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  45. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  46. package/dist/extensions/plugin-sandbox-bootstrap.js +253 -253
  47. package/dist/extensions/tools/constants.d.ts.map +1 -0
  48. package/dist/{tools → extensions/tools}/definitions.d.ts +1 -1
  49. package/dist/extensions/tools/definitions.d.ts.map +1 -0
  50. package/dist/extensions/tools/executors/apply-patch-parser.d.ts.map +1 -0
  51. package/dist/{tools → extensions/tools}/executors/apply-patch.d.ts +3 -1
  52. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -0
  53. package/dist/extensions/tools/executors/bash.d.ts.map +1 -0
  54. package/dist/extensions/tools/executors/editor.d.ts.map +1 -0
  55. package/dist/extensions/tools/executors/file-read.d.ts.map +1 -0
  56. package/dist/extensions/tools/executors/index.d.ts.map +1 -0
  57. package/dist/{tools → extensions/tools}/executors/search.d.ts +1 -1
  58. package/dist/extensions/tools/executors/search.d.ts.map +1 -0
  59. package/dist/extensions/tools/executors/web-fetch.d.ts.map +1 -0
  60. package/dist/extensions/tools/helpers.d.ts.map +1 -0
  61. package/dist/{tools → extensions/tools}/index.d.ts +2 -0
  62. package/dist/extensions/tools/index.d.ts.map +1 -0
  63. package/dist/{tools → extensions/tools}/model-tool-routing.d.ts +1 -1
  64. package/dist/extensions/tools/model-tool-routing.d.ts.map +1 -0
  65. package/dist/{tools → extensions/tools}/presets.d.ts +26 -44
  66. package/dist/extensions/tools/presets.d.ts.map +1 -0
  67. package/dist/extensions/tools/runtime.d.ts +25 -0
  68. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  69. package/dist/extensions/tools/schemas.d.ts.map +1 -0
  70. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -0
  71. package/dist/extensions/tools/team/index.d.ts.map +1 -0
  72. package/dist/{team → extensions/tools/team}/multi-agent.d.ts +1 -3
  73. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -0
  74. package/dist/extensions/tools/team/projections.d.ts.map +1 -0
  75. package/dist/extensions/tools/team/runtime.d.ts.map +1 -0
  76. package/dist/{team → extensions/tools/team}/spawn-agent-tool.d.ts +0 -1
  77. package/dist/extensions/tools/team/spawn-agent-tool.d.ts.map +1 -0
  78. package/dist/extensions/tools/team/subagent-prompts.d.ts.map +1 -0
  79. package/dist/{team → extensions/tools/team}/team-tools.d.ts +1 -0
  80. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -0
  81. package/dist/{tools → extensions/tools}/types.d.ts +4 -3
  82. package/dist/extensions/tools/types.d.ts.map +1 -0
  83. package/dist/{runtime → hooks}/checkpoint-hooks.d.ts +7 -0
  84. package/dist/hooks/checkpoint-hooks.d.ts.map +1 -0
  85. package/dist/{runtime → hooks}/hook-file-hooks.d.ts +4 -3
  86. package/dist/hooks/hook-file-hooks.d.ts.map +1 -0
  87. package/dist/hooks/index.d.ts +0 -1
  88. package/dist/hooks/index.d.ts.map +1 -1
  89. package/dist/hooks/subprocess.d.ts +10 -130
  90. package/dist/hooks/subprocess.d.ts.map +1 -1
  91. package/dist/hub/browser-websocket.d.ts +18 -0
  92. package/dist/hub/browser-websocket.d.ts.map +1 -0
  93. package/dist/hub/client.d.ts +45 -0
  94. package/dist/hub/client.d.ts.map +1 -0
  95. package/dist/hub/connect.d.ts +15 -0
  96. package/dist/hub/connect.d.ts.map +1 -0
  97. package/dist/hub/daemon-entry.d.ts +2 -0
  98. package/dist/hub/daemon-entry.d.ts.map +1 -0
  99. package/dist/hub/daemon-entry.js +1045 -0
  100. package/dist/hub/daemon.d.ts +5 -0
  101. package/dist/hub/daemon.d.ts.map +1 -0
  102. package/dist/hub/defaults.d.ts +13 -0
  103. package/dist/hub/defaults.d.ts.map +1 -0
  104. package/dist/hub/discovery.d.ts +29 -0
  105. package/dist/hub/discovery.d.ts.map +1 -0
  106. package/dist/hub/index.d.ts +15 -0
  107. package/dist/hub/index.d.ts.map +1 -0
  108. package/dist/hub/index.js +1044 -0
  109. package/dist/hub/native-transport.d.ts +17 -0
  110. package/dist/hub/native-transport.d.ts.map +1 -0
  111. package/dist/hub/runtime-handlers.d.ts +11 -0
  112. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  113. package/dist/hub/server.d.ts +86 -0
  114. package/dist/hub/server.d.ts.map +1 -0
  115. package/dist/hub/session-client.d.ts +87 -0
  116. package/dist/hub/session-client.d.ts.map +1 -0
  117. package/dist/hub/start-shared-server.d.ts +19 -0
  118. package/dist/hub/start-shared-server.d.ts.map +1 -0
  119. package/dist/hub/transport.d.ts +8 -0
  120. package/dist/hub/transport.d.ts.map +1 -0
  121. package/dist/hub/ui-client.d.ts +44 -0
  122. package/dist/hub/ui-client.d.ts.map +1 -0
  123. package/dist/hub/workspace.d.ts +4 -0
  124. package/dist/hub/workspace.d.ts.map +1 -0
  125. package/dist/index.d.ts +52 -39
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +557 -533
  128. package/dist/llms/configured-provider-registry.d.ts +28 -0
  129. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  130. package/dist/llms/provider-defaults.d.ts +27 -0
  131. package/dist/llms/provider-defaults.d.ts.map +1 -0
  132. package/dist/llms/provider-settings.d.ts +202 -0
  133. package/dist/llms/provider-settings.d.ts.map +1 -0
  134. package/dist/llms/runtime-config.d.ts +4 -0
  135. package/dist/llms/runtime-config.d.ts.map +1 -0
  136. package/dist/llms/runtime-registry.d.ts +20 -0
  137. package/dist/llms/runtime-registry.d.ts.map +1 -0
  138. package/dist/llms/runtime-types.d.ts +85 -0
  139. package/dist/llms/runtime-types.d.ts.map +1 -0
  140. package/dist/runtime/history.d.ts +4 -0
  141. package/dist/runtime/history.d.ts.map +1 -0
  142. package/dist/runtime/host.d.ts +8 -0
  143. package/dist/runtime/host.d.ts.map +1 -0
  144. package/dist/runtime/rules.d.ts +1 -0
  145. package/dist/runtime/rules.d.ts.map +1 -1
  146. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  147. package/dist/runtime/runtime-host.d.ts +103 -0
  148. package/dist/runtime/runtime-host.d.ts.map +1 -0
  149. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts +1 -1
  150. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts.map +1 -1
  151. package/dist/runtime/session-runtime.d.ts +3 -21
  152. package/dist/runtime/session-runtime.d.ts.map +1 -1
  153. package/dist/{session/session-agent-events.d.ts → services/agent-events.d.ts} +4 -4
  154. package/dist/services/agent-events.d.ts.map +1 -0
  155. package/dist/services/config.d.ts +3 -0
  156. package/dist/services/config.d.ts.map +1 -0
  157. package/dist/services/global-settings.d.ts +12 -0
  158. package/dist/services/global-settings.d.ts.map +1 -0
  159. package/dist/services/local-runtime-bootstrap.d.ts +47 -0
  160. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -0
  161. package/dist/services/plugin-tools.d.ts +16 -0
  162. package/dist/services/plugin-tools.d.ts.map +1 -0
  163. package/dist/{providers → services/providers}/local-provider-registry.d.ts +4 -4
  164. package/dist/services/providers/local-provider-registry.d.ts.map +1 -0
  165. package/dist/{providers → services/providers}/local-provider-service.d.ts +13 -13
  166. package/dist/services/providers/local-provider-service.d.ts.map +1 -0
  167. package/dist/{session → services}/session-artifacts.d.ts +0 -4
  168. package/dist/services/session-artifacts.d.ts.map +1 -0
  169. package/dist/{session/utils/helpers.d.ts → services/session-data.d.ts} +19 -27
  170. package/dist/services/session-data.d.ts.map +1 -0
  171. package/dist/{session → services}/session-telemetry.d.ts +2 -2
  172. package/dist/services/session-telemetry.d.ts.map +1 -0
  173. package/dist/{storage → services/storage}/file-team-store.d.ts +2 -2
  174. package/dist/services/storage/file-team-store.d.ts.map +1 -0
  175. package/dist/{storage → services/storage}/provider-settings-legacy-migration.d.ts +1 -1
  176. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  177. package/dist/{storage → services/storage}/provider-settings-manager.d.ts +1 -1
  178. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -0
  179. package/dist/{storage → services/storage}/sqlite-session-store.d.ts +3 -3
  180. package/dist/services/storage/sqlite-session-store.d.ts.map +1 -0
  181. package/dist/{storage → services/storage}/sqlite-team-store.d.ts +2 -2
  182. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -0
  183. package/dist/{storage → services/storage}/team-store.d.ts +1 -1
  184. package/dist/services/storage/team-store.d.ts.map +1 -0
  185. package/dist/services/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  186. package/dist/services/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  187. package/dist/services/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  188. package/dist/services/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
  189. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  190. package/dist/services/telemetry/core-events.d.ts.map +1 -0
  191. package/dist/services/telemetry/distinct-id.d.ts.map +1 -0
  192. package/dist/services/telemetry/index.d.ts.map +1 -0
  193. package/dist/services/telemetry/index.js +28 -0
  194. package/dist/{session/utils → services}/usage.d.ts +1 -1
  195. package/dist/services/usage.d.ts.map +1 -0
  196. package/dist/services/workspace/file-indexer.d.ts.map +1 -0
  197. package/dist/services/workspace/index.d.ts.map +1 -0
  198. package/dist/services/workspace/mention-enricher.d.ts.map +1 -0
  199. package/dist/services/workspace-manifest.d.ts +16 -0
  200. package/dist/services/workspace-manifest.d.ts.map +1 -0
  201. package/dist/session/file-session-service.d.ts +4 -1
  202. package/dist/session/file-session-service.d.ts.map +1 -1
  203. package/dist/session/persistence-service.d.ts +15 -25
  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-row.d.ts +93 -0
  208. package/dist/session/session-row.d.ts.map +1 -0
  209. package/dist/session/session-service.d.ts +8 -109
  210. package/dist/session/session-service.d.ts.map +1 -1
  211. package/dist/session/session-team-coordination.d.ts +4 -4
  212. package/dist/session/session-team-coordination.d.ts.map +1 -1
  213. package/dist/session/subagent-session-manager.d.ts +36 -0
  214. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  215. package/dist/session/team-persistence-store.d.ts +24 -0
  216. package/dist/session/team-persistence-store.d.ts.map +1 -0
  217. package/dist/transports/hub.d.ts +47 -0
  218. package/dist/transports/hub.d.ts.map +1 -0
  219. package/dist/{session/default-session-manager.d.ts → transports/local.d.ts} +30 -16
  220. package/dist/transports/local.d.ts.map +1 -0
  221. package/dist/transports/remote.d.ts +10 -0
  222. package/dist/transports/remote.d.ts.map +1 -0
  223. package/dist/transports/runtime-host-support.d.ts +22 -0
  224. package/dist/transports/runtime-host-support.d.ts.map +1 -0
  225. package/dist/{chat → types}/chat-schema.d.ts +10 -12
  226. package/dist/types/chat-schema.d.ts.map +1 -0
  227. package/dist/types/config.d.ts +10 -9
  228. package/dist/types/config.d.ts.map +1 -1
  229. package/dist/types/provider-settings.d.ts +4 -5
  230. package/dist/types/provider-settings.d.ts.map +1 -1
  231. package/dist/{session/utils/types.d.ts → types/session.d.ts} +16 -6
  232. package/dist/types/session.d.ts.map +1 -0
  233. package/dist/types/sessions.d.ts +19 -0
  234. package/dist/types/sessions.d.ts.map +1 -1
  235. package/dist/types/storage.d.ts +1 -3
  236. package/dist/types/storage.d.ts.map +1 -1
  237. package/dist/types.d.ts +14 -6
  238. package/dist/types.d.ts.map +1 -1
  239. package/package.json +22 -13
  240. package/src/ClineCore.ts +183 -85
  241. package/src/account/index.ts +3 -3
  242. package/src/account/rpc.ts +12 -12
  243. package/src/auth/cline.ts +1 -1
  244. package/src/auth/codex.ts +1 -1
  245. package/src/auth/oca.ts +1 -1
  246. package/src/cron/index.ts +5 -0
  247. package/src/cron/resource-limiter.ts +46 -0
  248. package/src/cron/schedule-command-service.ts +193 -0
  249. package/src/cron/schedule-service.ts +703 -0
  250. package/src/cron/scheduler.ts +637 -0
  251. package/src/cron/sqlite-schedule-store.ts +708 -0
  252. package/src/extensions/config/agent-config-loader.ts +18 -12
  253. package/src/extensions/config/agent-config-parser.ts +1 -1
  254. package/src/extensions/config/hooks-config-loader.ts +1 -2
  255. package/src/extensions/config/index.ts +0 -4
  256. package/src/extensions/config/runtime-commands.ts +6 -0
  257. package/src/extensions/config/user-instruction-config-loader.ts +1 -4
  258. package/src/extensions/context/agentic-compaction.ts +3 -3
  259. package/src/extensions/context/basic-compaction.ts +2 -2
  260. package/src/extensions/context/compaction-shared.ts +5 -4
  261. package/src/extensions/context/compaction.ts +3 -3
  262. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  263. package/src/extensions/plugin/plugin-loader.ts +48 -4
  264. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  265. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  266. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  267. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  268. package/src/{tools → extensions/tools}/definitions.ts +31 -50
  269. package/src/{tools → extensions/tools}/executors/apply-patch.ts +69 -80
  270. package/src/{tools → extensions/tools}/executors/file-read.ts +29 -4
  271. package/src/{tools → extensions/tools}/executors/search.ts +196 -4
  272. package/src/{tools → extensions/tools}/index.ts +10 -0
  273. package/src/{tools → extensions/tools}/model-tool-routing.ts +1 -1
  274. package/src/{tools → extensions/tools}/presets.ts +31 -47
  275. package/src/extensions/tools/runtime.ts +261 -0
  276. package/src/{tools → extensions/tools}/schemas.ts +4 -2
  277. package/src/{team → extensions/tools/team}/multi-agent.ts +80 -17
  278. package/src/{team → extensions/tools/team}/spawn-agent-tool.ts +1 -7
  279. package/src/{team → extensions/tools/team}/subagent-prompts.ts +2 -2
  280. package/src/{team → extensions/tools/team}/team-tools.ts +84 -53
  281. package/src/{tools → extensions/tools}/types.ts +5 -3
  282. package/src/{runtime → hooks}/checkpoint-hooks.ts +27 -0
  283. package/src/{runtime → hooks}/hook-file-hooks.ts +14 -13
  284. package/src/hooks/index.ts +0 -7
  285. package/src/hooks/subprocess-runner.ts +1 -1
  286. package/src/hooks/subprocess.ts +57 -257
  287. package/src/hub/browser-websocket.ts +137 -0
  288. package/src/hub/client.ts +574 -0
  289. package/src/hub/connect.ts +156 -0
  290. package/src/hub/daemon-entry.ts +87 -0
  291. package/src/hub/daemon.ts +181 -0
  292. package/src/hub/defaults.ts +43 -0
  293. package/src/hub/discovery.ts +247 -0
  294. package/src/hub/index.ts +14 -0
  295. package/src/hub/native-transport.ts +31 -0
  296. package/src/hub/runtime-handlers.ts +140 -0
  297. package/src/hub/server.ts +1888 -0
  298. package/src/hub/session-client.ts +460 -0
  299. package/src/hub/start-shared-server.ts +58 -0
  300. package/src/hub/transport.ts +14 -0
  301. package/src/hub/ui-client.ts +122 -0
  302. package/src/hub/workspace.ts +19 -0
  303. package/src/index.ts +264 -199
  304. package/src/llms/configured-provider-registry.ts +193 -0
  305. package/src/llms/provider-defaults.ts +637 -0
  306. package/src/llms/provider-settings.ts +263 -0
  307. package/src/llms/runtime-config.ts +43 -0
  308. package/src/llms/runtime-registry.ts +171 -0
  309. package/src/llms/runtime-types.ts +121 -0
  310. package/src/runtime/history.ts +237 -0
  311. package/src/runtime/host.ts +200 -0
  312. package/src/runtime/index.ts +1 -0
  313. package/src/runtime/rules.ts +12 -0
  314. package/src/runtime/runtime-builder.ts +37 -29
  315. package/src/runtime/runtime-host.ts +206 -0
  316. package/src/{session → runtime}/runtime-oauth-token-manager.ts +12 -16
  317. package/src/runtime/session-runtime.ts +2 -26
  318. package/src/{session/session-agent-events.ts → services/agent-events.ts} +7 -7
  319. package/src/services/config.ts +5 -0
  320. package/src/services/global-settings.ts +122 -0
  321. package/src/services/local-runtime-bootstrap.ts +318 -0
  322. package/src/services/plugin-tools.ts +85 -0
  323. package/src/{providers → services/providers}/local-provider-registry.ts +6 -6
  324. package/src/{providers → services/providers}/local-provider-service.ts +46 -41
  325. package/src/{session → services}/session-artifacts.ts +7 -19
  326. package/src/{session/utils/helpers.ts → services/session-data.ts} +90 -80
  327. package/src/{session → services}/session-telemetry.ts +7 -9
  328. package/src/services/storage/artifact-store.ts +1 -0
  329. package/src/{storage → services/storage}/file-team-store.ts +2 -2
  330. package/src/{storage → services/storage}/provider-settings-legacy-migration.ts +6 -4
  331. package/src/{storage → services/storage}/provider-settings-manager.ts +3 -3
  332. package/src/services/storage/session-store.ts +1 -0
  333. package/src/{storage → services/storage}/sqlite-session-store.ts +7 -12
  334. package/src/{storage → services/storage}/sqlite-team-store.ts +4 -4
  335. package/src/{storage → services/storage}/team-store.ts +1 -1
  336. package/src/{session/utils → services}/usage.ts +1 -1
  337. package/src/{input → services/workspace}/file-indexer.ts +26 -2
  338. package/src/{input → services/workspace}/mention-enricher.ts +1 -1
  339. package/src/{session → services}/workspace-manifest.ts +18 -0
  340. package/src/session/file-session-service.ts +10 -8
  341. package/src/session/index.ts +10 -23
  342. package/src/session/persistence-service.ts +144 -528
  343. package/src/session/session-manifest-store.ts +158 -0
  344. package/src/session/session-row.ts +199 -0
  345. package/src/session/session-service.ts +43 -389
  346. package/src/session/session-team-coordination.ts +14 -7
  347. package/src/session/subagent-session-manager.ts +397 -0
  348. package/src/session/team-persistence-store.ts +176 -0
  349. package/src/session/workspace-manager.ts +1 -1
  350. package/src/transports/hub.ts +656 -0
  351. package/src/{session/default-session-manager.ts → transports/local.ts} +263 -200
  352. package/src/transports/remote.ts +26 -0
  353. package/src/transports/runtime-host-support.ts +140 -0
  354. package/src/{chat → types}/chat-schema.ts +4 -5
  355. package/src/types/config.ts +10 -9
  356. package/src/types/provider-settings.ts +11 -7
  357. package/src/{session/utils/types.ts → types/session.ts} +16 -5
  358. package/src/types/sessions.ts +21 -0
  359. package/src/types/storage.ts +1 -6
  360. package/src/types.ts +52 -19
  361. package/dist/chat/chat-schema.d.ts.map +0 -1
  362. package/dist/hooks/persistent.d.ts +0 -64
  363. package/dist/hooks/persistent.d.ts.map +0 -1
  364. package/dist/input/file-indexer.d.ts.map +0 -1
  365. package/dist/input/index.d.ts.map +0 -1
  366. package/dist/input/mention-enricher.d.ts.map +0 -1
  367. package/dist/prompt/default-system.d.ts +0 -2
  368. package/dist/prompt/default-system.d.ts.map +0 -1
  369. package/dist/providers/local-provider-registry.d.ts.map +0 -1
  370. package/dist/providers/local-provider-service.d.ts.map +0 -1
  371. package/dist/runtime/checkpoint-hooks.d.ts.map +0 -1
  372. package/dist/runtime/hook-file-hooks.d.ts.map +0 -1
  373. package/dist/session/default-session-manager.d.ts.map +0 -1
  374. package/dist/session/rpc-runtime-ensure.d.ts +0 -53
  375. package/dist/session/rpc-runtime-ensure.d.ts.map +0 -1
  376. package/dist/session/rpc-session-service.d.ts +0 -13
  377. package/dist/session/rpc-session-service.d.ts.map +0 -1
  378. package/dist/session/rpc-spawn-lease.d.ts +0 -8
  379. package/dist/session/rpc-spawn-lease.d.ts.map +0 -1
  380. package/dist/session/session-agent-events.d.ts.map +0 -1
  381. package/dist/session/session-artifacts.d.ts.map +0 -1
  382. package/dist/session/session-config-builder.d.ts +0 -16
  383. package/dist/session/session-config-builder.d.ts.map +0 -1
  384. package/dist/session/session-host.d.ts +0 -15
  385. package/dist/session/session-host.d.ts.map +0 -1
  386. package/dist/session/session-manager.d.ts +0 -62
  387. package/dist/session/session-manager.d.ts.map +0 -1
  388. package/dist/session/session-telemetry.d.ts.map +0 -1
  389. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  390. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  391. package/dist/session/utils/helpers.d.ts.map +0 -1
  392. package/dist/session/utils/types.d.ts.map +0 -1
  393. package/dist/session/utils/usage.d.ts.map +0 -1
  394. package/dist/session/workspace-manifest.d.ts +0 -5
  395. package/dist/session/workspace-manifest.d.ts.map +0 -1
  396. package/dist/storage/file-team-store.d.ts.map +0 -1
  397. package/dist/storage/provider-settings-legacy-migration.d.ts.map +0 -1
  398. package/dist/storage/provider-settings-manager.d.ts.map +0 -1
  399. package/dist/storage/sqlite-session-store.d.ts.map +0 -1
  400. package/dist/storage/sqlite-team-store.d.ts.map +0 -1
  401. package/dist/storage/team-store.d.ts.map +0 -1
  402. package/dist/team/delegated-agent.d.ts.map +0 -1
  403. package/dist/team/index.d.ts.map +0 -1
  404. package/dist/team/multi-agent.d.ts.map +0 -1
  405. package/dist/team/projections.d.ts.map +0 -1
  406. package/dist/team/runtime.d.ts.map +0 -1
  407. package/dist/team/spawn-agent-tool.d.ts.map +0 -1
  408. package/dist/team/subagent-prompts.d.ts.map +0 -1
  409. package/dist/team/team-tools.d.ts.map +0 -1
  410. package/dist/telemetry/ITelemetryAdapter.d.ts.map +0 -1
  411. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +0 -1
  412. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +0 -1
  413. package/dist/telemetry/TelemetryLoggerSink.d.ts.map +0 -1
  414. package/dist/telemetry/TelemetryService.d.ts.map +0 -1
  415. package/dist/telemetry/core-events.d.ts.map +0 -1
  416. package/dist/telemetry/distinct-id.d.ts.map +0 -1
  417. package/dist/telemetry/index.d.ts.map +0 -1
  418. package/dist/telemetry/index.js +0 -15
  419. package/dist/tools/constants.d.ts.map +0 -1
  420. package/dist/tools/definitions.d.ts.map +0 -1
  421. package/dist/tools/executors/apply-patch-parser.d.ts.map +0 -1
  422. package/dist/tools/executors/apply-patch.d.ts.map +0 -1
  423. package/dist/tools/executors/bash.d.ts.map +0 -1
  424. package/dist/tools/executors/editor.d.ts.map +0 -1
  425. package/dist/tools/executors/file-read.d.ts.map +0 -1
  426. package/dist/tools/executors/index.d.ts.map +0 -1
  427. package/dist/tools/executors/search.d.ts.map +0 -1
  428. package/dist/tools/executors/web-fetch.d.ts.map +0 -1
  429. package/dist/tools/helpers.d.ts.map +0 -1
  430. package/dist/tools/index.d.ts.map +0 -1
  431. package/dist/tools/model-tool-routing.d.ts.map +0 -1
  432. package/dist/tools/presets.d.ts.map +0 -1
  433. package/dist/tools/schemas.d.ts.map +0 -1
  434. package/dist/tools/types.d.ts.map +0 -1
  435. package/src/ClineCore.test.ts +0 -150
  436. package/src/account/cline-account-service.test.ts +0 -185
  437. package/src/account/featurebase-token.test.ts +0 -175
  438. package/src/account/rpc.test.ts +0 -63
  439. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  440. package/src/auth/client.test.ts +0 -69
  441. package/src/auth/cline.test.ts +0 -267
  442. package/src/auth/codex.test.ts +0 -170
  443. package/src/auth/oca.test.ts +0 -340
  444. package/src/auth/server.test.ts +0 -287
  445. package/src/auth/utils.test.ts +0 -128
  446. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  447. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  448. package/src/extensions/config/runtime-commands.test.ts +0 -115
  449. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  450. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  451. package/src/extensions/context/compaction.test.ts +0 -483
  452. package/src/extensions/mcp/config-loader.test.ts +0 -238
  453. package/src/extensions/mcp/manager.test.ts +0 -105
  454. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -182
  455. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  456. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  457. package/src/hooks/persistent.ts +0 -661
  458. package/src/input/file-indexer.d.ts +0 -11
  459. package/src/input/file-indexer.test.ts +0 -127
  460. package/src/input/mention-enricher.test.ts +0 -85
  461. package/src/prompt/default-system.ts +0 -21
  462. package/src/providers/local-provider-service.test.ts +0 -1062
  463. package/src/runtime/checkpoint-hooks.test.ts +0 -168
  464. package/src/runtime/hook-file-hooks.test.ts +0 -311
  465. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -242
  466. package/src/runtime/runtime-builder.test.ts +0 -616
  467. package/src/runtime/runtime-parity.test.ts +0 -143
  468. package/src/session/default-session-manager.e2e.test.ts +0 -384
  469. package/src/session/default-session-manager.test.ts +0 -2473
  470. package/src/session/persistence-service.test.ts +0 -241
  471. package/src/session/rpc-runtime-ensure.ts +0 -521
  472. package/src/session/rpc-session-service.ts +0 -107
  473. package/src/session/rpc-spawn-lease.test.ts +0 -49
  474. package/src/session/rpc-spawn-lease.ts +0 -122
  475. package/src/session/runtime-oauth-token-manager.test.ts +0 -137
  476. package/src/session/session-config-builder.ts +0 -172
  477. package/src/session/session-host.test.ts +0 -89
  478. package/src/session/session-host.ts +0 -213
  479. package/src/session/session-manager.ts +0 -74
  480. package/src/session/session-service.team-persistence.test.ts +0 -48
  481. package/src/session/sqlite-rpc-session-backend.ts +0 -303
  482. package/src/session/utils/helpers.test.ts +0 -160
  483. package/src/storage/artifact-store.ts +0 -1
  484. package/src/storage/provider-settings-legacy-migration.test.ts +0 -424
  485. package/src/storage/provider-settings-manager.test.ts +0 -191
  486. package/src/storage/session-store.ts +0 -1
  487. package/src/team/multi-agent.lifecycle.test.ts +0 -201
  488. package/src/team/spawn-agent-tool.test.ts +0 -387
  489. package/src/team/team-tools.test.ts +0 -906
  490. package/src/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  491. package/src/telemetry/OpenTelemetryProvider.test.ts +0 -326
  492. package/src/telemetry/TelemetryLoggerSink.test.ts +0 -42
  493. package/src/telemetry/TelemetryService.test.ts +0 -134
  494. package/src/telemetry/distinct-id.test.ts +0 -57
  495. package/src/tools/definitions.test.ts +0 -780
  496. package/src/tools/executors/bash.test.ts +0 -87
  497. package/src/tools/executors/editor.test.ts +0 -35
  498. package/src/tools/executors/file-read.test.ts +0 -49
  499. package/src/tools/model-tool-routing.test.ts +0 -86
  500. package/src/tools/presets.test.ts +0 -70
  501. /package/dist/{tools → extensions/tools}/constants.d.ts +0 -0
  502. /package/dist/{tools → extensions/tools}/executors/apply-patch-parser.d.ts +0 -0
  503. /package/dist/{tools → extensions/tools}/executors/bash.d.ts +0 -0
  504. /package/dist/{tools → extensions/tools}/executors/editor.d.ts +0 -0
  505. /package/dist/{tools → extensions/tools}/executors/file-read.d.ts +0 -0
  506. /package/dist/{tools → extensions/tools}/executors/index.d.ts +0 -0
  507. /package/dist/{tools → extensions/tools}/executors/web-fetch.d.ts +0 -0
  508. /package/dist/{tools → extensions/tools}/helpers.d.ts +0 -0
  509. /package/dist/{tools → extensions/tools}/schemas.d.ts +0 -0
  510. /package/dist/{team → extensions/tools/team}/delegated-agent.d.ts +0 -0
  511. /package/dist/{team → extensions/tools/team}/index.d.ts +0 -0
  512. /package/dist/{team → extensions/tools/team}/projections.d.ts +0 -0
  513. /package/dist/{team → extensions/tools/team}/runtime.d.ts +0 -0
  514. /package/dist/{team → extensions/tools/team}/subagent-prompts.d.ts +0 -0
  515. /package/dist/{telemetry → services/telemetry}/ITelemetryAdapter.d.ts +0 -0
  516. /package/dist/{telemetry → services/telemetry}/OpenTelemetryAdapter.d.ts +0 -0
  517. /package/dist/{telemetry → services/telemetry}/OpenTelemetryProvider.d.ts +0 -0
  518. /package/dist/{telemetry → services/telemetry}/TelemetryLoggerSink.d.ts +0 -0
  519. /package/dist/{telemetry → services/telemetry}/TelemetryService.d.ts +0 -0
  520. /package/dist/{telemetry → services/telemetry}/core-events.d.ts +0 -0
  521. /package/dist/{telemetry → services/telemetry}/distinct-id.d.ts +0 -0
  522. /package/dist/{telemetry → services/telemetry}/index.d.ts +0 -0
  523. /package/dist/{input → services/workspace}/file-indexer.d.ts +0 -0
  524. /package/dist/{input → services/workspace}/index.d.ts +0 -0
  525. /package/dist/{input → services/workspace}/mention-enricher.d.ts +0 -0
  526. /package/src/{tools → extensions/tools}/constants.ts +0 -0
  527. /package/src/{tools → extensions/tools}/executors/apply-patch-parser.ts +0 -0
  528. /package/src/{tools → extensions/tools}/executors/bash.ts +0 -0
  529. /package/src/{tools → extensions/tools}/executors/editor.ts +0 -0
  530. /package/src/{tools → extensions/tools}/executors/index.ts +0 -0
  531. /package/src/{tools → extensions/tools}/executors/web-fetch.ts +0 -0
  532. /package/src/{tools → extensions/tools}/helpers.ts +0 -0
  533. /package/src/{team → extensions/tools/team}/delegated-agent.ts +0 -0
  534. /package/src/{team → extensions/tools/team}/index.ts +0 -0
  535. /package/src/{team → extensions/tools/team}/projections.ts +0 -0
  536. /package/src/{team → extensions/tools/team}/runtime.ts +0 -0
  537. /package/src/{storage → services/storage}/index.ts +0 -0
  538. /package/src/{telemetry → services/telemetry}/ITelemetryAdapter.ts +0 -0
  539. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.ts +0 -0
  540. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.ts +0 -0
  541. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.ts +0 -0
  542. /package/src/{telemetry → services/telemetry}/TelemetryService.ts +0 -0
  543. /package/src/{telemetry → services/telemetry}/core-events.ts +0 -0
  544. /package/src/{telemetry → services/telemetry}/distinct-id.ts +0 -0
  545. /package/src/{telemetry → services/telemetry}/index.ts +0 -0
  546. /package/src/{input → services/workspace}/index.ts +0 -0
@@ -0,0 +1,263 @@
1
+ import * as Llms from "@clinebot/llms";
2
+ import { z } from "zod";
3
+ import {
4
+ DEFAULT_EXTERNAL_OCA_BASE_URL,
5
+ DEFAULT_INTERNAL_OCA_BASE_URL,
6
+ } from "../auth/oca";
7
+ import {
8
+ OPENAI_COMPATIBLE_PROVIDERS,
9
+ type ProviderDefaults,
10
+ } from "./provider-defaults";
11
+
12
+ export type ModelInfo = Llms.ModelInfo;
13
+ export type ProviderClient = Llms.ProviderClient;
14
+ export type ProviderProtocol = Llms.ProviderProtocol;
15
+ export type ProviderId = Llms.ProviderId;
16
+ export type ProviderCapability = Llms.ProviderCapability;
17
+ export type ProviderConfig = Llms.ProviderConfig;
18
+ export type BuiltInProviderId = Llms.BuiltInProviderId;
19
+
20
+ export const BUILT_IN_PROVIDER = Llms.BUILT_IN_PROVIDER;
21
+ export const BUILT_IN_PROVIDER_IDS = Llms.BUILT_IN_PROVIDER_IDS;
22
+ export const isBuiltInProviderId = Llms.isBuiltInProviderId;
23
+ export const normalizeProviderId = Llms.normalizeProviderId;
24
+
25
+ export type ProviderDefaultsConfig = ProviderDefaults;
26
+
27
+ export const ProviderIdSchema = z
28
+ .string()
29
+ .min(1)
30
+ .regex(/^[a-z0-9][a-z0-9-]*$/i);
31
+
32
+ export const AuthSettingsSchema = z.object({
33
+ apiKey: z.string().optional(),
34
+ accessToken: z.string().optional(),
35
+ refreshToken: z.string().optional(),
36
+ expiresAt: z.number().int().positive().optional(),
37
+ accountId: z.string().optional(),
38
+ });
39
+
40
+ export type AuthSettings = z.infer<typeof AuthSettingsSchema>;
41
+
42
+ const ReasoningLevelSchema = z.enum(["none", "low", "medium", "high", "xhigh"]);
43
+
44
+ export const ReasoningSettingsSchema = z.object({
45
+ enabled: z.boolean().optional(),
46
+ effort: ReasoningLevelSchema.optional(),
47
+ budgetTokens: z.number().int().positive().optional(),
48
+ });
49
+
50
+ export type ReasoningSettings = z.infer<typeof ReasoningSettingsSchema>;
51
+
52
+ export const AwsSettingsSchema = z.object({
53
+ accessKey: z.string().optional(),
54
+ secretKey: z.string().optional(),
55
+ sessionToken: z.string().optional(),
56
+ region: z.string().optional(),
57
+ profile: z.string().optional(),
58
+ authentication: z.enum(["iam", "api-key", "profile"]).optional(),
59
+ usePromptCache: z.boolean().optional(),
60
+ useCrossRegionInference: z.boolean().optional(),
61
+ useGlobalInference: z.boolean().optional(),
62
+ endpoint: z.string().url().optional(),
63
+ customModelBaseId: z.string().optional(),
64
+ });
65
+
66
+ export type AwsSettings = z.infer<typeof AwsSettingsSchema>;
67
+
68
+ export const GcpSettingsSchema = z.object({
69
+ projectId: z.string().optional(),
70
+ region: z.string().optional(),
71
+ });
72
+
73
+ export type GcpSettings = z.infer<typeof GcpSettingsSchema>;
74
+
75
+ export const AzureSettingsSchema = z.object({
76
+ apiVersion: z.string().optional(),
77
+ useIdentity: z.boolean().optional(),
78
+ });
79
+
80
+ export type AzureSettings = z.infer<typeof AzureSettingsSchema>;
81
+
82
+ export const SapSettingsSchema = z.object({
83
+ clientId: z.string().optional(),
84
+ clientSecret: z.string().optional(),
85
+ tokenUrl: z.string().url().optional(),
86
+ resourceGroup: z.string().optional(),
87
+ deploymentId: z.string().optional(),
88
+ useOrchestrationMode: z.boolean().optional(),
89
+ api: z.enum(["orchestration", "foundation-models"]).optional(),
90
+ defaultSettings: z.record(z.string(), z.unknown()).optional(),
91
+ });
92
+
93
+ export type SapSettings = z.infer<typeof SapSettingsSchema>;
94
+
95
+ export const OcaSettingsSchema = z.object({
96
+ mode: z.enum(["internal", "external"]).optional(),
97
+ usePromptCache: z.boolean().optional(),
98
+ });
99
+
100
+ export type OcaSettings = z.infer<typeof OcaSettingsSchema>;
101
+
102
+ export const ModelCatalogSettingsSchema = z.object({
103
+ loadLatestOnInit: z.boolean().optional(),
104
+ loadPrivateOnAuth: z.boolean().optional(),
105
+ url: z.string().url().optional(),
106
+ cacheTtlMs: z.number().int().positive().optional(),
107
+ failOnError: z.boolean().optional(),
108
+ });
109
+
110
+ export type ModelCatalogSettings = z.infer<typeof ModelCatalogSettingsSchema>;
111
+ export type ModelCatalogConfig = ModelCatalogSettings;
112
+
113
+ export const ProviderSettingsSchema = z.object({
114
+ provider: ProviderIdSchema,
115
+ apiKey: z.string().optional(),
116
+ auth: AuthSettingsSchema.optional(),
117
+ model: z.string().optional(),
118
+ maxTokens: z.number().int().positive().optional(),
119
+ contextWindow: z.number().int().positive().optional(),
120
+ baseUrl: z.string().url().optional(),
121
+ headers: z.record(z.string(), z.string()).optional(),
122
+ timeout: z.number().int().positive().optional(),
123
+ reasoning: ReasoningSettingsSchema.optional(),
124
+ aws: AwsSettingsSchema.optional(),
125
+ gcp: GcpSettingsSchema.optional(),
126
+ azure: AzureSettingsSchema.optional(),
127
+ sap: SapSettingsSchema.optional(),
128
+ oca: OcaSettingsSchema.optional(),
129
+ region: z.string().optional(),
130
+ apiLine: z.enum(["china", "international"]).optional(),
131
+ capabilities: z
132
+ .array(
133
+ z.enum([
134
+ "reasoning",
135
+ "prompt-cache",
136
+ "streaming",
137
+ "tools",
138
+ "vision",
139
+ "computer-use",
140
+ "oauth",
141
+ ]),
142
+ )
143
+ .optional(),
144
+ modelCatalog: ModelCatalogSettingsSchema.optional(),
145
+ });
146
+
147
+ export type ProviderSettings = z.infer<typeof ProviderSettingsSchema>;
148
+
149
+ export function parseSettings(input: unknown): ProviderSettings {
150
+ return ProviderSettingsSchema.parse(input);
151
+ }
152
+
153
+ export function safeParseSettings(
154
+ input: unknown,
155
+ ): ReturnType<typeof ProviderSettingsSchema.safeParse> {
156
+ return ProviderSettingsSchema.safeParse(input);
157
+ }
158
+
159
+ export function toProviderConfig(settings: ProviderSettings): ProviderConfig {
160
+ const providerId = settings.provider as ProviderId;
161
+ const normalizedProviderId = normalizeProviderId(providerId);
162
+ const unifiedReasoningLevel = settings.reasoning?.effort || "none";
163
+ const reasoningEffort =
164
+ unifiedReasoningLevel === "none" ? undefined : unifiedReasoningLevel;
165
+
166
+ const providerDefaults = OPENAI_COMPATIBLE_PROVIDERS[normalizedProviderId];
167
+ const generatedKnownModels = Object.assign(
168
+ {},
169
+ ...Llms.resolveProviderModelCatalogKeys(normalizedProviderId).map(
170
+ (catalogKey) => Llms.getGeneratedModelsForProvider(catalogKey),
171
+ ),
172
+ );
173
+
174
+ const apiKey =
175
+ settings.auth?.accessToken ?? settings.apiKey ?? settings.auth?.apiKey;
176
+ const resolvedBaseUrl =
177
+ settings.baseUrl ??
178
+ (normalizedProviderId === "oca"
179
+ ? settings.oca?.mode === "internal"
180
+ ? DEFAULT_INTERNAL_OCA_BASE_URL
181
+ : DEFAULT_EXTERNAL_OCA_BASE_URL
182
+ : providerDefaults?.baseUrl);
183
+
184
+ const config: ProviderConfig = {
185
+ providerId,
186
+ modelId: settings.model ?? providerDefaults?.modelId ?? "default",
187
+ knownModels:
188
+ providerDefaults?.knownModels ??
189
+ (Object.keys(generatedKnownModels).length > 0
190
+ ? generatedKnownModels
191
+ : undefined),
192
+ apiKey,
193
+ accessToken: settings.auth?.accessToken,
194
+ refreshToken: settings.auth?.refreshToken,
195
+ accountId: settings.auth?.accountId,
196
+ baseUrl: resolvedBaseUrl,
197
+ headers: settings.headers,
198
+ timeoutMs: settings.timeout,
199
+ maxOutputTokens: settings.maxTokens,
200
+ maxContextTokens: settings.contextWindow,
201
+ thinking: settings.reasoning?.enabled,
202
+ reasoningEffort,
203
+ thinkingBudgetTokens: settings.reasoning?.budgetTokens,
204
+ region: settings.region ?? settings.aws?.region ?? settings.gcp?.region,
205
+ apiLine: settings.apiLine,
206
+ useCrossRegionInference: settings.aws?.useCrossRegionInference,
207
+ useGlobalInference: settings.aws?.useGlobalInference,
208
+ aws: settings.aws
209
+ ? {
210
+ accessKey: settings.aws.accessKey,
211
+ secretKey: settings.aws.secretKey,
212
+ sessionToken: settings.aws.sessionToken,
213
+ authentication: settings.aws.authentication,
214
+ profile: settings.aws.profile,
215
+ usePromptCache: settings.aws.usePromptCache,
216
+ endpoint: settings.aws.endpoint,
217
+ customModelBaseId: settings.aws.customModelBaseId,
218
+ }
219
+ : undefined,
220
+ gcp: settings.gcp
221
+ ? {
222
+ projectId: settings.gcp.projectId,
223
+ region: settings.gcp.region,
224
+ }
225
+ : undefined,
226
+ azure: settings.azure,
227
+ sap: settings.sap,
228
+ oca: settings.oca,
229
+ capabilities: (settings.capabilities ?? providerDefaults?.capabilities) as
230
+ | ProviderCapability[]
231
+ | undefined,
232
+ modelCatalog: settings.modelCatalog
233
+ ? {
234
+ loadLatestOnInit: settings.modelCatalog.loadLatestOnInit,
235
+ loadPrivateOnAuth: settings.modelCatalog.loadPrivateOnAuth,
236
+ url: settings.modelCatalog.url,
237
+ cacheTtlMs: settings.modelCatalog.cacheTtlMs,
238
+ failOnError: settings.modelCatalog.failOnError,
239
+ }
240
+ : undefined,
241
+ };
242
+
243
+ return Object.fromEntries(
244
+ Object.entries(config).filter(([_, value]) => value !== undefined),
245
+ ) as ProviderConfig;
246
+ }
247
+
248
+ export function createProviderConfig(input: unknown): ProviderConfig {
249
+ const settings = parseSettings(input);
250
+ return toProviderConfig(settings);
251
+ }
252
+
253
+ export function safeCreateProviderConfig(
254
+ input: unknown,
255
+ ):
256
+ | { success: true; config: ProviderConfig }
257
+ | { success: false; error: z.ZodError } {
258
+ const result = safeParseSettings(input);
259
+ if (result.success) {
260
+ return { success: true, config: toProviderConfig(result.data) };
261
+ }
262
+ return { success: false, error: result.error };
263
+ }
@@ -0,0 +1,43 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import type { LlmsConfig } from "./runtime-types";
4
+
5
+ export function defineLlmsConfig(config: LlmsConfig): LlmsConfig {
6
+ return config;
7
+ }
8
+
9
+ export async function loadLlmsConfigFromFile(
10
+ configPath: string,
11
+ ): Promise<LlmsConfig> {
12
+ const resolvedPath = path.resolve(configPath);
13
+ const raw = await readFile(resolvedPath, "utf8");
14
+ let parsed: unknown;
15
+ try {
16
+ parsed = JSON.parse(raw);
17
+ } catch (error) {
18
+ const details = error instanceof Error ? error.message : String(error);
19
+ throw new Error(
20
+ `Failed to parse JSON config at "${resolvedPath}": ${details}`,
21
+ );
22
+ }
23
+ return assertLlmsConfig(parsed, resolvedPath);
24
+ }
25
+
26
+ function assertLlmsConfig(value: unknown, source: string): LlmsConfig {
27
+ if (!value || typeof value !== "object") {
28
+ throw new Error(`Invalid llms config in "${source}": expected an object.`);
29
+ }
30
+ const config = value as Record<string, unknown>;
31
+ const providers = config.providers;
32
+ if (!Array.isArray(providers)) {
33
+ throw new Error(
34
+ `Invalid llms config in "${source}": "providers" must be an array.`,
35
+ );
36
+ }
37
+ if (!providers.length) {
38
+ throw new Error(
39
+ `Invalid llms config in "${source}": "providers" cannot be empty.`,
40
+ );
41
+ }
42
+ return value as LlmsConfig;
43
+ }
@@ -0,0 +1,171 @@
1
+ import type { ApiHandler } from "@clinebot/llms";
2
+ import {
3
+ BUILT_IN_PROVIDER_IDS,
4
+ createHandler as createProviderHandler,
5
+ createHandlerAsync as createProviderHandlerAsync,
6
+ getProviderCollection,
7
+ hasProvider,
8
+ registerAsyncHandler,
9
+ registerHandler,
10
+ registerModel as registerModelInCatalog,
11
+ registerProvider as registerProviderInCatalog,
12
+ } from "@clinebot/llms";
13
+ import {
14
+ ConfiguredProviderRegistry,
15
+ toBuiltInProviderSummary,
16
+ } from "./configured-provider-registry";
17
+ import type {
18
+ BuiltInProviderSummary,
19
+ CreateHandlerInput,
20
+ LlmsConfig,
21
+ LlmsSdk,
22
+ RegisterBuiltinProviderInput,
23
+ RegisteredProviderSummary,
24
+ RegisterModelInput,
25
+ RegisterProviderInput,
26
+ } from "./runtime-types";
27
+
28
+ export class DefaultLlmsSdk implements LlmsSdk {
29
+ private readonly configuredProviders = new ConfiguredProviderRegistry();
30
+
31
+ constructor(config: LlmsConfig) {
32
+ this.applyConfig(config);
33
+ }
34
+
35
+ createHandler(input: CreateHandlerInput): ApiHandler {
36
+ return createProviderHandler(
37
+ this.configuredProviders.createHandlerConfig(input),
38
+ );
39
+ }
40
+
41
+ async createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler> {
42
+ return createProviderHandlerAsync(
43
+ this.configuredProviders.createHandlerConfig(input),
44
+ );
45
+ }
46
+
47
+ registerProvider(input: RegisterProviderInput): void {
48
+ registerProviderInCatalog(input.collection);
49
+ if (input.handlerFactory && input.asyncHandlerFactory) {
50
+ throw new Error(
51
+ `Provider "${input.collection.provider.id}" cannot register both sync and async handlers.`,
52
+ );
53
+ }
54
+ if (input.handlerFactory) {
55
+ registerHandler(input.collection.provider.id, input.handlerFactory);
56
+ }
57
+ if (input.asyncHandlerFactory) {
58
+ registerAsyncHandler(
59
+ input.collection.provider.id,
60
+ input.asyncHandlerFactory,
61
+ );
62
+ }
63
+ this.configuredProviders.register({
64
+ id: input.collection.provider.id,
65
+ models: input.exposeModels ?? Object.keys(input.collection.models),
66
+ defaultModel:
67
+ input.defaultModel ?? input.collection.provider.defaultModelId,
68
+ defaults: input.defaults,
69
+ });
70
+ }
71
+
72
+ registerBuiltinProvider(input: RegisterBuiltinProviderInput): void {
73
+ const exposedModels = input.exposeModels ?? Object.keys(input.models);
74
+ const defaultModel = input.defaultModel ?? exposedModels[0];
75
+ if (!defaultModel) {
76
+ throw new Error(`Provider "${input.id}" must define a default model.`);
77
+ }
78
+ registerProviderInCatalog({
79
+ provider: {
80
+ id: input.id,
81
+ name: input.name ?? input.id,
82
+ description: input.description,
83
+ protocol: input.protocol,
84
+ baseUrl: input.baseUrl,
85
+ defaultModelId: defaultModel,
86
+ client: input.client ?? "openai-compatible",
87
+ capabilities: input.capabilities,
88
+ env: input.env,
89
+ },
90
+ models: input.models,
91
+ });
92
+ this.configuredProviders.register({
93
+ id: input.id,
94
+ models: exposedModels,
95
+ defaultModel,
96
+ defaults: {
97
+ routingProviderId: input.builtinProviderId,
98
+ ...(input.defaults ?? {}),
99
+ },
100
+ });
101
+ }
102
+
103
+ registerModel(input: RegisterModelInput): void {
104
+ registerModelInCatalog(input.providerId, input.modelId, input.info);
105
+ this.configuredProviders.registerModel(input.providerId, input.modelId);
106
+ }
107
+
108
+ getProviders(): RegisteredProviderSummary[] {
109
+ return this.configuredProviders.list();
110
+ }
111
+
112
+ getBuiltInProviderIds() {
113
+ return [...BUILT_IN_PROVIDER_IDS];
114
+ }
115
+
116
+ async getBuiltInProviders(): Promise<BuiltInProviderSummary[]> {
117
+ const collections = await Promise.all(
118
+ BUILT_IN_PROVIDER_IDS.map((providerId: string) =>
119
+ getProviderCollection(providerId),
120
+ ),
121
+ );
122
+ return collections
123
+ .filter(
124
+ (collection): collection is NonNullable<typeof collection> =>
125
+ collection !== undefined,
126
+ )
127
+ .map((collection) => toBuiltInProviderSummary({ collection }));
128
+ }
129
+
130
+ getModels(providerId: string): string[] {
131
+ return this.configuredProviders.getModels(providerId);
132
+ }
133
+
134
+ isProviderConfigured(providerId: string): boolean {
135
+ return this.configuredProviders.hasProvider(providerId);
136
+ }
137
+
138
+ isModelConfigured(providerId: string, modelId: string): boolean {
139
+ return this.configuredProviders.hasModel(providerId, modelId);
140
+ }
141
+
142
+ private applyConfig(config: LlmsConfig): void {
143
+ for (const provider of config.providers) {
144
+ this.configuredProviders.registerSelectionConfig(provider);
145
+ }
146
+ for (const model of config.models ?? []) {
147
+ this.registerModel(model);
148
+ }
149
+ for (const provider of config.customProviders ?? []) {
150
+ this.registerProvider(provider);
151
+ }
152
+ for (const provider of this.configuredProviders.list()) {
153
+ const providerExists = hasProvider(provider.id);
154
+ const routedProviderId = this.configuredProviders.createHandlerConfig({
155
+ providerId: provider.id,
156
+ modelId: provider.defaultModel,
157
+ }).routingProviderId;
158
+ const routedProviderExists =
159
+ typeof routedProviderId === "string" && hasProvider(routedProviderId);
160
+ if (!providerExists && !routedProviderExists) {
161
+ throw new Error(
162
+ `Provider "${provider.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`,
163
+ );
164
+ }
165
+ }
166
+ }
167
+ }
168
+
169
+ export function createLlmsSdk(config: LlmsConfig): LlmsSdk {
170
+ return new DefaultLlmsSdk(config);
171
+ }
@@ -0,0 +1,121 @@
1
+ import type {
2
+ ApiHandler,
3
+ BuiltInProviderId,
4
+ HandlerFactory,
5
+ LazyHandlerFactory,
6
+ ModelCollection,
7
+ ModelInfo,
8
+ CatalogProviderCapability as ModelProviderCapability,
9
+ ProviderClient,
10
+ ProviderConfig,
11
+ ProviderInfo,
12
+ ProviderProtocol,
13
+ } from "@clinebot/llms";
14
+ import type { ProviderCapability } from "./provider-settings";
15
+
16
+ export type ProviderConfigDefaults = Omit<
17
+ ProviderConfig,
18
+ "providerId" | "modelId"
19
+ >;
20
+
21
+ export interface ProviderSelectionConfig {
22
+ id: string;
23
+ models: string[];
24
+ defaultModel?: string;
25
+ builtinProviderId?: BuiltInProviderId;
26
+ apiKey?: string;
27
+ apiKeyEnv?: string;
28
+ baseUrl?: string;
29
+ headers?: Record<string, string>;
30
+ timeoutMs?: number;
31
+ capabilities?: ProviderCapability[];
32
+ settings?: ProviderConfigDefaults;
33
+ }
34
+
35
+ export interface AdditionalModelConfig {
36
+ providerId: string;
37
+ modelId: string;
38
+ info: ModelInfo;
39
+ }
40
+
41
+ export interface CustomProviderConfig {
42
+ collection: ModelCollection;
43
+ defaults?: ProviderConfigDefaults;
44
+ handlerFactory?: HandlerFactory;
45
+ asyncHandlerFactory?: LazyHandlerFactory;
46
+ }
47
+
48
+ export interface LlmsConfig {
49
+ providers: ProviderSelectionConfig[];
50
+ models?: AdditionalModelConfig[];
51
+ customProviders?: CustomProviderConfig[];
52
+ }
53
+
54
+ export interface CreateHandlerInput {
55
+ providerId: string;
56
+ modelId?: string;
57
+ overrides?: ProviderConfigDefaults;
58
+ }
59
+
60
+ export interface RegisteredProviderSummary {
61
+ id: string;
62
+ models: string[];
63
+ defaultModel: string;
64
+ }
65
+
66
+ export interface BuiltInProviderSummary
67
+ extends Pick<
68
+ ProviderInfo,
69
+ | "id"
70
+ | "name"
71
+ | "description"
72
+ | "protocol"
73
+ | "baseUrl"
74
+ | "capabilities"
75
+ | "env"
76
+ > {
77
+ models: string[];
78
+ defaultModel: string;
79
+ modelCount: number;
80
+ }
81
+
82
+ export interface RegisterBuiltinProviderInput {
83
+ id: string;
84
+ builtinProviderId: BuiltInProviderId;
85
+ models: Record<string, ModelInfo>;
86
+ name?: string;
87
+ description?: string;
88
+ protocol?: ProviderProtocol;
89
+ baseUrl?: string;
90
+ client?: ProviderClient;
91
+ capabilities?: ModelProviderCapability[];
92
+ env?: string[];
93
+ defaultModel?: string;
94
+ defaults?: ProviderConfigDefaults;
95
+ exposeModels?: string[];
96
+ }
97
+
98
+ export interface RegisterProviderInput extends CustomProviderConfig {
99
+ exposeModels?: string[];
100
+ defaultModel?: string;
101
+ }
102
+
103
+ export interface RegisterModelInput {
104
+ providerId: string;
105
+ modelId: string;
106
+ info: ModelInfo;
107
+ }
108
+
109
+ export interface LlmsSdk {
110
+ createHandler(input: CreateHandlerInput): ApiHandler;
111
+ createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler>;
112
+ registerProvider(input: RegisterProviderInput): void;
113
+ registerBuiltinProvider(input: RegisterBuiltinProviderInput): void;
114
+ registerModel(input: RegisterModelInput): void;
115
+ getProviders(): RegisteredProviderSummary[];
116
+ getBuiltInProviderIds(): BuiltInProviderId[];
117
+ getBuiltInProviders(): Promise<BuiltInProviderSummary[]>;
118
+ getModels(providerId: string): string[];
119
+ isProviderConfigured(providerId: string): boolean;
120
+ isModelConfigured(providerId: string, modelId: string): boolean;
121
+ }