@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,128 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import {
3
- decodeJwtPayload,
4
- isCredentialLikelyExpired,
5
- parseAuthorizationInput,
6
- parseOAuthError,
7
- resolveAuthorizationCodeInput,
8
- resolveUrl,
9
- } from "./utils";
10
-
11
- function toBase64Url(value: string): string {
12
- return Buffer.from(value, "utf8").toString("base64url");
13
- }
14
-
15
- function createJwt(payload: Record<string, unknown>): string {
16
- return `${toBase64Url(JSON.stringify({ alg: "none", typ: "JWT" }))}.${toBase64Url(JSON.stringify(payload))}.sig`;
17
- }
18
-
19
- describe("auth/utils", () => {
20
- it("parses auth input from full URL with provider", () => {
21
- const parsed = parseAuthorizationInput(
22
- "http://localhost/callback?code=test-code&state=s1&provider=google",
23
- {
24
- includeProvider: true,
25
- },
26
- );
27
- expect(parsed).toEqual({
28
- code: "test-code",
29
- state: "s1",
30
- provider: "google",
31
- });
32
- });
33
-
34
- it("parses auth input from hash format when enabled", () => {
35
- const parsed = parseAuthorizationInput("abc123#state1", {
36
- allowHashCodeState: true,
37
- });
38
- expect(parsed).toEqual({ code: "abc123", state: "state1" });
39
- });
40
-
41
- it("builds resolved URLs from base + path", () => {
42
- expect(resolveUrl("https://example.com/", "/token")).toBe(
43
- "https://example.com/token",
44
- );
45
- });
46
-
47
- it("decodes JWT payload", () => {
48
- const token = createJwt({ sub: "account-1", exp: 123 });
49
- expect(decodeJwtPayload(token)).toMatchObject({
50
- sub: "account-1",
51
- exp: 123,
52
- });
53
- expect(decodeJwtPayload("invalid")).toBeNull();
54
- });
55
-
56
- it("parses OAuth error payloads from string and object forms", () => {
57
- expect(
58
- parseOAuthError(
59
- JSON.stringify({
60
- error: "invalid_grant",
61
- error_description: "expired",
62
- }),
63
- ),
64
- ).toEqual({
65
- code: "invalid_grant",
66
- message: "expired",
67
- });
68
- expect(
69
- parseOAuthError(
70
- JSON.stringify({ error: { type: "unauthorized", message: "denied" } }),
71
- ),
72
- ).toEqual({
73
- code: "unauthorized",
74
- message: "denied",
75
- });
76
- });
77
-
78
- it("resolves code from callback result", async () => {
79
- const result = await resolveAuthorizationCodeInput({
80
- waitForCallback: async () => ({
81
- url: new URL("http://localhost"),
82
- code: "from-callback",
83
- state: "s1",
84
- }),
85
- cancelWait: () => {},
86
- });
87
- expect(result).toEqual({
88
- code: "from-callback",
89
- state: "s1",
90
- provider: undefined,
91
- error: undefined,
92
- });
93
- });
94
-
95
- it("resolves code from manual input when callback does not provide one", async () => {
96
- const cancelWait = vi.fn();
97
- const result = await resolveAuthorizationCodeInput({
98
- waitForCallback: async () => null,
99
- cancelWait,
100
- onManualCodeInput: async () => "code=manual&state=manual-state",
101
- });
102
- expect(cancelWait).toHaveBeenCalled();
103
- expect(result).toEqual({
104
- code: "manual",
105
- state: "manual-state",
106
- provider: undefined,
107
- });
108
- });
109
-
110
- it("throws when manual input rejects", async () => {
111
- await expect(
112
- resolveAuthorizationCodeInput({
113
- waitForCallback: async () => null,
114
- cancelWait: () => {},
115
- onManualCodeInput: async () => {
116
- throw new Error("cancelled");
117
- },
118
- }),
119
- ).rejects.toThrow("cancelled");
120
- });
121
-
122
- it("checks token expiry with configurable buffer", () => {
123
- const nowSpy = vi.spyOn(Date, "now").mockReturnValue(1_000);
124
- expect(isCredentialLikelyExpired({ expires: 1_500 }, 600)).toBe(true);
125
- expect(isCredentialLikelyExpired({ expires: 3_000 }, 600)).toBe(false);
126
- nowSpy.mockRestore();
127
- });
128
- });
@@ -1,236 +0,0 @@
1
- import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import type { Tool, ToolContext } from "@clinebot/shared";
5
- import { afterEach, describe, expect, it } from "vitest";
6
- import {
7
- AGENT_CONFIG_DIRECTORY_NAME,
8
- createAgentConfigDefinition,
9
- parseAgentConfigFromYaml,
10
- parsePartialAgentConfigFromYaml,
11
- readAgentConfigsFromDisk,
12
- resolveAgentConfigSearchPaths,
13
- resolveAgentsConfigDirPath,
14
- resolveAgentTools,
15
- resolveDocumentsAgentConfigDirectoryPath,
16
- toPartialAgentConfig,
17
- } from "./agent-config-loader";
18
-
19
- function createMockTool(name: string): Tool {
20
- return {
21
- name,
22
- description: `${name} tool`,
23
- inputSchema: {
24
- type: "object",
25
- properties: {},
26
- },
27
- execute: async (_input: unknown, _context: ToolContext) => null,
28
- };
29
- }
30
-
31
- describe("agent config YAML loader", () => {
32
- const envSnapshot = {
33
- CLINE_DATA_DIR: process.env.CLINE_DATA_DIR,
34
- };
35
- afterEach(() => {
36
- process.env.CLINE_DATA_DIR = envSnapshot.CLINE_DATA_DIR;
37
- });
38
-
39
- it("resolves default agents settings directory from CLINE_DATA_DIR", () => {
40
- process.env.CLINE_DATA_DIR = "/tmp/cline-data";
41
- expect(resolveAgentsConfigDirPath()).toBe(
42
- join("/tmp/cline-data", "settings", AGENT_CONFIG_DIRECTORY_NAME),
43
- );
44
- });
45
-
46
- it("includes documents and settings search paths", () => {
47
- process.env.CLINE_DATA_DIR = "/tmp/cline-data";
48
- expect(resolveAgentConfigSearchPaths()).toEqual([
49
- resolveDocumentsAgentConfigDirectoryPath(),
50
- join("/tmp/cline-data", "settings", AGENT_CONFIG_DIRECTORY_NAME),
51
- ]);
52
- });
53
-
54
- it("builds a reusable unified watcher definition with expected defaults", () => {
55
- process.env.CLINE_DATA_DIR = "/tmp/cline-data";
56
- const definition = createAgentConfigDefinition();
57
- expect(definition.type).toBe("agent");
58
- expect(definition.directories).toEqual([
59
- resolveDocumentsAgentConfigDirectoryPath(),
60
- join("/tmp/cline-data", "settings", AGENT_CONFIG_DIRECTORY_NAME),
61
- ]);
62
- expect(definition.includeFile?.("agent.yaml", "/tmp/agent.yaml")).toBe(
63
- true,
64
- );
65
- expect(definition.includeFile?.("agent.md", "/tmp/agent.md")).toBe(false);
66
- });
67
-
68
- it("parses yaml frontmatter and prompt body", () => {
69
- const content = `---
70
- name: Researcher
71
- description: Focus on repository analysis
72
- modelId: claude-sonnet-4-6
73
- tools:
74
- - read_files
75
- - search_codebase
76
- skills:
77
- - context-gathering
78
- ---
79
- You are a focused codebase researcher.`;
80
-
81
- const parsed = parseAgentConfigFromYaml(content);
82
-
83
- expect(parsed).toEqual({
84
- name: "Researcher",
85
- description: "Focus on repository analysis",
86
- modelId: "claude-sonnet-4-6",
87
- tools: ["read_files", "search_codebase"],
88
- skills: ["context-gathering"],
89
- systemPrompt: "You are a focused codebase researcher.",
90
- });
91
- });
92
-
93
- it("supports comma-separated tool and skill values", () => {
94
- const parsed = parseAgentConfigFromYaml(`---
95
- name: Reviewer
96
- description: Reviews diffs
97
- tools: read_files,search_codebase,read_files
98
- skills: quality, quality,architecture
99
- ---
100
- Review every patch for regressions.`);
101
-
102
- expect(parsed.tools).toEqual(["read_files", "search_codebase"]);
103
- expect(parsed.skills).toEqual(["quality", "architecture"]);
104
- });
105
-
106
- it("throws when frontmatter is missing", () => {
107
- expect(() => parseAgentConfigFromYaml("No frontmatter")).toThrow(
108
- "Missing YAML frontmatter block in agent config file.",
109
- );
110
- });
111
-
112
- it("throws for unknown tools", () => {
113
- expect(() =>
114
- parseAgentConfigFromYaml(`---
115
- name: UnknownTool
116
- description: test
117
- tools: invalid_tool
118
- ---
119
- prompt`),
120
- ).toThrow("Unknown tool 'invalid_tool'.");
121
- });
122
-
123
- it("resolves configured tool names from available tools", () => {
124
- const readFiles = createMockTool("read_files");
125
- const searchCodebase = createMockTool("search_codebase");
126
-
127
- expect(
128
- resolveAgentTools(
129
- ["read_files", "search_codebase"],
130
- [searchCodebase, readFiles],
131
- ),
132
- ).toEqual([readFiles, searchCodebase]);
133
- });
134
-
135
- it("converts parsed config to partial AgentConfig", () => {
136
- const readFiles = createMockTool("read_files");
137
- const config = parseAgentConfigFromYaml(`---
138
- name: Reader
139
- description: Reads files
140
- modelId: claude-sonnet-4-6
141
- tools: read_files
142
- skills: commit, review
143
- ---
144
- Be precise.`);
145
-
146
- const partial = toPartialAgentConfig(config, {
147
- availableTools: [readFiles],
148
- });
149
-
150
- expect(partial.modelId).toBe("claude-sonnet-4-6");
151
- expect(partial.systemPrompt).toBe("Be precise.");
152
- expect(partial.tools).toEqual([readFiles]);
153
- expect(partial.skills).toEqual(["commit", "review"]);
154
- });
155
-
156
- it("throws when tool overrides are configured without available tools", () => {
157
- expect(() =>
158
- parsePartialAgentConfigFromYaml(`---
159
- name: Reader
160
- description: Reads files
161
- tools: read_files
162
- ---
163
- Be precise.`),
164
- ).toThrow(
165
- "Configured tools cannot be converted into AgentConfig.tools without availableTools.",
166
- );
167
- });
168
-
169
- it("reads agent configs from ~/.cline/data/settings/agents-compatible directory", async () => {
170
- const tempRoot = await mkdtemp(join(tmpdir(), "core-agent-config-loader-"));
171
- const agentsDir = join(tempRoot, "settings", AGENT_CONFIG_DIRECTORY_NAME);
172
- await mkdir(agentsDir, { recursive: true });
173
- try {
174
- await writeFile(
175
- join(agentsDir, "reviewer.yaml"),
176
- `---
177
- name: Reviewer
178
- description: Reviews patches
179
- tools: read_files
180
- ---
181
- Review code for regressions.`,
182
- );
183
- await writeFile(
184
- join(agentsDir, "invalid.yaml"),
185
- `---
186
- name:
187
- ---
188
- `,
189
- );
190
-
191
- const loaded = await readAgentConfigsFromDisk(agentsDir);
192
- expect([...loaded.keys()]).toEqual(["reviewer"]);
193
- expect(loaded.get("reviewer")?.systemPrompt).toBe(
194
- "Review code for regressions.",
195
- );
196
- } finally {
197
- await rm(tempRoot, { recursive: true, force: true });
198
- }
199
- });
200
-
201
- it("reads from both documents and settings directories", async () => {
202
- const tempRoot = await mkdtemp(join(tmpdir(), "core-agent-config-loader-"));
203
- const documentsDir = join(tempRoot, "Documents", "Cline", "Agents");
204
- const settingsDir = join(tempRoot, "settings", AGENT_CONFIG_DIRECTORY_NAME);
205
- await mkdir(documentsDir, { recursive: true });
206
- await mkdir(settingsDir, { recursive: true });
207
- try {
208
- await writeFile(
209
- join(documentsDir, "legacy.yaml"),
210
- `---
211
- name: LegacyAgent
212
- description: legacy
213
- ---
214
- legacy prompt`,
215
- );
216
- await writeFile(
217
- join(settingsDir, "new.yaml"),
218
- `---
219
- name: NewAgent
220
- description: new
221
- ---
222
- new prompt`,
223
- );
224
-
225
- const loaded = await readAgentConfigsFromDisk([
226
- documentsDir,
227
- settingsDir,
228
- ]);
229
- expect([...loaded.keys()].sort()).toEqual(["legacyagent", "newagent"]);
230
- expect(loaded.get("legacyagent")?.systemPrompt).toBe("legacy prompt");
231
- expect(loaded.get("newagent")?.systemPrompt).toBe("new prompt");
232
- } finally {
233
- await rm(tempRoot, { recursive: true, force: true });
234
- }
235
- });
236
- });
@@ -1,20 +0,0 @@
1
- import { afterEach, describe, expect, it } from "vitest";
2
- import {
3
- HookConfigFileName,
4
- toHookConfigFileName,
5
- } from "./hooks-config-loader";
6
-
7
- describe("hooks config loader", () => {
8
- afterEach(() => {
9
- delete process.env.CLINE_DATA_DIR;
10
- });
11
-
12
- it("recognizes PowerShell hook files", () => {
13
- expect(toHookConfigFileName("PreToolUse.ps1")).toBe(
14
- HookConfigFileName.PreToolUse,
15
- );
16
- expect(toHookConfigFileName("TaskError.ps1")).toBe(
17
- HookConfigFileName.TaskError,
18
- );
19
- });
20
- });
@@ -1,115 +0,0 @@
1
- import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import {
6
- listAvailableRuntimeCommandsFromWatcher,
7
- resolveRuntimeSlashCommandFromWatcher,
8
- } from "./runtime-commands";
9
- import { createUserInstructionConfigWatcher } from "./user-instruction-config-loader";
10
-
11
- describe("runtime command registry", () => {
12
- const tempRoots: string[] = [];
13
-
14
- afterEach(async () => {
15
- await Promise.all(
16
- tempRoots.map((dir) => rm(dir, { recursive: true, force: true })),
17
- );
18
- tempRoots.length = 0;
19
- });
20
-
21
- it("lists workflow and skill commands together", async () => {
22
- const tempRoot = await mkdtemp(join(tmpdir(), "core-runtime-commands-"));
23
- tempRoots.push(tempRoot);
24
- const skillDir = join(tempRoot, "skills", "debug");
25
- const workflowsDir = join(tempRoot, "workflows");
26
- await mkdir(skillDir, { recursive: true });
27
- await mkdir(workflowsDir, { recursive: true });
28
- await writeFile(join(skillDir, "SKILL.md"), "Use the debugging skill.");
29
- await writeFile(
30
- join(workflowsDir, "release.md"),
31
- `---
32
- name: release
33
- ---
34
- Run the release workflow.`,
35
- );
36
-
37
- const watcher = createUserInstructionConfigWatcher({
38
- skills: { directories: [join(tempRoot, "skills")] },
39
- rules: { directories: [] },
40
- workflows: { directories: [workflowsDir] },
41
- });
42
-
43
- try {
44
- await watcher.start();
45
- expect(listAvailableRuntimeCommandsFromWatcher(watcher)).toEqual([
46
- {
47
- id: "debug",
48
- name: "debug",
49
- instructions: "Use the debugging skill.",
50
- kind: "skill",
51
- },
52
- {
53
- id: "release",
54
- name: "release",
55
- instructions: "Run the release workflow.",
56
- kind: "workflow",
57
- },
58
- ]);
59
- } finally {
60
- watcher.stop();
61
- }
62
- });
63
-
64
- it("expands slash commands with workflow precedence and ignores disabled entries", async () => {
65
- const tempRoot = await mkdtemp(join(tmpdir(), "core-runtime-commands-"));
66
- tempRoots.push(tempRoot);
67
- const skillDir = join(tempRoot, "skills", "ship");
68
- const workflowsDir = join(tempRoot, "workflows");
69
- await mkdir(skillDir, { recursive: true });
70
- await mkdir(workflowsDir, { recursive: true });
71
- await writeFile(join(skillDir, "SKILL.md"), "Use the ship skill.");
72
- await writeFile(
73
- join(workflowsDir, "ship.md"),
74
- `---
75
- name: ship
76
- ---
77
- Run the ship workflow.`,
78
- );
79
- await writeFile(
80
- join(workflowsDir, "disabled.md"),
81
- `---
82
- name: disabled
83
- disabled: true
84
- ---
85
- Do not run this workflow.`,
86
- );
87
-
88
- const watcher = createUserInstructionConfigWatcher({
89
- skills: { directories: [join(tempRoot, "skills")] },
90
- rules: { directories: [] },
91
- workflows: { directories: [workflowsDir] },
92
- });
93
-
94
- try {
95
- await watcher.start();
96
- expect(resolveRuntimeSlashCommandFromWatcher("/ship", watcher)).toBe(
97
- "Run the ship workflow.",
98
- );
99
- expect(resolveRuntimeSlashCommandFromWatcher("/ship now", watcher)).toBe(
100
- "Run the ship workflow. now",
101
- );
102
- expect(resolveRuntimeSlashCommandFromWatcher("/disabled", watcher)).toBe(
103
- "/disabled",
104
- );
105
- expect(resolveRuntimeSlashCommandFromWatcher("/missing", watcher)).toBe(
106
- "/missing",
107
- );
108
- expect(
109
- resolveRuntimeSlashCommandFromWatcher("please run /ship", watcher),
110
- ).toBe("please run /ship");
111
- } finally {
112
- watcher.stop();
113
- }
114
- });
115
- });
@@ -1,196 +0,0 @@
1
- import { mkdir, mkdtemp, rm, unlink, writeFile } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { basename, join } from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import {
6
- type AgentYamlConfig,
7
- parseAgentConfigFromYaml,
8
- } from "./agent-config-loader";
9
- import {
10
- UnifiedConfigFileWatcher,
11
- type UnifiedConfigWatcherEvent,
12
- } from "./unified-config-file-watcher";
13
-
14
- const WAIT_TIMEOUT_MS = 8_000;
15
- const WAIT_INTERVAL_MS = 25;
16
-
17
- async function waitForEvent<TType extends string, TItem>(
18
- events: Array<UnifiedConfigWatcherEvent<TType, TItem>>,
19
- predicate: (event: UnifiedConfigWatcherEvent<TType, TItem>) => boolean,
20
- timeoutMs = WAIT_TIMEOUT_MS,
21
- ): Promise<UnifiedConfigWatcherEvent<TType, TItem>> {
22
- const startedAt = Date.now();
23
- while (Date.now() - startedAt < timeoutMs) {
24
- const match = events.find(predicate);
25
- if (match) {
26
- return match;
27
- }
28
- await new Promise((resolve) => setTimeout(resolve, WAIT_INTERVAL_MS));
29
- }
30
- throw new Error("Timed out waiting for watcher event.");
31
- }
32
-
33
- describe("UnifiedConfigFileWatcher", () => {
34
- const tempRoots: string[] = [];
35
-
36
- afterEach(async () => {
37
- await Promise.all(
38
- tempRoots.map((dir) => rm(dir, { recursive: true, force: true })),
39
- );
40
- tempRoots.length = 0;
41
- });
42
-
43
- it("emits upsert and remove events with config type for agent configs", async () => {
44
- const tempRoot = await mkdtemp(
45
- join(tmpdir(), "core-unified-config-watcher-"),
46
- );
47
- tempRoots.push(tempRoot);
48
- const agentsDir = join(tempRoot, "agents");
49
- await mkdir(agentsDir, { recursive: true });
50
- const agentFilePath = join(agentsDir, "reviewer.yaml");
51
- await writeFile(
52
- agentFilePath,
53
- `---
54
- name: Reviewer
55
- description: Reviews patches
56
- tools: read_files
57
- ---
58
- Review code carefully.`,
59
- );
60
-
61
- const watcher = new UnifiedConfigFileWatcher([
62
- {
63
- type: "agent" as const,
64
- directories: [agentsDir],
65
- includeFile: (fileName) => /\.(yaml|yml)$/i.test(fileName),
66
- parseFile: (context) => parseAgentConfigFromYaml(context.content),
67
- resolveId: (config) => config.name.toLowerCase(),
68
- },
69
- ]);
70
-
71
- const events: Array<
72
- UnifiedConfigWatcherEvent<
73
- "agent",
74
- ReturnType<typeof parseAgentConfigFromYaml>
75
- >
76
- > = [];
77
- const unsubscribe = watcher.subscribe((event) => events.push(event));
78
-
79
- try {
80
- await watcher.start();
81
- await waitForEvent(
82
- events,
83
- (event) => event.kind === "upsert" && event.record.id === "reviewer",
84
- );
85
-
86
- events.length = 0;
87
- await writeFile(
88
- agentFilePath,
89
- `---
90
- name: Reviewer
91
- description: Reviews patches
92
- ---
93
- Review code with strictness.`,
94
- );
95
- await watcher.refreshType("agent");
96
- await waitForEvent(
97
- events,
98
- (event) => event.kind === "upsert" && event.record.type === "agent",
99
- );
100
-
101
- events.length = 0;
102
- await unlink(agentFilePath);
103
- await watcher.refreshType("agent");
104
- await waitForEvent(
105
- events,
106
- (event) => event.kind === "remove" && event.type === "agent",
107
- );
108
- } finally {
109
- unsubscribe();
110
- watcher.stop();
111
- }
112
- }, 15_000);
113
-
114
- it("supports one watcher instance for multiple config types", async () => {
115
- const tempRoot = await mkdtemp(
116
- join(tmpdir(), "core-unified-config-watcher-"),
117
- );
118
- tempRoots.push(tempRoot);
119
- const agentsDir = join(tempRoot, "agents");
120
- const skillsDir = join(tempRoot, "skills");
121
- await mkdir(agentsDir, { recursive: true });
122
- await mkdir(skillsDir, { recursive: true });
123
-
124
- await writeFile(
125
- join(agentsDir, "researcher.yaml"),
126
- `---
127
- name: Researcher
128
- description: Finds context
129
- ---
130
- Investigate related code paths.`,
131
- );
132
- await writeFile(
133
- join(skillsDir, "SKILL.md"),
134
- `---
135
- name: incident-response
136
- description: Handle incidents
137
- ---
138
- Escalation playbook`,
139
- );
140
-
141
- const watcher = new UnifiedConfigFileWatcher<
142
- "agent" | "skill",
143
- AgentYamlConfig | { path: string }
144
- >([
145
- {
146
- type: "agent" as const,
147
- directories: [agentsDir],
148
- includeFile: (fileName) => /\.(yaml|yml)$/i.test(fileName),
149
- parseFile: (context) =>
150
- parseAgentConfigFromYaml(context.content) as
151
- | AgentYamlConfig
152
- | { path: string },
153
- resolveId: (config) =>
154
- "name" in config ? config.name.toLowerCase() : "invalid-agent-config",
155
- },
156
- {
157
- type: "skill" as const,
158
- directories: [skillsDir],
159
- includeFile: (fileName) => fileName === "SKILL.md",
160
- parseFile: (context) => ({ path: context.filePath }),
161
- resolveId: (_parsed, context) => basename(context.directoryPath),
162
- },
163
- ]);
164
-
165
- const events: Array<
166
- UnifiedConfigWatcherEvent<
167
- "agent" | "skill",
168
- AgentYamlConfig | { path: string }
169
- >
170
- > = [];
171
- const unsubscribe = watcher.subscribe((event) => events.push(event));
172
-
173
- try {
174
- await watcher.start();
175
- await waitForEvent(
176
- events,
177
- (event) =>
178
- event.kind === "upsert" &&
179
- (event.record.type === "agent" || event.record.type === "skill"),
180
- );
181
- expect(
182
- events.some(
183
- (event) => event.kind === "upsert" && event.record.type === "agent",
184
- ),
185
- ).toBe(true);
186
- expect(
187
- events.some(
188
- (event) => event.kind === "upsert" && event.record.type === "skill",
189
- ),
190
- ).toBe(true);
191
- } finally {
192
- unsubscribe();
193
- watcher.stop();
194
- }
195
- });
196
- });