@clinebot/core 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +362 -39
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/cline-account-service.d.ts.map +1 -1
  5. package/dist/account/index.d.ts +1 -1
  6. package/dist/account/index.d.ts.map +1 -1
  7. package/dist/account/rpc.d.ts +6 -6
  8. package/dist/account/rpc.d.ts.map +1 -1
  9. package/dist/cron/cron-event-ingress.d.ts +38 -0
  10. package/dist/cron/cron-event-ingress.d.ts.map +1 -0
  11. package/dist/cron/cron-materializer.d.ts +36 -0
  12. package/dist/cron/cron-materializer.d.ts.map +1 -0
  13. package/dist/cron/cron-reconciler.d.ts +62 -0
  14. package/dist/cron/cron-reconciler.d.ts.map +1 -0
  15. package/dist/cron/cron-report-writer.d.ts +41 -0
  16. package/dist/cron/cron-report-writer.d.ts.map +1 -0
  17. package/dist/cron/cron-runner.d.ts +43 -0
  18. package/dist/cron/cron-runner.d.ts.map +1 -0
  19. package/dist/cron/cron-schema.d.ts +3 -0
  20. package/dist/cron/cron-schema.d.ts.map +1 -0
  21. package/dist/cron/cron-service.d.ts +57 -0
  22. package/dist/cron/cron-service.d.ts.map +1 -0
  23. package/dist/cron/cron-spec-parser.d.ts +27 -0
  24. package/dist/cron/cron-spec-parser.d.ts.map +1 -0
  25. package/dist/cron/cron-watcher.d.ts +23 -0
  26. package/dist/cron/cron-watcher.d.ts.map +1 -0
  27. package/dist/cron/resource-limiter.d.ts +9 -0
  28. package/dist/cron/resource-limiter.d.ts.map +1 -0
  29. package/dist/cron/schedule-command-service.d.ts +10 -0
  30. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  31. package/dist/cron/schedule-service.d.ts +100 -0
  32. package/dist/cron/schedule-service.d.ts.map +1 -0
  33. package/dist/cron/scheduler.d.ts +68 -0
  34. package/dist/cron/scheduler.d.ts.map +1 -0
  35. package/dist/cron/sqlite-cron-store.d.ts +230 -0
  36. package/dist/cron/sqlite-cron-store.d.ts.map +1 -0
  37. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  38. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  39. package/dist/extensions/config/agent-config-loader.d.ts +4 -3
  40. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  41. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  42. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  43. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  44. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  45. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  46. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  47. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  48. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  49. package/dist/extensions/context/compaction.d.ts.map +1 -1
  50. package/dist/extensions/plugin/plugin-config-loader.d.ts +15 -2
  51. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  52. package/dist/extensions/plugin/plugin-loader.d.ts +13 -7
  53. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  54. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  55. package/dist/extensions/plugin/plugin-sandbox.d.ts +21 -2
  56. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  57. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  58. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  59. package/dist/extensions/plugin-sandbox-bootstrap.js +237 -276
  60. package/dist/extensions/tools/constants.d.ts +1 -0
  61. package/dist/extensions/tools/constants.d.ts.map +1 -1
  62. package/dist/extensions/tools/definitions.d.ts +3 -4
  63. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  64. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  65. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  66. package/dist/extensions/tools/executors/editor.d.ts.map +1 -1
  67. package/dist/extensions/tools/executors/search.d.ts +1 -1
  68. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  69. package/dist/extensions/tools/helpers.d.ts +1 -0
  70. package/dist/extensions/tools/helpers.d.ts.map +1 -1
  71. package/dist/extensions/tools/index.d.ts +3 -2
  72. package/dist/extensions/tools/index.d.ts.map +1 -1
  73. package/dist/extensions/tools/presets.d.ts +27 -44
  74. package/dist/extensions/tools/presets.d.ts.map +1 -1
  75. package/dist/extensions/tools/runtime.d.ts +25 -0
  76. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  77. package/dist/extensions/tools/schemas.d.ts +25 -3
  78. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  79. package/dist/extensions/tools/team/delegated-agent.d.ts +2 -2
  80. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -1
  81. package/dist/extensions/tools/team/multi-agent.d.ts +7 -3
  82. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -1
  83. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  84. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  85. package/dist/extensions/tools/types.d.ts +0 -5
  86. package/dist/extensions/tools/types.d.ts.map +1 -1
  87. package/dist/hooks/hook-bridge.d.ts +118 -0
  88. package/dist/hooks/hook-bridge.d.ts.map +1 -0
  89. package/dist/hooks/hook-file-hooks.d.ts +6 -2
  90. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  91. package/dist/hooks/hook-registry.d.ts +16 -0
  92. package/dist/hooks/hook-registry.d.ts.map +1 -0
  93. package/dist/hooks/index.d.ts +0 -1
  94. package/dist/hooks/index.d.ts.map +1 -1
  95. package/dist/hooks/subprocess.d.ts +8 -1
  96. package/dist/hooks/subprocess.d.ts.map +1 -1
  97. package/dist/hub/browser-websocket.d.ts +18 -0
  98. package/dist/hub/browser-websocket.d.ts.map +1 -0
  99. package/dist/hub/client.d.ts +51 -0
  100. package/dist/hub/client.d.ts.map +1 -0
  101. package/dist/hub/connect.d.ts +15 -0
  102. package/dist/hub/connect.d.ts.map +1 -0
  103. package/dist/hub/daemon-entry.d.ts +2 -0
  104. package/dist/hub/daemon-entry.d.ts.map +1 -0
  105. package/dist/hub/daemon-entry.js +1305 -0
  106. package/dist/hub/daemon.d.ts +5 -0
  107. package/dist/hub/daemon.d.ts.map +1 -0
  108. package/dist/hub/defaults.d.ts +17 -0
  109. package/dist/hub/defaults.d.ts.map +1 -0
  110. package/dist/hub/discovery.d.ts +29 -0
  111. package/dist/hub/discovery.d.ts.map +1 -0
  112. package/dist/hub/index.d.ts +15 -0
  113. package/dist/hub/index.d.ts.map +1 -0
  114. package/dist/hub/index.js +1294 -0
  115. package/dist/hub/native-transport.d.ts +17 -0
  116. package/dist/hub/native-transport.d.ts.map +1 -0
  117. package/dist/hub/runtime-handlers.d.ts +11 -0
  118. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  119. package/dist/hub/server.d.ts +104 -0
  120. package/dist/hub/server.d.ts.map +1 -0
  121. package/dist/hub/session-client.d.ts +90 -0
  122. package/dist/hub/session-client.d.ts.map +1 -0
  123. package/dist/hub/start-shared-server.d.ts +19 -0
  124. package/dist/hub/start-shared-server.d.ts.map +1 -0
  125. package/dist/hub/transport.d.ts +8 -0
  126. package/dist/hub/transport.d.ts.map +1 -0
  127. package/dist/hub/ui-client.d.ts +45 -0
  128. package/dist/hub/ui-client.d.ts.map +1 -0
  129. package/dist/hub/workspace.d.ts +4 -0
  130. package/dist/hub/workspace.d.ts.map +1 -0
  131. package/dist/index.d.ts +29 -16
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +782 -471
  134. package/dist/llms/cline-recommended-models.d.ts +20 -0
  135. package/dist/llms/cline-recommended-models.d.ts.map +1 -0
  136. package/dist/llms/configured-provider-registry.d.ts +28 -0
  137. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  138. package/dist/llms/handler-factory.d.ts +16 -0
  139. package/dist/llms/handler-factory.d.ts.map +1 -0
  140. package/dist/llms/provider-defaults.d.ts +27 -0
  141. package/dist/llms/provider-defaults.d.ts.map +1 -0
  142. package/dist/llms/provider-settings.d.ts +245 -0
  143. package/dist/llms/provider-settings.d.ts.map +1 -0
  144. package/dist/llms/runtime-config.d.ts +4 -0
  145. package/dist/llms/runtime-config.d.ts.map +1 -0
  146. package/dist/llms/runtime-registry.d.ts +20 -0
  147. package/dist/llms/runtime-registry.d.ts.map +1 -0
  148. package/dist/llms/runtime-types.d.ts +85 -0
  149. package/dist/llms/runtime-types.d.ts.map +1 -0
  150. package/dist/runtime/agent-config-adapter.d.ts +148 -0
  151. package/dist/runtime/agent-config-adapter.d.ts.map +1 -0
  152. package/dist/runtime/agent-runtime-config-builder.d.ts +96 -0
  153. package/dist/runtime/agent-runtime-config-builder.d.ts.map +1 -0
  154. package/dist/runtime/history.d.ts +6 -0
  155. package/dist/runtime/history.d.ts.map +1 -1
  156. package/dist/runtime/host.d.ts +1 -2
  157. package/dist/runtime/host.d.ts.map +1 -1
  158. package/dist/runtime/loop-detection.d.ts +59 -0
  159. package/dist/runtime/loop-detection.d.ts.map +1 -0
  160. package/dist/runtime/mistake-tracker.d.ts +69 -0
  161. package/dist/runtime/mistake-tracker.d.ts.map +1 -0
  162. package/dist/runtime/rules.d.ts +1 -0
  163. package/dist/runtime/rules.d.ts.map +1 -1
  164. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  165. package/dist/runtime/runtime-event-adapter.d.ts +102 -0
  166. package/dist/runtime/runtime-event-adapter.d.ts.map +1 -0
  167. package/dist/runtime/runtime-host.d.ts +49 -26
  168. package/dist/runtime/runtime-host.d.ts.map +1 -1
  169. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  170. package/dist/runtime/session-runtime-orchestrator.d.ts +261 -0
  171. package/dist/runtime/session-runtime-orchestrator.d.ts.map +1 -0
  172. package/dist/runtime/session-runtime.d.ts +16 -21
  173. package/dist/runtime/session-runtime.d.ts.map +1 -1
  174. package/dist/runtime/user-input-builder.d.ts +24 -0
  175. package/dist/runtime/user-input-builder.d.ts.map +1 -0
  176. package/dist/services/global-settings.d.ts +12 -0
  177. package/dist/services/global-settings.d.ts.map +1 -0
  178. package/dist/services/index.js +28 -0
  179. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  180. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  181. package/dist/services/plugin-tools.d.ts +16 -0
  182. package/dist/services/plugin-tools.d.ts.map +1 -0
  183. package/dist/services/providers/local-provider-registry.d.ts +199 -23
  184. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  185. package/dist/services/providers/local-provider-service.d.ts +15 -13
  186. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  187. package/dist/services/session-data.d.ts +1 -1
  188. package/dist/services/session-data.d.ts.map +1 -1
  189. package/dist/services/session-telemetry.d.ts +7 -2
  190. package/dist/services/session-telemetry.d.ts.map +1 -1
  191. package/dist/services/storage/file-team-store.d.ts.map +1 -1
  192. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  193. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  194. package/dist/services/storage/provider-settings-manager.d.ts +1 -0
  195. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -1
  196. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -1
  197. package/dist/services/workspace-manifest.d.ts +11 -0
  198. package/dist/services/workspace-manifest.d.ts.map +1 -1
  199. package/dist/session/conversation-store.d.ts +30 -0
  200. package/dist/session/conversation-store.d.ts.map +1 -0
  201. package/dist/session/message-builder.d.ts +65 -0
  202. package/dist/session/message-builder.d.ts.map +1 -0
  203. package/dist/session/persistence-service.d.ts +11 -23
  204. package/dist/session/persistence-service.d.ts.map +1 -1
  205. package/dist/session/session-manifest-store.d.ts +22 -0
  206. package/dist/session/session-manifest-store.d.ts.map +1 -0
  207. package/dist/session/session-manifest.d.ts +1 -1
  208. package/dist/session/session-row.d.ts +93 -0
  209. package/dist/session/session-row.d.ts.map +1 -0
  210. package/dist/session/session-service.d.ts +2 -102
  211. package/dist/session/session-service.d.ts.map +1 -1
  212. package/dist/session/subagent-session-manager.d.ts +36 -0
  213. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  214. package/dist/session/team-persistence-store.d.ts +24 -0
  215. package/dist/session/team-persistence-store.d.ts.map +1 -0
  216. package/dist/transports/hub.d.ts +58 -0
  217. package/dist/transports/hub.d.ts.map +1 -0
  218. package/dist/transports/local.d.ts +23 -9
  219. package/dist/transports/local.d.ts.map +1 -1
  220. package/dist/transports/remote.d.ts +10 -0
  221. package/dist/transports/remote.d.ts.map +1 -0
  222. package/dist/transports/runtime-host-support.d.ts +3 -2
  223. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  224. package/dist/types/chat-schema.d.ts +15 -17
  225. package/dist/types/chat-schema.d.ts.map +1 -1
  226. package/dist/types/config.d.ts +17 -7
  227. package/dist/types/config.d.ts.map +1 -1
  228. package/dist/types/events.d.ts +7 -6
  229. package/dist/types/events.d.ts.map +1 -1
  230. package/dist/types/provider-settings.d.ts +4 -5
  231. package/dist/types/provider-settings.d.ts.map +1 -1
  232. package/dist/types/session.d.ts +7 -3
  233. package/dist/types/session.d.ts.map +1 -1
  234. package/dist/types.d.ts +11 -4
  235. package/dist/types.d.ts.map +1 -1
  236. package/package.json +20 -6
  237. package/src/ClineCore.ts +757 -44
  238. package/src/account/cline-account-service.ts +44 -6
  239. package/src/account/index.ts +3 -3
  240. package/src/account/rpc.ts +12 -12
  241. package/src/cron/cron-event-ingress.ts +357 -0
  242. package/src/cron/cron-materializer.ts +97 -0
  243. package/src/cron/cron-reconciler.ts +241 -0
  244. package/src/cron/cron-report-writer.ts +153 -0
  245. package/src/cron/cron-runner.ts +495 -0
  246. package/src/cron/cron-schema.ts +127 -0
  247. package/src/cron/cron-service.ts +163 -0
  248. package/src/cron/cron-spec-parser.ts +489 -0
  249. package/src/cron/cron-watcher.ts +102 -0
  250. package/src/cron/index.ts +15 -0
  251. package/src/cron/resource-limiter.ts +46 -0
  252. package/src/cron/schedule-command-service.ts +193 -0
  253. package/src/cron/schedule-service.ts +703 -0
  254. package/src/cron/scheduler.ts +772 -0
  255. package/src/cron/sqlite-cron-store.ts +1286 -0
  256. package/src/cron/sqlite-schedule-store.ts +708 -0
  257. package/src/extensions/config/agent-config-loader.ts +17 -7
  258. package/src/extensions/config/runtime-commands.ts +6 -0
  259. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  260. package/src/extensions/context/agentic-compaction.ts +3 -3
  261. package/src/extensions/context/basic-compaction.ts +2 -2
  262. package/src/extensions/context/compaction-shared.ts +5 -4
  263. package/src/extensions/context/compaction.ts +3 -3
  264. package/src/extensions/plugin/plugin-config-loader.ts +37 -2
  265. package/src/extensions/plugin/plugin-loader.ts +69 -9
  266. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  267. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +243 -39
  268. package/src/extensions/plugin/plugin-sandbox.ts +173 -29
  269. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  270. package/src/extensions/tools/constants.ts +2 -0
  271. package/src/extensions/tools/definitions.ts +61 -71
  272. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  273. package/src/extensions/tools/executors/editor.ts +4 -3
  274. package/src/extensions/tools/executors/search.ts +195 -3
  275. package/src/extensions/tools/helpers.ts +24 -0
  276. package/src/extensions/tools/index.ts +11 -2
  277. package/src/extensions/tools/presets.ts +32 -47
  278. package/src/extensions/tools/runtime.ts +261 -0
  279. package/src/extensions/tools/schemas.ts +17 -20
  280. package/src/extensions/tools/team/delegated-agent.ts +8 -3
  281. package/src/extensions/tools/team/multi-agent.ts +135 -19
  282. package/src/extensions/tools/team/team-tools.ts +172 -91
  283. package/src/extensions/tools/types.ts +0 -6
  284. package/src/hooks/hook-bridge.ts +489 -0
  285. package/src/hooks/hook-file-hooks.ts +66 -5
  286. package/src/hooks/hook-registry.ts +257 -0
  287. package/src/hooks/index.ts +0 -7
  288. package/src/hooks/subprocess-runner.ts +1 -1
  289. package/src/hooks/subprocess.ts +9 -0
  290. package/src/hub/browser-websocket.ts +159 -0
  291. package/src/hub/client.ts +633 -0
  292. package/src/hub/connect.ts +156 -0
  293. package/src/hub/daemon-entry.ts +122 -0
  294. package/src/hub/daemon.ts +284 -0
  295. package/src/hub/defaults.ts +70 -0
  296. package/src/hub/discovery.ts +247 -0
  297. package/src/hub/index.ts +14 -0
  298. package/src/hub/native-transport.ts +31 -0
  299. package/src/hub/runtime-handlers.ts +141 -0
  300. package/src/hub/server.ts +2317 -0
  301. package/src/hub/session-client.ts +502 -0
  302. package/src/hub/start-shared-server.ts +61 -0
  303. package/src/hub/transport.ts +14 -0
  304. package/src/hub/ui-client.ts +126 -0
  305. package/src/hub/workspace.ts +19 -0
  306. package/src/index.ts +169 -68
  307. package/src/llms/cline-recommended-models.ts +167 -0
  308. package/src/llms/configured-provider-registry.ts +193 -0
  309. package/src/llms/handler-factory.ts +56 -0
  310. package/src/llms/provider-defaults.ts +653 -0
  311. package/src/llms/provider-settings.ts +310 -0
  312. package/src/llms/runtime-config.ts +43 -0
  313. package/src/llms/runtime-registry.ts +172 -0
  314. package/src/llms/runtime-types.ts +121 -0
  315. package/src/runtime/agent-config-adapter.ts +636 -0
  316. package/src/runtime/agent-runtime-config-builder.ts +205 -0
  317. package/src/runtime/error-feedback.ts +142 -0
  318. package/src/runtime/history.ts +137 -0
  319. package/src/runtime/host.ts +127 -267
  320. package/src/runtime/index.ts +1 -0
  321. package/src/runtime/loop-detection.ts +162 -0
  322. package/src/runtime/mistake-tracker.ts +221 -0
  323. package/src/runtime/rules.ts +12 -0
  324. package/src/runtime/runtime-builder.ts +85 -13
  325. package/src/runtime/runtime-event-adapter.ts +412 -0
  326. package/src/runtime/runtime-host.ts +134 -62
  327. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  328. package/src/runtime/session-runtime-orchestrator.ts +1253 -0
  329. package/src/runtime/session-runtime.ts +16 -26
  330. package/src/runtime/user-input-builder.ts +167 -0
  331. package/src/services/global-settings.ts +122 -0
  332. package/src/services/local-runtime-bootstrap.ts +175 -31
  333. package/src/services/plugin-tools.ts +86 -0
  334. package/src/services/providers/local-provider-registry.ts +277 -61
  335. package/src/services/providers/local-provider-service.ts +109 -44
  336. package/src/services/session-data.ts +18 -10
  337. package/src/services/session-telemetry.ts +6 -15
  338. package/src/services/storage/file-team-store.ts +1 -5
  339. package/src/services/storage/provider-settings-legacy-migration.ts +14 -51
  340. package/src/services/storage/provider-settings-manager.ts +17 -2
  341. package/src/services/storage/sqlite-team-store.ts +1 -5
  342. package/src/services/workspace-manifest.ts +18 -0
  343. package/src/session/conversation-store.ts +77 -0
  344. package/src/session/file-session-service.ts +1 -1
  345. package/src/session/index.ts +6 -27
  346. package/src/session/message-builder.ts +941 -0
  347. package/src/session/persistence-service.ts +119 -504
  348. package/src/session/session-manifest-store.ts +158 -0
  349. package/src/session/session-row.ts +199 -0
  350. package/src/session/session-service.ts +17 -376
  351. package/src/session/session-team-coordination.ts +1 -1
  352. package/src/session/subagent-session-manager.ts +397 -0
  353. package/src/session/team-persistence-store.ts +176 -0
  354. package/src/transports/hub.ts +1081 -0
  355. package/src/transports/local.ts +419 -93
  356. package/src/transports/remote.ts +27 -0
  357. package/src/transports/runtime-host-support.ts +63 -9
  358. package/src/types/chat-schema.ts +4 -5
  359. package/src/types/config.ts +17 -7
  360. package/src/types/events.ts +8 -6
  361. package/src/types/index.ts +3 -0
  362. package/src/types/provider-settings.ts +18 -7
  363. package/src/types/session.ts +7 -6
  364. package/src/types.ts +42 -2
  365. package/dist/hooks/persistent.d.ts +0 -64
  366. package/dist/hooks/persistent.d.ts.map +0 -1
  367. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  368. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  369. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  370. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  371. package/dist/services/telemetry/index.js +0 -15
  372. package/dist/session/rpc-session-service.d.ts +0 -16
  373. package/dist/session/rpc-session-service.d.ts.map +0 -1
  374. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  375. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  376. package/dist/transports/rpc.d.ts +0 -51
  377. package/dist/transports/rpc.d.ts.map +0 -1
  378. package/src/ClineCore.test.ts +0 -226
  379. package/src/account/cline-account-service.test.ts +0 -185
  380. package/src/account/featurebase-token.test.ts +0 -175
  381. package/src/account/rpc.test.ts +0 -63
  382. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  383. package/src/auth/client.test.ts +0 -69
  384. package/src/auth/cline.test.ts +0 -267
  385. package/src/auth/codex.test.ts +0 -170
  386. package/src/auth/oca.test.ts +0 -340
  387. package/src/auth/server.test.ts +0 -287
  388. package/src/auth/utils.test.ts +0 -128
  389. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  390. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  391. package/src/extensions/config/runtime-commands.test.ts +0 -115
  392. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  393. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  394. package/src/extensions/context/compaction.test.ts +0 -483
  395. package/src/extensions/mcp/config-loader.test.ts +0 -238
  396. package/src/extensions/mcp/manager.test.ts +0 -105
  397. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  398. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  399. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  400. package/src/extensions/tools/definitions.test.ts +0 -780
  401. package/src/extensions/tools/executors/bash.test.ts +0 -87
  402. package/src/extensions/tools/executors/editor.test.ts +0 -35
  403. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  404. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  405. package/src/extensions/tools/presets.test.ts +0 -70
  406. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  407. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  408. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  409. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  410. package/src/hooks/hook-file-hooks.test.ts +0 -311
  411. package/src/hooks/persistent.ts +0 -661
  412. package/src/runtime/history.test.ts +0 -114
  413. package/src/runtime/host.test.ts +0 -230
  414. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  415. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  416. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  417. package/src/runtime/rpc-spawn-lease.ts +0 -156
  418. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  419. package/src/runtime/runtime-builder.test.ts +0 -615
  420. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  421. package/src/runtime/runtime-parity.test.ts +0 -143
  422. package/src/services/providers/local-provider-service.test.ts +0 -1062
  423. package/src/services/session-data.test.ts +0 -160
  424. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  425. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  426. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  427. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  428. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  429. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  430. package/src/services/telemetry/distinct-id.test.ts +0 -57
  431. package/src/services/workspace/file-indexer.d.ts +0 -11
  432. package/src/services/workspace/file-indexer.test.ts +0 -156
  433. package/src/services/workspace/mention-enricher.test.ts +0 -106
  434. package/src/session/persistence-service.test.ts +0 -300
  435. package/src/session/rpc-session-service.ts +0 -114
  436. package/src/session/session-service.team-persistence.test.ts +0 -48
  437. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  438. package/src/transports/local.e2e.test.ts +0 -380
  439. package/src/transports/local.test.ts +0 -2559
  440. package/src/transports/rpc.test.ts +0 -82
  441. package/src/transports/rpc.ts +0 -665
