@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
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * Apply Patch Executor
3
3
  *
4
- * Built-in implementation for the legacy apply_patch format.
4
+ * Built-in implementation for the documented GPT-5 apply_patch grammar.
5
+ * It accepts the freeform patch body directly and tolerates the legacy shell
6
+ * wrapper form used by older prompts.
5
7
  */
6
8
 
7
9
  import * as fs from "node:fs/promises";
@@ -25,6 +27,10 @@ interface FileChange {
25
27
  movePath?: string;
26
28
  }
27
29
 
30
+ interface NormalizedPatchInput {
31
+ lines: string[];
32
+ }
33
+
28
34
  /**
29
35
  * Options for the apply_patch executor
30
36
  */
@@ -63,104 +69,87 @@ function resolveFilePath(
63
69
  return resolved;
64
70
  }
65
71
 
66
- function stripBashWrapper(lines: string[]): string[] {
67
- const result: string[] = [];
68
- let insidePatch = false;
69
- let foundBegin = false;
70
- let foundContent = false;
71
-
72
- for (let i = 0; i < lines.length; i++) {
73
- const line = lines[i];
74
- if (
75
- !insidePatch &&
76
- BASH_WRAPPERS.some((wrapper) => line.startsWith(wrapper))
77
- ) {
78
- continue;
79
- }
80
-
81
- if (line.startsWith(PATCH_MARKERS.BEGIN)) {
82
- insidePatch = true;
83
- foundBegin = true;
84
- result.push(line);
85
- continue;
86
- }
72
+ function normalizeLineEndings(input: string): string[] {
73
+ return input.split("\n").map((line) => line.replace(/\r$/, ""));
74
+ }
87
75
 
88
- if (line === PATCH_MARKERS.END) {
89
- insidePatch = false;
90
- result.push(line);
91
- continue;
92
- }
76
+ function isWrapperLine(line: string): boolean {
77
+ if (line.trim() === "") {
78
+ return false;
79
+ }
80
+ return BASH_WRAPPERS.some((wrapper) => line.startsWith(wrapper));
81
+ }
93
82
 
94
- const isPatchContent =
95
- line.startsWith(PATCH_MARKERS.ADD) ||
96
- line.startsWith(PATCH_MARKERS.UPDATE) ||
97
- line.startsWith(PATCH_MARKERS.DELETE) ||
98
- line.startsWith(PATCH_MARKERS.MOVE) ||
99
- line.startsWith(PATCH_MARKERS.SECTION) ||
100
- line.startsWith("+") ||
101
- line.startsWith("-") ||
102
- line.startsWith(" ") ||
103
- line === "***";
104
-
105
- if (isPatchContent && i !== lines.length - 1) {
106
- foundContent = true;
107
- }
83
+ function trimWrapperLines(lines: string[]): string[] {
84
+ let start = 0;
85
+ let end = lines.length;
108
86
 
109
- if (
110
- insidePatch ||
111
- (!foundBegin && isPatchContent) ||
112
- (line === "" && foundContent)
113
- ) {
114
- result.push(line);
115
- }
87
+ while (start < end && isWrapperLine(lines[start] ?? "")) {
88
+ start++;
116
89
  }
117
90
 
118
- while (result.length > 0 && result[result.length - 1] === "") {
119
- result.pop();
91
+ while (end > start && isWrapperLine(lines[end - 1] ?? "")) {
92
+ end--;
120
93
  }
121
94
 
122
- return !foundBegin && !foundContent ? lines : result;
95
+ return lines.slice(start, end);
123
96
  }
124
97
 
125
- function preprocessLines(input: string): string[] {
126
- let lines = input.split("\n").map((line) => line.replace(/\r$/, ""));
127
- lines = stripBashWrapper(lines);
98
+ function normalizePatchInput(input: string): NormalizedPatchInput {
99
+ const rawLines = normalizeLineEndings(input);
100
+ const beginIndex = rawLines.findIndex((line) =>
101
+ line.startsWith(PATCH_MARKERS.BEGIN),
102
+ );
103
+ let endIndex = -1;
104
+ for (let i = rawLines.length - 1; i >= 0; i--) {
105
+ if (rawLines[i]?.startsWith(PATCH_MARKERS.END)) {
106
+ endIndex = i;
107
+ break;
108
+ }
109
+ }
110
+
111
+ if (beginIndex !== -1 || endIndex !== -1) {
112
+ if (beginIndex === -1 || endIndex === -1 || endIndex < beginIndex) {
113
+ throw new DiffError(
114
+ "Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.",
115
+ );
116
+ }
117
+ const lines = rawLines.slice(beginIndex, endIndex + 1);
118
+ return {
119
+ lines,
120
+ };
121
+ }
128
122
 
129
- const hasBegin = lines.length > 0 && lines[0].startsWith(PATCH_MARKERS.BEGIN);
130
- const hasEnd =
131
- lines.length > 0 && lines[lines.length - 1] === PATCH_MARKERS.END;
132
- if (!hasBegin && !hasEnd) {
133
- return [PATCH_MARKERS.BEGIN, ...lines, PATCH_MARKERS.END];
123
+ const stripped = trimWrapperLines(rawLines);
124
+ while (stripped.length > 0 && stripped[0] === "") {
125
+ stripped.shift();
134
126
  }
135
- if (hasBegin && hasEnd) {
136
- return lines;
127
+ while (stripped.length > 0 && stripped[stripped.length - 1] === "") {
128
+ stripped.pop();
137
129
  }
138
- throw new DiffError(
139
- "Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.",
140
- );
130
+
131
+ const lines = [PATCH_MARKERS.BEGIN, ...stripped, PATCH_MARKERS.END];
132
+ return {
133
+ lines,
134
+ };
141
135
  }
142
136
 
143
137
  function extractFilesForOperations(
144
- text: string,
138
+ lines: readonly string[],
145
139
  markers: readonly string[],
146
140
  ): string[] {
147
- const lines = stripBashWrapper(text.split("\n"));
148
- const files: string[] = [];
141
+ const files = new Set<string>();
149
142
 
150
143
  for (const line of lines) {
151
144
  for (const marker of markers) {
152
- if (!line.startsWith(marker)) {
153
- continue;
154
- }
155
- const file = line.substring(marker.length).trim();
156
- if (!text.trim().endsWith(file)) {
157
- files.push(file);
145
+ if (line.startsWith(marker)) {
146
+ files.add(line.substring(marker.length).trim());
147
+ break;
158
148
  }
159
- break;
160
149
  }
161
150
  }
162
151
 
163
- return files;
152
+ return [...files];
164
153
  }
165
154
 
166
155
  function applyChunks(
@@ -197,12 +186,12 @@ function applyChunks(
197
186
  }
198
187
 
199
188
  async function loadFiles(
200
- rawInput: string,
189
+ lines: readonly string[],
201
190
  cwd: string,
202
191
  encoding: BufferEncoding,
203
192
  restrictToCwd: boolean,
204
193
  ): Promise<Record<string, string>> {
205
- const filesToLoad = extractFilesForOperations(rawInput, [
194
+ const filesToLoad = extractFilesForOperations(lines, [
206
195
  PATCH_MARKERS.UPDATE,
207
196
  PATCH_MARKERS.DELETE,
208
197
  ]);
@@ -328,14 +317,14 @@ export function createApplyPatchExecutor(
328
317
  cwd: string,
329
318
  _context: ToolContext,
330
319
  ): Promise<string> => {
331
- const lines = preprocessLines(input.input);
320
+ const normalizedInput = normalizePatchInput(input.input);
332
321
  const currentFiles = await loadFiles(
333
- input.input,
322
+ normalizedInput.lines,
334
323
  cwd,
335
324
  encoding,
336
325
  restrictToCwd,
337
326
  );
338
- const parser = new PatchParser(lines, currentFiles);
327
+ const parser = new PatchParser(normalizedInput.lines, currentFiles);
339
328
  const { patch, fuzz } = parser.parse();
340
329
  const changes = patchToChanges(patch, currentFiles);
341
330
  const touched = await applyChanges(changes, cwd, encoding, restrictToCwd);
@@ -10,6 +10,14 @@ import type { ToolContext } from "@clinebot/shared";
10
10
  import type { ReadFileRequest } from "../schemas";
11
11
  import type { FileReadExecutor } from "../types";
12
12
 
13
+ const IMAGE_MEDIA_TYPES = new Map<string, string>([
14
+ [".gif", "image/gif"],
15
+ [".png", "image/png"],
16
+ [".jpg", "image/jpeg"],
17
+ [".jpeg", "image/jpeg"],
18
+ [".webp", "image/webp"],
19
+ ]);
20
+
13
21
  /**
14
22
  * Options for the file read executor
15
23
  */
@@ -60,14 +68,13 @@ export function createFileReadExecutor(
60
68
  ...options,
61
69
  };
62
70
 
63
- return async (
64
- request: ReadFileRequest,
65
- _context: ToolContext,
66
- ): Promise<string> => {
71
+ return async (request: ReadFileRequest, context: ToolContext) => {
67
72
  const { path: filePath, start_line, end_line } = request;
68
73
  const resolvedPath = path.isAbsolute(filePath)
69
74
  ? path.normalize(filePath)
70
75
  : path.resolve(process.cwd(), filePath);
76
+ const extension = path.extname(resolvedPath).toLowerCase();
77
+ const imageMediaType = IMAGE_MEDIA_TYPES.get(extension);
71
78
 
72
79
  // Check if file exists
73
80
  const stat = await fs.stat(resolvedPath);
@@ -84,6 +91,24 @@ export function createFileReadExecutor(
84
91
  );
85
92
  }
86
93
 
94
+ if (imageMediaType) {
95
+ if (context.metadata?.modelSupportsImages !== true) {
96
+ throw new Error("Current model does not support image input");
97
+ }
98
+ const data = await fs.readFile(resolvedPath);
99
+ return [
100
+ {
101
+ type: "text",
102
+ text: "Successfully read image",
103
+ },
104
+ {
105
+ type: "image",
106
+ data: data.toString("base64"),
107
+ mediaType: imageMediaType,
108
+ },
109
+ ];
110
+ }
111
+
87
112
  // Read file content
88
113
  const content = await fs.readFile(resolvedPath, encoding);
89
114
  const allLines = content.split("\n");
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * Search Executor
3
3
  *
4
- * Built-in implementation for searching the codebase using regex.
4
+ * Built-in implementation for searching the codebase using ripgrep (if available) or regex.
5
5
  */
6
6
 
7
+ import { spawn } from "node:child_process";
7
8
  import * as fs from "node:fs/promises";
8
9
  import * as path from "node:path";
9
10
  import type { ToolContext } from "@clinebot/shared";
10
- import { getFileIndex } from "../../input";
11
+ import { getFileIndex } from "../../../services/workspace";
11
12
  import type { SearchExecutor } from "../types";
12
13
 
13
14
  /**
@@ -118,6 +119,152 @@ interface SearchMatch {
118
119
  context: string[];
119
120
  }
120
121
 
122
+ let rgAvailable: boolean | null = null;
123
+
124
+ function checkRipgrepAvailable(): Promise<boolean> {
125
+ if (rgAvailable !== null) {
126
+ return Promise.resolve(rgAvailable);
127
+ }
128
+
129
+ return new Promise((resolve) => {
130
+ const child = spawn("rg", ["--version"], {
131
+ stdio: ["ignore", "pipe", "pipe"],
132
+ });
133
+
134
+ child.on("close", (code) => {
135
+ rgAvailable = code === 0;
136
+ resolve(rgAvailable);
137
+ });
138
+
139
+ child.on("error", () => {
140
+ rgAvailable = false;
141
+ resolve(false);
142
+ });
143
+
144
+ setTimeout(() => {
145
+ if (!child.killed) {
146
+ child.kill("SIGTERM");
147
+ }
148
+ if (rgAvailable === null) {
149
+ rgAvailable = false;
150
+ resolve(false);
151
+ }
152
+ }, 1000);
153
+ });
154
+ }
155
+
156
+ function searchWithRipgrep(
157
+ query: string,
158
+ cwd: string,
159
+ maxResults: number,
160
+ contextLines: number,
161
+ timeoutMs: number = 5000,
162
+ abortSignal?: AbortSignal,
163
+ ): Promise<SearchMatch[] | null> {
164
+ return new Promise((resolve) => {
165
+ const child = spawn(
166
+ "rg",
167
+ ["--json", `--context=${contextLines}`, "--max-count=1", "-i", query],
168
+ {
169
+ cwd,
170
+ stdio: ["ignore", "pipe", "pipe"],
171
+ },
172
+ );
173
+
174
+ let stdout = "";
175
+ let resolved = false;
176
+
177
+ const cleanup = () => {
178
+ if (!child.killed) {
179
+ child.kill("SIGTERM");
180
+ }
181
+ };
182
+
183
+ const timeout = setTimeout(() => {
184
+ if (!resolved) {
185
+ resolved = true;
186
+ cleanup();
187
+ resolve(null);
188
+ }
189
+ }, timeoutMs);
190
+
191
+ const finalize = (result: SearchMatch[] | null) => {
192
+ if (!resolved) {
193
+ resolved = true;
194
+ clearTimeout(timeout);
195
+ cleanup();
196
+ resolve(result);
197
+ }
198
+ };
199
+
200
+ if (abortSignal?.aborted) {
201
+ cleanup();
202
+ resolve(null);
203
+ return;
204
+ }
205
+
206
+ abortSignal?.addEventListener("abort", () => {
207
+ finalize(null);
208
+ });
209
+
210
+ child.stdout.on("data", (chunk: Buffer | string) => {
211
+ stdout += chunk.toString();
212
+ });
213
+
214
+ child.stderr.on("data", () => {
215
+ // Ignore stderr
216
+ });
217
+
218
+ child.on("close", (code: number | null) => {
219
+ if (code === 0 || code === 1) {
220
+ try {
221
+ const matches: SearchMatch[] = [];
222
+ const lines = stdout.split("\n").filter((line) => line.trim());
223
+
224
+ for (const line of lines) {
225
+ if (matches.length >= maxResults) break;
226
+
227
+ const json = JSON.parse(line);
228
+ if (json.type === "match") {
229
+ const matchData = json.data;
230
+ const contextLines: string[] = [];
231
+
232
+ if (json.data.submatches && json.data.submatches.length > 0) {
233
+ const submatch = json.data.submatches[0];
234
+ matches.push({
235
+ file: matchData.path.text,
236
+ line: matchData.line_number,
237
+ column: (submatch?.start ?? 0) + 1,
238
+ match: submatch?.match?.text ?? "",
239
+ context: contextLines,
240
+ });
241
+ }
242
+ } else if (json.type === "context" && matches.length > 0) {
243
+ const lastMatch = matches[matches.length - 1];
244
+ const prefix =
245
+ json.data.line_number === lastMatch.line ? ">" : " ";
246
+ lastMatch.context.push(
247
+ `${prefix} ${json.data.line_number}: ${json.data.lines?.text ?? json.data.line?.text ?? ""}`,
248
+ );
249
+ }
250
+ }
251
+
252
+ finalize(matches.length > 0 ? matches : null);
253
+ } catch {
254
+ finalize(null);
255
+ }
256
+ return;
257
+ }
258
+
259
+ finalize(null);
260
+ });
261
+
262
+ child.on("error", () => {
263
+ finalize(null);
264
+ });
265
+ });
266
+ }
267
+
121
268
  function shouldIncludeFile(
122
269
  relativePath: string,
123
270
  excludeDirs: Set<string>,
@@ -173,9 +320,49 @@ export function createSearchExecutor(
173
320
  return async (
174
321
  query: string,
175
322
  cwd: string,
176
- _context: ToolContext,
323
+ context: ToolContext,
177
324
  ): Promise<string> => {
178
- // Compile regex
325
+ // Check for abort before starting
326
+ if (context.abortSignal?.aborted) {
327
+ throw new Error("Search operation aborted");
328
+ }
329
+
330
+ // Try ripgrep first if available
331
+ const isRgAvailable = await checkRipgrepAvailable();
332
+ let rgMatches: SearchMatch[] | null = null;
333
+ if (isRgAvailable) {
334
+ rgMatches = await searchWithRipgrep(
335
+ query,
336
+ cwd,
337
+ maxResults,
338
+ contextLines,
339
+ 5000,
340
+ context.abortSignal,
341
+ );
342
+ }
343
+
344
+ if (rgMatches) {
345
+ const resultLines: string[] = [
346
+ `Found ${rgMatches.length} result${rgMatches.length === 1 ? "" : "s"} for pattern: ${query}`,
347
+ "",
348
+ ];
349
+
350
+ for (const match of rgMatches) {
351
+ resultLines.push(`${match.file}:${match.line}:${match.column}`);
352
+ resultLines.push(...match.context);
353
+ resultLines.push("");
354
+ }
355
+
356
+ if (rgMatches.length >= maxResults) {
357
+ resultLines.push(
358
+ `(Showing first ${maxResults} results. Refine your search for more specific results.)`,
359
+ );
360
+ }
361
+
362
+ return resultLines.join("\n");
363
+ }
364
+
365
+ // Fallback to manual regex search
179
366
  let regex: RegExp;
180
367
  try {
181
368
  regex = new RegExp(query, "gim");
@@ -192,6 +379,11 @@ export function createSearchExecutor(
192
379
 
193
380
  // Search files from the fast index.
194
381
  for (const relativePath of fileList) {
382
+ // Check for abort signal
383
+ if (context.abortSignal?.aborted) {
384
+ throw new Error("Search operation aborted");
385
+ }
386
+
195
387
  if (
196
388
  !shouldIncludeFile(
197
389
  relativePath,
@@ -53,6 +53,15 @@ export {
53
53
  type ToolPresetName,
54
54
  ToolPresets,
55
55
  } from "./presets";
56
+ export {
57
+ type BuiltinToolAvailabilityContext,
58
+ getCoreAcpToolNames,
59
+ getCoreBuiltinToolCatalog,
60
+ getCoreDefaultEnabledToolIds,
61
+ getCoreHeadlessToolNames,
62
+ resolveCoreSelectedToolIds,
63
+ type ToolCatalogEntry,
64
+ } from "./runtime";
56
65
  // Schemas
57
66
  export {
58
67
  type ApplyPatchInput,
@@ -78,6 +87,7 @@ export {
78
87
  type WebFetchRequest,
79
88
  WebFetchRequestSchema,
80
89
  } from "./schemas";
90
+ export { TEAM_TOOL_NAMES } from "./team/team-tools";
81
91
  // Types
82
92
  export type {
83
93
  ApplyPatchExecutor,
@@ -1,4 +1,4 @@
1
- import type { CoreAgentMode } from "../types/config";
1
+ import type { CoreAgentMode } from "../../types/config";
2
2
  import type { DefaultToolName, DefaultToolsConfig } from "./types";
3
3
 
4
4
  export interface ToolRoutingRule {
@@ -4,7 +4,7 @@
4
4
  * Pre-configured tool combinations for common use cases.
5
5
  */
6
6
 
7
- import type { Tool, ToolPolicy } from "@clinebot/shared";
7
+ import type { AgentMode, Tool, ToolPolicy } from "@clinebot/shared";
8
8
  import { ALL_DEFAULT_TOOL_NAMES } from "./constants";
9
9
  import { createDefaultTools } from "./definitions";
10
10
  import type { CreateDefaultToolsOptions, DefaultToolsConfig } from "./types";
@@ -19,91 +19,73 @@ export interface ToolPresetConfig extends DefaultToolsConfig {
19
19
  */
20
20
  export const ToolPresets = {
21
21
  /**
22
- * Browser-based tools (no shell access, no web fetch)
23
- */
24
- browser: {
25
- enableReadFiles: false,
26
- enableSearch: false,
27
- enableBash: false,
28
- enableWebFetch: false,
29
- enableApplyPatch: false,
30
- enableEditor: false,
31
- enableSkills: true,
32
- enableAskQuestion: true,
33
- enableSubmitAndExit: false,
34
- enableSpawnAgent: true,
35
- enableAgentTeams: true,
36
- },
37
-
38
- /**
39
- * Search-focused tools (read_files + search_codebase)
40
- * Good for code exploration and analysis agents
22
+ * Act mode (full development tools)
23
+ * Good for coding assistants and task automation
41
24
  */
42
- search: {
25
+ act: {
43
26
  enableReadFiles: true,
44
27
  enableSearch: true,
45
- enableBash: false,
28
+ enableBash: true,
46
29
  enableWebFetch: false,
47
30
  enableApplyPatch: false,
48
- enableEditor: false,
49
- enableSkills: false,
50
- enableAskQuestion: false,
31
+ enableEditor: true,
32
+ enableSkills: true,
33
+ enableAskQuestion: true,
51
34
  enableSubmitAndExit: false,
52
35
  enableSpawnAgent: true,
53
36
  enableAgentTeams: true,
54
37
  },
55
38
 
56
39
  /**
57
- * Full development tools (all tools enabled) - Act mode
58
- * Good for coding assistants and task automation
40
+ * Plan mode (read-only, no shell access)
41
+ * Good for analysis and documentation agents
59
42
  */
60
- development: {
43
+ plan: {
61
44
  enableReadFiles: true,
62
45
  enableSearch: true,
63
46
  enableBash: true,
64
47
  enableWebFetch: true,
65
48
  enableApplyPatch: false,
66
- enableEditor: true,
49
+ enableEditor: false,
67
50
  enableSkills: true,
68
51
  enableAskQuestion: true,
69
- enableSubmitAndExit: true,
52
+ enableSubmitAndExit: false,
70
53
  enableSpawnAgent: true,
71
54
  enableAgentTeams: true,
72
55
  },
73
56
 
74
57
  /**
75
- * Read-only tools (no shell access) - Plan mode
76
- * Good for analysis and documentation agents
58
+ * Search-focused tools (read_files + search_codebase)
59
+ * Good for code exploration and analysis agents
77
60
  */
78
- readonly: {
61
+ search: {
79
62
  enableReadFiles: true,
80
63
  enableSearch: true,
81
- enableBash: true,
82
- enableWebFetch: true,
64
+ enableBash: false,
65
+ enableWebFetch: false,
83
66
  enableApplyPatch: false,
84
67
  enableEditor: false,
85
- enableSkills: true,
86
- enableAskQuestion: true,
68
+ enableSkills: false,
69
+ enableAskQuestion: false,
87
70
  enableSubmitAndExit: false,
88
71
  enableSpawnAgent: true,
89
72
  enableAgentTeams: true,
90
73
  },
91
74
 
92
75
  /**
93
- * Minimal tools (file reading only)
94
- * Good for focused single-file tasks
76
+ * Minimal tools for focused tasks
95
77
  */
96
78
  minimal: {
97
79
  enableReadFiles: false,
98
80
  enableSearch: false,
99
- enableBash: false,
81
+ enableBash: true,
100
82
  enableWebFetch: false,
101
83
  enableApplyPatch: false,
102
84
  enableEditor: false,
103
85
  enableSkills: false,
104
- enableAskQuestion: true,
86
+ enableAskQuestion: false,
105
87
  enableSubmitAndExit: false,
106
- enableSpawnAgent: false,
88
+ enableSpawnAgent: true,
107
89
  enableAgentTeams: false,
108
90
  },
109
91
 
@@ -132,13 +114,15 @@ export const ToolPresets = {
132
114
  export type ToolPresetName = keyof typeof ToolPresets;
133
115
 
134
116
  export function resolveToolPresetName(options: {
135
- mode?: "act" | "plan";
136
- yolo?: boolean;
117
+ mode?: AgentMode;
137
118
  }): ToolPresetName {
138
119
  if (options.mode === "plan") {
139
- return "readonly";
120
+ return "plan";
121
+ }
122
+ if (options.mode === "yolo") {
123
+ return "yolo";
140
124
  }
141
- return options.yolo === true ? "yolo" : "development";
125
+ return "act";
142
126
  }
143
127
 
144
128
  /**
@@ -178,7 +162,7 @@ export function createToolPoliciesWithPreset(
178
162
  *
179
163
  * @example
180
164
  * ```typescript
181
- * const tools = createDefaultToolsWithPreset("readonly", {
165
+ * const tools = createDefaultToolsWithPreset("plan", {
182
166
  * executors: {
183
167
  * readFile: async ({ path }) => fs.readFile(path, "utf-8"),
184
168
  * search: async (query, cwd) => searchFiles(query, cwd),