@clinebot/core 0.0.35 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +53 -39
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/index.d.ts +1 -1
  5. package/dist/account/index.d.ts.map +1 -1
  6. package/dist/account/rpc.d.ts +6 -6
  7. package/dist/account/rpc.d.ts.map +1 -1
  8. package/dist/cron/index.d.ts +6 -0
  9. package/dist/cron/index.d.ts.map +1 -0
  10. package/dist/cron/resource-limiter.d.ts +9 -0
  11. package/dist/cron/resource-limiter.d.ts.map +1 -0
  12. package/dist/cron/schedule-command-service.d.ts +10 -0
  13. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  14. package/dist/cron/schedule-service.d.ts +100 -0
  15. package/dist/cron/schedule-service.d.ts.map +1 -0
  16. package/dist/cron/scheduler.d.ts +66 -0
  17. package/dist/cron/scheduler.d.ts.map +1 -0
  18. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  19. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  20. package/dist/extensions/config/agent-config-loader.d.ts +4 -3
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  23. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  24. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  25. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  27. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  28. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  29. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  30. package/dist/extensions/context/compaction.d.ts.map +1 -1
  31. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  32. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  33. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  34. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  35. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  36. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  37. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  38. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  39. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  40. package/dist/extensions/plugin-sandbox-bootstrap.js +211 -211
  41. package/dist/extensions/tools/definitions.d.ts +1 -1
  42. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  43. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  44. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  45. package/dist/extensions/tools/executors/search.d.ts +1 -1
  46. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  47. package/dist/extensions/tools/index.d.ts +2 -0
  48. package/dist/extensions/tools/index.d.ts.map +1 -1
  49. package/dist/extensions/tools/presets.d.ts +26 -43
  50. package/dist/extensions/tools/presets.d.ts.map +1 -1
  51. package/dist/extensions/tools/runtime.d.ts +25 -0
  52. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  53. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  54. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  55. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  56. package/dist/hooks/hook-file-hooks.d.ts +4 -1
  57. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  58. package/dist/hooks/index.d.ts +0 -1
  59. package/dist/hooks/index.d.ts.map +1 -1
  60. package/dist/hooks/subprocess.d.ts +8 -1
  61. package/dist/hooks/subprocess.d.ts.map +1 -1
  62. package/dist/hub/browser-websocket.d.ts +18 -0
  63. package/dist/hub/browser-websocket.d.ts.map +1 -0
  64. package/dist/hub/client.d.ts +45 -0
  65. package/dist/hub/client.d.ts.map +1 -0
  66. package/dist/hub/connect.d.ts +15 -0
  67. package/dist/hub/connect.d.ts.map +1 -0
  68. package/dist/hub/daemon-entry.d.ts +2 -0
  69. package/dist/hub/daemon-entry.d.ts.map +1 -0
  70. package/dist/hub/daemon-entry.js +1045 -0
  71. package/dist/hub/daemon.d.ts +5 -0
  72. package/dist/hub/daemon.d.ts.map +1 -0
  73. package/dist/hub/defaults.d.ts +13 -0
  74. package/dist/hub/defaults.d.ts.map +1 -0
  75. package/dist/hub/discovery.d.ts +29 -0
  76. package/dist/hub/discovery.d.ts.map +1 -0
  77. package/dist/hub/index.d.ts +15 -0
  78. package/dist/hub/index.d.ts.map +1 -0
  79. package/dist/hub/index.js +1044 -0
  80. package/dist/hub/native-transport.d.ts +17 -0
  81. package/dist/hub/native-transport.d.ts.map +1 -0
  82. package/dist/hub/runtime-handlers.d.ts +11 -0
  83. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  84. package/dist/hub/server.d.ts +86 -0
  85. package/dist/hub/server.d.ts.map +1 -0
  86. package/dist/hub/session-client.d.ts +87 -0
  87. package/dist/hub/session-client.d.ts.map +1 -0
  88. package/dist/hub/start-shared-server.d.ts +19 -0
  89. package/dist/hub/start-shared-server.d.ts.map +1 -0
  90. package/dist/hub/transport.d.ts +8 -0
  91. package/dist/hub/transport.d.ts.map +1 -0
  92. package/dist/hub/ui-client.d.ts +44 -0
  93. package/dist/hub/ui-client.d.ts.map +1 -0
  94. package/dist/hub/workspace.d.ts +4 -0
  95. package/dist/hub/workspace.d.ts.map +1 -0
  96. package/dist/index.d.ts +26 -15
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +498 -476
  99. package/dist/llms/configured-provider-registry.d.ts +28 -0
  100. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  101. package/dist/llms/provider-defaults.d.ts +27 -0
  102. package/dist/llms/provider-defaults.d.ts.map +1 -0
  103. package/dist/llms/provider-settings.d.ts +202 -0
  104. package/dist/llms/provider-settings.d.ts.map +1 -0
  105. package/dist/llms/runtime-config.d.ts +4 -0
  106. package/dist/llms/runtime-config.d.ts.map +1 -0
  107. package/dist/llms/runtime-registry.d.ts +20 -0
  108. package/dist/llms/runtime-registry.d.ts.map +1 -0
  109. package/dist/llms/runtime-types.d.ts +85 -0
  110. package/dist/llms/runtime-types.d.ts.map +1 -0
  111. package/dist/runtime/host.d.ts +1 -2
  112. package/dist/runtime/host.d.ts.map +1 -1
  113. package/dist/runtime/rules.d.ts +1 -0
  114. package/dist/runtime/rules.d.ts.map +1 -1
  115. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  116. package/dist/runtime/runtime-host.d.ts +22 -24
  117. package/dist/runtime/runtime-host.d.ts.map +1 -1
  118. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  119. package/dist/runtime/session-runtime.d.ts +1 -19
  120. package/dist/runtime/session-runtime.d.ts.map +1 -1
  121. package/dist/services/global-settings.d.ts +12 -0
  122. package/dist/services/global-settings.d.ts.map +1 -0
  123. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  124. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  125. package/dist/services/plugin-tools.d.ts +16 -0
  126. package/dist/services/plugin-tools.d.ts.map +1 -0
  127. package/dist/services/providers/local-provider-registry.d.ts +4 -4
  128. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  129. package/dist/services/providers/local-provider-service.d.ts +13 -13
  130. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  131. package/dist/services/session-data.d.ts +1 -1
  132. package/dist/services/session-data.d.ts.map +1 -1
  133. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  134. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  135. package/dist/services/telemetry/index.js +28 -15
  136. package/dist/services/workspace-manifest.d.ts +11 -0
  137. package/dist/services/workspace-manifest.d.ts.map +1 -1
  138. package/dist/session/persistence-service.d.ts +11 -23
  139. package/dist/session/persistence-service.d.ts.map +1 -1
  140. package/dist/session/session-manifest-store.d.ts +22 -0
  141. package/dist/session/session-manifest-store.d.ts.map +1 -0
  142. package/dist/session/session-row.d.ts +93 -0
  143. package/dist/session/session-row.d.ts.map +1 -0
  144. package/dist/session/session-service.d.ts +2 -102
  145. package/dist/session/session-service.d.ts.map +1 -1
  146. package/dist/session/subagent-session-manager.d.ts +36 -0
  147. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  148. package/dist/session/team-persistence-store.d.ts +24 -0
  149. package/dist/session/team-persistence-store.d.ts.map +1 -0
  150. package/dist/transports/hub.d.ts +47 -0
  151. package/dist/transports/hub.d.ts.map +1 -0
  152. package/dist/transports/local.d.ts +10 -6
  153. package/dist/transports/local.d.ts.map +1 -1
  154. package/dist/transports/remote.d.ts +10 -0
  155. package/dist/transports/remote.d.ts.map +1 -0
  156. package/dist/transports/runtime-host-support.d.ts +3 -2
  157. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  158. package/dist/types/chat-schema.d.ts +10 -12
  159. package/dist/types/chat-schema.d.ts.map +1 -1
  160. package/dist/types/config.d.ts +8 -7
  161. package/dist/types/config.d.ts.map +1 -1
  162. package/dist/types/provider-settings.d.ts +4 -5
  163. package/dist/types/provider-settings.d.ts.map +1 -1
  164. package/dist/types/session.d.ts +2 -1
  165. package/dist/types/session.d.ts.map +1 -1
  166. package/dist/types.d.ts +8 -1
  167. package/dist/types.d.ts.map +1 -1
  168. package/package.json +20 -6
  169. package/src/ClineCore.ts +68 -40
  170. package/src/account/index.ts +3 -3
  171. package/src/account/rpc.ts +12 -12
  172. package/src/cron/index.ts +5 -0
  173. package/src/cron/resource-limiter.ts +46 -0
  174. package/src/cron/schedule-command-service.ts +193 -0
  175. package/src/cron/schedule-service.ts +703 -0
  176. package/src/cron/scheduler.ts +637 -0
  177. package/src/cron/sqlite-schedule-store.ts +708 -0
  178. package/src/extensions/config/agent-config-loader.ts +17 -7
  179. package/src/extensions/config/runtime-commands.ts +6 -0
  180. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  181. package/src/extensions/context/agentic-compaction.ts +3 -3
  182. package/src/extensions/context/basic-compaction.ts +2 -2
  183. package/src/extensions/context/compaction-shared.ts +5 -4
  184. package/src/extensions/context/compaction.ts +3 -3
  185. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  186. package/src/extensions/plugin/plugin-loader.ts +48 -4
  187. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  188. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  189. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  190. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  191. package/src/extensions/tools/definitions.ts +30 -49
  192. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  193. package/src/extensions/tools/executors/search.ts +195 -3
  194. package/src/extensions/tools/index.ts +10 -0
  195. package/src/extensions/tools/presets.ts +31 -46
  196. package/src/extensions/tools/runtime.ts +261 -0
  197. package/src/extensions/tools/schemas.ts +4 -2
  198. package/src/extensions/tools/team/team-tools.ts +21 -0
  199. package/src/hooks/hook-file-hooks.ts +8 -2
  200. package/src/hooks/index.ts +0 -7
  201. package/src/hooks/subprocess-runner.ts +1 -1
  202. package/src/hooks/subprocess.ts +9 -0
  203. package/src/hub/browser-websocket.ts +137 -0
  204. package/src/hub/client.ts +574 -0
  205. package/src/hub/connect.ts +156 -0
  206. package/src/hub/daemon-entry.ts +87 -0
  207. package/src/hub/daemon.ts +181 -0
  208. package/src/hub/defaults.ts +43 -0
  209. package/src/hub/discovery.ts +247 -0
  210. package/src/hub/index.ts +14 -0
  211. package/src/hub/native-transport.ts +31 -0
  212. package/src/hub/runtime-handlers.ts +140 -0
  213. package/src/hub/server.ts +1888 -0
  214. package/src/hub/session-client.ts +460 -0
  215. package/src/hub/start-shared-server.ts +58 -0
  216. package/src/hub/transport.ts +14 -0
  217. package/src/hub/ui-client.ts +122 -0
  218. package/src/hub/workspace.ts +19 -0
  219. package/src/index.ts +124 -68
  220. package/src/llms/configured-provider-registry.ts +193 -0
  221. package/src/llms/provider-defaults.ts +637 -0
  222. package/src/llms/provider-settings.ts +263 -0
  223. package/src/llms/runtime-config.ts +43 -0
  224. package/src/llms/runtime-registry.ts +171 -0
  225. package/src/llms/runtime-types.ts +121 -0
  226. package/src/runtime/host.ts +107 -269
  227. package/src/runtime/index.ts +1 -0
  228. package/src/runtime/rules.ts +12 -0
  229. package/src/runtime/runtime-builder.ts +24 -8
  230. package/src/runtime/runtime-host.ts +89 -61
  231. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  232. package/src/runtime/session-runtime.ts +0 -24
  233. package/src/services/global-settings.ts +122 -0
  234. package/src/services/local-runtime-bootstrap.ts +51 -13
  235. package/src/services/plugin-tools.ts +85 -0
  236. package/src/services/providers/local-provider-registry.ts +6 -6
  237. package/src/services/providers/local-provider-service.ts +42 -37
  238. package/src/services/session-data.ts +15 -9
  239. package/src/services/storage/provider-settings-legacy-migration.ts +6 -4
  240. package/src/services/storage/provider-settings-manager.ts +1 -1
  241. package/src/services/workspace-manifest.ts +18 -0
  242. package/src/session/file-session-service.ts +1 -1
  243. package/src/session/index.ts +6 -27
  244. package/src/session/persistence-service.ts +119 -504
  245. package/src/session/session-manifest-store.ts +158 -0
  246. package/src/session/session-row.ts +199 -0
  247. package/src/session/session-service.ts +17 -376
  248. package/src/session/session-team-coordination.ts +1 -1
  249. package/src/session/subagent-session-manager.ts +397 -0
  250. package/src/session/team-persistence-store.ts +176 -0
  251. package/src/transports/hub.ts +656 -0
  252. package/src/transports/local.ts +135 -40
  253. package/src/transports/remote.ts +26 -0
  254. package/src/transports/runtime-host-support.ts +63 -9
  255. package/src/types/chat-schema.ts +4 -5
  256. package/src/types/config.ts +8 -7
  257. package/src/types/provider-settings.ts +11 -7
  258. package/src/types/session.ts +2 -4
  259. package/src/types.ts +27 -1
  260. package/dist/hooks/persistent.d.ts +0 -64
  261. package/dist/hooks/persistent.d.ts.map +0 -1
  262. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  263. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  264. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  265. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  266. package/dist/session/rpc-session-service.d.ts +0 -16
  267. package/dist/session/rpc-session-service.d.ts.map +0 -1
  268. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  269. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  270. package/dist/transports/rpc.d.ts +0 -51
  271. package/dist/transports/rpc.d.ts.map +0 -1
  272. package/src/ClineCore.test.ts +0 -226
  273. package/src/account/cline-account-service.test.ts +0 -185
  274. package/src/account/featurebase-token.test.ts +0 -175
  275. package/src/account/rpc.test.ts +0 -63
  276. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  277. package/src/auth/client.test.ts +0 -69
  278. package/src/auth/cline.test.ts +0 -267
  279. package/src/auth/codex.test.ts +0 -170
  280. package/src/auth/oca.test.ts +0 -340
  281. package/src/auth/server.test.ts +0 -287
  282. package/src/auth/utils.test.ts +0 -128
  283. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  284. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  285. package/src/extensions/config/runtime-commands.test.ts +0 -115
  286. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  287. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  288. package/src/extensions/context/compaction.test.ts +0 -483
  289. package/src/extensions/mcp/config-loader.test.ts +0 -238
  290. package/src/extensions/mcp/manager.test.ts +0 -105
  291. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  292. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  293. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  294. package/src/extensions/tools/definitions.test.ts +0 -780
  295. package/src/extensions/tools/executors/bash.test.ts +0 -87
  296. package/src/extensions/tools/executors/editor.test.ts +0 -35
  297. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  298. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  299. package/src/extensions/tools/presets.test.ts +0 -70
  300. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  301. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  302. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  303. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  304. package/src/hooks/hook-file-hooks.test.ts +0 -311
  305. package/src/hooks/persistent.ts +0 -661
  306. package/src/runtime/history.test.ts +0 -114
  307. package/src/runtime/host.test.ts +0 -230
  308. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  309. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  310. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  311. package/src/runtime/rpc-spawn-lease.ts +0 -156
  312. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  313. package/src/runtime/runtime-builder.test.ts +0 -615
  314. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  315. package/src/runtime/runtime-parity.test.ts +0 -143
  316. package/src/services/providers/local-provider-service.test.ts +0 -1062
  317. package/src/services/session-data.test.ts +0 -160
  318. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  319. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  320. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  322. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  323. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  324. package/src/services/telemetry/distinct-id.test.ts +0 -57
  325. package/src/services/workspace/file-indexer.d.ts +0 -11
  326. package/src/services/workspace/file-indexer.test.ts +0 -156
  327. package/src/services/workspace/mention-enricher.test.ts +0 -106
  328. package/src/session/persistence-service.test.ts +0 -300
  329. package/src/session/rpc-session-service.ts +0 -114
  330. package/src/session/session-service.team-persistence.test.ts +0 -48
  331. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  332. package/src/transports/local.e2e.test.ts +0 -380
  333. package/src/transports/local.test.ts +0 -2559
  334. package/src/transports/rpc.test.ts +0 -82
  335. package/src/transports/rpc.ts +0 -665