@@ -1,23 +1,30 @@
1
1
  import * as LlmsModels from "@clinebot/llms";
2
- import * as LlmsProviders from "@clinebot/llms";
3
2
  import type {
4
- RpcAddProviderActionRequest,
5
- RpcOAuthProviderId,
6
- RpcProviderCapability,
7
- RpcProviderListItem,
8
- RpcProviderModel,
9
- RpcSaveProviderSettingsActionRequest,
3
+ AddProviderActionRequest,
4
+ OAuthProviderId,
5
+ ProviderCapability,
6
+ ProviderListItem,
7
+ ProviderModel,
8
+ SaveProviderSettingsActionRequest,
10
9
  } from "@clinebot/shared";
11
10
  import { createOAuthClientCallbacks } from "../../auth/client";
12
11
  import { loginClineOAuth } from "../../auth/cline";
13
12
  import { loginOpenAICodex } from "../../auth/codex";
14
13
  import { loginOcaOAuth } from "../../auth/oca";
14
+ import { resolveProviderConfig } from "../../llms/provider-defaults";
15
+ import type {
16
+ ModelInfo,
17
+ ProviderClient,
18
+ ProviderConfig,
19
+ ProviderProtocol,
20
+ ProviderSettings,
21
+ } from "../../llms/provider-settings";
15
22
  import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
