@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,237 @@
1
+ import type * as LlmsProviders from "@clinebot/llms";
2
+ import { formatDisplayUserInput, normalizeUserInput } from "@clinebot/shared";
3
+ import type {
4
+ SessionHistoryMetadata,
5
+ SessionHistoryRecord,
6
+ SessionRecord,
7
+ } from "../types/sessions";
8
+ import type { RuntimeHost } from "./runtime-host";
9
+
10
+ type StoredSessionMessage = LlmsProviders.Message & {
11
+ metrics?: {
12
+ cost?: number;
13
+ };
14
+ modelInfo?: {
15
+ id?: string;
16
+ provider?: string;
17
+ };
18
+ };
19
+
20
+ type TextBlock = {
21
+ type?: string;
22
+ text?: string;
23
+ };
24
+
25
+ function asTrimmedString(value: unknown): string | undefined {
26
+ if (typeof value !== "string") {
27
+ return undefined;
28
+ }
29
+ const trimmed = value.trim();
30
+ return trimmed.length > 0 ? trimmed : undefined;
31
+ }
32
+
33
+ function asKnownString(value: unknown): string | undefined {
34
+ const trimmed = asTrimmedString(value);
35
+ if (!trimmed) {
36
+ return undefined;
37
+ }
38
+ return trimmed.toLowerCase() === "unknown" ? undefined : trimmed;
39
+ }
40
+
41
+ function asFiniteNumber(value: unknown): number | undefined {
42
+ return typeof value === "number" && Number.isFinite(value)
43
+ ? value
44
+ : undefined;
45
+ }
46
+
47
+ function asHistoryMetadata(value: unknown): SessionHistoryMetadata | undefined {
48
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
49
+ return undefined;
50
+ }
51
+ return { ...(value as Record<string, unknown>) };
52
+ }
53
+
54
+ function extractTextFromContent(
55
+ content: LlmsProviders.Message["content"],
56
+ ): string {
57
+ if (typeof content === "string") {
58
+ return content.trim();
59
+ }
60
+ const segments: string[] = [];
61
+ for (const block of content) {
62
+ if (!block || typeof block !== "object") {
63
+ continue;
64
+ }
65
+ const maybeText = block as TextBlock;
66
+ if (maybeText.type !== "text") {
67
+ continue;
68
+ }
69
+ const text = maybeText.text?.trim();
70
+ if (text) {
71
+ segments.push(text);
72
+ }
73
+ }
74
+ return segments.join("\n").trim();
75
+ }
76
+
77
+ function toSingleLine(text: string): string {
78
+ return text.replace(/\s+/g, " ").trim();
79
+ }
80
+
81
+ function truncateText(text: string, limit: number): string {
82
+ if (text.length <= limit) {
83
+ return text;
84
+ }
85
+ return `${text.slice(0, Math.max(0, limit - 3)).trimEnd()}...`;
86
+ }
87
+
88
+ function inferTitleFromMessages(
89
+ messages: LlmsProviders.Message[],
90
+ ): string | undefined {
91
+ for (const role of ["user", "assistant"] as const) {
92
+ for (const raw of messages) {
93
+ if (raw.role !== role) {
94
+ continue;
95
+ }
96
+ const text = toSingleLine(extractTextFromContent(raw.content));
97
+ if (!text) {
98
+ continue;
99
+ }
100
+ const formatted =
101
+ role === "user" ? toSingleLine(formatDisplayUserInput(text)) : text;
102
+ const normalized = normalizeUserInput(
103
+ formatted.split("\n")[0] ?? formatted,
104
+ );
105
+ return truncateText(normalized, 50);
106
+ }
107
+ }
108
+ return undefined;
109
+ }
110
+
111
+ function summarizeCostFromMessages(messages: LlmsProviders.Message[]): number {
112
+ let total = 0;
113
+ for (const message of messages as StoredSessionMessage[]) {
114
+ total += asFiniteNumber(message.metrics?.cost) ?? 0;
115
+ }
116
+ return total;
117
+ }
118
+
119
+ function inferProviderAndModelFromMessages(messages: LlmsProviders.Message[]): {
120
+ provider?: string;
121
+ model?: string;
122
+ } {
123
+ let provider: string | undefined;
124
+ let model: string | undefined;
125
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
126
+ const message = messages[i] as StoredSessionMessage;
127
+ if (!provider) {
128
+ provider = asKnownString(message.modelInfo?.provider);
129
+ }
130
+ if (!model) {
131
+ model = asKnownString(message.modelInfo?.id);
132
+ }
133
+ if (provider && model) {
134
+ break;
135
+ }
136
+ }
137
+ return { provider, model };
138
+ }
139
+
140
+ function getMetadataProvider(
141
+ metadata?: SessionHistoryMetadata,
142
+ ): string | undefined {
143
+ return (
144
+ asKnownString(metadata?.provider) ??
145
+ asKnownString(
146
+ metadata?.provider &&
147
+ typeof metadata.provider === "object" &&
148
+ !Array.isArray(metadata.provider)
149
+ ? (metadata.provider as Record<string, unknown>).id
150
+ : undefined,
151
+ )
152
+ );
153
+ }
154
+
155
+ function getMetadataModel(
156
+ metadata?: SessionHistoryMetadata,
157
+ ): string | undefined {
158
+ return (
159
+ asKnownString(metadata?.model) ??
160
+ asKnownString(
161
+ metadata?.model &&
162
+ typeof metadata.model === "object" &&
163
+ !Array.isArray(metadata.model)
164
+ ? (metadata.model as Record<string, unknown>).id
165
+ : undefined,
166
+ )
167
+ );
168
+ }
169
+
170
+ function normalizeHistoryRow(
171
+ row: SessionRecord,
172
+ overrides?: {
173
+ title?: string;
174
+ provider?: string;
175
+ model?: string;
176
+ totalCost?: number;
177
+ },
178
+ ): SessionHistoryRecord {
179
+ const metadata = asHistoryMetadata(row.metadata);
180
+ const title =
181
+ asTrimmedString(overrides?.title) ?? asTrimmedString(metadata?.title);
182
+ const totalCost =
183
+ asFiniteNumber(overrides?.totalCost) ?? asFiniteNumber(metadata?.totalCost);
184
+ const nextMetadata =
185
+ metadata || title !== undefined || totalCost !== undefined
186
+ ? {
187
+ ...(metadata ?? {}),
188
+ ...(title !== undefined ? { title } : {}),
189
+ ...(totalCost !== undefined ? { totalCost } : {}),
190
+ }
191
+ : undefined;
192
+ return {
193
+ ...row,
194
+ provider:
195
+ asKnownString(overrides?.provider) ??
196
+ asKnownString(row.provider) ??
197
+ getMetadataProvider(metadata) ??
198
+ "",
199
+ model:
200
+ asKnownString(overrides?.model) ??
201
+ asKnownString(row.model) ??
202
+ getMetadataModel(metadata) ??
203
+ "",
204
+ metadata: nextMetadata,
205
+ };
206
+ }
207
+
208
+ export async function hydrateSessionHistory(
209
+ host: Pick<RuntimeHost, "readMessages">,
210
+ rows: SessionRecord[],
211
+ ): Promise<SessionHistoryRecord[]> {
212
+ return await Promise.all(
213
+ rows.map(async (row) => {
214
+ const initial = normalizeHistoryRow(row);
215
+ const hasTitle = Boolean(asTrimmedString(initial.metadata?.title));
216
+ const hasProvider = Boolean(asKnownString(initial.provider));
217
+ const hasModel = Boolean(asKnownString(initial.model));
218
+ const knownCost = asFiniteNumber(initial.metadata?.totalCost);
219
+ const hasCost = knownCost !== undefined && knownCost > 0;
220
+ if (hasTitle && hasProvider && hasModel && hasCost) {
221
+ return initial;
222
+ }
223
+ const messages = await host.readMessages(row.sessionId);
224
+ if (messages.length === 0) {
225
+ return initial;
226
+ }
227
+ const inferredProviderModel = inferProviderAndModelFromMessages(messages);
228
+ const inferredCost = summarizeCostFromMessages(messages);
229
+ return normalizeHistoryRow(row, {
230
+ title: hasTitle ? undefined : inferTitleFromMessages(messages),
231
+ provider: hasProvider ? undefined : inferredProviderModel.provider,
232
+ model: hasModel ? undefined : inferredProviderModel.model,
233
+ totalCost: hasCost || inferredCost <= 0 ? undefined : inferredCost,
234
+ });
235
+ }),
236
+ );
237
+ }
@@ -0,0 +1,200 @@
1
+ import type { ClineCoreOptions } from "../ClineCore";
2
+ import {
3
+ ensureCompatibleLocalHubUrl,
4
+ resolveCompatibleLocalHubUrl,
5
+ } from "../hub/client";
6
+ import { SqliteSessionStore } from "../services/storage/sqlite-session-store";
7
+ import { resolveCoreDistinctId } from "../services/telemetry/distinct-id";
8
+ import { FileSessionService } from "../session/file-session-service";
9
+ import { CoreSessionService } from "../session/session-service";
10
+ import { HubRuntimeHost } from "../transports/hub";
11
+ import { LocalRuntimeHost } from "../transports/local";
12
+ import { RemoteRuntimeHost } from "../transports/remote";
13
+ import type { RuntimeHost, RuntimeHostMode } from "./runtime-host";
14
+
15
+ function resolveConfiguredBackendMode(
16
+ options: ClineCoreOptions,
17
+ ): RuntimeHostMode {
18
+ if (options.backendMode) {
19
+ return options.backendMode;
20
+ }
21
+ if (process.env.CLINE_VCR?.trim()) {
22
+ return "local";
23
+ }
24
+ const raw = process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();
25
+ if (raw === "local" || raw === "hub" || raw === "remote") {
26
+ return raw;
27
+ }
28
+ return "auto";
29
+ }
30
+
31
+ export type SessionBackend = CoreSessionService | FileSessionService;
32
+
33
+ let cachedBackend: SessionBackend | undefined;
34
+ let backendInitPromise: Promise<SessionBackend> | undefined;
35
+
36
+ async function reconcileDeadSessionsIfSupported(
37
+ backend: SessionBackend,
38
+ ): Promise<void> {
39
+ const service = backend as SessionBackend & {
40
+ reconcileDeadSessions?: (limit?: number) => Promise<number>;
41
+ };
42
+ await service.reconcileDeadSessions?.().catch(() => {});
43
+ }
44
+
45
+ function createLocalBackend(options: ClineCoreOptions): SessionBackend {
46
+ try {
47
+ const store = new SqliteSessionStore();
48
+ store.init();
49
+ return new CoreSessionService(store, {
50
+ messagesArtifactUploader: options.messagesArtifactUploader,
51
+ });
52
+ } catch {
53
+ // Fallback to file-based session service if SQLite is unavailable.
54
+ options.telemetry?.capture({
55
+ event: "session_backend_fallback",
56
+ properties: {
57
+ requestedBackend: "sqlite",
58
+ fallbackBackend: "file",
59
+ },
60
+ });
61
+ return new FileSessionService(undefined, {
62
+ messagesArtifactUploader: options.messagesArtifactUploader,
63
+ });
64
+ }
65
+ }
66
+
67
+ function createLocalRuntimeHost(
68
+ options: ClineCoreOptions,
69
+ distinctId: string,
70
+ backend?: SessionBackend,
71
+ ): LocalRuntimeHost {
72
+ return new LocalRuntimeHost({
73
+ sessionService:
74
+ backend ?? options.sessionService ?? createLocalBackend(options),
75
+ defaultToolExecutors: options.defaultToolExecutors,
76
+ telemetry: options.telemetry,
77
+ toolPolicies: options.toolPolicies,
78
+ requestToolApproval: options.requestToolApproval,
79
+ distinctId,
80
+ fetch: options.fetch,
81
+ });
82
+ }
83
+
84
+ export async function resolveSessionBackend(
85
+ options: ClineCoreOptions,
86
+ ): Promise<SessionBackend> {
87
+ if (cachedBackend) {
88
+ return cachedBackend;
89
+ }
90
+ if (backendInitPromise) {
91
+ return await backendInitPromise;
92
+ }
93
+
94
+ backendInitPromise = (async () => {
95
+ cachedBackend = createLocalBackend(options);
96
+ await reconcileDeadSessionsIfSupported(cachedBackend);
97
+ return cachedBackend;
98
+ })().finally(() => {
99
+ backendInitPromise = undefined;
100
+ });
101
+
102
+ return await backendInitPromise;
103
+ }
104
+
105
+ export async function createRuntimeHost(
106
+ options: ClineCoreOptions,
107
+ ): Promise<RuntimeHost> {
108
+ const distinctId = resolveCoreDistinctId(options.distinctId);
109
+ options.telemetry?.setDistinctId(distinctId);
110
+ const configuredMode = resolveConfiguredBackendMode(options);
111
+ if (configuredMode === "remote") {
112
+ const remoteEndpoint = options.remote?.endpoint?.trim();
113
+ if (!remoteEndpoint) {
114
+ throw new Error(
115
+ "Remote runtime mode requires `remote.endpoint` to be configured.",
116
+ );
117
+ }
118
+ options.logger?.log("Using remote runtime host", {
119
+ endpoint: remoteEndpoint,
120
+ });
121
+ return new RemoteRuntimeHost({
122
+ endpoint: remoteEndpoint,
123
+ authToken: options.remote?.authToken,
124
+ clientType: options.remote?.clientType,
125
+ displayName: options.remote?.displayName,
126
+ workspaceRoot: options.remote?.workspaceRoot,
127
+ cwd: options.remote?.cwd,
128
+ });
129
+ }
130
+ if (configuredMode === "hub") {
131
+ const explicitEndpoint = options.hub?.endpoint?.trim();
132
+ const hubUrl =
133
+ explicitEndpoint ||
134
+ (await ensureCompatibleLocalHubUrl({
135
+ strategy: options.hub?.strategy ?? "require-hub",
136
+ workspaceRoot: options.hub?.workspaceRoot,
137
+ cwd: options.hub?.cwd,
138
+ }));
139
+ if (!hubUrl) {
140
+ throw new Error("No compatible hub runtime is available.");
141
+ }
142
+ options.logger?.log("Using hub runtime host", {
143
+ url: hubUrl,
144
+ explicitEndpoint: explicitEndpoint || undefined,
145
+ });
146
+ return new HubRuntimeHost(
147
+ {
148
+ url: hubUrl,
149
+ authToken: options.hub?.authToken,
150
+ clientType: options.hub?.clientType,
151
+ displayName: options.hub?.displayName,
152
+ },
153
+ {
154
+ workspaceRoot: options.hub?.workspaceRoot,
155
+ cwd: options.hub?.cwd,
156
+ },
157
+ );
158
+ }
159
+ if (configuredMode === "auto") {
160
+ const hubUrl = await resolveCompatibleLocalHubUrl({
161
+ endpoint: options.hub?.endpoint,
162
+ strategy: options.hub?.strategy ?? "prefer-hub",
163
+ workspaceRoot: options.hub?.workspaceRoot,
164
+ cwd: options.hub?.cwd,
165
+ });
166
+ if (hubUrl) {
167
+ options.logger?.log("Using discovered local hub runtime host", {
168
+ url: hubUrl,
169
+ });
170
+ const host = new HubRuntimeHost(
171
+ {
172
+ url: hubUrl,
173
+ authToken: options.hub?.authToken,
174
+ clientType: options.hub?.clientType,
175
+ displayName: options.hub?.displayName,
176
+ },
177
+ {
178
+ workspaceRoot: options.hub?.workspaceRoot,
179
+ cwd: options.hub?.cwd,
180
+ },
181
+ );
182
+ try {
183
+ await host.connect();
184
+ return host;
185
+ } catch (error) {
186
+ options.logger?.log("Falling back to local runtime host", {
187
+ reason: "hub_connect_failed",
188
+ severity: "warn",
189
+ error,
190
+ });
191
+ }
192
+ }
193
+ options.logger?.log("Falling back to local runtime host", {
194
+ reason: "compatible_hub_unavailable",
195
+ severity: "warn",
196
+ });
197
+ return createLocalRuntimeHost(options, distinctId);
198
+ }
199
+ return createLocalRuntimeHost(options, distinctId);
200
+ }
@@ -3,6 +3,7 @@ export {
3
3
  isRuleEnabled,
4
4
  listEnabledRulesFromWatcher,
5
5
  loadRulesForSystemPromptFromWatcher,
6
+ mergeRulesForSystemPrompt,
6
7
  } from "./rules";