@@ -1,42 +1,17 @@
1
- import { spawn } from "node:child_process";
2
- import { closeSync, existsSync, mkdirSync, openSync } from "node:fs";
3
- import { dirname, join, resolve } from "node:path";
4
- import { getRpcServerDefaultAddress, getRpcServerHealth } from "@clinebot/rpc";
5
- import {
6
- augmentNodeCommandForDebug,
7
- withResolvedClineBuildEnv,
8
- } from "@clinebot/shared";
9
- import {
10
- resolveClineDataDir,
11
- resolveSessionDataDir,
12
- } from "@clinebot/shared/storage";
13
1
  import type { ClineCoreOptions } from "../ClineCore";
2
+ import {
3
+ ensureCompatibleLocalHubUrl,
4
+ resolveCompatibleLocalHubUrl,
5
+ } from "../hub/client";
14
6
  import { SqliteSessionStore } from "../services/storage/sqlite-session-store";
15
7
  import { resolveCoreDistinctId } from "../services/telemetry/distinct-id";
16
8
  import { FileSessionService } from "../session/file-session-service";
17
- import { RpcCoreSessionService } from "../session/rpc-session-service";
18
9
  import { CoreSessionService } from "../session/session-service";
10
+ import { HubRuntimeHost } from "../transports/hub";
19
11
  import { LocalRuntimeHost } from "../transports/local";