16
23
  import {
17
24
  readModelsFile,
18
25
  registerCustomProvider,
19
26
  resolveModelsRegistryPath,
20
- toRpcProviderModel,
27
+ toProviderModel,
21
28
  writeModelsFile,
22
29
  } from "./local-provider-registry";
23
30
 
@@ -33,7 +40,9 @@ export interface UpdateLocalProviderRequest {
33
40
  models?: string[];
34
41
  defaultModelId?: string | null;
35
42
  modelsSourceUrl?: string | null;
36
- capabilities?: RpcProviderCapability[] | null;
43
+ protocol?: ProviderProtocol | null;
44
+ client?: ProviderClient | null;
45
+ capabilities?: ProviderCapability[] | null;
37
46
  }
38
47
 
39
48
  export interface DeleteLocalProviderRequest {
@@ -86,12 +95,12 @@ function stableColor(id: string): string {
86
95
  return palette[hash % palette.length];
87
96
  }
88
97
 
89
- function toSortedRpcProviderModels(
90
- modelMap: Record<string, LlmsProviders.ModelInfo>,
91
- ): RpcProviderModel[] {
98
+ function toSortedProviderModels(
99
+ modelMap: Record<string, ModelInfo>,
100
+ ): ProviderModel[] {
92
101
  return Object.entries(modelMap)
93
102
  .sort(([a], [b]) => a.localeCompare(b))
94
- .map(([modelId, info]) => toRpcProviderModel(modelId, info));
103
+ .map(([modelId, info]) => toProviderModel(modelId, info));
95
104
  }
96
105
 
97
106
  // --- Model ID parsing ---
@@ -163,14 +172,14 @@ async function fetchModelIdsFromSource(
163
172
 
164
173
  async function resolveProviderModelMap(
165
174
  providerId: string,
166
- config?: LlmsProviders.ProviderConfig,
167
- ): Promise<Record<string, LlmsProviders.ModelInfo>> {
175
+ config?: ProviderConfig,
176
+ ): Promise<Record<string, ModelInfo>> {
168
177
  const registeredModels = await LlmsModels.getModelsForProvider(providerId);
169
178
  if (!config) {
170
179
  return registeredModels;
171
180
  }
172
181
 
173
- const resolved = await LlmsProviders.resolveProviderConfig(
182
+ const resolved = await resolveProviderConfig(
174
183
  providerId,
175
184
  {
176
185
  loadPrivateOnAuth: true,
@@ -202,7 +211,7 @@ function normalizeHeaders(
202
211
 
203
212
  function buildProviderModels(
204
213
  modelIds: string[],
205
- capabilities: RpcProviderCapability[] | undefined,
214
+ capabilities: ProviderCapability[] | undefined,
206
215
  ) {
207
216
  const supportsVision = capabilities?.includes("vision") ?? false;
208
217
  const supportsReasoning = capabilities?.includes("reasoning") ?? false;
@@ -251,13 +260,14 @@ function removeProviderFromSettingsState(
251
260
  mutated = true;
252
261
  }
253
262
  if (mutated) manager.write(state);
263
+ LlmsModels.unregisterProvider(providerId);
254
264
  }
255
265
 
256
266
  // --- Public API ---
257
267
 
258
268
  export async function addLocalProvider(
259
269
  manager: ProviderSettingsManager,
260
- request: Omit<RpcAddProviderActionRequest, "action">,
270
+ request: Omit<AddProviderActionRequest, "action">,
261
271
  ): Promise<{
262
272
  providerId: string;
263
273
  settingsPath: string;
@@ -333,6 +343,8 @@ export async function addLocalProvider(
333
343
  headers: normalizedHeaders,
334
344
  timeout: request.timeoutMs,
335
345
  model: defaultModelId,
346
+ protocol: request.protocol,
347
+ client: request.client,
336
348
  },
337
349
  { setLastUsed: false },
338
350
  );
@@ -345,6 +357,8 @@ export async function addLocalProvider(
345
357
  name: providerName,
346
358
  baseUrl,
347
359
  defaultModelId,
360
+ protocol: request.protocol,
361
+ client: request.client,
348
362
  capabilities,
349
363
  modelsSourceUrl: sourceUrl,
350
364
  },
@@ -375,11 +389,40 @@ export async function updateLocalProvider(
375
389
 
376
390
  const modelsPath = resolveModelsRegistryPath(manager);
377
391
  const modelsState = await readModelsFile(modelsPath);
378
- const existingEntry = modelsState.providers[providerId];
392
+ let existingEntry = modelsState.providers[providerId];
379
393
  if (!existingEntry) {
380
- throw new Error(`provider "${providerId}" does not exist`);
381
- }
394
+ const existingSettings = manager.getProviderSettings(providerId);
395
+ if (!existingSettings) {
396
+ throw new Error(`provider "${providerId}" does not exist`);
397
+ }
398
+
399
+ const seedModelId =
400
+ uniqueTrimmed(request.models)[0] ?? existingSettings.model?.trim();
401
+ if (!seedModelId) {
402
+ throw new Error(
403
+ `provider "${providerId}" cannot be updated because no model is configured`,
404
+ );
405
+ }
382
406
 
407
+ // Ephemeral seed for the existing update path; final state is computed and written below.
408
+ existingEntry = {
409
+ provider: {
410
+ name: request.name?.trim() || titleCaseFromId(providerId),
411
+ baseUrl:
412
+ request.baseUrl?.trim() ?? existingSettings.baseUrl?.trim() ?? "",
413
+ defaultModelId: seedModelId,
414
+ protocol: existingSettings.protocol,
415
+ client: existingSettings.client,
416
+ capabilities: existingSettings.capabilities,
417
+ },
418
+ models: buildProviderModels([seedModelId], existingSettings.capabilities),
419
+ };
420
+ }
421
+ if (!existingEntry.provider) {
422
+ throw new Error(
423
+ `provider "${providerId}" cannot be updated because it is a model overlay (no provider metadata)`,
424
+ );
425
+ }
383
426
  const providerName =
384
427
  request.name?.trim() ?? existingEntry.provider.name.trim();
385
428
  if (!providerName) throw new Error("name is required");
@@ -394,6 +437,14 @@ export async function updateLocalProvider(
394
437
  : request.capabilities === null
395
438
  ? undefined
396
439
  : [...new Set(request.capabilities)];
440
+ const protocol =
441
+ request.protocol === undefined
442
+ ? existingEntry.provider.protocol
443
+ : (request.protocol ?? undefined);
444
+ const client =
445
+ request.client === undefined
446
+ ? existingEntry.provider.client
447
+ : (request.client ?? undefined);
397
448
 
398
449
  const explicitModels = uniqueTrimmed(request.models);
399
450
  const nextModelsSourceUrl =
@@ -403,7 +454,7 @@ export async function updateLocalProvider(
403
454
  const shouldRecomputeModels =
404
455
  request.models !== undefined ||
405
456
  (request.modelsSourceUrl !== undefined && !!nextModelsSourceUrl);
406
- const existingModelIds = Object.keys(existingEntry.models)
457
+ const existingModelIds = Object.keys(existingEntry.models ?? {})
407
458
  .map((id) => id.trim())
408
459
  .filter(Boolean);
409
460
  const modelIds = await resolveModelIds({
@@ -435,6 +486,10 @@ export async function updateLocalProvider(
435
486
  baseUrl,
436
487
  model: defaultModelId,
437
488
  };
489
+ if (protocol) nextSettings.protocol = protocol;
490
+ else delete nextSettings.protocol;
491
+ if (client) nextSettings.client = client;
492
+ else delete nextSettings.client;
438
493
  if (request.apiKey !== undefined) {
439
494
  const apiKey = request.apiKey?.trim() ?? "";
440
495
  if (apiKey) nextSettings.apiKey = apiKey;
@@ -460,6 +515,8 @@ export async function updateLocalProvider(
460
515
  name: providerName,
461
516
  baseUrl,
462
517
  defaultModelId,
518
+ protocol,
519
+ client,
463
520
  capabilities,
464
521
  modelsSourceUrl: nextModelsSourceUrl,
465
522
  },
@@ -508,17 +565,17 @@ export async function deleteLocalProvider(
508
565
 
509
566
  export async function listLocalProviders(
510
567
  manager: ProviderSettingsManager,
511
- ): Promise<{ providers: RpcProviderListItem[]; settingsPath: string }> {
568
+ ): Promise<{ providers: ProviderListItem[]; settingsPath: string }> {
512
569
  const state = manager.read();
513
570
  const ids = LlmsModels.getProviderIds().sort((a, b) => a.localeCompare(b));
514
571
 
515
572
  const providers = await Promise.all(
516
- ids.map(async (id): Promise<RpcProviderListItem> => {
573
+ ids.map(async (id): Promise<ProviderListItem> => {
517
574
  const [info, registeredModels] = await Promise.all([
518
575
  LlmsModels.getProvider(id),
519
576
  LlmsModels.getModelsForProvider(id),
520
577
  ]);
521
- const modelList = toSortedRpcProviderModels(registeredModels);
578
+ const modelList = toSortedProviderModels(registeredModels);
522
579
  const persistedSettings = state.providers[id]?.settings;
523
580
  const name = info?.name ?? titleCaseFromId(id);
524
581
  return {
@@ -536,6 +593,8 @@ export async function listLocalProviders(
536
593
  : undefined,
537
594
  baseUrl: persistedSettings?.baseUrl ?? info?.baseUrl,
538
595
  defaultModelId: info?.defaultModelId,
596
+ protocol: persistedSettings?.protocol ?? info?.protocol,
597
+ client: persistedSettings?.client ?? info?.client,
539
598
  authDescription: "This provider uses API keys for authentication.",
540
599
  baseUrlDescription: "The base endpoint to use for provider requests.",
541
600
  modelList,
@@ -548,17 +607,17 @@ export async function listLocalProviders(
548
607
 
549
608
  export async function getLocalProviderModels(
550
609
  providerId: string,
551
- config?: LlmsProviders.ProviderConfig,
552
- ): Promise<{ providerId: string; models: RpcProviderModel[] }> {
610
+ config?: ProviderConfig,
611
+ ): Promise<{ providerId: string; models: ProviderModel[] }> {
553
612
  const id = providerId.trim();
554
613
  const modelMap = await resolveProviderModelMap(id, config);
555
- const models = toSortedRpcProviderModels(modelMap);
614
+ const models = toSortedProviderModels(modelMap);
556
615
  return { providerId: id, models };
557
616
  }
558
617
 
559
618
  export function saveLocalProviderSettings(
560
619
  manager: ProviderSettingsManager,
561
- request: Omit<RpcSaveProviderSettingsActionRequest, "action">,
620
+ request: Omit<SaveProviderSettingsActionRequest, "action">,
562
621
  ): { providerId: string; enabled: boolean; settingsPath: string } {
563
622
  const providerId = request.providerId.trim();
564
623
 
@@ -591,6 +650,9 @@ export function saveLocalProviderSettings(
591
650
  "contextWindow",
592
651
  "timeout",
593
652
  "apiLine",
653
+ "protocol",
654
+ "client",
655
+ "routingProviderId",
594
656
  "capabilities",
595
657
  ] as const) {
596
658
  if (Object.hasOwn(request, key)) next[key] = request[key];
@@ -621,7 +683,7 @@ export function saveLocalProviderSettings(
621
683
  return { providerId, enabled: true, settingsPath: manager.getFilePath() };
622
684
  }
623
685
 
624
- export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
686
+ export function normalizeOAuthProvider(provider: string): OAuthProviderId {
625
687
  const normalized = provider.trim().toLowerCase();
626
688
  if (normalized === "codex" || normalized === "openai-codex")
627
689
  return "openai-codex";
@@ -632,17 +694,20 @@ export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
632
694
  }
633
695
 
634
696
  function toProviderApiKey(
635
- providerId: RpcOAuthProviderId,
697
+ providerId: OAuthProviderId,
636
698
  credentials: { access: string },
637
699
  ): string {
638
- return providerId === "cline"
639
- ? `workos:${credentials.access}`
640
- : credentials.access;
700
+ if (providerId === "cline") {
701
+ return credentials.access.startsWith("workos:")
702
+ ? credentials.access
703
+ : `workos:${credentials.access}`;
704
+ }
705
+ return credentials.access;
641
706
  }
642
707
 
643
708
  export async function loginLocalProvider(
644
- providerId: RpcOAuthProviderId,
645
- existing: LlmsProviders.ProviderSettings | undefined,
709
+ providerId: OAuthProviderId,
710
+ existing: ProviderSettings | undefined,
646
711
  openUrl: (url: string) => void,
647
712
  ): Promise<{
648
713
  access: string;
@@ -671,28 +736,28 @@ export async function loginLocalProvider(
671
736
 
672
737
  export function saveLocalProviderOAuthCredentials(
673
738
  manager: ProviderSettingsManager,
674
- providerId: RpcOAuthProviderId,
675
- existing: LlmsProviders.ProviderSettings | undefined,
739
+ providerId: OAuthProviderId,
740
+ existing: ProviderSettings | undefined,
676
741
  credentials: {
677
742
  access: string;
678
743
  refresh: string;
679
744
  expires: number;
680
745
  accountId?: string;
681
746
  },
682
- ): LlmsProviders.ProviderSettings {
747
+ ): ProviderSettings {
683
748
  const auth = {
684
749
  ...(existing?.auth ?? {}),
685
750
  accessToken: toProviderApiKey(providerId, credentials),
686
751
  refreshToken: credentials.refresh,
687
752
  accountId: credentials.accountId,
688
753
  expiresAt: credentials.expires,
689
- } as LlmsProviders.ProviderSettings["auth"] & { expiresAt?: number };
754
+ } as ProviderSettings["auth"] & { expiresAt?: number };
690
755
 
691
- const merged: LlmsProviders.ProviderSettings = {
756
+ const merged: ProviderSettings = {
692
757
  ...(existing ?? {
693
- provider: providerId as LlmsProviders.ProviderSettings["provider"],
758
+ provider: providerId as ProviderSettings["provider"],
694
759
  }),
695
- provider: providerId as LlmsProviders.ProviderSettings["provider"],
760
+ provider: providerId as ProviderSettings["provider"],
696
761
  auth,
697
762
  };
698
763
  manager.saveProviderSettings(merged, { tokenSource: "oauth" });
@@ -700,7 +765,7 @@ export function saveLocalProviderOAuthCredentials(
700
765
  }
701
766
 
702
767
  export function resolveLocalClineAuthToken(
703
- settings: LlmsProviders.ProviderSettings | undefined,
768
+ settings: ProviderSettings | undefined,
704
769
  ): string | undefined {
705
770
  const token = settings?.auth?.accessToken?.trim() || settings?.apiKey?.trim();
706
771
  return token && token.length > 0 ? token : undefined;
@@ -12,7 +12,7 @@ import {
12
12
  type SessionManifest,
13
13
  SessionManifestSchema,
14
14
  } from "../session/session-manifest";
15
- import type { SessionRow } from "../session/session-service";
15
+ import type { SessionRow } from "../session/session-row";
16
16
  import type { SessionSource, SessionStatus } from "../types/common";
17
17
  import type { StoredMessageWithMetadata } from "../types/session";
18
18
  import type { SessionRecord } from "../types/sessions";
@@ -153,23 +153,31 @@ export function withLatestAssistantTurnMetadata(
153
153
  assistantIndexes.push(next.length - 1 - lastAssistantIndex);
154
154
  }
155
155
 
156
- const usage = result.usage;
156
+ const lastAssistantIndex = assistantIndexes[assistantIndexes.length - 1];
157
157
  for (const targetIndex of assistantIndexes) {
158
158
  const target = next[targetIndex];
159
+ // Use per-turn metrics already stamped on the message if available.
160
+ // Only fall back to result.usage (total run usage) for the terminal
161
+ // assistant message when no per-turn metrics are present, to avoid
162
+ // attaching session totals to intermediate turn messages.
163
+ let metrics = target.metrics;
164
+ if (!metrics && targetIndex === lastAssistantIndex) {
165
+ const usage = result.usage;
166
+ metrics = {
167
+ inputTokens: usage.inputTokens,
168
+ outputTokens: usage.outputTokens,
169
+ cacheReadTokens: usage.cacheReadTokens ?? 0,
170
+ cacheWriteTokens: usage.cacheWriteTokens ?? 0,
171
+ cost: usage.totalCost,
172
+ };
173
+ }
159
174
  next[targetIndex] = {
160
175
  ...normalizeStoredMessageModelMetadata(target, {
161
176
  id: result.model.id,
162
177
  provider: result.model.provider,
163
178
  family: result.model.info?.family,
164
179
  }),
165
- metrics: {
166
- ...(target.metrics ?? {}),
167
- inputTokens: usage.inputTokens,
168
- outputTokens: usage.outputTokens,
169
- cacheReadTokens: usage.cacheReadTokens ?? 0,
170
- cacheWriteTokens: usage.cacheWriteTokens ?? 0,
171
- cost: usage.totalCost,
172
- },
180
+ ...(metrics ? { metrics } : {}),
173
181
  ts: target.ts ?? result.endedAt.getTime(),
174
182
  };
175
183
  }
@@ -1,7 +1,6 @@
1
1
  import type { ITelemetryService } from "@clinebot/shared";
2
2
  import { resolveDocumentsExtensionPath } from "@clinebot/shared/storage";
3
3
  import { listHookConfigFiles } from "../extensions/config/hooks-config-loader";
4
- import type { SessionSource } from "../types/common";
5
4
  import type { CoreSessionConfig } from "../types/config";
6
5
  import {
7
6
  captureHookDiscovery,
@@ -14,10 +13,15 @@ import {
14
13
  } from "./telemetry/core-events";
15
14
  import type { enrichPromptWithMentions } from "./workspace";
16
15
 
16
+ /**
17
+ * Emits local-only session creation telemetry (task.created/restarted and
18
+ * hook discovery). The transport-agnostic `session.started` event is
19
+ * emitted from `ClineCore.start` so it fires for every backend (local,
20
+ * hub, remote) at the outer API boundary.
21
+ */
17
22
  export function emitSessionCreationTelemetry(
18
23
  config: CoreSessionConfig,
19
24
  sessionId: string,
20
- source: SessionSource,
21
25
  isRestart: boolean,
22
26
  workspacePath: string,
23
27
  agentIdentity?: Partial<TelemetryAgentIdentityProperties>,
@@ -36,19 +40,6 @@ export function emitSessionCreationTelemetry(
36
40
  });
37
41
  }
38
42
  captureHookDiscoveryTelemetry(config.telemetry, { workspacePath });
39
- config.telemetry?.capture({
40
- event: "session.started",
41
- properties: {
42
- sessionId,
43
- source,
44
- providerId: config.providerId,
45
- modelId: config.modelId,
46
- enableTools: config.enableTools,
47
- enableSpawnAgent: config.enableSpawnAgent,
48
- enableAgentTeams: config.enableAgentTeams,
49
- ...agentIdentity,
50
- },
51
- });
52
43
  }
53
44
 
54
45
  export function captureHookDiscoveryTelemetry(
@@ -138,16 +138,12 @@ export class FileTeamStore implements TeamStore {
138
138
 
139
139
  loadRuntime(teamName: string): TeamRuntimeLoadResult {
140
140
  const envelope = this.readEnvelope(teamName);
141
- const interruptedRunIds = this.markInProgressRunsInterrupted(
142
- teamName,
143
- "runtime_recovered",
144
- );
145
141
  return {
146
142
  state: envelope?.teamState
147
143
  ? reviveTeamRuntimeStateDates(envelope.teamState)
148
144
  : undefined,
149
145
  teammates: envelope?.teammates ?? [],
150
- interruptedRunIds,
146
+ interruptedRunIds: [],
151
147
  };
152
148
  }
153
149
 
@@ -1,10 +1,17 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import * as LlmsModels from "@clinebot/llms";
4
- import * as LlmsProviders from "@clinebot/llms";
5
4
  import { resolveClineDataDir } from "@clinebot/shared/storage";
6
- import type { ProviderSettings } from "../../types/provider-settings";
7
- import { emptyStoredProviderSettings } from "../../types/provider-settings";
5
+ import {
6
+ emptyStoredProviderSettings,
7
+ type ProviderSettings,
8
+ ProviderSettingsSchemaTyped as ProviderSettingsSchema,
9
+ } from "../../types/provider-settings";
10
+ import {
11
+ readModelsFileSync,
12
+ type StoredModelsFile,
13
+ writeModelsFileSync,
14
+ } from "../providers/local-provider-registry";
8
15
  import type { ProviderSettingsManager } from "./provider-settings-manager";
9
16
 
10
17
  type LegacyMode = "plan" | "act";
@@ -150,27 +157,6 @@ interface LegacyProviderStorage {
150
157
  secrets: LegacySecrets;
151
158
  }
152
159
 
153
- type StoredModelsFile = {
154
- version: 1;
155
- providers: Record<
156
- string,
157
- {
158
- provider: {
159
- name: string;
160
- baseUrl: string;
161
- defaultModelId?: string;
162
- };
163
- models: Record<
164
- string,
165
- {
166
- id: string;
167
- name: string;
168
- }
169
- >;
170
- }
171
- >;
172
- };
173
-
174
160
  const LEGACY_OPENAI_COMPATIBLE_PROVIDER_ID = "openai";
175
161
 
176
162
  export interface MigrateLegacyProviderSettingsOptions {
@@ -254,29 +240,6 @@ function readJsonObject<T extends object>(filePath: string): T | undefined {
254
240
  return undefined;
255
241
  }
256
242
 
257
- function readModelsFile(filePath: string): StoredModelsFile {
258
- const parsed = readJsonObject<StoredModelsFile>(filePath);
259
- if (
260
- parsed?.version === 1 &&
261
- parsed.providers &&
262
- typeof parsed.providers === "object"
263
- ) {
264
- return parsed;
265
- }
266
- return {
267
- version: 1,
268
- providers: {},
269
- };
270
- }
271
-
272
- function writeModelsFile(filePath: string, state: StoredModelsFile): void {
273
- const dir = dirname(filePath);
274
- if (!existsSync(dir)) {
275
- mkdirSync(dir, { recursive: true });
276
- }
277
- writeFileSync(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
278
- }
279
-
280
243
  function resolveLegacyStorage(
281
244
  options: MigrateLegacyProviderSettingsOptions,
282
245
  ): LegacyProviderStorage | undefined {
@@ -659,7 +622,7 @@ function buildLegacyProviderSettings(
659
622
  ...(timeout ? { timeout } : {}),
660
623
  ...providerSpecific,
661
624
  };
662
- const parsed = LlmsProviders.ProviderSettingsSchema.safeParse(settings);
625
+ const parsed = ProviderSettingsSchema.safeParse(settings);
663
626
  if (!parsed.success) {
664
627
  return undefined;
665
628
  }
@@ -758,7 +721,7 @@ export function migrateLegacyProviderSettings(
758
721
  dirname(options.providerSettingsManager.getFilePath()),
759
722
  "models.json",
760
723
  );
761
- const modelsState = readModelsFile(modelsPath);
724
+ const modelsState = readModelsFileSync(modelsPath);
762
725
  let addedCustomProviderCount = 0;
763
726
 
764
727
  for (const legacyProviderId of candidates) {
@@ -815,7 +778,7 @@ export function migrateLegacyProviderSettings(
815
778
 
816
779
  options.providerSettingsManager.write(next);
817
780
  if (addedCustomProviderCount > 0) {
818
- writeModelsFile(modelsPath, modelsState);
781
+ writeModelsFileSync(modelsPath, modelsState);
819
782
  }
820
783
 
821
784
  return {
@@ -1,17 +1,21 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { basename, dirname } from "node:path";
3
3
  import { resolveProviderSettingsPath } from "@clinebot/shared/storage";
4
+ import { getLiveModelsCatalog } from "../..";
4
5
  import {
5
6
  emptyStoredProviderSettings,
6
7
  type ProviderConfig,
7
8
  type ProviderSettings,
8
- ProviderSettingsSchema,
9
+ ProviderSettingsSchemaTyped as ProviderSettingsSchema,
9
10
  type ProviderTokenSource,
10
11
  type StoredProviderSettings,
11
12
  StoredProviderSettingsSchema,
12
13
  toProviderConfig,
13
14
  } from "../../types/provider-settings";
14
- import { ensureCustomProvidersLoadedSync } from "../providers/local-provider-registry";
15
+ import {
16
+ ensureCustomProvidersLoadedSync,
17
+ registerConfiguredProvidersFromSettings,
18
+ } from "../providers/local-provider-registry";
15
19
  import { migrateLegacyProviderSettings } from "./provider-settings-legacy-migration";
16
20
 
17
21
  function nowIso(): string {
@@ -53,6 +57,7 @@ export class ProviderSettingsManager {
53
57
  });
54
58
  }
55
59
  ensureCustomProvidersLoadedSync(this);
60
+ registerConfiguredProvidersFromSettings(this.read());
56
61
  }
57
62
 
58
63
  getFilePath(): string {
@@ -69,6 +74,7 @@ export class ProviderSettingsManager {
69
74
  const parsed = JSON.parse(raw) as unknown;
70
75
  const result = StoredProviderSettingsSchema.safeParse(parsed);
71
76
  if (result.success) {
77
+ registerConfiguredProvidersFromSettings(result.data);
72
78
  return result.data;
73
79
  }
74
80
  } catch {
@@ -89,6 +95,7 @@ export class ProviderSettingsManager {
89
95
  `${JSON.stringify(normalized, null, 2)}\n`,
90
96
  "utf8",
91
97
  );
98
+ registerConfiguredProvidersFromSettings(normalized);
92
99
  }
93
100
 
94
101
  saveProviderSettings(
@@ -149,4 +156,12 @@ export class ProviderSettingsManager {
149
156
  }
150
157
  return toProviderConfig(settings);
151
158
  }
159
+
160
+ async refreshCatalog(): Promise<void> {
161
+ try {
162
+ await getLiveModelsCatalog({});
163
+ } catch {
164
+ // Ignore errors
165
+ }
166
+ }
152
167
  }
@@ -359,14 +359,10 @@ export class SqliteTeamStore implements TeamStore {
359
359
  const teammates = snapshotRow
360
360
  ? parseTeammatesJson(snapshotRow.teammates_json)
361
361
  : [];
362
- const interruptedRunIds = this.markInProgressRunsInterrupted(
363
- safeTeamName,
364
- "runtime_recovered",
365
- );
366
362
  return {
367
363
  state,
368
364
  teammates,
369
- interruptedRunIds,
365
+ interruptedRunIds: [],
370
366
  };
371
367
  }
372
368
 
@@ -52,3 +52,21 @@ export async function buildWorkspaceMetadata(cwd: string): Promise<string> {
52
52
  const workspaceInfo = await generateWorkspaceInfo(cwd);
53
53
  return processWorkspaceInfo(workspaceInfo);
54
54
  }
55
+
56
+ /**
57
+ * Generate workspace metadata as both a structured `WorkspaceInfo` object and
58
+ * its pre-serialized string form.
59
+ *
60
+ * Use this instead of calling `buildWorkspaceMetadata` + `generateWorkspaceInfo`
61
+ * separately so the git I/O only happens once.
62
+ */
63
+ export async function buildWorkspaceMetadataWithInfo(cwd: string): Promise<{
64
+ workspaceInfo: WorkspaceInfo;
65
+ workspaceMetadata: string;
66
+ }> {
67
+ const workspaceInfo = await generateWorkspaceInfo(cwd);
68
+ return {
69
+ workspaceInfo,
70
+ workspaceMetadata: processWorkspaceInfo(workspaceInfo),
71
+ };
72
+ }