@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
@@ -4,13 +4,18 @@
4
4
  * This file runs inside an isolated Node.js child process spawned by
5
5
  * {@link SubprocessSandbox}. It receives RPC calls over IPC and dynamically
6
6
  * imports plugin modules, wiring up their contributions (tools, commands,
7
- * shortcuts, flags, renderers, providers) and lifecycle hooks.
7
+ * message builders, providers) and lifecycle hooks.
8
8
  *
9
9
  * Because it executes in a separate process it must stay bundle-safe and only
10
10
  * depend on local helpers that can be inlined into the sandbox build.
11
11
  */
12
12
 
13
+ import { normalizePluginManifest, type PluginManifest } from "@clinebot/shared";
13
14
  import { importPluginModule } from "./plugin-module-import";
15
+ import {
16
+ matchesPluginManifestTargeting,
17
+ type PluginTargeting,
18
+ } from "./plugin-targeting";
14
19
 
15
20
  // ---------------------------------------------------------------------------
16
21
  // Types (intentionally minimal – mirrors only what the RPC protocol needs)
@@ -31,18 +36,6 @@ interface PluginCommand {
31
36
  handler?: (input: string) => Promise<string>;
32
37
  }
33
38
 
34
- interface PluginShortcut {
35
- name: string;
36
- value: string;
37
- description?: string;
38
- }
39
-
40
- interface PluginFlag {
41
- name: string;
42
- description?: string;
43
- defaultValue?: boolean | string | number;
44
- }
45
-
46
39
  interface PluginMessageBuilder {
47
40
  name: string;
48
41
  build: (message: unknown[]) => unknown[]; // Message[]
@@ -57,16 +50,18 @@ interface PluginProvider {
57
50
  interface PluginApi {
58
51
  registerTool(tool: PluginTool): void;
59
52
  registerCommand(command: PluginCommand): void;
60
- registerShortcut(shortcut: PluginShortcut): void;
61
- registerFlag(flag: PluginFlag): void;
62
53
  registerMessageBuilder(builder: PluginMessageBuilder): void;
63
54
  registerProvider(provider: PluginProvider): void;
64
55
  }
65
56
 
57
+ interface PluginSetupCtx {
58
+ workspaceInfo?: unknown;
59
+ }
60
+
66
61
  interface PluginModule {
67
62
  name: string;
68
- manifest: Record<string, unknown>;
69
- setup?: (api: PluginApi) => void | Promise<void>;
63
+ manifest: PluginManifest;
64
+ setup?: (api: PluginApi, ctx: PluginSetupCtx) => void | Promise<void>;
70
65
  [hookName: string]: unknown;
71
66
  }
72
67
 
@@ -86,14 +81,14 @@ interface PluginDescriptor {
86
81
  pluginId: string;
87
82
  pluginPath: string;
88
83
  name: string;
89
- manifest: Record<string, unknown>;
84
+ manifest: PluginManifest;
90
85
  contributions: {
91
86
  tools: ContributionDescriptor[];
92
87
  commands: ContributionDescriptor[];
93
- shortcuts: ContributionDescriptor[];
94
- flags: ContributionDescriptor[];
95
88
  messageBuilders: ContributionDescriptor[];
96
89
  providers: ContributionDescriptor[];
90
+ shortcuts?: ContributionDescriptor[];
91
+ flags?: ContributionDescriptor[];
97
92
  };
98
93
  }
99
94
 
@@ -132,6 +127,12 @@ function isObject(value: unknown): value is Record<string, unknown> {
132
127
  return typeof value === "object" && value !== null;
133
128
  }
134
129
 
130
+ function hasValidStringArray(value: unknown): value is string[] {
131
+ return (
132
+ Array.isArray(value) && value.every((entry) => typeof entry === "string")
133
+ );
134
+ }
135
+
135
136
  function assertValidPluginModule(
136
137
  plugin: unknown,
137
138
  pluginPath: string,
@@ -145,6 +146,29 @@ function assertValidPluginModule(
145
146
  if (!isObject(plugin.manifest)) {
146
147
  throw new Error(`Invalid plugin manifest: ${pluginPath}`);
147
148
  }
149
+ if (
150
+ Object.hasOwn(plugin.manifest, "providerIds") &&
151
+ !hasValidStringArray(plugin.manifest.providerIds)
152
+ ) {
153
+ throw new Error(`Invalid plugin manifest.providerIds: ${pluginPath}`);
154
+ }
155
+ if (
156
+ Object.hasOwn(plugin.manifest, "modelIds") &&
157
+ !hasValidStringArray(plugin.manifest.modelIds)
158
+ ) {
159
+ throw new Error(`Invalid plugin manifest.modelIds: ${pluginPath}`);
160
+ }
161
+ }
162
+
163
+ function assertValidPluginSetupCtx(
164
+ ctx: unknown,
165
+ ): asserts ctx is PluginSetupCtx {
166
+ if (!isObject(ctx)) {
167
+ throw new Error("Plugin setup context must be an object");
168
+ }
169
+ if (ctx.workspaceInfo !== undefined && !isObject(ctx.workspaceInfo)) {
170
+ throw new Error("Plugin setup context workspaceInfo must be an object");
171
+ }
148
172
  }
149
173
 
150
174
  // ---------------------------------------------------------------------------
@@ -183,6 +207,16 @@ function emitEvent(name: string, payload?: unknown): void {
183
207
  // Expose event emitter to plugins.
184
208
  (globalThis as Record<string, unknown>).__clinePluginHost = { emitEvent };
185
209
 
210
+ /**
211
+ * Session workspace env — populated by `initialize()` and available to any
212
+ * plugin code that executes before the setup hook, or cannot use hook context.
213
+ * Prefer using PluginSetupCtx from the setup function when possible.
214
+ */
215
+ (globalThis as Record<string, unknown>).__clineSessionEnv = {
216
+ cwd: undefined as string | undefined,
217
+ workspaceInfo: undefined as unknown,
218
+ };
219
+
186
220
  // ---------------------------------------------------------------------------
187
221
  // Helpers
188
222
  // ---------------------------------------------------------------------------
@@ -214,16 +248,44 @@ function getPlugin(pluginId: string): PluginState {
214
248
  async function initialize(args: {
215
249
  pluginPaths?: string[];
216
250
  exportName?: string;
251
+ providerId?: string;
252
+ modelId?: string;
253
+ cwd?: string;
254
+ workspaceInfo?: unknown;
217
255
  }): Promise<InitializeResult> {
218
256
  pluginState.clear();
219
257
  pluginCounter = 0;
220
258
  contributionCounters.clear();
221
259
 
260
+ // Apply the session's working directory so that process.cwd() and relative
261
+ // path resolution inside plugins reflect the correct workspace, not the
262
+ // host process's cwd (which may differ when --cwd was used without calling
263
+ // process.chdir() on the host side).
264
+ if (args.cwd) {
265
+ try {
266
+ process.chdir(args.cwd);
267
+ } catch {
268
+ // Ignore — best-effort; path may not exist in unusual environments.
269
+ }
270
+ }
271
+
272
+ // Keep the global escape-hatch in sync with the active session.
273
+ const sessionEnv = (globalThis as Record<string, unknown>)
274
+ .__clineSessionEnv as Record<string, unknown>;
275
+ if (sessionEnv) {
276
+ sessionEnv.cwd = args.cwd;
277
+ sessionEnv.workspaceInfo = args.workspaceInfo;
278
+ }
279
+
222
280
  const descriptors: PluginDescriptor[] = [];
223
281
  const failures: PluginInitializationFailure[] = [];
224
282
  const warnings: PluginInitializationWarning[] = [];
225
283
  const exportName = args.exportName || "plugin";
226
284
  const pluginIndexByName = new Map<string, number>();
285
+ const targeting: PluginTargeting = {
286
+ providerId: args.providerId,
287
+ modelId: args.modelId,
288
+ };
227
289
 
228
290
  for (const pluginPath of args.pluginPaths || []) {
229
291
  let plugin: PluginModule | undefined;
@@ -232,15 +294,19 @@ async function initialize(args: {
232
294
  plugin = (moduleExports.default ??
233
295
  moduleExports[exportName]) as unknown as PluginModule;
234
296
  assertValidPluginModule(plugin, pluginPath);
297
+ plugin.manifest = normalizePluginManifest(plugin.manifest);
298
+ if (!matchesPluginManifestTargeting(plugin.manifest, targeting)) {
299
+ continue;
300
+ }
235
301
 
236
302
  const pluginId = `plugin_${++pluginCounter}`;
237
303
  const contributions: PluginDescriptor["contributions"] = {
238
304
  tools: [],
239
305
  commands: [],
240
- shortcuts: [],
241
- flags: [],
242
306
  messageBuilders: [],
243
307
  providers: [],
308
+ shortcuts: [],
309
+ flags: [],
244
310
  };
245
311
  const handlers: PluginState["handlers"] = {
246
312
  tools: new Map(),
@@ -272,22 +338,6 @@ async function initialize(args: {
272
338
  description: command.description,
273
339
  });
274
340
  },
275
- registerShortcut: (shortcut) => {
276
- contributions.shortcuts.push({
277
- id: makeId(pluginId, "shortcut"),
278
- name: shortcut.name,
279
- value: shortcut.value,
280
- description: shortcut.description,
281
- });
282
- },
283
- registerFlag: (flag) => {
284
- contributions.flags.push({
285
- id: makeId(pluginId, "flag"),
286
- name: flag.name,
287
- description: flag.description,
288
- defaultValue: flag.defaultValue,
289
- });
290
- },
291
341
  registerMessageBuilder: (builder) => {
292
342
  const id = makeId(pluginId, "builder");
293
343
  handlers.messageBuilders.set(id, builder.build);
@@ -305,7 +355,11 @@ async function initialize(args: {
305
355
 
306
356
  if (typeof plugin.setup === "function") {
307
357
  try {
308
- await plugin.setup(api);
358
+ const setupCtx = {
359
+ workspaceInfo: args.workspaceInfo,
360
+ };
361
+ assertValidPluginSetupCtx(setupCtx);
362
+ await plugin.setup(api, setupCtx);
309
363
  } catch (error) {
310
364
  failures.push({
311
365
  pluginPath,
@@ -2,17 +2,35 @@ import { existsSync } from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- import type { AgentConfig, HookStage, Tool } from "@clinebot/shared";
5
+ import type {
6
+ AgentConfig,
7
+ HookStage,
8
+ Tool,
9
+ WorkspaceInfo,
10
+ } from "@clinebot/shared";
6
11
  import { SubprocessSandbox } from "../../runtime/subprocess-sandbox";
7
12
  import type { PluginLoadDiagnostics } from "./plugin-load-report";
13
+ import type { PluginTargeting } from "./plugin-targeting";
8
14
 
9
- export interface PluginSandboxOptions {
15
+ export interface PluginSandboxOptions extends PluginTargeting {
10
16
  pluginPaths: string[];
11
17
  exportName?: string;
12
18
  importTimeoutMs?: number;
13
19
  hookTimeoutMs?: number;
14
20
  contributionTimeoutMs?: number;
15
21
  onEvent?: (event: { name: string; payload?: unknown }) => void;
22
+ /**
23
+ * The session's working directory. Forwarded to the sandbox subprocess so
24
+ * that `process.cwd()` returns the correct path inside the sandbox even
25
+ * when `--cwd` was passed without calling `process.chdir()` on the host.
26
+ */
27
+ cwd?: string;
28
+ /**
29
+ * Structured workspace and git metadata (branch, commit, remotes) generated
30
+ * at session startup. Forwarded to plugins via PluginSetupCtx.workspaceInfo
31
+ * so they can inspect git state without running their own commands.
32
+ */
33
+ workspaceInfo?: WorkspaceInfo;
16
34
  }
17
35
 
18
36
  type AgentExtension = NonNullable<AgentConfig["extensions"]>[number];
@@ -25,8 +43,6 @@ type SandboxedContributionDescriptor = {
25
43
  inputSchema?: unknown;
26
44
  timeoutMs?: number;
27
45
  retryable?: boolean;
28
- value?: string;
29
- defaultValue?: boolean | string | number;
30
46
  metadata?: Record<string, unknown>;
31
47
  };
32
48
 
@@ -38,10 +54,10 @@ type SandboxedPluginDescriptor = {
38
54
  contributions: {
39
55
  tools: SandboxedContributionDescriptor[];
40
56
  commands: SandboxedContributionDescriptor[];
41
- shortcuts: SandboxedContributionDescriptor[];
42
- flags: SandboxedContributionDescriptor[];
43
57
  messageBuilders: SandboxedContributionDescriptor[];
44
58
  providers: SandboxedContributionDescriptor[];
59
+ shortcuts?: SandboxedContributionDescriptor[];
60
+ flags?: SandboxedContributionDescriptor[];
45
61
  };
46
62
  };
47
63
 
@@ -49,6 +65,22 @@ type SandboxedInitializeResult = {
49
65
  plugins: SandboxedPluginDescriptor[];
50
66
  } & PluginLoadDiagnostics;
51
67
 
68
+ function normalizeDescriptor(
69
+ descriptor: SandboxedPluginDescriptor,
70
+ ): SandboxedPluginDescriptor {
71
+ return {
72
+ ...descriptor,
73
+ contributions: {
74
+ tools: descriptor.contributions?.tools ?? [],
75
+ commands: descriptor.contributions?.commands ?? [],
76
+ messageBuilders: descriptor.contributions?.messageBuilders ?? [],
77
+ providers: descriptor.contributions?.providers ?? [],
78
+ shortcuts: descriptor.contributions?.shortcuts ?? [],
79
+ flags: descriptor.contributions?.flags ?? [],
80
+ },
81
+ };
82
+ }
83
+
52
84
  function isUnknownPluginIdError(error: unknown): boolean {
53
85
  const message = error instanceof Error ? error.message : String(error);
54
86
  return message.includes("Unknown sandbox plugin id:");
@@ -181,6 +213,10 @@ export async function loadSandboxedPlugins(
181
213
  const initArgs = {
182
214
  pluginPaths: options.pluginPaths,
183
215
  exportName: options.exportName,
216
+ providerId: options.providerId,
217
+ modelId: options.modelId,
218
+ cwd: options.cwd,
219
+ workspaceInfo: options.workspaceInfo,
184
220
  };
185
221
 
186
222
  // Guard against concurrent re-initialization when multiple tools/hooks
@@ -208,7 +244,7 @@ export async function loadSandboxedPlugins(
208
244
  });
209
245
  throw error;
210
246
  }
211
- const descriptors = initialized.plugins;
247
+ const descriptors = initialized.plugins.map(normalizeDescriptor);
212
248
 
213
249
  const extensions: NonNullable<AgentConfig["extensions"]> = descriptors.map(
214
250
  (descriptor) => {
@@ -267,7 +303,7 @@ function registerTools(
267
303
  timeoutMs: number,
268
304
  reinitialize: () => Promise<void>,
269
305
  ): void {
270
- for (const td of descriptor.contributions.tools) {
306
+ for (const td of descriptor.contributions?.tools ?? []) {
271
307
  const tool: Tool = {
272
308
  name: td.name,
273
309
  description: td.description ?? "",
@@ -318,7 +354,7 @@ function registerCommands(
318
354
  timeoutMs: number,
319
355
  reinitialize: () => Promise<void>,
320
356
  ): void {
321
- for (const cd of descriptor.contributions.commands) {
357
+ for (const cd of descriptor.contributions?.commands ?? []) {
322
358
  api.registerCommand({
323
359
  name: cd.name,
324
360
  description: cd.description,
@@ -357,30 +393,14 @@ function registerSimpleContributions(
357
393
  api: AgentExtensionApi,
358
394
  descriptor: SandboxedPluginDescriptor,
359
395
  ): void {
360
- for (const sd of descriptor.contributions.shortcuts) {
361
- api.registerShortcut({
362
- name: sd.name,
363
- value: sd.value ?? "",
364
- description: sd.description,
365
- });
366
- }
367
-
368
- for (const fd of descriptor.contributions.flags) {
369
- api.registerFlag({
370
- name: fd.name,
371
- description: fd.description,
372
- defaultValue: fd.defaultValue,
373
- });
374
- }
375
-
376
- for (const rd of descriptor.contributions.messageBuilders) {
396
+ for (const rd of descriptor.contributions?.messageBuilders ?? []) {
377
397
  api.registerMessageBuilder({
378
398
  name: rd.name,
379
399
  build: (m) => m,
380
400
  });
381
401
  }
382
402
 
383
- for (const pd of descriptor.contributions.providers) {
403
+ for (const pd of descriptor.contributions?.providers ?? []) {
384
404
  api.registerProvider({
385
405
  name: pd.name,
386
406
  description: pd.description,
@@ -0,0 +1,32 @@
1
+ import type { PluginManifest } from "@clinebot/shared";
2
+
3
+ export interface PluginTargeting {
4
+ providerId?: string;
5
+ modelId?: string;
6
+ }
7
+
8
+ export function matchesPluginManifestTargeting(
9
+ manifest: PluginManifest | undefined,
10
+ targeting: PluginTargeting | undefined,
11
+ ): boolean {
12
+ if (!manifest) {
13
+ return true;
14
+ }
15
+
16
+ if (manifest.providerIds?.length) {
17
+ if (
18
+ !targeting?.providerId ||
19
+ !manifest.providerIds.includes(targeting.providerId)
20
+ ) {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ if (manifest.modelIds?.length) {
26
+ if (!targeting?.modelId || !manifest.modelIds.includes(targeting.modelId)) {
27
+ return false;
28
+ }
29
+ }
30
+
31
+ return true;
32
+ }
@@ -81,7 +81,7 @@ export function createReadFilesTool(
81
81
  return createTool<ReadFilesInput, ToolOperationResult[]>({
82
82
  name: "read_files",
83
83
  description:
84
- "Read the full content of text files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. " +
84
+ "Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. " +
85
85
  "Returns file contents or error messages for each path.",
86
86
  inputSchema: zodToJsonSchema(ReadFilesInputSchema),
87
87
  timeoutMs: timeoutMs * 2, // Account for multiple files
@@ -350,67 +350,48 @@ export function createWebFetchTool(
350
350
  });
351
351
  }
352
352
 
353
- const APPLY_PATCH_TOOL_DESC = `This is a custom utility that makes it more convenient to add, remove, move, or edit code in a single file. \`apply_patch\` effectively allows you to execute a diff/patch against a file, but the format of the diff specification is unique to this task, so pay careful attention to these instructions. To use the \`apply_patch\` command, you should pass a message of the following structure as "input":
353
+ const APPLY_PATCH_TOOL_DESC = `Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
354
354
 
355
- %%bash
356
- apply_patch <<"EOF"
357
355
  *** Begin Patch
358
- [YOUR_PATCH]
356
+ *** Update File: path/to/file.ts
357
+ @@ optional section marker
358
+ [context before]
359
+ -[old line]
360
+ +[new line]
361
+ [context after]
359
362
  *** End Patch
360
- EOF
361
363
 
362
- Where [YOUR_PATCH] is the actual content of your patch, specified in the following V4A diff format.
364
+ Supported actions:
365
+ - \`*** Add File: <path>\`
366
+ - \`*** Update File: <path>\`
367
+ - \`*** Delete File: <path>\`
368
+ - optional \`*** Move to: <new path>\` immediately after an Update File header
363
369
 
364
- *** [ACTION] File: [path/to/file] -> ACTION can be one of Add, Update, or Delete.
370
+ Rules:
371
+ - In an Add File section, every file-content line must start with \`+\`.
372
+ - In an Update section, use context lines plus \`-\` and \`+\` lines to describe the change.
373
+ - Use \`@@\` markers when extra context is needed to disambiguate repeated code blocks.
374
+ - Do not use line numbers; this format is context-based.
375
+ - Prefer sending the patch body directly. Legacy shell wrappers such as \`%%bash\` and \`apply_patch <<"EOF"\` are accepted for compatibility but are not preferred.
365
376
 
366
- In a Add File section, every line of the new file (including blank/empty lines) MUST start with a \`+\` prefix. Do not include any unprefixed lines inside an Add section
367
- In a Update/Delete section, repeat the following for each snippet of code that needs to be changed:
368
- [context_before] -> See below for further instructions on context.
369
- - [old_code] -> Precede the old code with a minus sign.
370
- + [new_code] -> Precede the new, replacement code with a plus sign.
371
- [context_after] -> See below for further instructions on context.
377
+ Example:
372
378
 
373
- For instructions on [context_before] and [context_after]:
374
- - By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.
375
- - If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:
376
- @@ class BaseClass
377
- [3 lines of pre-context]
378
- - [old_code]
379
- + [new_code]
380
- [3 lines of post-context]
381
-
382
- - If a code block is repeated so many times in a class or function such that even a single @@ statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple \`@@\` statements to jump to the right context. For instance:
383
-
384
- @@ class BaseClass
385
- @@ def method():
386
- [3 lines of pre-context]
387
- - [old_code]
388
- + [new_code]
389
- [3 lines of post-context]
390
-
391
- Note, then, that we do not use line numbers in this diff format, as the context is enough to uniquely identify code. An example of a message that you might pass as "input" to this function, in order to apply a patch, is shown below.
392
-
393
- %%bash
394
- apply_patch <<"EOF"
395
379
  *** Begin Patch
396
- *** Update File: pygorithm/searching/binary_search.py
397
- @@ class BaseClass
398
- @@ def search():
399
- - pass
400
- + raise NotImplementedError()
401
-
402
- @@ class Subclass
403
- @@ def search():
404
- - pass
405
- + raise NotImplementedError()
406
-
407
- *** End Patch
408
- EOF`;
380
+ *** Update File: src/page.tsx
381
+ @@
382
+ return (
383
+ <div>
384
+ <button onClick={() => console.log("clicked")}>Click me</button>
385
+ + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
386
+ </div>
387
+ );
388
+ }
389
+ *** End Patch`;
409
390
 
410
391
  /**
411
392
  * Create the apply_patch tool
412
393
  *
413
- * Applies the legacy Cline patch format to one or more files.
394
+ * Applies the canonical apply_patch format to one or more files.
414
395
  */
415
396
  export function createApplyPatchTool(
416
397
  executor: ApplyPatchExecutor,