7
8
  export { createTeamName, DefaultRuntimeBuilder } from "./runtime-builder";
8
9
  export type {
@@ -20,6 +20,18 @@ export function formatRulesForSystemPrompt(
20
20
  return `\n\n# Rules\n${renderedRules}`;
21
21
  }
22
22
 
23
+ export function mergeRulesForSystemPrompt(
24
+ primaryRules?: string,
25
+ additionalRules?: string,
26
+ ): string | undefined {
27
+ const primary = primaryRules?.trim();
28
+ const additional = additionalRules?.trim();
29
+ if (primary && additional) {
30
+ return `${primary}\n\n${additional}`;
31
+ }
32
+ return primary || additional || undefined;
33
+ }
34
+
23
35
  export function listEnabledRulesFromWatcher(
24
36
  watcher: UserInstructionConfigWatcher,
25
37
  ): RuleConfig[] {
@@ -16,13 +16,6 @@ import {
16
16
  registerMcpServersFromSettingsFile,
17
17
  resolveDefaultMcpSettingsPath,
18
18
  } from "../extensions/mcp";
19
- import { createLocalTeamStore } from "../storage/team-store";
20
- import {
21
- AgentTeamsRuntime,
22
- bootstrapAgentTeams,
23
- createDelegatedAgentConfigProvider,
24
- type TeamEvent,
25
- } from "../team";
26
19
  import {
27
20
  createBuiltinTools,
28
21
  DEFAULT_MODEL_TOOL_ROUTING_RULES,
@@ -32,7 +25,18 @@ import {
32
25
  type ToolExecutors,
33
26
  ToolPresets,
34
27
  type ToolRoutingRule,
35
- } from "../tools";
28
+ } from "../extensions/tools";
29
+ import {
30
+ AgentTeamsRuntime,
31
+ bootstrapAgentTeams,
32
+ createDelegatedAgentConfigProvider,
33
+ type TeamEvent,
34
+ } from "../extensions/tools/team";
35
+ import {
36
+ filterDisabledTools,
37
+ resolveDisabledToolNames,
38
+ } from "../services/global-settings";
39
+ import { createLocalTeamStore } from "../services/storage/team-store";
36
40
  import type { CoreAgentMode, CoreSessionConfig } from "../types/config";
37
41
  import type {
38
42
  RuntimeBuilder,
@@ -74,6 +78,13 @@ function filterToolsByPolicies(
74
78
  );
75
79
  }
76
80
 
81
+ function filterAvailableTools(
82
+ tools: Tool[],
83
+ toolPolicies: CoreSessionConfig["toolPolicies"],
84
+ ): Tool[] {
85
+ return filterDisabledTools(filterToolsByPolicies(tools, toolPolicies));
86
+ }
87
+
77
88
  export function createTeamName(): string {
78
89
  return `team-${nanoid(5)}`;
79
90
  }
@@ -82,14 +93,13 @@ function createBuiltinToolsList(
82
93
  cwd: string,
83
94
  providerId: string,
84
95
  mode: CoreAgentMode,
85
- yolo: boolean | undefined,
86
96
  modelId: string,
87
97
  toolRoutingRules: ToolRoutingRule[] | undefined,
88
98
  toolPolicies: CoreSessionConfig["toolPolicies"],
89
99
  skillsExecutor?: SkillsExecutorWithMetadata,
90
100
  executorOverrides?: Partial<ToolExecutors>,
91
101
  ): Tool[] {
92
- const preset = ToolPresets[resolveToolPresetName({ mode, yolo })];
102
+ const preset = ToolPresets[resolveToolPresetName({ mode })];
93
103
  const toolRoutingConfig = resolveToolRoutingConfig(
94
104
  providerId,
95
105
  modelId,
@@ -97,7 +107,7 @@ function createBuiltinToolsList(
97
107
  toolRoutingRules ?? DEFAULT_MODEL_TOOL_ROUTING_RULES,
98
108
  );
99
109
 
100
- return filterToolsByPolicies(
110
+ return filterAvailableTools(
101
111
  createBuiltinTools({
102
112
  cwd,
103
113
  ...preset,
@@ -429,16 +439,11 @@ function normalizeConfig(
429
439
  | "sessionId"
430
440
  >
431
441
  > {
432
- const preset =
433
- ToolPresets[
434
- resolveToolPresetName({
435
- mode: config.mode,
436
- yolo: config.yolo,
437
- })
438
- ];
442
+ const preset = ToolPresets[resolveToolPresetName({ mode: config.mode })];
439
443
  return {
440
444
  sessionId: config.sessionId || "",
441
- mode: config.mode === "plan" ? "plan" : "act",
445
+ mode:
446
+ config.mode === "plan" ? "plan" : config.mode === "yolo" ? "yolo" : "act",
442
447
  enableTools: config.enableTools !== false,
443
448
  enableSpawnAgent:
444
449
  config.enableSpawnAgent ?? preset.enableSpawnAgent ?? true,
@@ -484,8 +489,10 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
484
489
  } = input;
485
490
  const onTeamEvent = input.onTeamEvent ?? (() => {});
486
491
  const normalized = normalizeConfig(config);
492
+ const globallyDisabledToolNames = resolveDisabledToolNames();
487
493
  const tools: Tool[] = [];
488
494
  const effectiveTeamName = config.teamName?.trim() || createTeamName();
495
+ const teamStoreKey = config.sessionId?.trim() || effectiveTeamName;
489
496
  const hasLocalSkills = hasSkillsFiles(config.cwd);
490
497
  let teamToolsRegistered = false;
491
498
  const watcherProvided = Boolean(sharedUserInstructionWatcher);
@@ -523,7 +530,6 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
523
530
  config.cwd,
524
531
  config.providerId,
525
532
  normalized.mode,
526
- normalized.yolo,
527
533
  config.modelId,
528
534
  config.toolRoutingRules,
529
535
  config.toolPolicies,
@@ -542,7 +548,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
542
548
  const teamStore = normalized.enableAgentTeams
543
549
  ? createLocalTeamStore()
544
550
  : undefined;
545
- const restoredTeam = teamStore?.loadRuntime(effectiveTeamName);
551
+ const restoredTeam = teamStore?.loadRuntime(teamStoreKey);
546
552
  const restoredTeamState = restoredTeam?.state;
547
553
  const restoredTeammateSpecs = restoredTeam?.teammates ?? [];
548
554
  const teammateSpecs = new Map(
@@ -613,9 +619,9 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
613
619
  if (event.type === "teammate_shutdown") {
614
620
  teammateSpecs.delete(event.agentId);
615
621
  }
616
- teamStore.handleTeamEvent(effectiveTeamName, event);
622
+ teamStore.handleTeamEvent(teamStoreKey, event);
617
623
  teamStore.persistRuntime(
618
- effectiveTeamName,
624
+ teamStoreKey,
619
625
  teamRuntime.exportState(),
620
626
  Array.from(teammateSpecs.values()),
621
627
  );
@@ -635,8 +641,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
635
641
  }
636
642
  teamToolsRegistered = true;
637
643
 
638
- const factory = input.teamToolsFactory ?? bootstrapAgentTeams;
639
- const teamBootstrap = factory({
644
+ const teamBootstrap = bootstrapAgentTeams({
640
645
  runtime: teamRuntime,
641
646
  leadAgentId: config.sessionId || "lead",
642
647
  restoredFromPersistence: Boolean(restoredTeamState),
@@ -653,7 +658,6 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
653
658
  config.cwd,
654
659
  config.providerId,
655
660
  normalized.mode,
656
- normalized.yolo,
657
661
  config.modelId,
658
662
  config.toolRoutingRules,
659
663
  config.toolPolicies,
@@ -715,14 +719,14 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
715
719
  if (pending) parts.push(`Unfinished tasks: ${pending}`);
716
720
  if (activeRunSummary)
717
721
  parts.push(`Active runs: ${activeRunSummary}`);
718
- return `[SYSTEM] You still have team obligations. ${parts.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_run / team_await_all_runs to wait for active runs. Do NOT stop until all tasks are completed.`;
722
+ return `[SYSTEM] You still have team obligations. ${parts.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`;
719
723
  }
720
724
  return undefined;
721
725
  }
722
726
  : undefined;
723
727
 
724
728
  return {
725
- tools: filterToolsByPolicies(tools, config.toolPolicies),
729
+ tools: filterAvailableTools(tools, config.toolPolicies),
726
730
  logger: logger ?? config.logger,
727
731
  telemetry: telemetry ?? config.telemetry,
728
732
  teamRuntime,
@@ -734,7 +738,11 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
734
738
  registerLeadAgent: (agent) => {
735
739
  leadAgentInstance = agent;
736
740
  if (pendingLeadTeamTools.length > 0) {
737
- agent.addTools(pendingLeadTeamTools);
741
+ agent.addTools(
742
+ filterDisabledTools(pendingLeadTeamTools, [
743
+ ...globallyDisabledToolNames,
744
+ ]),
745
+ );
738
746
  }
739
747
  },
740
748
  shutdown: async (reason: string) => {