@clinebot/core 0.0.35 → 0.0.37

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 (441) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +362 -39
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/cline-account-service.d.ts.map +1 -1
  5. package/dist/account/index.d.ts +1 -1
  6. package/dist/account/index.d.ts.map +1 -1
  7. package/dist/account/rpc.d.ts +6 -6
  8. package/dist/account/rpc.d.ts.map +1 -1
  9. package/dist/cron/cron-event-ingress.d.ts +38 -0
  10. package/dist/cron/cron-event-ingress.d.ts.map +1 -0
  11. package/dist/cron/cron-materializer.d.ts +36 -0
  12. package/dist/cron/cron-materializer.d.ts.map +1 -0
  13. package/dist/cron/cron-reconciler.d.ts +62 -0
  14. package/dist/cron/cron-reconciler.d.ts.map +1 -0
  15. package/dist/cron/cron-report-writer.d.ts +41 -0
  16. package/dist/cron/cron-report-writer.d.ts.map +1 -0
  17. package/dist/cron/cron-runner.d.ts +43 -0
  18. package/dist/cron/cron-runner.d.ts.map +1 -0
  19. package/dist/cron/cron-schema.d.ts +3 -0
  20. package/dist/cron/cron-schema.d.ts.map +1 -0
  21. package/dist/cron/cron-service.d.ts +57 -0
  22. package/dist/cron/cron-service.d.ts.map +1 -0
  23. package/dist/cron/cron-spec-parser.d.ts +27 -0
  24. package/dist/cron/cron-spec-parser.d.ts.map +1 -0
  25. package/dist/cron/cron-watcher.d.ts +23 -0
  26. package/dist/cron/cron-watcher.d.ts.map +1 -0
  27. package/dist/cron/resource-limiter.d.ts +9 -0
  28. package/dist/cron/resource-limiter.d.ts.map +1 -0
  29. package/dist/cron/schedule-command-service.d.ts +10 -0
  30. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  31. package/dist/cron/schedule-service.d.ts +100 -0
  32. package/dist/cron/schedule-service.d.ts.map +1 -0
  33. package/dist/cron/scheduler.d.ts +68 -0
  34. package/dist/cron/scheduler.d.ts.map +1 -0
  35. package/dist/cron/sqlite-cron-store.d.ts +230 -0
  36. package/dist/cron/sqlite-cron-store.d.ts.map +1 -0
  37. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  38. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  39. package/dist/extensions/config/agent-config-loader.d.ts +4 -3
  40. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  41. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  42. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  43. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  44. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  45. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  46. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  47. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  48. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  49. package/dist/extensions/context/compaction.d.ts.map +1 -1
  50. package/dist/extensions/plugin/plugin-config-loader.d.ts +15 -2
  51. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  52. package/dist/extensions/plugin/plugin-loader.d.ts +13 -7
  53. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  54. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  55. package/dist/extensions/plugin/plugin-sandbox.d.ts +21 -2
  56. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  57. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  58. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  59. package/dist/extensions/plugin-sandbox-bootstrap.js +237 -276
  60. package/dist/extensions/tools/constants.d.ts +1 -0
  61. package/dist/extensions/tools/constants.d.ts.map +1 -1
  62. package/dist/extensions/tools/definitions.d.ts +3 -4
  63. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  64. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  65. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  66. package/dist/extensions/tools/executors/editor.d.ts.map +1 -1
  67. package/dist/extensions/tools/executors/search.d.ts +1 -1
  68. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  69. package/dist/extensions/tools/helpers.d.ts +1 -0
  70. package/dist/extensions/tools/helpers.d.ts.map +1 -1
  71. package/dist/extensions/tools/index.d.ts +3 -2
  72. package/dist/extensions/tools/index.d.ts.map +1 -1
  73. package/dist/extensions/tools/presets.d.ts +27 -44
  74. package/dist/extensions/tools/presets.d.ts.map +1 -1
  75. package/dist/extensions/tools/runtime.d.ts +25 -0
  76. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  77. package/dist/extensions/tools/schemas.d.ts +25 -3
  78. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  79. package/dist/extensions/tools/team/delegated-agent.d.ts +2 -2
  80. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -1
  81. package/dist/extensions/tools/team/multi-agent.d.ts +7 -3
  82. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -1
  83. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  84. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  85. package/dist/extensions/tools/types.d.ts +0 -5
  86. package/dist/extensions/tools/types.d.ts.map +1 -1
  87. package/dist/hooks/hook-bridge.d.ts +118 -0
  88. package/dist/hooks/hook-bridge.d.ts.map +1 -0
  89. package/dist/hooks/hook-file-hooks.d.ts +6 -2
  90. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  91. package/dist/hooks/hook-registry.d.ts +16 -0
  92. package/dist/hooks/hook-registry.d.ts.map +1 -0
  93. package/dist/hooks/index.d.ts +0 -1
  94. package/dist/hooks/index.d.ts.map +1 -1
  95. package/dist/hooks/subprocess.d.ts +8 -1
  96. package/dist/hooks/subprocess.d.ts.map +1 -1
  97. package/dist/hub/browser-websocket.d.ts +18 -0
  98. package/dist/hub/browser-websocket.d.ts.map +1 -0
  99. package/dist/hub/client.d.ts +51 -0
  100. package/dist/hub/client.d.ts.map +1 -0
  101. package/dist/hub/connect.d.ts +15 -0
  102. package/dist/hub/connect.d.ts.map +1 -0
  103. package/dist/hub/daemon-entry.d.ts +2 -0
  104. package/dist/hub/daemon-entry.d.ts.map +1 -0
  105. package/dist/hub/daemon-entry.js +1305 -0
  106. package/dist/hub/daemon.d.ts +5 -0
  107. package/dist/hub/daemon.d.ts.map +1 -0
  108. package/dist/hub/defaults.d.ts +17 -0
  109. package/dist/hub/defaults.d.ts.map +1 -0
  110. package/dist/hub/discovery.d.ts +29 -0
  111. package/dist/hub/discovery.d.ts.map +1 -0
  112. package/dist/hub/index.d.ts +15 -0
  113. package/dist/hub/index.d.ts.map +1 -0
  114. package/dist/hub/index.js +1294 -0
  115. package/dist/hub/native-transport.d.ts +17 -0
  116. package/dist/hub/native-transport.d.ts.map +1 -0
  117. package/dist/hub/runtime-handlers.d.ts +11 -0
  118. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  119. package/dist/hub/server.d.ts +104 -0
  120. package/dist/hub/server.d.ts.map +1 -0
  121. package/dist/hub/session-client.d.ts +90 -0
  122. package/dist/hub/session-client.d.ts.map +1 -0
  123. package/dist/hub/start-shared-server.d.ts +19 -0
  124. package/dist/hub/start-shared-server.d.ts.map +1 -0
  125. package/dist/hub/transport.d.ts +8 -0
  126. package/dist/hub/transport.d.ts.map +1 -0
  127. package/dist/hub/ui-client.d.ts +45 -0
  128. package/dist/hub/ui-client.d.ts.map +1 -0
  129. package/dist/hub/workspace.d.ts +4 -0
  130. package/dist/hub/workspace.d.ts.map +1 -0
  131. package/dist/index.d.ts +29 -16
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +782 -471
  134. package/dist/llms/cline-recommended-models.d.ts +20 -0
  135. package/dist/llms/cline-recommended-models.d.ts.map +1 -0
  136. package/dist/llms/configured-provider-registry.d.ts +28 -0
  137. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  138. package/dist/llms/handler-factory.d.ts +16 -0
  139. package/dist/llms/handler-factory.d.ts.map +1 -0
  140. package/dist/llms/provider-defaults.d.ts +27 -0
  141. package/dist/llms/provider-defaults.d.ts.map +1 -0
  142. package/dist/llms/provider-settings.d.ts +245 -0
  143. package/dist/llms/provider-settings.d.ts.map +1 -0
  144. package/dist/llms/runtime-config.d.ts +4 -0
  145. package/dist/llms/runtime-config.d.ts.map +1 -0
  146. package/dist/llms/runtime-registry.d.ts +20 -0
  147. package/dist/llms/runtime-registry.d.ts.map +1 -0
  148. package/dist/llms/runtime-types.d.ts +85 -0
  149. package/dist/llms/runtime-types.d.ts.map +1 -0
  150. package/dist/runtime/agent-config-adapter.d.ts +148 -0
  151. package/dist/runtime/agent-config-adapter.d.ts.map +1 -0
  152. package/dist/runtime/agent-runtime-config-builder.d.ts +96 -0
  153. package/dist/runtime/agent-runtime-config-builder.d.ts.map +1 -0
  154. package/dist/runtime/history.d.ts +6 -0
  155. package/dist/runtime/history.d.ts.map +1 -1
  156. package/dist/runtime/host.d.ts +1 -2
  157. package/dist/runtime/host.d.ts.map +1 -1
  158. package/dist/runtime/loop-detection.d.ts +59 -0
  159. package/dist/runtime/loop-detection.d.ts.map +1 -0
  160. package/dist/runtime/mistake-tracker.d.ts +69 -0
  161. package/dist/runtime/mistake-tracker.d.ts.map +1 -0
  162. package/dist/runtime/rules.d.ts +1 -0
  163. package/dist/runtime/rules.d.ts.map +1 -1
  164. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  165. package/dist/runtime/runtime-event-adapter.d.ts +102 -0
  166. package/dist/runtime/runtime-event-adapter.d.ts.map +1 -0
  167. package/dist/runtime/runtime-host.d.ts +49 -26
  168. package/dist/runtime/runtime-host.d.ts.map +1 -1
  169. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  170. package/dist/runtime/session-runtime-orchestrator.d.ts +261 -0
  171. package/dist/runtime/session-runtime-orchestrator.d.ts.map +1 -0
  172. package/dist/runtime/session-runtime.d.ts +16 -21
  173. package/dist/runtime/session-runtime.d.ts.map +1 -1
  174. package/dist/runtime/user-input-builder.d.ts +24 -0
  175. package/dist/runtime/user-input-builder.d.ts.map +1 -0
  176. package/dist/services/global-settings.d.ts +12 -0
  177. package/dist/services/global-settings.d.ts.map +1 -0
  178. package/dist/services/index.js +28 -0
  179. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  180. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  181. package/dist/services/plugin-tools.d.ts +16 -0
  182. package/dist/services/plugin-tools.d.ts.map +1 -0
  183. package/dist/services/providers/local-provider-registry.d.ts +199 -23
  184. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  185. package/dist/services/providers/local-provider-service.d.ts +15 -13
  186. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  187. package/dist/services/session-data.d.ts +1 -1
  188. package/dist/services/session-data.d.ts.map +1 -1
  189. package/dist/services/session-telemetry.d.ts +7 -2
  190. package/dist/services/session-telemetry.d.ts.map +1 -1
  191. package/dist/services/storage/file-team-store.d.ts.map +1 -1
  192. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  193. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  194. package/dist/services/storage/provider-settings-manager.d.ts +1 -0
  195. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -1
  196. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -1
  197. package/dist/services/workspace-manifest.d.ts +11 -0
  198. package/dist/services/workspace-manifest.d.ts.map +1 -1
  199. package/dist/session/conversation-store.d.ts +30 -0
  200. package/dist/session/conversation-store.d.ts.map +1 -0
  201. package/dist/session/message-builder.d.ts +65 -0
  202. package/dist/session/message-builder.d.ts.map +1 -0
  203. package/dist/session/persistence-service.d.ts +11 -23
  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-manifest.d.ts +1 -1
  208. package/dist/session/session-row.d.ts +93 -0
  209. package/dist/session/session-row.d.ts.map +1 -0
  210. package/dist/session/session-service.d.ts +2 -102
  211. package/dist/session/session-service.d.ts.map +1 -1
  212. package/dist/session/subagent-session-manager.d.ts +36 -0
  213. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  214. package/dist/session/team-persistence-store.d.ts +24 -0
  215. package/dist/session/team-persistence-store.d.ts.map +1 -0
  216. package/dist/transports/hub.d.ts +58 -0
  217. package/dist/transports/hub.d.ts.map +1 -0
  218. package/dist/transports/local.d.ts +23 -9
  219. package/dist/transports/local.d.ts.map +1 -1
  220. package/dist/transports/remote.d.ts +10 -0
  221. package/dist/transports/remote.d.ts.map +1 -0
  222. package/dist/transports/runtime-host-support.d.ts +3 -2
  223. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  224. package/dist/types/chat-schema.d.ts +15 -17
  225. package/dist/types/chat-schema.d.ts.map +1 -1
  226. package/dist/types/config.d.ts +17 -7
  227. package/dist/types/config.d.ts.map +1 -1
  228. package/dist/types/events.d.ts +7 -6
  229. package/dist/types/events.d.ts.map +1 -1
  230. package/dist/types/provider-settings.d.ts +4 -5
  231. package/dist/types/provider-settings.d.ts.map +1 -1
  232. package/dist/types/session.d.ts +7 -3
  233. package/dist/types/session.d.ts.map +1 -1
  234. package/dist/types.d.ts +11 -4
  235. package/dist/types.d.ts.map +1 -1
  236. package/package.json +20 -6
  237. package/src/ClineCore.ts +757 -44
  238. package/src/account/cline-account-service.ts +44 -6
  239. package/src/account/index.ts +3 -3
  240. package/src/account/rpc.ts +12 -12
  241. package/src/cron/cron-event-ingress.ts +357 -0
  242. package/src/cron/cron-materializer.ts +97 -0
  243. package/src/cron/cron-reconciler.ts +241 -0
  244. package/src/cron/cron-report-writer.ts +153 -0
  245. package/src/cron/cron-runner.ts +495 -0
  246. package/src/cron/cron-schema.ts +127 -0
  247. package/src/cron/cron-service.ts +163 -0
  248. package/src/cron/cron-spec-parser.ts +489 -0
  249. package/src/cron/cron-watcher.ts +102 -0
  250. package/src/cron/index.ts +15 -0
  251. package/src/cron/resource-limiter.ts +46 -0
  252. package/src/cron/schedule-command-service.ts +193 -0
  253. package/src/cron/schedule-service.ts +703 -0
  254. package/src/cron/scheduler.ts +772 -0
  255. package/src/cron/sqlite-cron-store.ts +1286 -0
  256. package/src/cron/sqlite-schedule-store.ts +708 -0
  257. package/src/extensions/config/agent-config-loader.ts +17 -7
  258. package/src/extensions/config/runtime-commands.ts +6 -0
  259. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  260. package/src/extensions/context/agentic-compaction.ts +3 -3
  261. package/src/extensions/context/basic-compaction.ts +2 -2
  262. package/src/extensions/context/compaction-shared.ts +5 -4
  263. package/src/extensions/context/compaction.ts +3 -3
  264. package/src/extensions/plugin/plugin-config-loader.ts +37 -2
  265. package/src/extensions/plugin/plugin-loader.ts +69 -9
  266. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  267. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +243 -39
  268. package/src/extensions/plugin/plugin-sandbox.ts +173 -29
  269. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  270. package/src/extensions/tools/constants.ts +2 -0
  271. package/src/extensions/tools/definitions.ts +61 -71
  272. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  273. package/src/extensions/tools/executors/editor.ts +4 -3
  274. package/src/extensions/tools/executors/search.ts +195 -3
  275. package/src/extensions/tools/helpers.ts +24 -0
  276. package/src/extensions/tools/index.ts +11 -2
  277. package/src/extensions/tools/presets.ts +32 -47
  278. package/src/extensions/tools/runtime.ts +261 -0
  279. package/src/extensions/tools/schemas.ts +17 -20
  280. package/src/extensions/tools/team/delegated-agent.ts +8 -3
  281. package/src/extensions/tools/team/multi-agent.ts +135 -19
  282. package/src/extensions/tools/team/team-tools.ts +172 -91
  283. package/src/extensions/tools/types.ts +0 -6
  284. package/src/hooks/hook-bridge.ts +489 -0
  285. package/src/hooks/hook-file-hooks.ts +66 -5
  286. package/src/hooks/hook-registry.ts +257 -0
  287. package/src/hooks/index.ts +0 -7
  288. package/src/hooks/subprocess-runner.ts +1 -1
  289. package/src/hooks/subprocess.ts +9 -0
  290. package/src/hub/browser-websocket.ts +159 -0
  291. package/src/hub/client.ts +633 -0
  292. package/src/hub/connect.ts +156 -0
  293. package/src/hub/daemon-entry.ts +122 -0
  294. package/src/hub/daemon.ts +284 -0
  295. package/src/hub/defaults.ts +70 -0
  296. package/src/hub/discovery.ts +247 -0
  297. package/src/hub/index.ts +14 -0
  298. package/src/hub/native-transport.ts +31 -0
  299. package/src/hub/runtime-handlers.ts +141 -0
  300. package/src/hub/server.ts +2317 -0
  301. package/src/hub/session-client.ts +502 -0
  302. package/src/hub/start-shared-server.ts +61 -0
  303. package/src/hub/transport.ts +14 -0
  304. package/src/hub/ui-client.ts +126 -0
  305. package/src/hub/workspace.ts +19 -0
  306. package/src/index.ts +169 -68
  307. package/src/llms/cline-recommended-models.ts +167 -0
  308. package/src/llms/configured-provider-registry.ts +193 -0
  309. package/src/llms/handler-factory.ts +56 -0
  310. package/src/llms/provider-defaults.ts +653 -0
  311. package/src/llms/provider-settings.ts +310 -0
  312. package/src/llms/runtime-config.ts +43 -0
  313. package/src/llms/runtime-registry.ts +172 -0
  314. package/src/llms/runtime-types.ts +121 -0
  315. package/src/runtime/agent-config-adapter.ts +636 -0
  316. package/src/runtime/agent-runtime-config-builder.ts +205 -0
  317. package/src/runtime/error-feedback.ts +142 -0
  318. package/src/runtime/history.ts +137 -0
  319. package/src/runtime/host.ts +127 -267
  320. package/src/runtime/index.ts +1 -0
  321. package/src/runtime/loop-detection.ts +162 -0
  322. package/src/runtime/mistake-tracker.ts +221 -0
  323. package/src/runtime/rules.ts +12 -0
  324. package/src/runtime/runtime-builder.ts +85 -13
  325. package/src/runtime/runtime-event-adapter.ts +412 -0
  326. package/src/runtime/runtime-host.ts +134 -62
  327. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  328. package/src/runtime/session-runtime-orchestrator.ts +1253 -0
  329. package/src/runtime/session-runtime.ts +16 -26
  330. package/src/runtime/user-input-builder.ts +167 -0
  331. package/src/services/global-settings.ts +122 -0
  332. package/src/services/local-runtime-bootstrap.ts +175 -31
  333. package/src/services/plugin-tools.ts +86 -0
  334. package/src/services/providers/local-provider-registry.ts +277 -61
  335. package/src/services/providers/local-provider-service.ts +109 -44
  336. package/src/services/session-data.ts +18 -10
  337. package/src/services/session-telemetry.ts +6 -15
  338. package/src/services/storage/file-team-store.ts +1 -5
  339. package/src/services/storage/provider-settings-legacy-migration.ts +14 -51
  340. package/src/services/storage/provider-settings-manager.ts +17 -2
  341. package/src/services/storage/sqlite-team-store.ts +1 -5
  342. package/src/services/workspace-manifest.ts +18 -0
  343. package/src/session/conversation-store.ts +77 -0
  344. package/src/session/file-session-service.ts +1 -1
  345. package/src/session/index.ts +6 -27
  346. package/src/session/message-builder.ts +941 -0
  347. package/src/session/persistence-service.ts +119 -504
  348. package/src/session/session-manifest-store.ts +158 -0
  349. package/src/session/session-row.ts +199 -0
  350. package/src/session/session-service.ts +17 -376
  351. package/src/session/session-team-coordination.ts +1 -1
  352. package/src/session/subagent-session-manager.ts +397 -0
  353. package/src/session/team-persistence-store.ts +176 -0
  354. package/src/transports/hub.ts +1081 -0
  355. package/src/transports/local.ts +419 -93
  356. package/src/transports/remote.ts +27 -0
  357. package/src/transports/runtime-host-support.ts +63 -9
  358. package/src/types/chat-schema.ts +4 -5
  359. package/src/types/config.ts +17 -7
  360. package/src/types/events.ts +8 -6
  361. package/src/types/index.ts +3 -0
  362. package/src/types/provider-settings.ts +18 -7
  363. package/src/types/session.ts +7 -6
  364. package/src/types.ts +42 -2
  365. package/dist/hooks/persistent.d.ts +0 -64
  366. package/dist/hooks/persistent.d.ts.map +0 -1
  367. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  368. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  369. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  370. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  371. package/dist/services/telemetry/index.js +0 -15
  372. package/dist/session/rpc-session-service.d.ts +0 -16
  373. package/dist/session/rpc-session-service.d.ts.map +0 -1
  374. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  375. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  376. package/dist/transports/rpc.d.ts +0 -51
  377. package/dist/transports/rpc.d.ts.map +0 -1
  378. package/src/ClineCore.test.ts +0 -226
  379. package/src/account/cline-account-service.test.ts +0 -185
  380. package/src/account/featurebase-token.test.ts +0 -175
  381. package/src/account/rpc.test.ts +0 -63
  382. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  383. package/src/auth/client.test.ts +0 -69
  384. package/src/auth/cline.test.ts +0 -267
  385. package/src/auth/codex.test.ts +0 -170
  386. package/src/auth/oca.test.ts +0 -340
  387. package/src/auth/server.test.ts +0 -287
  388. package/src/auth/utils.test.ts +0 -128
  389. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  390. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  391. package/src/extensions/config/runtime-commands.test.ts +0 -115
  392. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  393. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  394. package/src/extensions/context/compaction.test.ts +0 -483
  395. package/src/extensions/mcp/config-loader.test.ts +0 -238
  396. package/src/extensions/mcp/manager.test.ts +0 -105
  397. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  398. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  399. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  400. package/src/extensions/tools/definitions.test.ts +0 -780
  401. package/src/extensions/tools/executors/bash.test.ts +0 -87
  402. package/src/extensions/tools/executors/editor.test.ts +0 -35
  403. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  404. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  405. package/src/extensions/tools/presets.test.ts +0 -70
  406. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  407. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  408. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  409. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  410. package/src/hooks/hook-file-hooks.test.ts +0 -311
  411. package/src/hooks/persistent.ts +0 -661
  412. package/src/runtime/history.test.ts +0 -114
  413. package/src/runtime/host.test.ts +0 -230
  414. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  415. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  416. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  417. package/src/runtime/rpc-spawn-lease.ts +0 -156
  418. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  419. package/src/runtime/runtime-builder.test.ts +0 -615
  420. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  421. package/src/runtime/runtime-parity.test.ts +0 -143
  422. package/src/services/providers/local-provider-service.test.ts +0 -1062
  423. package/src/services/session-data.test.ts +0 -160
  424. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  425. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  426. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  427. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  428. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  429. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  430. package/src/services/telemetry/distinct-id.test.ts +0 -57
  431. package/src/services/workspace/file-indexer.d.ts +0 -11
  432. package/src/services/workspace/file-indexer.test.ts +0 -156
  433. package/src/services/workspace/mention-enricher.test.ts +0 -106
  434. package/src/session/persistence-service.test.ts +0 -300
  435. package/src/session/rpc-session-service.ts +0 -114
  436. package/src/session/session-service.team-persistence.test.ts +0 -48
  437. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  438. package/src/transports/local.e2e.test.ts +0 -380
  439. package/src/transports/local.test.ts +0 -2559
  440. package/src/transports/rpc.test.ts +0 -82
  441. package/src/transports/rpc.ts +0 -665
