@clinebot/core 0.0.34 → 0.0.35

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 (372) hide show
  1. package/README.md +12 -8
  2. package/dist/ClineCore.d.ts +48 -29
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/extensions/config/agent-config-loader.d.ts +2 -2
  5. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  6. package/dist/extensions/config/agent-config-parser.d.ts +1 -1
  7. package/dist/extensions/config/agent-config-parser.d.ts.map +1 -1
  8. package/dist/extensions/config/hooks-config-loader.d.ts +2 -2
  9. package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -1
  10. package/dist/extensions/config/index.d.ts +3 -3
  11. package/dist/extensions/config/index.d.ts.map +1 -1
  12. package/dist/extensions/config/user-instruction-config-loader.d.ts +2 -2
  13. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  14. package/dist/extensions/plugin-sandbox-bootstrap.js +248 -248
  15. package/dist/extensions/tools/constants.d.ts.map +1 -0
  16. package/dist/extensions/tools/definitions.d.ts.map +1 -0
  17. package/dist/extensions/tools/executors/apply-patch-parser.d.ts.map +1 -0
  18. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -0
  19. package/dist/extensions/tools/executors/bash.d.ts.map +1 -0
  20. package/dist/extensions/tools/executors/editor.d.ts.map +1 -0
  21. package/dist/extensions/tools/executors/file-read.d.ts.map +1 -0
  22. package/dist/extensions/tools/executors/index.d.ts.map +1 -0
  23. package/dist/extensions/tools/executors/search.d.ts.map +1 -0
  24. package/dist/extensions/tools/executors/web-fetch.d.ts.map +1 -0
  25. package/dist/extensions/tools/helpers.d.ts.map +1 -0
  26. package/dist/extensions/tools/index.d.ts.map +1 -0
  27. package/dist/{tools → extensions/tools}/model-tool-routing.d.ts +1 -1
  28. package/dist/extensions/tools/model-tool-routing.d.ts.map +1 -0
  29. package/dist/{tools → extensions/tools}/presets.d.ts +1 -2
  30. package/dist/extensions/tools/presets.d.ts.map +1 -0
  31. package/dist/extensions/tools/schemas.d.ts.map +1 -0
  32. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -0
  33. package/dist/extensions/tools/team/index.d.ts.map +1 -0
  34. package/dist/{team → extensions/tools/team}/multi-agent.d.ts +1 -3
  35. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -0
  36. package/dist/extensions/tools/team/projections.d.ts.map +1 -0
  37. package/dist/extensions/tools/team/runtime.d.ts.map +1 -0
  38. package/dist/{team → extensions/tools/team}/spawn-agent-tool.d.ts +0 -1
  39. package/dist/extensions/tools/team/spawn-agent-tool.d.ts.map +1 -0
  40. package/dist/extensions/tools/team/subagent-prompts.d.ts.map +1 -0
  41. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -0
  42. package/dist/{tools → extensions/tools}/types.d.ts +4 -3
  43. package/dist/extensions/tools/types.d.ts.map +1 -0
  44. package/dist/{runtime → hooks}/checkpoint-hooks.d.ts +7 -0
  45. package/dist/hooks/checkpoint-hooks.d.ts.map +1 -0
  46. package/dist/{runtime → hooks}/hook-file-hooks.d.ts +0 -2
  47. package/dist/hooks/hook-file-hooks.d.ts.map +1 -0
  48. package/dist/hooks/subprocess.d.ts +3 -130
  49. package/dist/hooks/subprocess.d.ts.map +1 -1
  50. package/dist/index.d.ts +35 -33
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +381 -379
  53. package/dist/runtime/history.d.ts +4 -0
  54. package/dist/runtime/history.d.ts.map +1 -0
  55. package/dist/runtime/host.d.ts +9 -0
  56. package/dist/runtime/host.d.ts.map +1 -0
  57. package/dist/{session → runtime}/rpc-runtime-ensure.d.ts +13 -1
  58. package/dist/{session → runtime}/rpc-runtime-ensure.d.ts.map +1 -1
  59. package/dist/{session → runtime}/rpc-spawn-lease.d.ts.map +1 -1
  60. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  61. package/dist/{session/session-manager.d.ts → runtime/runtime-host.d.ts} +55 -12
  62. package/dist/runtime/runtime-host.d.ts.map +1 -0
  63. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts +1 -1
  64. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts.map +1 -1
  65. package/dist/runtime/session-runtime.d.ts +2 -2
  66. package/dist/runtime/session-runtime.d.ts.map +1 -1
  67. package/dist/{session/session-agent-events.d.ts → services/agent-events.d.ts} +4 -4
  68. package/dist/services/agent-events.d.ts.map +1 -0
  69. package/dist/services/config.d.ts +3 -0
  70. package/dist/services/config.d.ts.map +1 -0
  71. package/dist/services/local-runtime-bootstrap.d.ts +41 -0
  72. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -0
  73. package/dist/services/providers/local-provider-registry.d.ts.map +1 -0
  74. package/dist/services/providers/local-provider-service.d.ts.map +1 -0
  75. package/dist/{session → services}/session-artifacts.d.ts +0 -4
  76. package/dist/services/session-artifacts.d.ts.map +1 -0
  77. package/dist/{session/utils/helpers.d.ts → services/session-data.d.ts} +19 -27
  78. package/dist/services/session-data.d.ts.map +1 -0
  79. package/dist/{session → services}/session-telemetry.d.ts +2 -2
  80. package/dist/services/session-telemetry.d.ts.map +1 -0
  81. package/dist/{storage → services/storage}/file-team-store.d.ts +2 -2
  82. package/dist/services/storage/file-team-store.d.ts.map +1 -0
  83. package/dist/{storage → services/storage}/provider-settings-legacy-migration.d.ts +1 -1
  84. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  85. package/dist/{storage → services/storage}/provider-settings-manager.d.ts +1 -1
  86. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -0
  87. package/dist/{storage → services/storage}/sqlite-session-store.d.ts +3 -3
  88. package/dist/services/storage/sqlite-session-store.d.ts.map +1 -0
  89. package/dist/{storage → services/storage}/sqlite-team-store.d.ts +2 -2
  90. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -0
  91. package/dist/{storage → services/storage}/team-store.d.ts +1 -1
  92. package/dist/services/storage/team-store.d.ts.map +1 -0
  93. package/dist/services/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  94. package/dist/services/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  95. package/dist/services/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  96. package/dist/services/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
  97. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  98. package/dist/services/telemetry/core-events.d.ts.map +1 -0
  99. package/dist/services/telemetry/distinct-id.d.ts.map +1 -0
  100. package/dist/services/telemetry/index.d.ts.map +1 -0
  101. package/dist/{telemetry → services/telemetry}/index.js +6 -6
  102. package/dist/{session/utils → services}/usage.d.ts +1 -1
  103. package/dist/services/usage.d.ts.map +1 -0
  104. package/dist/services/workspace/file-indexer.d.ts.map +1 -0
  105. package/dist/services/workspace/index.d.ts.map +1 -0
  106. package/dist/services/workspace/mention-enricher.d.ts.map +1 -0
  107. package/dist/services/workspace-manifest.d.ts.map +1 -0
  108. package/dist/session/file-session-service.d.ts +4 -1
  109. package/dist/session/file-session-service.d.ts.map +1 -1
  110. package/dist/session/persistence-service.d.ts +8 -6
  111. package/dist/session/persistence-service.d.ts.map +1 -1
  112. package/dist/session/rpc-session-service.d.ts +3 -0
  113. package/dist/session/rpc-session-service.d.ts.map +1 -1
  114. package/dist/session/session-service.d.ts +8 -9
  115. package/dist/session/session-service.d.ts.map +1 -1
  116. package/dist/session/session-team-coordination.d.ts +4 -4
  117. package/dist/session/session-team-coordination.d.ts.map +1 -1
  118. package/dist/session/sqlite-rpc-session-backend.d.ts.map +1 -1
  119. package/dist/{session/default-session-manager.d.ts → transports/local.d.ts} +24 -14
  120. package/dist/transports/local.d.ts.map +1 -0
  121. package/dist/transports/rpc.d.ts +51 -0
  122. package/dist/transports/rpc.d.ts.map +1 -0
  123. package/dist/transports/runtime-host-support.d.ts +21 -0
  124. package/dist/transports/runtime-host-support.d.ts.map +1 -0
  125. package/dist/types/chat-schema.d.ts.map +1 -0
  126. package/dist/types/config.d.ts +2 -2
  127. package/dist/types/config.d.ts.map +1 -1
  128. package/dist/{session/utils/types.d.ts → types/session.d.ts} +15 -6
  129. package/dist/types/session.d.ts.map +1 -0
  130. package/dist/types/sessions.d.ts +19 -0
  131. package/dist/types/sessions.d.ts.map +1 -1
  132. package/dist/types/storage.d.ts +1 -3
  133. package/dist/types/storage.d.ts.map +1 -1
  134. package/dist/types.d.ts +7 -6
  135. package/dist/types.d.ts.map +1 -1
  136. package/package.json +7 -12
  137. package/src/ClineCore.test.ts +95 -19
  138. package/src/ClineCore.ts +120 -50
  139. package/src/auth/cline.ts +1 -1
  140. package/src/auth/codex.ts +1 -1
  141. package/src/auth/oca.ts +1 -1
  142. package/src/extensions/config/agent-config-loader.test.ts +3 -3
  143. package/src/extensions/config/agent-config-loader.ts +1 -5
  144. package/src/extensions/config/agent-config-parser.ts +1 -1
  145. package/src/extensions/config/hooks-config-loader.ts +1 -2
  146. package/src/extensions/config/index.ts +0 -4
  147. package/src/extensions/config/user-instruction-config-loader.ts +0 -4
  148. package/src/extensions/plugin/plugin-config-loader.test.ts +6 -4
  149. package/src/{tools → extensions/tools}/definitions.ts +1 -1
  150. package/src/extensions/tools/executors/file-read.test.ts +125 -0
  151. package/src/{tools → extensions/tools}/executors/file-read.ts +29 -4
  152. package/src/{tools → extensions/tools}/executors/search.ts +1 -1
  153. package/src/{tools → extensions/tools}/model-tool-routing.ts +1 -1
  154. package/src/{tools → extensions/tools}/presets.ts +2 -3
  155. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +455 -0
  156. package/src/{team → extensions/tools/team}/multi-agent.ts +80 -17
  157. package/src/{team → extensions/tools/team}/spawn-agent-tool.test.ts +0 -6
  158. package/src/{team → extensions/tools/team}/spawn-agent-tool.ts +1 -7
  159. package/src/{team → extensions/tools/team}/subagent-prompts.ts +2 -2
  160. package/src/{team → extensions/tools/team}/team-tools.test.ts +43 -31
  161. package/src/{team → extensions/tools/team}/team-tools.ts +63 -53
  162. package/src/{tools → extensions/tools}/types.ts +5 -3
  163. package/src/{runtime → hooks}/checkpoint-hooks.ts +27 -0
  164. package/src/{runtime → hooks}/hook-file-hooks.ts +6 -11
  165. package/src/hooks/subprocess.ts +48 -257
  166. package/src/index.ts +167 -158
  167. package/src/runtime/history.test.ts +114 -0
  168. package/src/runtime/history.ts +237 -0
  169. package/src/runtime/host.test.ts +230 -0
  170. package/src/runtime/host.ts +362 -0
  171. package/src/runtime/rpc-runtime-ensure.test.ts +123 -0
  172. package/src/{session → runtime}/rpc-runtime-ensure.ts +165 -27
  173. package/src/{session → runtime}/rpc-spawn-lease.test.ts +33 -1
  174. package/src/{session → runtime}/rpc-spawn-lease.ts +54 -20
  175. package/src/runtime/runtime-builder.team-persistence.test.ts +6 -3
  176. package/src/runtime/runtime-builder.test.ts +3 -4
  177. package/src/runtime/runtime-builder.ts +13 -21
  178. package/src/runtime/runtime-host.ts +178 -0
  179. package/src/{session → runtime}/runtime-oauth-token-manager.ts +1 -1
  180. package/src/runtime/runtime-parity.test.ts +1 -1
  181. package/src/runtime/session-runtime.ts +2 -2
  182. package/src/{session/session-agent-events.ts → services/agent-events.ts} +7 -7
  183. package/src/services/config.ts +5 -0
  184. package/src/services/local-runtime-bootstrap.ts +280 -0
  185. package/src/{providers → services/providers}/local-provider-service.ts +4 -4
  186. package/src/{session → services}/session-artifacts.ts +7 -19
  187. package/src/{session/utils/helpers.test.ts → services/session-data.test.ts} +1 -1
  188. package/src/{session/utils/helpers.ts → services/session-data.ts} +76 -72
  189. package/src/{session → services}/session-telemetry.ts +7 -9
  190. package/src/services/storage/artifact-store.ts +1 -0
  191. package/src/{storage → services/storage}/file-team-store.ts +2 -2
  192. package/src/{storage → services/storage}/provider-settings-legacy-migration.test.ts +1 -1
  193. package/src/{storage → services/storage}/provider-settings-legacy-migration.ts +2 -2
  194. package/src/{storage → services/storage}/provider-settings-manager.ts +2 -2
  195. package/src/services/storage/session-store.ts +1 -0
  196. package/src/{storage → services/storage}/sqlite-session-store.ts +7 -12
  197. package/src/{storage → services/storage}/sqlite-team-store.ts +4 -4
  198. package/src/{storage → services/storage}/team-store.ts +1 -1
  199. package/src/{session/utils → services}/usage.ts +1 -1
  200. package/src/{input → services/workspace}/file-indexer.test.ts +30 -1
  201. package/src/{input → services/workspace}/file-indexer.ts +26 -2
  202. package/src/{input → services/workspace}/mention-enricher.test.ts +21 -0
  203. package/src/{input → services/workspace}/mention-enricher.ts +1 -1
  204. package/src/session/file-session-service.ts +9 -7
  205. package/src/session/index.ts +25 -17
  206. package/src/session/persistence-service.test.ts +86 -27
  207. package/src/session/persistence-service.ts +104 -103
  208. package/src/session/rpc-session-service.ts +9 -2
  209. package/src/session/session-service.team-persistence.test.ts +1 -1
  210. package/src/session/session-service.ts +32 -19
  211. package/src/session/session-team-coordination.ts +13 -6
  212. package/src/session/sqlite-rpc-session-backend.ts +4 -6
  213. package/src/session/workspace-manager.ts +1 -1
  214. package/src/{session/default-session-manager.e2e.test.ts → transports/local.e2e.test.ts} +13 -17
  215. package/src/{session/default-session-manager.test.ts → transports/local.test.ts} +316 -230
  216. package/src/{session/default-session-manager.ts → transports/local.ts} +137 -169
  217. package/src/transports/rpc.test.ts +82 -0
  218. package/src/transports/rpc.ts +665 -0
  219. package/src/transports/runtime-host-support.ts +86 -0
  220. package/src/types/config.ts +2 -2
  221. package/src/{session/utils/types.ts → types/session.ts} +18 -5
  222. package/src/types/sessions.ts +21 -0
  223. package/src/types/storage.ts +1 -6
  224. package/src/types.ts +25 -18
  225. package/dist/chat/chat-schema.d.ts.map +0 -1
  226. package/dist/input/file-indexer.d.ts.map +0 -1
  227. package/dist/input/index.d.ts.map +0 -1
  228. package/dist/input/mention-enricher.d.ts.map +0 -1
  229. package/dist/prompt/default-system.d.ts +0 -2
  230. package/dist/prompt/default-system.d.ts.map +0 -1
  231. package/dist/providers/local-provider-registry.d.ts.map +0 -1
  232. package/dist/providers/local-provider-service.d.ts.map +0 -1
  233. package/dist/runtime/checkpoint-hooks.d.ts.map +0 -1
  234. package/dist/runtime/hook-file-hooks.d.ts.map +0 -1
  235. package/dist/session/default-session-manager.d.ts.map +0 -1
  236. package/dist/session/session-agent-events.d.ts.map +0 -1
  237. package/dist/session/session-artifacts.d.ts.map +0 -1
  238. package/dist/session/session-config-builder.d.ts +0 -16
  239. package/dist/session/session-config-builder.d.ts.map +0 -1
  240. package/dist/session/session-host.d.ts +0 -15
  241. package/dist/session/session-host.d.ts.map +0 -1
  242. package/dist/session/session-manager.d.ts.map +0 -1
  243. package/dist/session/session-telemetry.d.ts.map +0 -1
  244. package/dist/session/utils/helpers.d.ts.map +0 -1
  245. package/dist/session/utils/types.d.ts.map +0 -1
  246. package/dist/session/utils/usage.d.ts.map +0 -1
  247. package/dist/session/workspace-manifest.d.ts.map +0 -1
  248. package/dist/storage/file-team-store.d.ts.map +0 -1
  249. package/dist/storage/provider-settings-legacy-migration.d.ts.map +0 -1
  250. package/dist/storage/provider-settings-manager.d.ts.map +0 -1
  251. package/dist/storage/sqlite-session-store.d.ts.map +0 -1
  252. package/dist/storage/sqlite-team-store.d.ts.map +0 -1
  253. package/dist/storage/team-store.d.ts.map +0 -1
  254. package/dist/team/delegated-agent.d.ts.map +0 -1
  255. package/dist/team/index.d.ts.map +0 -1
  256. package/dist/team/multi-agent.d.ts.map +0 -1
  257. package/dist/team/projections.d.ts.map +0 -1
  258. package/dist/team/runtime.d.ts.map +0 -1
  259. package/dist/team/spawn-agent-tool.d.ts.map +0 -1
  260. package/dist/team/subagent-prompts.d.ts.map +0 -1
  261. package/dist/team/team-tools.d.ts.map +0 -1
  262. package/dist/telemetry/ITelemetryAdapter.d.ts.map +0 -1
  263. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +0 -1
  264. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +0 -1
  265. package/dist/telemetry/TelemetryLoggerSink.d.ts.map +0 -1
  266. package/dist/telemetry/TelemetryService.d.ts.map +0 -1
  267. package/dist/telemetry/core-events.d.ts.map +0 -1
  268. package/dist/telemetry/distinct-id.d.ts.map +0 -1
  269. package/dist/telemetry/index.d.ts.map +0 -1
  270. package/dist/tools/constants.d.ts.map +0 -1
  271. package/dist/tools/definitions.d.ts.map +0 -1
  272. package/dist/tools/executors/apply-patch-parser.d.ts.map +0 -1
  273. package/dist/tools/executors/apply-patch.d.ts.map +0 -1
  274. package/dist/tools/executors/bash.d.ts.map +0 -1
  275. package/dist/tools/executors/editor.d.ts.map +0 -1
  276. package/dist/tools/executors/file-read.d.ts.map +0 -1
  277. package/dist/tools/executors/index.d.ts.map +0 -1
  278. package/dist/tools/executors/search.d.ts.map +0 -1
  279. package/dist/tools/executors/web-fetch.d.ts.map +0 -1
  280. package/dist/tools/helpers.d.ts.map +0 -1
  281. package/dist/tools/index.d.ts.map +0 -1
  282. package/dist/tools/model-tool-routing.d.ts.map +0 -1
  283. package/dist/tools/presets.d.ts.map +0 -1
  284. package/dist/tools/schemas.d.ts.map +0 -1
  285. package/dist/tools/types.d.ts.map +0 -1
  286. package/src/prompt/default-system.ts +0 -21
  287. package/src/session/session-config-builder.ts +0 -172
  288. package/src/session/session-host.test.ts +0 -89
  289. package/src/session/session-host.ts +0 -213
  290. package/src/session/session-manager.ts +0 -74
  291. package/src/storage/artifact-store.ts +0 -1
  292. package/src/storage/session-store.ts +0 -1
  293. package/src/team/multi-agent.lifecycle.test.ts +0 -201
  294. package/src/tools/executors/file-read.test.ts +0 -49
  295. /package/dist/{tools → extensions/tools}/constants.d.ts +0 -0
  296. /package/dist/{tools → extensions/tools}/definitions.d.ts +0 -0
  297. /package/dist/{tools → extensions/tools}/executors/apply-patch-parser.d.ts +0 -0
  298. /package/dist/{tools → extensions/tools}/executors/apply-patch.d.ts +0 -0
  299. /package/dist/{tools → extensions/tools}/executors/bash.d.ts +0 -0
  300. /package/dist/{tools → extensions/tools}/executors/editor.d.ts +0 -0
  301. /package/dist/{tools → extensions/tools}/executors/file-read.d.ts +0 -0
  302. /package/dist/{tools → extensions/tools}/executors/index.d.ts +0 -0
  303. /package/dist/{tools → extensions/tools}/executors/search.d.ts +0 -0
  304. /package/dist/{tools → extensions/tools}/executors/web-fetch.d.ts +0 -0
  305. /package/dist/{tools → extensions/tools}/helpers.d.ts +0 -0
  306. /package/dist/{tools → extensions/tools}/index.d.ts +0 -0
  307. /package/dist/{tools → extensions/tools}/schemas.d.ts +0 -0
  308. /package/dist/{team → extensions/tools/team}/delegated-agent.d.ts +0 -0
  309. /package/dist/{team → extensions/tools/team}/index.d.ts +0 -0
  310. /package/dist/{team → extensions/tools/team}/projections.d.ts +0 -0
  311. /package/dist/{team → extensions/tools/team}/runtime.d.ts +0 -0
  312. /package/dist/{team → extensions/tools/team}/subagent-prompts.d.ts +0 -0
  313. /package/dist/{team → extensions/tools/team}/team-tools.d.ts +0 -0
  314. /package/dist/{session → runtime}/rpc-spawn-lease.d.ts +0 -0
  315. /package/dist/{providers → services/providers}/local-provider-registry.d.ts +0 -0
  316. /package/dist/{providers → services/providers}/local-provider-service.d.ts +0 -0
  317. /package/dist/{telemetry → services/telemetry}/ITelemetryAdapter.d.ts +0 -0
  318. /package/dist/{telemetry → services/telemetry}/OpenTelemetryAdapter.d.ts +0 -0
  319. /package/dist/{telemetry → services/telemetry}/OpenTelemetryProvider.d.ts +0 -0
  320. /package/dist/{telemetry → services/telemetry}/TelemetryLoggerSink.d.ts +0 -0
  321. /package/dist/{telemetry → services/telemetry}/TelemetryService.d.ts +0 -0
  322. /package/dist/{telemetry → services/telemetry}/core-events.d.ts +0 -0
  323. /package/dist/{telemetry → services/telemetry}/distinct-id.d.ts +0 -0
  324. /package/dist/{telemetry → services/telemetry}/index.d.ts +0 -0
  325. /package/dist/{input → services/workspace}/file-indexer.d.ts +0 -0
  326. /package/dist/{input → services/workspace}/index.d.ts +0 -0
  327. /package/dist/{input → services/workspace}/mention-enricher.d.ts +0 -0
  328. /package/dist/{session → services}/workspace-manifest.d.ts +0 -0
  329. /package/dist/{chat → types}/chat-schema.d.ts +0 -0
  330. /package/src/{tools → extensions/tools}/constants.ts +0 -0
  331. /package/src/{tools → extensions/tools}/definitions.test.ts +0 -0
  332. /package/src/{tools → extensions/tools}/executors/apply-patch-parser.ts +0 -0
  333. /package/src/{tools → extensions/tools}/executors/apply-patch.ts +0 -0
  334. /package/src/{tools → extensions/tools}/executors/bash.test.ts +0 -0
  335. /package/src/{tools → extensions/tools}/executors/bash.ts +0 -0
  336. /package/src/{tools → extensions/tools}/executors/editor.test.ts +0 -0
  337. /package/src/{tools → extensions/tools}/executors/editor.ts +0 -0
  338. /package/src/{tools → extensions/tools}/executors/index.ts +0 -0
  339. /package/src/{tools → extensions/tools}/executors/web-fetch.ts +0 -0
  340. /package/src/{tools → extensions/tools}/helpers.ts +0 -0
  341. /package/src/{tools → extensions/tools}/index.ts +0 -0
  342. /package/src/{tools → extensions/tools}/model-tool-routing.test.ts +0 -0
  343. /package/src/{tools → extensions/tools}/presets.test.ts +0 -0
  344. /package/src/{tools → extensions/tools}/schemas.ts +0 -0
  345. /package/src/{team → extensions/tools/team}/delegated-agent.ts +0 -0
  346. /package/src/{team → extensions/tools/team}/index.ts +0 -0
  347. /package/src/{team → extensions/tools/team}/projections.ts +0 -0
  348. /package/src/{team → extensions/tools/team}/runtime.ts +0 -0
  349. /package/src/{runtime → hooks}/checkpoint-hooks.test.ts +0 -0
  350. /package/src/{runtime → hooks}/hook-file-hooks.test.ts +0 -0
  351. /package/src/{session → runtime}/runtime-oauth-token-manager.test.ts +0 -0
  352. /package/src/{providers → services/providers}/local-provider-registry.ts +0 -0
  353. /package/src/{providers → services/providers}/local-provider-service.test.ts +0 -0
  354. /package/src/{storage → services/storage}/index.ts +0 -0
  355. /package/src/{storage → services/storage}/provider-settings-manager.test.ts +0 -0
  356. /package/src/{telemetry → services/telemetry}/ITelemetryAdapter.ts +0 -0
  357. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.test.ts +0 -0
  358. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.ts +0 -0
  359. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.test.ts +0 -0
  360. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.ts +0 -0
  361. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.test.ts +0 -0
  362. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.ts +0 -0
  363. /package/src/{telemetry → services/telemetry}/TelemetryService.test.ts +0 -0
  364. /package/src/{telemetry → services/telemetry}/TelemetryService.ts +0 -0
  365. /package/src/{telemetry → services/telemetry}/core-events.ts +0 -0
  366. /package/src/{telemetry → services/telemetry}/distinct-id.test.ts +0 -0
  367. /package/src/{telemetry → services/telemetry}/distinct-id.ts +0 -0
  368. /package/src/{telemetry → services/telemetry}/index.ts +0 -0
  369. /package/src/{input → services/workspace}/file-indexer.d.ts +0 -0
  370. /package/src/{input → services/workspace}/index.ts +0 -0
  371. /package/src/{session → services}/workspace-manifest.ts +0 -0
  372. /package/src/{chat → types}/chat-schema.ts +0 -0
