@clinebot/core 0.0.35 → 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 (335) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +53 -39
  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 +4 -3
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  23. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  24. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  25. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  27. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  28. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  29. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  30. package/dist/extensions/context/compaction.d.ts.map +1 -1
  31. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  32. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  33. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  34. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  35. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  36. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  37. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  38. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  39. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  40. package/dist/extensions/plugin-sandbox-bootstrap.js +211 -211
  41. package/dist/extensions/tools/definitions.d.ts +1 -1
  42. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  43. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  44. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  45. package/dist/extensions/tools/executors/search.d.ts +1 -1
  46. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  47. package/dist/extensions/tools/index.d.ts +2 -0
  48. package/dist/extensions/tools/index.d.ts.map +1 -1
  49. package/dist/extensions/tools/presets.d.ts +26 -43
  50. package/dist/extensions/tools/presets.d.ts.map +1 -1
  51. package/dist/extensions/tools/runtime.d.ts +25 -0
  52. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  53. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  54. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  55. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  56. package/dist/hooks/hook-file-hooks.d.ts +4 -1
  57. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  58. package/dist/hooks/index.d.ts +0 -1
  59. package/dist/hooks/index.d.ts.map +1 -1
  60. package/dist/hooks/subprocess.d.ts +8 -1
  61. package/dist/hooks/subprocess.d.ts.map +1 -1
  62. package/dist/hub/browser-websocket.d.ts +18 -0
  63. package/dist/hub/browser-websocket.d.ts.map +1 -0
  64. package/dist/hub/client.d.ts +45 -0
  65. package/dist/hub/client.d.ts.map +1 -0
  66. package/dist/hub/connect.d.ts +15 -0
  67. package/dist/hub/connect.d.ts.map +1 -0
  68. package/dist/hub/daemon-entry.d.ts +2 -0
  69. package/dist/hub/daemon-entry.d.ts.map +1 -0
  70. package/dist/hub/daemon-entry.js +1045 -0
  71. package/dist/hub/daemon.d.ts +5 -0
  72. package/dist/hub/daemon.d.ts.map +1 -0
  73. package/dist/hub/defaults.d.ts +13 -0
  74. package/dist/hub/defaults.d.ts.map +1 -0
  75. package/dist/hub/discovery.d.ts +29 -0
  76. package/dist/hub/discovery.d.ts.map +1 -0
  77. package/dist/hub/index.d.ts +15 -0
  78. package/dist/hub/index.d.ts.map +1 -0
  79. package/dist/hub/index.js +1044 -0
  80. package/dist/hub/native-transport.d.ts +17 -0
  81. package/dist/hub/native-transport.d.ts.map +1 -0
  82. package/dist/hub/runtime-handlers.d.ts +11 -0
  83. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  84. package/dist/hub/server.d.ts +86 -0
  85. package/dist/hub/server.d.ts.map +1 -0
  86. package/dist/hub/session-client.d.ts +87 -0
  87. package/dist/hub/session-client.d.ts.map +1 -0
  88. package/dist/hub/start-shared-server.d.ts +19 -0
  89. package/dist/hub/start-shared-server.d.ts.map +1 -0
  90. package/dist/hub/transport.d.ts +8 -0
  91. package/dist/hub/transport.d.ts.map +1 -0
  92. package/dist/hub/ui-client.d.ts +44 -0
  93. package/dist/hub/ui-client.d.ts.map +1 -0
  94. package/dist/hub/workspace.d.ts +4 -0
  95. package/dist/hub/workspace.d.ts.map +1 -0
  96. package/dist/index.d.ts +26 -15
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +498 -476
  99. package/dist/llms/configured-provider-registry.d.ts +28 -0
  100. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  101. package/dist/llms/provider-defaults.d.ts +27 -0
  102. package/dist/llms/provider-defaults.d.ts.map +1 -0
  103. package/dist/llms/provider-settings.d.ts +202 -0
  104. package/dist/llms/provider-settings.d.ts.map +1 -0
  105. package/dist/llms/runtime-config.d.ts +4 -0
  106. package/dist/llms/runtime-config.d.ts.map +1 -0
  107. package/dist/llms/runtime-registry.d.ts +20 -0
  108. package/dist/llms/runtime-registry.d.ts.map +1 -0
  109. package/dist/llms/runtime-types.d.ts +85 -0
  110. package/dist/llms/runtime-types.d.ts.map +1 -0
  111. package/dist/runtime/host.d.ts +1 -2
  112. package/dist/runtime/host.d.ts.map +1 -1
  113. package/dist/runtime/rules.d.ts +1 -0
  114. package/dist/runtime/rules.d.ts.map +1 -1
  115. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  116. package/dist/runtime/runtime-host.d.ts +22 -24
  117. package/dist/runtime/runtime-host.d.ts.map +1 -1
  118. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  119. package/dist/runtime/session-runtime.d.ts +1 -19
  120. package/dist/runtime/session-runtime.d.ts.map +1 -1
  121. package/dist/services/global-settings.d.ts +12 -0
  122. package/dist/services/global-settings.d.ts.map +1 -0
  123. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  124. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  125. package/dist/services/plugin-tools.d.ts +16 -0
  126. package/dist/services/plugin-tools.d.ts.map +1 -0
  127. package/dist/services/providers/local-provider-registry.d.ts +4 -4
  128. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  129. package/dist/services/providers/local-provider-service.d.ts +13 -13
  130. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  131. package/dist/services/session-data.d.ts +1 -1
  132. package/dist/services/session-data.d.ts.map +1 -1
  133. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  134. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  135. package/dist/services/telemetry/index.js +28 -15
  136. package/dist/services/workspace-manifest.d.ts +11 -0
  137. package/dist/services/workspace-manifest.d.ts.map +1 -1
  138. package/dist/session/persistence-service.d.ts +11 -23
  139. package/dist/session/persistence-service.d.ts.map +1 -1
  140. package/dist/session/session-manifest-store.d.ts +22 -0
  141. package/dist/session/session-manifest-store.d.ts.map +1 -0
  142. package/dist/session/session-row.d.ts +93 -0
  143. package/dist/session/session-row.d.ts.map +1 -0
  144. package/dist/session/session-service.d.ts +2 -102
  145. package/dist/session/session-service.d.ts.map +1 -1
  146. package/dist/session/subagent-session-manager.d.ts +36 -0
  147. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  148. package/dist/session/team-persistence-store.d.ts +24 -0
  149. package/dist/session/team-persistence-store.d.ts.map +1 -0
  150. package/dist/transports/hub.d.ts +47 -0
  151. package/dist/transports/hub.d.ts.map +1 -0
  152. package/dist/transports/local.d.ts +10 -6
  153. package/dist/transports/local.d.ts.map +1 -1
  154. package/dist/transports/remote.d.ts +10 -0
  155. package/dist/transports/remote.d.ts.map +1 -0
  156. package/dist/transports/runtime-host-support.d.ts +3 -2
  157. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  158. package/dist/types/chat-schema.d.ts +10 -12
  159. package/dist/types/chat-schema.d.ts.map +1 -1
  160. package/dist/types/config.d.ts +8 -7
  161. package/dist/types/config.d.ts.map +1 -1
  162. package/dist/types/provider-settings.d.ts +4 -5
  163. package/dist/types/provider-settings.d.ts.map +1 -1
  164. package/dist/types/session.d.ts +2 -1
  165. package/dist/types/session.d.ts.map +1 -1
  166. package/dist/types.d.ts +8 -1
  167. package/dist/types.d.ts.map +1 -1
  168. package/package.json +20 -6
  169. package/src/ClineCore.ts +68 -40
  170. package/src/account/index.ts +3 -3
  171. package/src/account/rpc.ts +12 -12
  172. package/src/cron/index.ts +5 -0
  173. package/src/cron/resource-limiter.ts +46 -0
  174. package/src/cron/schedule-command-service.ts +193 -0
  175. package/src/cron/schedule-service.ts +703 -0
  176. package/src/cron/scheduler.ts +637 -0
  177. package/src/cron/sqlite-schedule-store.ts +708 -0
  178. package/src/extensions/config/agent-config-loader.ts +17 -7
  179. package/src/extensions/config/runtime-commands.ts +6 -0
  180. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  181. package/src/extensions/context/agentic-compaction.ts +3 -3
  182. package/src/extensions/context/basic-compaction.ts +2 -2
  183. package/src/extensions/context/compaction-shared.ts +5 -4
  184. package/src/extensions/context/compaction.ts +3 -3
  185. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  186. package/src/extensions/plugin/plugin-loader.ts +48 -4
  187. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  188. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  189. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  190. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  191. package/src/extensions/tools/definitions.ts +30 -49
  192. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  193. package/src/extensions/tools/executors/search.ts +195 -3
  194. package/src/extensions/tools/index.ts +10 -0
  195. package/src/extensions/tools/presets.ts +31 -46
  196. package/src/extensions/tools/runtime.ts +261 -0
  197. package/src/extensions/tools/schemas.ts +4 -2
  198. package/src/extensions/tools/team/team-tools.ts +21 -0
  199. package/src/hooks/hook-file-hooks.ts +8 -2
  200. package/src/hooks/index.ts +0 -7
  201. package/src/hooks/subprocess-runner.ts +1 -1
  202. package/src/hooks/subprocess.ts +9 -0
  203. package/src/hub/browser-websocket.ts +137 -0
  204. package/src/hub/client.ts +574 -0
  205. package/src/hub/connect.ts +156 -0
  206. package/src/hub/daemon-entry.ts +87 -0
  207. package/src/hub/daemon.ts +181 -0
  208. package/src/hub/defaults.ts +43 -0
  209. package/src/hub/discovery.ts +247 -0
  210. package/src/hub/index.ts +14 -0
  211. package/src/hub/native-transport.ts +31 -0
  212. package/src/hub/runtime-handlers.ts +140 -0
  213. package/src/hub/server.ts +1888 -0
  214. package/src/hub/session-client.ts +460 -0
  215. package/src/hub/start-shared-server.ts +58 -0
  216. package/src/hub/transport.ts +14 -0
  217. package/src/hub/ui-client.ts +122 -0
  218. package/src/hub/workspace.ts +19 -0
  219. package/src/index.ts +124 -68
  220. package/src/llms/configured-provider-registry.ts +193 -0
  221. package/src/llms/provider-defaults.ts +637 -0
  222. package/src/llms/provider-settings.ts +263 -0
  223. package/src/llms/runtime-config.ts +43 -0
  224. package/src/llms/runtime-registry.ts +171 -0
  225. package/src/llms/runtime-types.ts +121 -0
  226. package/src/runtime/host.ts +107 -269
  227. package/src/runtime/index.ts +1 -0
  228. package/src/runtime/rules.ts +12 -0
  229. package/src/runtime/runtime-builder.ts +24 -8
  230. package/src/runtime/runtime-host.ts +89 -61
  231. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  232. package/src/runtime/session-runtime.ts +0 -24
  233. package/src/services/global-settings.ts +122 -0
  234. package/src/services/local-runtime-bootstrap.ts +51 -13
  235. package/src/services/plugin-tools.ts +85 -0
  236. package/src/services/providers/local-provider-registry.ts +6 -6
  237. package/src/services/providers/local-provider-service.ts +42 -37
  238. package/src/services/session-data.ts +15 -9
  239. package/src/services/storage/provider-settings-legacy-migration.ts +6 -4
  240. package/src/services/storage/provider-settings-manager.ts +1 -1
  241. package/src/services/workspace-manifest.ts +18 -0
  242. package/src/session/file-session-service.ts +1 -1
  243. package/src/session/index.ts +6 -27
  244. package/src/session/persistence-service.ts +119 -504
  245. package/src/session/session-manifest-store.ts +158 -0
  246. package/src/session/session-row.ts +199 -0
  247. package/src/session/session-service.ts +17 -376
  248. package/src/session/session-team-coordination.ts +1 -1
  249. package/src/session/subagent-session-manager.ts +397 -0
  250. package/src/session/team-persistence-store.ts +176 -0
  251. package/src/transports/hub.ts +656 -0
  252. package/src/transports/local.ts +135 -40
  253. package/src/transports/remote.ts +26 -0
  254. package/src/transports/runtime-host-support.ts +63 -9
  255. package/src/types/chat-schema.ts +4 -5
  256. package/src/types/config.ts +8 -7
  257. package/src/types/provider-settings.ts +11 -7
  258. package/src/types/session.ts +2 -4
  259. package/src/types.ts +27 -1
  260. package/dist/hooks/persistent.d.ts +0 -64
  261. package/dist/hooks/persistent.d.ts.map +0 -1
  262. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  263. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  264. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  265. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  266. package/dist/session/rpc-session-service.d.ts +0 -16
  267. package/dist/session/rpc-session-service.d.ts.map +0 -1
  268. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  269. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  270. package/dist/transports/rpc.d.ts +0 -51
  271. package/dist/transports/rpc.d.ts.map +0 -1
  272. package/src/ClineCore.test.ts +0 -226
  273. package/src/account/cline-account-service.test.ts +0 -185
  274. package/src/account/featurebase-token.test.ts +0 -175
  275. package/src/account/rpc.test.ts +0 -63
  276. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  277. package/src/auth/client.test.ts +0 -69
  278. package/src/auth/cline.test.ts +0 -267
  279. package/src/auth/codex.test.ts +0 -170
  280. package/src/auth/oca.test.ts +0 -340
  281. package/src/auth/server.test.ts +0 -287
  282. package/src/auth/utils.test.ts +0 -128
  283. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  284. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  285. package/src/extensions/config/runtime-commands.test.ts +0 -115
  286. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  287. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  288. package/src/extensions/context/compaction.test.ts +0 -483
  289. package/src/extensions/mcp/config-loader.test.ts +0 -238
  290. package/src/extensions/mcp/manager.test.ts +0 -105
  291. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  292. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  293. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  294. package/src/extensions/tools/definitions.test.ts +0 -780
  295. package/src/extensions/tools/executors/bash.test.ts +0 -87
  296. package/src/extensions/tools/executors/editor.test.ts +0 -35
  297. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  298. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  299. package/src/extensions/tools/presets.test.ts +0 -70
  300. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  301. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  302. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  303. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  304. package/src/hooks/hook-file-hooks.test.ts +0 -311
  305. package/src/hooks/persistent.ts +0 -661
  306. package/src/runtime/history.test.ts +0 -114
  307. package/src/runtime/host.test.ts +0 -230
  308. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  309. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  310. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  311. package/src/runtime/rpc-spawn-lease.ts +0 -156
  312. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  313. package/src/runtime/runtime-builder.test.ts +0 -615
  314. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  315. package/src/runtime/runtime-parity.test.ts +0 -143
  316. package/src/services/providers/local-provider-service.test.ts +0 -1062
  317. package/src/services/session-data.test.ts +0 -160
  318. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  319. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  320. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  322. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  323. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  324. package/src/services/telemetry/distinct-id.test.ts +0 -57
  325. package/src/services/workspace/file-indexer.d.ts +0 -11
  326. package/src/services/workspace/file-indexer.test.ts +0 -156
  327. package/src/services/workspace/mention-enricher.test.ts +0 -106
  328. package/src/session/persistence-service.test.ts +0 -300
  329. package/src/session/rpc-session-service.ts +0 -114
  330. package/src/session/session-service.team-persistence.test.ts +0 -48
  331. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  332. package/src/transports/local.e2e.test.ts +0 -380
  333. package/src/transports/local.test.ts +0 -2559
  334. package/src/transports/rpc.test.ts +0 -82
  335. package/src/transports/rpc.ts +0 -665
@@ -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
+ }