20
- import { RpcRuntimeHost } from "../transports/rpc";
21
- import {
22
- ensureRpcRuntimeAddress,
23
- RPC_BUILD_ID_ENV,
24
- RPC_DISCOVERY_PATH_ENV,
25
- RPC_OWNER_ID_ENV,
26
- RPC_STARTUP_LOCK_BYPASS_ENV,
27
- type RpcOwnerContext,
28
- resolveRpcOwnerContext,
29
- } from "./rpc-runtime-ensure";
30
- import { tryAcquireRpcSpawnLease } from "./rpc-spawn-lease";
12
+ import { RemoteRuntimeHost } from "../transports/remote";
31
13
  import type { RuntimeHost, RuntimeHostMode } from "./runtime-host";
32
14
 
33
- const DEFAULT_RPC_ADDRESS =
34
- process.env.CLINE_RPC_ADDRESS?.trim() || getRpcServerDefaultAddress();
35
-
36
- function requiresLocalRuntimeHost(options: ClineCoreOptions): boolean {
37
- return !!options.defaultToolExecutors || !!options.teamToolsFactory;
38
- }
39
-
40
15
  function resolveConfiguredBackendMode(
41
16
  options: ClineCoreOptions,
42
17
  ): RuntimeHostMode {
@@ -47,16 +22,13 @@ function resolveConfiguredBackendMode(
47
22
  return "local";
48
23
  }
49
24
  const raw = process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();
50
- if (raw === "rpc" || raw === "local") {
25
+ if (raw === "local" || raw === "hub" || raw === "remote") {
51
26
  return raw;
52
27
  }
53
28
  return "auto";
54
29
  }
55
30
 
56
- export type SessionBackend =
57
- | RpcCoreSessionService
58
- | CoreSessionService
59
- | FileSessionService;
31
+ export type SessionBackend = CoreSessionService | FileSessionService;
60
32
 
61
33
  let cachedBackend: SessionBackend | undefined;
62
34
  let backendInitPromise: Promise<SessionBackend> | undefined;
@@ -70,130 +42,6 @@ async function reconcileDeadSessionsIfSupported(
70
42
  await service.reconcileDeadSessions?.().catch(() => {});
71
43
  }
72
44
 
73
- function openRpcSidecarLogFile(): { fd: number; logPath: string } | undefined {
74
- try {
75
- const logPath = join(resolveClineDataDir(), "logs", "rpc-sidecar.log");
76
- mkdirSync(dirname(logPath), { recursive: true });
77
- return { fd: openSync(logPath, "a"), logPath };
78
- } catch {
79
- return undefined;
80
- }
81
- }
82
-
83
- function startRpcServerInBackground(
84
- address: string,
85
- owner: RpcOwnerContext,
86
- logger?: ClineCoreOptions["logger"],
87
- ): void {
88
- const lease = tryAcquireRpcSpawnLease(address);
89
- if (!lease) {
90
- logger?.log("RPC sidecar spawn skipped", {
91
- address,
92
- reason: "spawn_lease_unavailable",
93
- severity: "warn",
94
- });
95
- return;
96
- }
97
- const launcher = process.execPath;
98
- const entryArg = process.argv[1]?.trim();
99
- if (!entryArg) {
100
- lease.release();
101
- logger?.error?.("RPC sidecar spawn aborted", {
102
- address,
103
- reason: "missing_process_entry_arg",
104
- });
105
- return;
106
- }
107
- const entry = resolve(process.cwd(), entryArg);
108
- if (!existsSync(entry)) {
109
- lease.release();
110
- logger?.error?.("RPC sidecar spawn aborted", {
111
- address,
112
- reason: "entrypoint_missing",
113
- entryPath: entry,
114
- });
115
- return;
116
- }
117
- const conditionsArg = process.execArgv.find((arg) =>
118
- arg.startsWith("--conditions="),
119
- );
120
- const command = augmentNodeCommandForDebug(
121
- [
122
- launcher,
123
- ...(conditionsArg ? [conditionsArg] : []),
124
- entry,
125
- "rpc",
126
- "start",
127
- "--address",
128
- address,
129
- ],
130
- { debugRole: "rpc" },
131
- );
132
- const sidecarLog = openRpcSidecarLogFile();
133
- logger?.log("Launching detached RPC sidecar", {
134
- address,
135
- command: command.join(" "),
136
- commandArgs: command.slice(1),
137
- executable: command[0] ?? launcher,
138
- entryPath: entry,
139
- cwd: process.cwd(),
140
- logPath: sidecarLog?.logPath,
141
- });
142
- try {
143
- const child = spawn(command[0] ?? launcher, command.slice(1), {
144
- detached: true,
145
- stdio: sidecarLog ? ["ignore", sidecarLog.fd, sidecarLog.fd] : "ignore",
146
- env: {
147
- ...withResolvedClineBuildEnv(process.env),
148
- [RPC_STARTUP_LOCK_BYPASS_ENV]: "1",
149
- [RPC_OWNER_ID_ENV]: owner.ownerId,
150
- [RPC_BUILD_ID_ENV]: owner.buildId,
151
- [RPC_DISCOVERY_PATH_ENV]: owner.discoveryPath,
152
- CLINE_NO_INTERACTIVE: "1",
153
- },
154
- cwd: process.cwd(),
155
- });
156
- logger?.log("Detached RPC sidecar spawned", {
157
- address,
158
- childPid: child.pid,
159
- logPath: sidecarLog?.logPath,
160
- });
161
- child.unref();
162
- setTimeout(() => lease.release(), 10_000).unref();
163
- } catch (error) {
164
- lease.release();
165
- logger?.error?.("RPC sidecar spawn failed", {
166
- address,
167
- logPath: sidecarLog?.logPath,
168
- error,
169
- });
170
- throw error;
171
- } finally {
172
- if (sidecarLog) {
173
- closeSync(sidecarLog.fd);
174
- }
175
- }
176
- }
177
-
178
- async function tryConnectRpcBackend(
179
- address: string,
180
- options: ClineCoreOptions,
181
- ): Promise<RpcCoreSessionService | undefined> {
182
- try {
183
- const health = await getRpcServerHealth(address);
184
- if (!health) {
185
- return undefined;
186
- }
187
- return new RpcCoreSessionService({
188
- address,
189
- sessionsDir: resolveSessionDataDir(),
190
- messagesArtifactUploader: options.messagesArtifactUploader,
191
- });
192
- } catch {
193
- return undefined;
194
- }
195
- }
196
-
197
45
  function createLocalBackend(options: ClineCoreOptions): SessionBackend {
198
46
  try {
199
47
  const store = new SqliteSessionStore();
@@ -202,7 +50,7 @@ function createLocalBackend(options: ClineCoreOptions): SessionBackend {
202
50
  messagesArtifactUploader: options.messagesArtifactUploader,
203
51
  });
204
52
  } catch {
205
- // Fallback to file-based session service if SQLite is unavailable (e.g. due to missing native bindings on certain platforms)
53
+ // Fallback to file-based session service if SQLite is unavailable.
206
54
  options.telemetry?.capture({
207
55
  event: "session_backend_fallback",
208
56
  properties: {
@@ -216,6 +64,23 @@ function createLocalBackend(options: ClineCoreOptions): SessionBackend {
216
64
  }
217
65
  }
218
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
+
219
84
  export async function resolveSessionBackend(
220
85
  options: ClineCoreOptions,
221
86
  ): Promise<SessionBackend> {
@@ -226,83 +91,7 @@ export async function resolveSessionBackend(
226
91
  return await backendInitPromise;
227
92
  }
228
93
 
229
- const mode = resolveConfiguredBackendMode(options);
230
- const requestedAddress = options.rpc?.address?.trim() || DEFAULT_RPC_ADDRESS;
231
- const attempts = Math.max(1, options.rpc?.connectAttempts ?? 5);
232
- const delayMs = Math.max(0, options.rpc?.connectDelayMs ?? 100);
233
- const autoStartRpc = options.rpc?.autoStart !== false;
234
- const logger = options.logger;
235
-
236
94
  backendInitPromise = (async () => {
237
- if (mode === "local") {
238
- cachedBackend = createLocalBackend(options);
239
- await reconcileDeadSessionsIfSupported(cachedBackend);
240
- return cachedBackend;
241
- }
242
-
243
- let address = requestedAddress;
244
- const existingRpcBackend = await tryConnectRpcBackend(address, options);
245
- if (existingRpcBackend) {
246
- logger?.log("Connected to existing RPC session backend", { address });
247
- cachedBackend = existingRpcBackend;
248
- await reconcileDeadSessionsIfSupported(cachedBackend);
249
- return cachedBackend;
250
- }
251
-
252
- if (mode === "rpc") {
253
- throw new Error(`RPC backend unavailable at ${address}`);
254
- }
255
-
256
- if (autoStartRpc) {
257
- try {
258
- logger?.log("Ensuring RPC runtime for auto session backend", {
259
- address,
260
- });
261
- const ensured = await ensureRpcRuntimeAddress(address, {
262
- resolveOwner: () => resolveRpcOwnerContext({ ownerPrefix: "core" }),
263
- spawnIfNeeded: (rpcAddress, owner) => {
264
- startRpcServerInBackground(rpcAddress, owner, logger);
265
- },
266
- });
267
- address = ensured.address;
268
- logger?.log("RPC runtime ensure completed", {
269
- requestedAddress,
270
- address,
271
- action: ensured.action,
272
- });
273
- } catch (error) {
274
- logger?.error?.("RPC backend auto-start failed", {
275
- address,
276
- requestedAddress,
277
- error,
278
- });
279
- }
280
-
281
- for (let attempt = 0; attempt < attempts; attempt += 1) {
282
- const rpcBackend = await tryConnectRpcBackend(address, options);
283
- if (rpcBackend) {
284
- logger?.log("Connected to ensured RPC session backend", {
285
- address,
286
- attempt: attempt + 1,
287
- attempts,
288
- });
289
- cachedBackend = rpcBackend;
290
- await reconcileDeadSessionsIfSupported(cachedBackend);
291
- return cachedBackend;
292
- }
293
- if (delayMs > 0) {
294
- await new Promise((resolve) => setTimeout(resolve, delayMs));
295
- }
296
- }
297
- }
298
-
299
- logger?.log("Falling back to local session backend", {
300
- requestedAddress,
301
- address,
302
- attempts,
303
- delayMs,
304
- severity: "warn",
305
- });
306
95
  cachedBackend = createLocalBackend(options);
307
96
  await reconcileDeadSessionsIfSupported(cachedBackend);
308
97
  return cachedBackend;
@@ -319,44 +108,93 @@ export async function createRuntimeHost(
319
108
  const distinctId = resolveCoreDistinctId(options.distinctId);
320
109
  options.telemetry?.setDistinctId(distinctId);
321
110
  const configuredMode = resolveConfiguredBackendMode(options);
322
- if (requiresLocalRuntimeHost(options)) {
323
- if (configuredMode === "rpc") {
111
+ if (configuredMode === "remote") {
112
+ const remoteEndpoint = options.remote?.endpoint?.trim();
113
+ if (!remoteEndpoint) {
324
114
  throw new Error(
325
- "RPC runtime mode does not support local-only runtime host options such as custom tool executors or team tools factories.",
115
+ "Remote runtime mode requires `remote.endpoint` to be configured.",
326
116
  );
327
117
  }
328
- options.logger?.log("Using local runtime host due to local-only options", {
329
- configuredMode,
330
- hasDefaultToolExecutors: !!options.defaultToolExecutors,
331
- hasTeamToolsFactory: !!options.teamToolsFactory,
118
+ options.logger?.log("Using remote runtime host", {
119
+ endpoint: remoteEndpoint,
332
120
  });
333
- const backend = options.sessionService ?? createLocalBackend(options);
334
- return new LocalRuntimeHost({
335
- sessionService: backend,
336
- defaultToolExecutors: options.defaultToolExecutors,
337
- teamToolsFactory: options.teamToolsFactory,
338
- telemetry: options.telemetry,
339
- toolPolicies: options.toolPolicies,
340
- requestToolApproval: options.requestToolApproval,
341
- distinctId,
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,
342
128
  });
343
129
  }
344
- const backend =
345
- options.sessionService ?? (await resolveSessionBackend(options));
346
- if (backend instanceof RpcCoreSessionService) {
347
- return new RpcRuntimeHost(
348
- backend,
349
- options.toolPolicies,
350
- options.requestToolApproval,
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
+ },
351
157
  );
352
158
  }
353
- return new LocalRuntimeHost({
354
- sessionService: backend,
355
- defaultToolExecutors: options.defaultToolExecutors,
356
- teamToolsFactory: options.teamToolsFactory,
357
- telemetry: options.telemetry,
358
- toolPolicies: options.toolPolicies,
359
- requestToolApproval: options.requestToolApproval,
360
- distinctId,
361
- });
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);
362
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[] {
@@ -32,6 +32,10 @@ import {
32
32
  createDelegatedAgentConfigProvider,
33
33
  type TeamEvent,
34
34
  } from "../extensions/tools/team";
35
+ import {
36
+ filterDisabledTools,
37
+ resolveDisabledToolNames,
38
+ } from "../services/global-settings";
35
39
  import { createLocalTeamStore } from "../services/storage/team-store";
36
40
  import type { CoreAgentMode, CoreSessionConfig } from "../types/config";
37
41
  import type {
@@ -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
  }
@@ -96,7 +107,7 @@ function createBuiltinToolsList(
96
107
  toolRoutingRules ?? DEFAULT_MODEL_TOOL_ROUTING_RULES,
97
108
  );
98
109
 
99
- return filterToolsByPolicies(
110
+ return filterAvailableTools(
100
111
  createBuiltinTools({
101
112
  cwd,
102
113
  ...preset,
@@ -478,8 +489,10 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
478
489
  } = input;
479
490
  const onTeamEvent = input.onTeamEvent ?? (() => {});
480
491
  const normalized = normalizeConfig(config);
492
+ const globallyDisabledToolNames = resolveDisabledToolNames();
481
493
  const tools: Tool[] = [];
482
494
  const effectiveTeamName = config.teamName?.trim() || createTeamName();
495
+ const teamStoreKey = config.sessionId?.trim() || effectiveTeamName;
483
496
  const hasLocalSkills = hasSkillsFiles(config.cwd);
484
497
  let teamToolsRegistered = false;
485
498
  const watcherProvided = Boolean(sharedUserInstructionWatcher);
@@ -535,7 +548,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
535
548
  const teamStore = normalized.enableAgentTeams
536
549
  ? createLocalTeamStore()
537
550
  : undefined;
538
- const restoredTeam = teamStore?.loadRuntime(effectiveTeamName);
551
+ const restoredTeam = teamStore?.loadRuntime(teamStoreKey);
539
552
  const restoredTeamState = restoredTeam?.state;
540
553
  const restoredTeammateSpecs = restoredTeam?.teammates ?? [];
541
554
  const teammateSpecs = new Map(
@@ -606,9 +619,9 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
606
619
  if (event.type === "teammate_shutdown") {
607
620
  teammateSpecs.delete(event.agentId);
608
621
  }
609
- teamStore.handleTeamEvent(effectiveTeamName, event);
622
+ teamStore.handleTeamEvent(teamStoreKey, event);
610
623
  teamStore.persistRuntime(
611
- effectiveTeamName,
624
+ teamStoreKey,
612
625
  teamRuntime.exportState(),
613
626
  Array.from(teammateSpecs.values()),
614
627
  );
@@ -628,8 +641,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
628
641
  }
629
642
  teamToolsRegistered = true;
630
643
 
631
- const factory = input.teamToolsFactory ?? bootstrapAgentTeams;
632
- const teamBootstrap = factory({
644
+ const teamBootstrap = bootstrapAgentTeams({
633
645
  runtime: teamRuntime,
634
646
  leadAgentId: config.sessionId || "lead",
635
647
  restoredFromPersistence: Boolean(restoredTeamState),
@@ -714,7 +726,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
714
726
  : undefined;
715
727
 
716
728
  return {
717
- tools: filterToolsByPolicies(tools, config.toolPolicies),
729
+ tools: filterAvailableTools(tools, config.toolPolicies),
718
730
  logger: logger ?? config.logger,
719
731
  telemetry: telemetry ?? config.telemetry,
720
732
  teamRuntime,
@@ -726,7 +738,11 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
726
738
  registerLeadAgent: (agent) => {
727
739
  leadAgentInstance = agent;
728
740
  if (pendingLeadTeamTools.length > 0) {
729
- agent.addTools(pendingLeadTeamTools);
741
+ agent.addTools(
742
+ filterDisabledTools(pendingLeadTeamTools, [
743
+ ...globallyDisabledToolNames,
744
+ ]),
745
+ );
730
746
  }
731
747
  },
732
748
  shutdown: async (reason: string) => {