@@ -1,105 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { InMemoryMcpManager } from "./manager";
3
- import type { McpServerClient, McpToolDescriptor } from "./types";
4
-
5
- function createClient(overrides?: Partial<McpServerClient>): McpServerClient {
6
- return {
7
- connect: vi.fn(async () => {}),
8
- disconnect: vi.fn(async () => {}),
9
- listTools: vi.fn(async () => []),
10
- callTool: vi.fn(async () => ({ ok: true })),
11
- ...overrides,
12
- };
13
- }
14
-
15
- describe("InMemoryMcpManager", () => {
16
- it("registers servers, connects on demand, and calls tools", async () => {
17
- const toolDescriptors: readonly McpToolDescriptor[] = [
18
- {
19
- name: "search",
20
- inputSchema: {
21
- type: "object",
22
- properties: { q: { type: "string" } },
23
- required: ["q"],
24
- },
25
- },
26
- ];
27
- const client = createClient({
28
- listTools: vi.fn(async () => toolDescriptors),
29
- });
30
- const manager = new InMemoryMcpManager({
31
- clientFactory: vi.fn(async () => client),
32
- });
33
-
34
- await manager.registerServer({
35
- name: "docs",
36
- transport: {
37
- type: "streamableHttp",
38
- url: "https://mcp.example.test",
39
- },
40
- });
41
-
42
- const tools = await manager.listTools("docs");
43
- expect(tools).toHaveLength(1);
44
-
45
- await manager.callTool({
46
- serverName: "docs",
47
- toolName: "search",
48
- arguments: { q: "oauth flow" },
49
- });
50
-
51
- expect(client.connect).toHaveBeenCalledTimes(1);
52
- expect(client.callTool).toHaveBeenCalledWith({
53
- name: "search",
54
- arguments: { q: "oauth flow" },
55
- context: undefined,
56
- });
57
- });
58
-
59
- it("uses tool list cache to avoid repeated listTools round trips", async () => {
60
- const toolDescriptors: readonly McpToolDescriptor[] = [
61
- {
62
- name: "echo",
63
- inputSchema: { type: "object", properties: {} },
64
- },
65
- ];
66
- const client = createClient({
67
- listTools: vi.fn(async () => toolDescriptors),
68
- });
69
- const manager = new InMemoryMcpManager({
70
- clientFactory: async () => client,
71
- toolsCacheTtlMs: 60_000,
72
- });
73
-
74
- await manager.registerServer({
75
- name: "cache-test",
76
- transport: {
77
- type: "stdio",
78
- command: "node",
79
- args: ["./mcp.js"],
80
- },
81
- });
82
-
83
- await manager.listTools("cache-test");
84
- await manager.listTools("cache-test");
85
- expect(client.listTools).toHaveBeenCalledTimes(1);
86
- });
87
-
88
- it("prevents tool calls on disabled servers", async () => {
89
- const manager = new InMemoryMcpManager({
90
- clientFactory: async () => createClient(),
91
- });
92
- await manager.registerServer({
93
- name: "disabled",
94
- transport: { type: "sse", url: "https://example.test/sse" },
95
- disabled: true,
96
- });
97
-
98
- await expect(
99
- manager.callTool({
100
- serverName: "disabled",
101
- toolName: "anything",
102
- }),
103
- ).rejects.toThrow(/disabled/i);
104
- });
105
- });
@@ -1,184 +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 { setHomeDir } from "@clinebot/shared/storage";
5
- import { afterEach, describe, expect, it } from "vitest";
6
- import {
7
- discoverPluginModulePaths,
8
- resolveAgentPluginPaths,
9
- resolveAndLoadAgentPlugins,
10
- resolvePluginConfigSearchPaths,
11
- } from "./plugin-config-loader";
12
-
13
- describe("plugin-config-loader", () => {
14
- const envSnapshot = {
15
- HOME: process.env.HOME,
16
- };
17
-
18
- afterEach(() => {
19
- process.env.HOME = envSnapshot.HOME;
20
- setHomeDir(envSnapshot.HOME ?? "~");
21
- });
22
-
23
- it("discovers plugin modules recursively", async () => {
24
- const root = await mkdtemp(join(tmpdir(), "core-plugin-config-loader-"));
25
- try {
26
- const nested = join(root, "nested");
27
- await mkdir(nested, { recursive: true });
28
- await writeFile(join(root, "a.js"), "export default {}", "utf8");
29
- await writeFile(join(nested, "b.ts"), "export default {}", "utf8");
30
- await writeFile(
31
- join(root, ".a.js.cline-plugin.js"),
32
- "export default {}",
33
- "utf8",
34
- );
35
- await writeFile(join(root, "ignore.txt"), "noop", "utf8");
36
-
37
- const discovered = discoverPluginModulePaths(root);
38
- expect(discovered).toEqual([join(root, "a.js"), join(nested, "b.ts")]);
39
- } finally {
40
- await rm(root, { recursive: true, force: true });
41
- }
42
- });
43
-
44
- it("resolves plugin paths from explicit files/directories", async () => {
45
- const root = await mkdtemp(join(tmpdir(), "core-plugin-config-loader-"));
46
- try {
47
- process.env.HOME = root;
48
- setHomeDir(root);
49
- const pluginsDir = join(root, "plugins");
50
- await mkdir(pluginsDir, { recursive: true });
51
- const filePath = join(root, "direct.js");
52
- const dirPluginPath = join(pluginsDir, "dir-plugin.js");
53
- await writeFile(filePath, "export default {}", "utf8");
54
- await writeFile(dirPluginPath, "export default {}", "utf8");
55
-
56
- const resolved = resolveAgentPluginPaths({
57
- pluginPaths: ["./direct.js", "./plugins"],
58
- workspacePath: join(root, "workspace"),
59
- cwd: root,
60
- });
61
-
62
- expect(resolved).toEqual([filePath, dirPluginPath]);
63
- } finally {
64
- await rm(root, { recursive: true, force: true });
65
- }
66
- });
67
-
68
- it("prefers package manifest plugin entries for configured directories", async () => {
69
- const root = await mkdtemp(join(tmpdir(), "core-plugin-config-loader-"));
70
- try {
71
- const pluginDir = join(root, "plugin-package");
72
- const srcDir = join(pluginDir, "src");
73
- await mkdir(srcDir, { recursive: true });
74
- const declaredEntry = join(srcDir, "index.ts");
75
- const ignoredEntry = join(pluginDir, "ignored.js");
76
- await writeFile(
77
- join(pluginDir, "package.json"),
78
- JSON.stringify({
79
- name: "plugin-package",
80
- private: true,
81
- cline: {
82
- plugins: [
83
- {
84
- paths: ["./src/index.ts"],
85
- capabilities: ["tools"],
86
- },
87
- ],
88
- },
89
- }),
90
- "utf8",
91
- );
92
- await writeFile(declaredEntry, "export default {}", "utf8");
93
- await writeFile(ignoredEntry, "export default {}", "utf8");
94
-
95
- const resolved = resolveAgentPluginPaths({
96
- pluginPaths: ["./plugin-package"],
97
- cwd: root,
98
- workspacePath: join(root, "workspace"),
99
- });
100
-
101
- expect(resolved).toContain(declaredEntry);
102
- expect(resolved).not.toContain(ignoredEntry);
103
- } finally {
104
- await rm(root, { recursive: true, force: true });
105
- }
106
- });
107
-
108
- it("includes shared search-path plugins", async () => {
109
- const home = await mkdtemp(
110
- join(tmpdir(), "core-plugin-config-loader-home-"),
111
- );
112
- const workspace = await mkdtemp(
113
- join(tmpdir(), "core-plugin-config-loader-workspace-"),
114
- );
115
- try {
116
- process.env.HOME = home;
117
- setHomeDir(home);
118
- const workspacePlugins = join(workspace, ".cline", "plugins");
119
- const userPlugins = join(home, ".cline", "plugins");
120
- const documentsPlugins = join(home, "Documents", "Cline", "Plugins");
121
- await mkdir(workspacePlugins, { recursive: true });
122
- await mkdir(userPlugins, { recursive: true });
123
- await mkdir(documentsPlugins, { recursive: true });
124
- const workspacePlugin = join(workspacePlugins, "workspace.js");
125
- const userPlugin = join(userPlugins, "user.js");
126
- const documentsPlugin = join(documentsPlugins, "documents.js");
127
- await writeFile(workspacePlugin, "export default {}", "utf8");
128
- await writeFile(userPlugin, "export default {}", "utf8");
129
- await writeFile(documentsPlugin, "export default {}", "utf8");
130
-
131
- const searchPaths = resolvePluginConfigSearchPaths(workspace);
132
- expect(searchPaths).toHaveLength(3);
133
- expect(searchPaths).toContain(workspacePlugins);
134
- expect(searchPaths).toContain(userPlugins);
135
- expect(searchPaths).toContain(documentsPlugins);
136
-
137
- const resolved = resolveAgentPluginPaths({ workspacePath: workspace });
138
- expect(resolved).toContain(workspacePlugin);
139
- expect(resolved).toContain(userPlugin);
140
- expect(resolved).toContain(documentsPlugin);
141
- } finally {
142
- await rm(home, { recursive: true, force: true });
143
- await rm(workspace, { recursive: true, force: true });
144
- }
145
- });
146
-
147
- it("loads valid plugins while reporting failures and duplicate overrides", async () => {
148
- const root = await mkdtemp(join(tmpdir(), "core-plugin-config-loader-"));
149
- try {
150
- const first = join(root, "duplicate-one.js");
151
- const second = join(root, "duplicate-two.js");
152
- const invalid = join(root, "invalid.js");
153
- await writeFile(
154
- first,
155
- "export default { name: 'duplicate-plugin', manifest: { capabilities: ['tools'] } };",
156
- "utf8",
157
- );
158
- await writeFile(
159
- second,
160
- "export default { name: 'duplicate-plugin', manifest: { capabilities: ['commands'] } };",
161
- "utf8",
162
- );
163
- await writeFile(invalid, "export default { name: 'broken' };", "utf8");
164
-
165
- const loaded = await resolveAndLoadAgentPlugins({
166
- mode: "in_process",
167
- pluginPaths: [first, invalid, second],
168
- cwd: root,
169
- });
170
-
171
- // Filter to only our test plugins to ignore any discovered system plugins
172
- const testPlugins = loaded.extensions.filter(
173
- (plugin) => plugin.name === "duplicate-plugin",
174
- );
175
- expect(testPlugins).toHaveLength(1);
176
- expect(testPlugins[0]?.manifest.capabilities).toEqual(["commands"]);
177
- expect(loaded.failures).toHaveLength(1);
178
- expect(loaded.warnings).toHaveLength(1);
179
- expect(loaded.warnings[0]?.overriddenPluginPath).toBe(first);
180
- } finally {
181
- await rm(root, { recursive: true, force: true });
182
- }
183
- });
184
- });
@@ -1,292 +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 { afterAll, beforeAll, describe, expect, it } from "vitest";
5
- import {
6
- loadAgentPluginFromPath,
7
- loadAgentPluginsFromPaths,
8
- loadAgentPluginsFromPathsWithDiagnostics,
9
- } from "./plugin-loader";
10
-
11
- describe("plugin-loader", () => {
12
- let dir = "";
13
- let copyDir = "";
14
-
15
- beforeAll(async () => {
16
- dir = await mkdtemp(join(tmpdir(), "core-plugin-loader-"));
17
- copyDir = await mkdtemp(join(tmpdir(), "core-plugin-loader-copy-"));
18
-
19
- await writeFile(
20
- join(dir, "plugin-default.mjs"),
21
- [
22
- "export default {",
23
- " name: 'from-default',",
24
- " manifest: { capabilities: ['hooks'], hookStages: ['input'] },",
25
- " onInput: ({ input }) => ({ overrideInput: input })",
26
- "};",
27
- ].join("\n"),
28
- "utf8",
29
- );
30
- await writeFile(
31
- join(dir, "plugin-named.mjs"),
32
- [
33
- "export const plugin = {",
34
- " name: 'from-named',",
35
- " manifest: { capabilities: ['tools'] },",
36
- "};",
37
- ].join("\n"),
38
- "utf8",
39
- );
40
- await writeFile(
41
- join(dir, "plugin-a.mjs"),
42
- "export default { name: 'plugin-a', manifest: { capabilities: ['tools'] } };",
43
- "utf8",
44
- );
45
- await writeFile(
46
- join(dir, "plugin-b.mjs"),
47
- "export default { name: 'plugin-b', manifest: { capabilities: ['commands'] } };",
48
- "utf8",
49
- );
50
- await writeFile(
51
- join(dir, "plugin-ts.ts"),
52
- [
53
- "const name: string = 'plugin-ts';",
54
- "export default {",
55
- " name,",
56
- " manifest: { capabilities: ['tools'] },",
57
- "};",
58
- ].join("\n"),
59
- "utf8",
60
- );
61
-
62
- const depDir = join(dir, "node_modules", "plugin-local-dep");
63
- await mkdir(depDir, { recursive: true });
64
- await writeFile(
65
- join(depDir, "package.json"),
66
- JSON.stringify({
67
- name: "plugin-local-dep",
68
- type: "module",
69
- exports: "./index.js",
70
- }),
71
- "utf8",
72
- );
73
- await writeFile(
74
- join(depDir, "index.js"),
75
- "export const depName = 'plugin-local-dep';\n",
76
- "utf8",
77
- );
78
- await writeFile(
79
- join(dir, "plugin-with-dep.ts"),
80
- [
81
- "import { depName } from 'plugin-local-dep';",
82
- "export default {",
83
- " name: depName,",
84
- " manifest: { capabilities: ['tools'] },",
85
- "};",
86
- ].join("\n"),
87
- "utf8",
88
- );
89
-
90
- const sdkDir = join(dir, "node_modules", "@clinebot", "shared");
91
- await mkdir(sdkDir, { recursive: true });
92
- await writeFile(
93
- join(sdkDir, "package.json"),
94
- JSON.stringify({
95
- name: "@clinebot/shared",
96
- type: "module",
97
- exports: "./index.js",
98
- }),
99
- "utf8",
100
- );
101
- await writeFile(
102
- join(sdkDir, "index.js"),
103
- "export const sdkMarker = 'plugin-installed-sdk';\n",
104
- "utf8",
105
- );
106
- await writeFile(
107
- join(dir, "plugin-with-sdk-dep.ts"),
108
- [
109
- "import { sdkMarker } from '@clinebot/shared';",
110
- "export default {",
111
- " name: sdkMarker,",
112
- " manifest: { capabilities: ['tools'] },",
113
- "};",
114
- ].join("\n"),
115
- "utf8",
116
- );
117
-
118
- await writeFile(
119
- join(copyDir, "portable-subagents.ts"),
120
- [
121
- "import { safeJsonStringify } from '@clinebot/shared';",
122
- "import { resolveClineDataDir } from '@clinebot/shared/storage';",
123
- "import YAML from 'yaml';",
124
- "export default {",
125
- " name: typeof safeJsonStringify === 'function' ? YAML.stringify({ ok: !!resolveClineDataDir() }) : 'invalid',",
126
- " manifest: { capabilities: ['tools'] },",
127
- "};",
128
- ].join("\n"),
129
- "utf8",
130
- );
131
-
132
- const packagedCopyDir = join(copyDir, "packaged-plugin");
133
- await mkdir(packagedCopyDir, { recursive: true });
134
- await writeFile(
135
- join(packagedCopyDir, "package.json"),
136
- JSON.stringify({
137
- name: "packaged-plugin",
138
- type: "module",
139
- cline: {
140
- plugins: ["index.ts"],
141
- },
142
- }),
143
- "utf8",
144
- );
145
- await writeFile(
146
- join(packagedCopyDir, "index.ts"),
147
- [
148
- "import YAML from 'yaml';",
149
- "export default {",
150
- " name: YAML.stringify({ ok: true }),",
151
- " manifest: { capabilities: ['tools'] },",
152
- "};",
153
- ].join("\n"),
154
- "utf8",
155
- );
156
-
157
- await writeFile(
158
- join(dir, "invalid-plugin.mjs"),
159
- "export default { name: 'invalid-plugin' };",
160
- "utf8",
161
- );
162
-
163
- await writeFile(
164
- join(dir, "duplicate-one.mjs"),
165
- "export default { name: 'duplicate-plugin', manifest: { capabilities: ['tools'] } };",
166
- "utf8",
167
- );
168
- await writeFile(
169
- join(dir, "duplicate-two.mjs"),
170
- "export default { name: 'duplicate-plugin', manifest: { capabilities: ['commands'] } };",
171
- "utf8",
172
- );
173
- });
174
-
175
- afterAll(async () => {
176
- if (dir) {
177
- await rm(dir, { recursive: true, force: true });
178
- }
179
- if (copyDir) {
180
- await rm(copyDir, { recursive: true, force: true });
181
- }
182
- });
183
-
184
- it("loads default-exported plugin from path", async () => {
185
- const plugin = await loadAgentPluginFromPath(
186
- join(dir, "plugin-default.mjs"),
187
- );
188
- expect(plugin.name).toBe("from-default");
189
- expect(plugin.manifest.capabilities).toContain("hooks");
190
- });
191
-
192
- it("loads named plugin export from path", async () => {
193
- const plugin = await loadAgentPluginFromPath(
194
- join(dir, "plugin-named.mjs"),
195
- {
196
- exportName: "plugin",
197
- },
198
- );
199
- expect(plugin.name).toBe("from-named");
200
- });
201
-
202
- it("loads multiple plugins from file paths", async () => {
203
- const plugins = await loadAgentPluginsFromPaths([
204
- join(dir, "plugin-a.mjs"),
205
- join(dir, "plugin-b.mjs"),
206
- ]);
207
- expect(plugins.map((plugin) => plugin.name)).toEqual([
208
- "plugin-a",
209
- "plugin-b",
210
- ]);
211
- });
212
-
213
- it("loads TypeScript plugins from file paths", async () => {
214
- const plugin = await loadAgentPluginFromPath(join(dir, "plugin-ts.ts"));
215
- expect(plugin.name).toBe("plugin-ts");
216
- });
217
-
218
- it("resolves plugin-local dependencies from the plugin path", async () => {
219
- const plugin = await loadAgentPluginFromPath(
220
- join(dir, "plugin-with-dep.ts"),
221
- { cwd: dir },
222
- );
223
- expect(plugin.name).toBe("plugin-local-dep");
224
- });
225
-
226
- it("prefers plugin-installed SDK packages over workspace aliases", async () => {
227
- const plugin = await loadAgentPluginFromPath(
228
- join(dir, "plugin-with-sdk-dep.ts"),
229
- { cwd: dir },
230
- );
231
- expect(plugin.name).toBe("plugin-installed-sdk");
232
- });
233
-
234
- it("allows standalone file plugins to use host runtime dependencies", async () => {
235
- const plugin = await loadAgentPluginFromPath(
236
- join(copyDir, "portable-subagents.ts"),
237
- {
238
- cwd: copyDir,
239
- useCache: true,
240
- },
241
- );
242
- expect(plugin.name).toMatch(/ok: true/i);
243
- });
244
-
245
- it("requires package-based plugins to provide their own non-SDK dependencies", async () => {
246
- await expect(
247
- loadAgentPluginFromPath(join(copyDir, "packaged-plugin", "index.ts"), {
248
- cwd: join(copyDir, "packaged-plugin"),
249
- useCache: true,
250
- }),
251
- ).rejects.toThrow(/Cannot find (package|module) 'yaml'/i);
252
- });
253
-
254
- it("rejects invalid plugin export missing manifest", async () => {
255
- await expect(
256
- loadAgentPluginFromPath(join(dir, "invalid-plugin.mjs")),
257
- ).rejects.toThrow(/missing required "manifest"/i);
258
- });
259
-
260
- it("continues loading valid plugins when one plugin fails", async () => {
261
- const report = await loadAgentPluginsFromPathsWithDiagnostics([
262
- join(dir, "plugin-a.mjs"),
263
- join(dir, "invalid-plugin.mjs"),
264
- join(dir, "plugin-b.mjs"),
265
- ]);
266
-
267
- expect(report.plugins.map((plugin) => plugin.name)).toEqual([
268
- "plugin-a",
269
- "plugin-b",
270
- ]);
271
- expect(report.failures).toHaveLength(1);
272
- expect(report.failures[0]?.pluginPath).toBe(
273
- join(dir, "invalid-plugin.mjs"),
274
- );
275
- expect(report.warnings).toEqual([]);
276
- });
277
-
278
- it("keeps the later duplicate plugin and reports the override", async () => {
279
- const report = await loadAgentPluginsFromPathsWithDiagnostics([
280
- join(dir, "duplicate-one.mjs"),
281
- join(dir, "duplicate-two.mjs"),
282
- ]);
283
-
284
- expect(report.plugins).toHaveLength(1);
285
- expect(report.plugins[0]?.name).toBe("duplicate-plugin");
286
- expect(report.plugins[0]?.manifest.capabilities).toEqual(["commands"]);
287
- expect(report.warnings).toHaveLength(1);
288
- expect(report.warnings[0]?.overriddenPluginPath).toBe(
289
- join(dir, "duplicate-one.mjs"),
290
- );
291
- });
292
- });