@@ -0,0 +1,362 @@
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
+ import type { ClineCoreOptions } from "../ClineCore";
14
+ import { SqliteSessionStore } from "../services/storage/sqlite-session-store";
15
+ import { resolveCoreDistinctId } from "../services/telemetry/distinct-id";
16
+ import { FileSessionService } from "../session/file-session-service";
17
+ import { RpcCoreSessionService } from "../session/rpc-session-service";
18
+ import { CoreSessionService } from "../session/session-service";
19
+ 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";
31
+ import type { RuntimeHost, RuntimeHostMode } from "./runtime-host";
32
+
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
+ function resolveConfiguredBackendMode(
41
+ options: ClineCoreOptions,
42
+ ): RuntimeHostMode {
43
+ if (options.backendMode) {
44
+ return options.backendMode;
45
+ }
46
+ if (process.env.CLINE_VCR?.trim()) {
47
+ return "local";
48
+ }
49
+ const raw = process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();
50
+ if (raw === "rpc" || raw === "local") {
51
+ return raw;
52
+ }
53
+ return "auto";
54
+ }
55
+
56
+ export type SessionBackend =
57
+ | RpcCoreSessionService
58
+ | CoreSessionService
59
+ | FileSessionService;
60
+
61
+ let cachedBackend: SessionBackend | undefined;
62
+ let backendInitPromise: Promise<SessionBackend> | undefined;
63
+
64
+ async function reconcileDeadSessionsIfSupported(
65
+ backend: SessionBackend,
66
+ ): Promise<void> {
67
+ const service = backend as SessionBackend & {
68
+ reconcileDeadSessions?: (limit?: number) => Promise<number>;
69
+ };
70
+ await service.reconcileDeadSessions?.().catch(() => {});
71
+ }
72
+
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
+ function createLocalBackend(options: ClineCoreOptions): SessionBackend {
198
+ try {
199
+ const store = new SqliteSessionStore();
200
+ store.init();
201
+ return new CoreSessionService(store, {
202
+ messagesArtifactUploader: options.messagesArtifactUploader,
203
+ });
204
+ } catch {
205
+ // Fallback to file-based session service if SQLite is unavailable (e.g. due to missing native bindings on certain platforms)
206
+ options.telemetry?.capture({
207
+ event: "session_backend_fallback",
208
+ properties: {
209
+ requestedBackend: "sqlite",
210
+ fallbackBackend: "file",
211
+ },
212
+ });
213
+ return new FileSessionService(undefined, {
214
+ messagesArtifactUploader: options.messagesArtifactUploader,
215
+ });
216
+ }
217
+ }
218
+
219
+ export async function resolveSessionBackend(
220
+ options: ClineCoreOptions,
221
+ ): Promise<SessionBackend> {
222
+ if (cachedBackend) {
223
+ return cachedBackend;
224
+ }
225
+ if (backendInitPromise) {
226
+ return await backendInitPromise;
227
+ }
228
+
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
+ 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
+ cachedBackend = createLocalBackend(options);
307
+ await reconcileDeadSessionsIfSupported(cachedBackend);
308
+ return cachedBackend;
309
+ })().finally(() => {
310
+ backendInitPromise = undefined;
311
+ });
312
+
313
+ return await backendInitPromise;
314
+ }
315
+
316
+ export async function createRuntimeHost(
317
+ options: ClineCoreOptions,
318
+ ): Promise<RuntimeHost> {
319
+ const distinctId = resolveCoreDistinctId(options.distinctId);
320
+ options.telemetry?.setDistinctId(distinctId);
321
+ const configuredMode = resolveConfiguredBackendMode(options);
322
+ if (requiresLocalRuntimeHost(options)) {
323
+ if (configuredMode === "rpc") {
324
+ throw new Error(
325
+ "RPC runtime mode does not support local-only runtime host options such as custom tool executors or team tools factories.",
326
+ );
327
+ }
328
+ options.logger?.log("Using local runtime host due to local-only options", {
329
+ configuredMode,
330
+ hasDefaultToolExecutors: !!options.defaultToolExecutors,
331
+ hasTeamToolsFactory: !!options.teamToolsFactory,
332
+ });
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,
342
+ });
343
+ }
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,
351
+ );
352
+ }
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
+ });
362
+ }
@@ -0,0 +1,123 @@
1
+ import {
2
+ existsSync,
3
+ mkdirSync,
4
+ mkdtempSync,
5
+ readFileSync,
6
+ rmSync,
7
+ writeFileSync,
8
+ } from "node:fs";
9
+ import os from "node:os";
10
+ import path from "node:path";
11
+ import { afterEach, describe, expect, it, vi } from "vitest";
12
+
13
+ const { mockGetRpcServerHealth } = vi.hoisted(() => ({
14
+ mockGetRpcServerHealth: vi.fn(),
15
+ }));
16
+
17
+ vi.mock("@clinebot/rpc", () => ({
18
+ getRpcServerHealth: mockGetRpcServerHealth,
19
+ requestRpcServerShutdown: vi.fn(),
20
+ RPC_BUILD_VERSION: "rpc-build-test",
21
+ RPC_PROTOCOL_VERSION: "rpc-protocol-test",
22
+ RpcSessionClient: class {},
23
+ }));
24
+
25
+ import { withRpcStartupLock } from "./rpc-runtime-ensure";
26
+
27
+ describe("withRpcStartupLock", () => {
28
+ const tempDirs: string[] = [];
29
+
30
+ afterEach(() => {
31
+ delete process.env.CLINE_DATA_DIR;
32
+ vi.clearAllMocks();
33
+ for (const dir of tempDirs.splice(0)) {
34
+ rmSync(dir, { recursive: true, force: true });
35
+ }
36
+ });
37
+
38
+ it("records running status after startup completes", async () => {
39
+ const dataDir = mkdtempSync(
40
+ path.join(os.tmpdir(), "rpc-runtime-ensure-status-"),
41
+ );
42
+ tempDirs.push(dataDir);
43
+ process.env.CLINE_DATA_DIR = dataDir;
44
+
45
+ const address = "127.0.0.1:4317";
46
+ const lockDir = path.join(
47
+ dataDir,
48
+ "locks",
49
+ "rpc-start-127.0.0.1_4317.lock",
50
+ );
51
+ const ownerPath = path.join(lockDir, "owner.json");
52
+
53
+ await withRpcStartupLock(address, async (lock) => {
54
+ const starting = JSON.parse(readFileSync(ownerPath, "utf8")) as {
55
+ status: string;
56
+ };
57
+ expect(starting.status).toBe("starting");
58
+
59
+ await lock.markRunning({
60
+ resolvedAddress: "127.0.0.1:4318",
61
+ serverId: "server-1",
62
+ });
63
+
64
+ const running = JSON.parse(readFileSync(ownerPath, "utf8")) as {
65
+ status: string;
66
+ resolvedAddress?: string;
67
+ serverId?: string;
68
+ };
69
+ expect(running).toMatchObject({
70
+ status: "running",
71
+ resolvedAddress: "127.0.0.1:4318",
72
+ serverId: "server-1",
73
+ });
74
+ });
75
+
76
+ expect(existsSync(lockDir)).toBe(false);
77
+ });
78
+
79
+ it("reclaims a running lock when its recorded server is unreachable", async () => {
80
+ const dataDir = mkdtempSync(
81
+ path.join(os.tmpdir(), "rpc-runtime-ensure-stale-"),
82
+ );
83
+ tempDirs.push(dataDir);
84
+ process.env.CLINE_DATA_DIR = dataDir;
85
+
86
+ const address = "127.0.0.1:4317";
87
+ const lockDir = path.join(
88
+ dataDir,
89
+ "locks",
90
+ "rpc-start-127.0.0.1_4317.lock",
91
+ );
92
+ const ownerPath = path.join(lockDir, "owner.json");
93
+ mkdirSync(lockDir, { recursive: true });
94
+ writeFileSync(
95
+ ownerPath,
96
+ JSON.stringify(
97
+ {
98
+ pid: process.pid,
99
+ address,
100
+ acquiredAt: new Date().toISOString(),
101
+ updatedAt: new Date().toISOString(),
102
+ status: "running",
103
+ resolvedAddress: address,
104
+ serverId: "server-stale",
105
+ },
106
+ null,
107
+ 2,
108
+ ),
109
+ "utf8",
110
+ );
111
+
112
+ mockGetRpcServerHealth.mockResolvedValue(undefined);
113
+
114
+ let acquired = 0;
115
+ await withRpcStartupLock(address, async () => {
116
+ acquired += 1;
117
+ });
118
+
119
+ expect(acquired).toBe(1);
120
+ expect(mockGetRpcServerHealth).toHaveBeenCalledWith(address);
121
+ expect(existsSync(lockDir)).toBe(false);
122
+ });
123
+ });