@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,918 +0,0 @@
1
- import { join } from "node:path";
2
- import { resolveTeamDataDir } from "@clinebot/shared/storage";
3
- import { afterEach, describe, expect, it, vi } from "vitest";
4
- import { createDelegatedAgentConfigProvider } from "./delegated-agent";
5
- import { AgentTeamsRuntime } from "./multi-agent";
6
- import { createAgentTeamsTools } from "./team-tools";
7
-
8
- type EnvSnapshot = {
9
- CLINE_DATA_DIR: string | undefined;
10
- CLINE_TEAM_DATA_DIR: string | undefined;
11
- };
12
-
13
- function captureEnv(): EnvSnapshot {
14
- return {
15
- CLINE_DATA_DIR: process.env.CLINE_DATA_DIR,
16
- CLINE_TEAM_DATA_DIR: process.env.CLINE_TEAM_DATA_DIR,
17
- };
18
- }
19
-
20
- function restoreEnv(snapshot: EnvSnapshot): void {
21
- process.env.CLINE_DATA_DIR = snapshot.CLINE_DATA_DIR;
22
- process.env.CLINE_TEAM_DATA_DIR = snapshot.CLINE_TEAM_DATA_DIR;
23
- }
24
-
25
- function makeTeammateConfigProvider(
26
- overrides?: Partial<Parameters<typeof createDelegatedAgentConfigProvider>[0]>,
27
- ) {
28
- return createDelegatedAgentConfigProvider({
29
- providerId: "anthropic",
30
- modelId: "claude-sonnet-4-5-20250929",
31
- ...overrides,
32
- });
33
- }
34
-
35
- describe("resolveTeamDataDir", () => {
36
- let snapshot: EnvSnapshot = captureEnv();
37
-
38
- afterEach(() => {
39
- restoreEnv(snapshot);
40
- });
41
-
42
- it("uses CLINE_TEAM_DATA_DIR when set", () => {
43
- snapshot = captureEnv();
44
- process.env.CLINE_TEAM_DATA_DIR = "/tmp/team-dir";
45
- process.env.CLINE_DATA_DIR = "/tmp/cline-data";
46
- expect(resolveTeamDataDir()).toBe("/tmp/team-dir");
47
- });
48
-
49
- it("falls back to CLINE_DATA_DIR/teams", () => {
50
- snapshot = captureEnv();
51
- delete process.env.CLINE_TEAM_DATA_DIR;
52
- process.env.CLINE_DATA_DIR = "/tmp/cline-data";
53
- expect(resolveTeamDataDir()).toBe(join("/tmp/cline-data", "teams"));
54
- });
55
- });
56
-
57
- describe("createAgentTeamsTools schema surface", () => {
58
- it("exposes a compact task action tool plus strict schemas elsewhere", () => {
59
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
60
- const tools = createAgentTeamsTools({
61
- runtime,
62
- requesterId: "lead",
63
- teammateConfigProvider: makeTeammateConfigProvider(),
64
- });
65
-
66
- const spawn = tools.find((tool) => tool.name === "team_spawn_teammate");
67
- const teamTask = tools.find((tool) => tool.name === "team_task");
68
- const send = tools.find((tool) => tool.name === "team_send_message");
69
- const createOutcome = tools.find(
70
- (tool) => tool.name === "team_create_outcome",
71
- );
72
- const teamAwaitRuns = tools.find((tool) => tool.name === "team_await_runs");
73
- const teamLogUpdate = tools.find(
74
- (tool) => tool.name === "team_mission_log",
75
- );
76
-
77
- expect(spawn?.inputSchema.type).toBe("object");
78
- const teamTaskSchema = teamTask?.inputSchema as
79
- | {
80
- type?: string;
81
- properties?: Record<string, unknown>;
82
- required?: unknown[];
83
- }
84
- | undefined;
85
- expect(teamTaskSchema?.type).toBe("object");
86
- expect(teamTaskSchema?.properties).toHaveProperty("action");
87
- expect(teamTaskSchema?.required).toEqual(["action"]);
88
- expect(send?.inputSchema.type).toBe("object");
89
- expect(createOutcome?.inputSchema.type).toBe("object");
90
- expect(teamAwaitRuns?.inputSchema.type).toBe("object");
91
- const schema = teamLogUpdate?.inputSchema as
92
- | { properties: Record<string, unknown>; required: unknown[] }
93
- | undefined;
94
- expect(schema?.properties.kind).toEqual({
95
- type: "string",
96
- enum: ["progress", "handoff", "blocked", "decision", "done", "error"],
97
- });
98
- expect(schema?.required).toEqual(["kind", "summary"]);
99
- });
100
-
101
- it("rejects extra fields for strict spawn schema", async () => {
102
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
103
- const tools = createAgentTeamsTools({
104
- runtime,
105
- requesterId: "lead",
106
- teammateConfigProvider: makeTeammateConfigProvider(),
107
- });
108
- const spawn = tools.find((tool) => tool.name === "team_spawn_teammate");
109
- expect(spawn).toBeDefined();
110
-
111
- await expect(
112
- spawn?.execute(
113
- {
114
- agentId: "python-poet",
115
- rolePrompt: "Write concise Python-focused haiku",
116
- action: "spawn",
117
- },
118
- {
119
- agentId: "lead",
120
- conversationId: "conv-1",
121
- iteration: 1,
122
- },
123
- ),
124
- ).rejects.toThrow("Unrecognized key");
125
- });
126
-
127
- it("can expose only the spawn tool until the first teammate is created", async () => {
128
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
129
- const onLeadToolsUnlocked = vi.fn();
130
- const tools = createAgentTeamsTools({
131
- runtime,
132
- requesterId: "lead",
133
- teammateConfigProvider: makeTeammateConfigProvider(),
134
- includeSpawnTool: true,
135
- includeManagementTools: false,
136
- onLeadToolsUnlocked,
137
- });
138
-
139
- expect(tools.map((tool) => tool.name)).toEqual(["team_spawn_teammate"]);
140
-
141
- const spawn = tools[0];
142
- await expect(
143
- spawn?.execute(
144
- {
145
- agentId: "writer",
146
- rolePrompt: "Write concise summaries",
147
- },
148
- {
149
- agentId: "lead",
150
- conversationId: "conv-1",
151
- iteration: 1,
152
- },
153
- ),
154
- ).resolves.toEqual({
155
- agentId: "writer",
156
- status: "spawned",
157
- });
158
-
159
- expect(onLeadToolsUnlocked).toHaveBeenCalledTimes(1);
160
- const unlockedTools = onLeadToolsUnlocked.mock.calls[0]?.[0] as
161
- | Array<{ name: string }>
162
- | undefined;
163
- expect(unlockedTools?.some((tool) => tool.name === "team_task")).toBe(true);
164
- expect(
165
- unlockedTools?.some((tool) => tool.name === "team_spawn_teammate"),
166
- ).toBe(false);
167
- });
168
-
169
- it("rejects non-object payloads for task tools", async () => {
170
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
171
- const tools = createAgentTeamsTools({
172
- runtime,
173
- requesterId: "lead",
174
- teammateConfigProvider: makeTeammateConfigProvider(),
175
- });
176
- const teamTask = tools.find((tool) => tool.name === "team_task");
177
- expect(teamTask).toBeDefined();
178
-
179
- await expect(
180
- teamTask?.execute(["create", "task"], {
181
- agentId: "lead",
182
- conversationId: "conv-1",
183
- iteration: 1,
184
- }),
185
- ).rejects.toThrow("expected object");
186
- });
187
-
188
- it("normalizes null placeholders for required fields into missing-field errors", async () => {
189
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
190
- const tools = createAgentTeamsTools({
191
- runtime,
192
- requesterId: "lead",
193
- teammateConfigProvider: makeTeammateConfigProvider(),
194
- });
195
- const teamTask = tools.find((tool) => tool.name === "team_task");
196
- expect(teamTask).toBeDefined();
197
-
198
- await expect(
199
- teamTask?.execute(
200
- {
201
- action: "complete",
202
- taskId: "task_0001",
203
- summary: null,
204
- },
205
- {
206
- agentId: "lead",
207
- conversationId: "conv-1",
208
- iteration: 1,
209
- },
210
- ),
211
- ).rejects.toThrow('Field "summary" is required when action=complete');
212
- });
213
-
214
- it("accepts null placeholders for optional fields", async () => {
215
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
216
- const tools = createAgentTeamsTools({
217
- runtime,
218
- requesterId: "lead",
219
- teammateConfigProvider: makeTeammateConfigProvider(),
220
- });
221
- const teamTask = tools.find((tool) => tool.name === "team_task");
222
- expect(teamTask).toBeDefined();
223
- if (!teamTask) {
224
- throw new Error("Expected team_task tool to be defined");
225
- }
226
-
227
- await expect(
228
- teamTask.execute(
229
- {
230
- action: "create",
231
- title: "Investigate llms boundaries",
232
- description: "Deep dive models and providers",
233
- dependsOn: null,
234
- },
235
- {
236
- agentId: "lead",
237
- conversationId: "conv-1",
238
- iteration: 1,
239
- },
240
- ),
241
- ).resolves.toMatchObject({
242
- action: "create",
243
- status: "pending",
244
- taskId: expect.stringMatching(/^task_/),
245
- });
246
- });
247
-
248
- it("ignores non-create fields for action=create and reports them back", async () => {
249
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
250
- const tools = createAgentTeamsTools({
251
- runtime,
252
- requesterId: "lead",
253
- teammateConfigProvider: makeTeammateConfigProvider(),
254
- });
255
- const teamTask = tools.find((tool) => tool.name === "team_task");
256
- expect(teamTask).toBeDefined();
257
- if (!teamTask) {
258
- throw new Error("Expected team_task tool to be defined");
259
- }
260
-
261
- await expect(
262
- teamTask.execute(
263
- {
264
- action: "create",
265
- title: "Draft TypeScript haiku",
266
- description: "Write a concise haiku",
267
- status: "pending",
268
- summary: "not used",
269
- },
270
- {
271
- agentId: "lead",
272
- conversationId: "conv-1",
273
- iteration: 1,
274
- },
275
- ),
276
- ).resolves.toMatchObject({
277
- action: "create",
278
- status: "pending",
279
- taskId: expect.stringMatching(/^task_/),
280
- ignoredFields: ["status", "summary"],
281
- note: "Ignored fields for action=create: status, summary",
282
- });
283
- });
284
-
285
- it("defaults requiredSections for team_create_outcome", async () => {
286
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
287
- const tools = createAgentTeamsTools({
288
- runtime,
289
- requesterId: "lead",
290
- teammateConfigProvider: makeTeammateConfigProvider(),
291
- });
292
- const createOutcome = tools.find(
293
- (tool) => tool.name === "team_create_outcome",
294
- );
295
- expect(createOutcome).toBeDefined();
296
-
297
- await expect(
298
- createOutcome?.execute(
299
- {
300
- title: "LLMS boundary redesign",
301
- },
302
- {
303
- agentId: "lead",
304
- conversationId: "conv-1",
305
- iteration: 1,
306
- },
307
- ),
308
- ).resolves.toMatchObject({
309
- outcomeId: expect.stringMatching(/^out_/),
310
- status: "draft",
311
- });
312
-
313
- const outcomes = runtime.listOutcomes();
314
- expect(outcomes).toHaveLength(1);
315
- expect(outcomes[0]?.requiredSections).toEqual([
316
- "current_state",
317
- "boundary_analysis",
318
- "interface_proposal",
319
- ]);
320
- });
321
-
322
- it("can list outcomes via dedicated list tool", async () => {
323
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
324
- const tools = createAgentTeamsTools({
325
- runtime,
326
- requesterId: "lead",
327
- teammateConfigProvider: makeTeammateConfigProvider(),
328
- });
329
- const createOutcome = tools.find(
330
- (tool) => tool.name === "team_create_outcome",
331
- );
332
- const listOutcomes = tools.find(
333
- (tool) => tool.name === "team_list_outcomes",
334
- );
335
- expect(createOutcome).toBeDefined();
336
- expect(listOutcomes).toBeDefined();
337
-
338
- await createOutcome?.execute(
339
- { title: "LLMS redesign" },
340
- {
341
- agentId: "lead",
342
- conversationId: "conv-1",
343
- iteration: 1,
344
- },
345
- );
346
-
347
- await expect(
348
- listOutcomes?.execute(
349
- {},
350
- {
351
- agentId: "lead",
352
- conversationId: "conv-1",
353
- iteration: 1,
354
- },
355
- ),
356
- ).resolves.toEqual(
357
- expect.arrayContaining([
358
- expect.objectContaining({
359
- title: expect.any(String),
360
- }),
361
- ]),
362
- );
363
- });
364
-
365
- it("accepts null sourceRunId for team_attach_outcome_fragment", async () => {
366
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
367
- const tools = createAgentTeamsTools({
368
- runtime,
369
- requesterId: "lead",
370
- teammateConfigProvider: makeTeammateConfigProvider(),
371
- });
372
- const createOutcome = tools.find(
373
- (tool) => tool.name === "team_create_outcome",
374
- );
375
- const attachFragment = tools.find(
376
- (tool) => tool.name === "team_attach_outcome_fragment",
377
- );
378
- expect(createOutcome).toBeDefined();
379
- expect(attachFragment).toBeDefined();
380
- if (!createOutcome || !attachFragment) {
381
- throw new Error("Expected outcome tools to be defined");
382
- }
383
-
384
- const createdResult = await createOutcome.execute(
385
- { title: "Providers report" },
386
- {
387
- agentId: "lead",
388
- conversationId: "conv-1",
389
- iteration: 1,
390
- },
391
- );
392
- expect(createdResult).toMatchObject({
393
- outcomeId: expect.stringMatching(/^out_/),
394
- status: "draft",
395
- });
396
- const isCreatedOutcome = (
397
- value: unknown,
398
- ): value is { outcomeId: string; status: string } => {
399
- if (typeof value !== "object" || value === null) {
400
- return false;
401
- }
402
- const record = value as Record<string, unknown>;
403
- return (
404
- typeof record.outcomeId === "string" &&
405
- typeof record.status === "string"
406
- );
407
- };
408
- if (!isCreatedOutcome(createdResult)) {
409
- throw new Error(
410
- "Expected createOutcome result to include outcomeId and status",
411
- );
412
- }
413
- const created = createdResult;
414
-
415
- await expect(
416
- attachFragment.execute(
417
- {
418
- outcomeId: created.outcomeId,
419
- section: "current_state",
420
- sourceRunId: null,
421
- content: "Current findings.",
422
- },
423
- {
424
- agentId: "lead",
425
- conversationId: "conv-1",
426
- iteration: 1,
427
- },
428
- ),
429
- ).resolves.toMatchObject({
430
- fragmentId: expect.stringMatching(/^frag_/),
431
- status: "draft",
432
- });
433
-
434
- const [fragment] = runtime.listOutcomeFragments(created.outcomeId);
435
- expect(fragment?.sourceRunId).toBeUndefined();
436
- });
437
- });
438
-
439
- describe("createAgentTeamsTools runtime behavior", () => {
440
- it("forwards teammateRuntime headers when spawning teammates", async () => {
441
- const spawnTeammate = vi.fn();
442
- const runtime = {
443
- getMemberRole: vi.fn(() => "lead"),
444
- isTeammateActive: vi.fn(() => false),
445
- spawnTeammate,
446
- } as unknown as AgentTeamsRuntime;
447
-
448
- const tools = createAgentTeamsTools({
449
- runtime,
450
- requesterId: "lead",
451
- teammateConfigProvider: makeTeammateConfigProvider({
452
- providerId: "cline",
453
- modelId: "anthropic/claude-sonnet-4.6",
454
- headers: { Authorization: "Bearer token" },
455
- }),
456
- createBaseTools: () => [],
457
- });
458
- const spawnTool = tools.find((tool) => tool.name === "team_spawn_teammate");
459
- expect(spawnTool).toBeDefined();
460
-
461
- await spawnTool?.execute(
462
- {
463
- agentId: "investigator",
464
- rolePrompt: "Investigate code boundaries",
465
- },
466
- {
467
- agentId: "lead",
468
- conversationId: "conv-1",
469
- iteration: 1,
470
- },
471
- );
472
-
473
- expect(spawnTeammate).toHaveBeenCalledWith(
474
- expect.objectContaining({
475
- config: expect.objectContaining({
476
- headers: { Authorization: "Bearer token" },
477
- }),
478
- }),
479
- );
480
- });
481
-
482
- it("injects workspace metadata into cline teammate system prompt", async () => {
483
- const spawnTeammate = vi.fn();
484
- const runtime = {
485
- getMemberRole: vi.fn(() => "lead"),
486
- isTeammateActive: vi.fn(() => false),
487
- spawnTeammate,
488
- } as unknown as AgentTeamsRuntime;
489
-
490
- const tools = createAgentTeamsTools({
491
- runtime,
492
- requesterId: "lead",
493
- teammateConfigProvider: makeTeammateConfigProvider({
494
- providerId: "cline",
495
- modelId: "anthropic/claude-sonnet-4.6",
496
- cwd: "/repo/app",
497
- }),
498
- });
499
- const spawnTool = tools.find((tool) => tool.name === "team_spawn_teammate");
500
- expect(spawnTool).toBeDefined();
501
-
502
- await spawnTool?.execute(
503
- {
504
- agentId: "researcher",
505
- rolePrompt: "Investigate runtime boundary regressions.",
506
- },
507
- {
508
- agentId: "lead",
509
- conversationId: "conv-1",
510
- iteration: 1,
511
- },
512
- );
513
-
514
- expect(spawnTeammate).toHaveBeenCalledWith(
515
- expect.objectContaining({
516
- config: expect.objectContaining({
517
- systemPrompt: expect.stringContaining("# Workspace Configuration"),
518
- }),
519
- }),
520
- );
521
- expect(spawnTeammate).toHaveBeenCalledWith(
522
- expect.objectContaining({
523
- config: expect.objectContaining({
524
- systemPrompt: expect.stringContaining('"/repo/app"'),
525
- }),
526
- }),
527
- );
528
- expect(spawnTeammate).toHaveBeenCalledWith(
529
- expect.objectContaining({
530
- config: expect.objectContaining({
531
- systemPrompt: expect.stringContaining('"hint": "app"'),
532
- }),
533
- }),
534
- );
535
- expect(spawnTeammate).toHaveBeenCalledWith(
536
- expect.objectContaining({
537
- config: expect.objectContaining({
538
- systemPrompt: expect.stringContaining(
539
- "# Team Teammate Role\nInvestigate runtime boundary regressions.",
540
- ),
541
- }),
542
- }),
543
- );
544
- });
545
-
546
- it("throws from team_await_runs when a requested async delegated run fails", async () => {
547
- const runtime = {
548
- awaitRun: vi.fn(async () => ({
549
- id: "run_0001",
550
- status: "failed",
551
- error: "Authentication failed",
552
- })),
553
- } as unknown as AgentTeamsRuntime;
554
-
555
- const tools = createAgentTeamsTools({
556
- runtime,
557
- requesterId: "lead",
558
- teammateConfigProvider: makeTeammateConfigProvider(),
559
- });
560
- const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
561
- expect(awaitRuns).toBeDefined();
562
-
563
- await expect(
564
- awaitRuns?.execute(
565
- { runId: "run_0001" },
566
- {
567
- agentId: "lead",
568
- conversationId: "conv-1",
569
- iteration: 1,
570
- },
571
- ),
572
- ).rejects.toThrow('Run "run_0001" failed: Authentication failed');
573
- });
574
-
575
- it("throws from team_await_runs when any delegated run is not successful in all-runs mode", async () => {
576
- const runtime = {
577
- awaitAllRuns: vi.fn(async () => [
578
- { id: "run_ok", status: "completed" },
579
- { id: "run_bad", status: "failed", error: "Auth expired" },
580
- ]),
581
- } as unknown as AgentTeamsRuntime;
582
-
583
- const tools = createAgentTeamsTools({
584
- runtime,
585
- requesterId: "lead",
586
- teammateConfigProvider: makeTeammateConfigProvider(),
587
- });
588
- const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
589
- expect(awaitRuns).toBeDefined();
590
-
591
- await expect(
592
- awaitRuns?.execute(
593
- {},
594
- {
595
- agentId: "lead",
596
- conversationId: "conv-1",
597
- iteration: 1,
598
- },
599
- ),
600
- ).rejects.toThrow(
601
- "One or more runs did not complete successfully: run_bad:failed(Auth expired)",
602
- );
603
- });
604
-
605
- it("returns compact summaries from team_await_runs without full teammate transcripts", async () => {
606
- const runtime = {
607
- awaitRun: vi.fn(async () => ({
608
- id: "run_0001",
609
- agentId: "models-investigator",
610
- status: "completed",
611
- message:
612
- "Investigate the models directory and summarize the boundaries",
613
- priority: 0,
614
- retryCount: 0,
615
- maxRetries: 0,
616
- startedAt: new Date("2026-03-24T09:00:00.000Z"),
617
- endedAt: new Date("2026-03-24T09:01:00.000Z"),
618
- lastProgressAt: new Date("2026-03-24T09:00:59.000Z"),
619
- lastProgressMessage: "completed",
620
- currentActivity: "completed",
621
- result: {
622
- text: "Models are the public catalog and provider files are provider-specific defaults.",
623
- usage: {
624
- inputTokens: 1200,
625
- outputTokens: 300,
626
- cacheReadTokens: 900,
627
- cacheWriteTokens: 120,
628
- totalCost: 0.12,
629
- },
630
- messages: [{ role: "user", content: "huge transcript omitted" }],
631
- toolCalls: [{ name: "read_file", input: {}, output: "omitted" }],
632
- iterations: 3,
633
- finishReason: "completed",
634
- model: { id: "claude-sonnet-4-5-20250929", provider: "anthropic" },
635
- startedAt: new Date("2026-03-24T09:00:00.000Z"),
636
- endedAt: new Date("2026-03-24T09:01:00.000Z"),
637
- durationMs: 60_000,
638
- },
639
- })),
640
- } as unknown as AgentTeamsRuntime;
641
-
642
- const tools = createAgentTeamsTools({
643
- runtime,
644
- requesterId: "lead",
645
- teammateConfigProvider: makeTeammateConfigProvider(),
646
- });
647
- const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
648
-
649
- await expect(
650
- awaitRuns?.execute(
651
- { runId: "run_0001" },
652
- {
653
- agentId: "lead",
654
- conversationId: "conv-1",
655
- iteration: 1,
656
- },
657
- ),
658
- ).resolves.toEqual({
659
- id: "run_0001",
660
- agentId: "models-investigator",
661
- status: "completed",
662
- messagePreview:
663
- "Investigate the models directory and summarize the boundaries",
664
- priority: 0,
665
- retryCount: 0,
666
- maxRetries: 0,
667
- startedAt: new Date("2026-03-24T09:00:00.000Z"),
668
- endedAt: new Date("2026-03-24T09:01:00.000Z"),
669
- lastProgressAt: new Date("2026-03-24T09:00:59.000Z"),
670
- lastProgressMessage: "completed",
671
- currentActivity: "completed",
672
- resultSummary: {
673
- textPreview:
674
- "Models are the public catalog and provider files are provider-specific defaults.",
675
- iterations: 3,
676
- finishReason: "completed",
677
- durationMs: 60_000,
678
- usage: {
679
- inputTokens: 1200,
680
- outputTokens: 300,
681
- cacheReadTokens: 900,
682
- cacheWriteTokens: 120,
683
- totalCost: 0.12,
684
- },
685
- },
686
- });
687
- });
688
-
689
- it("returns compact summaries from team_list_runs", async () => {
690
- const runtime = {
691
- listRuns: vi.fn(() => [
692
- {
693
- id: "run_0001",
694
- agentId: "providers-investigator",
695
- status: "running",
696
- message: "Investigate providers directory in detail",
697
- priority: 0,
698
- retryCount: 0,
699
- maxRetries: 0,
700
- startedAt: new Date("2026-03-24T09:00:00.000Z"),
701
- lastProgressAt: new Date("2026-03-24T09:00:30.000Z"),
702
- lastProgressMessage: "reading files",
703
- currentActivity: "reading_files",
704
- },
705
- ]),
706
- } as unknown as AgentTeamsRuntime;
707
-
708
- const tools = createAgentTeamsTools({
709
- runtime,
710
- requesterId: "lead",
711
- teammateConfigProvider: makeTeammateConfigProvider(),
712
- });
713
- const listRuns = tools.find((tool) => tool.name === "team_list_runs");
714
-
715
- await expect(
716
- listRuns?.execute(
717
- {},
718
- {
719
- agentId: "lead",
720
- conversationId: "conv-1",
721
- iteration: 1,
722
- },
723
- ),
724
- ).resolves.toEqual([
725
- {
726
- id: "run_0001",
727
- agentId: "providers-investigator",
728
- status: "running",
729
- messagePreview: "Investigate providers directory in detail",
730
- priority: 0,
731
- retryCount: 0,
732
- maxRetries: 0,
733
- startedAt: new Date("2026-03-24T09:00:00.000Z"),
734
- lastProgressAt: new Date("2026-03-24T09:00:30.000Z"),
735
- lastProgressMessage: "reading files",
736
- currentActivity: "reading_files",
737
- resultSummary: undefined,
738
- },
739
- ]);
740
- });
741
-
742
- it("sets long timeout for team await tool", () => {
743
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
744
- const tools = createAgentTeamsTools({
745
- runtime,
746
- requesterId: "lead",
747
- teammateConfigProvider: makeTeammateConfigProvider(),
748
- });
749
- const awaitRuns = tools.find((tool) => tool.name === "team_await_runs");
750
- expect(awaitRuns?.timeoutMs).toBe(60 * 60 * 1000);
751
- });
752
-
753
- it("deduplicates concurrent sync team_run_task calls to the same agent", async () => {
754
- let resolveRoute!: (value: { text: string; iterations: number }) => void;
755
- const routePromise = new Promise<{ text: string; iterations: number }>(
756
- (resolve) => {
757
- resolveRoute = resolve;
758
- },
759
- );
760
- const routeToTeammate = vi.fn(() => routePromise);
761
- const runtime = {
762
- routeToTeammate,
763
- getMemberRole: vi.fn(() => "lead"),
764
- } as unknown as AgentTeamsRuntime;
765
-
766
- const tools = createAgentTeamsTools({
767
- runtime,
768
- requesterId: "lead",
769
- teammateConfigProvider: makeTeammateConfigProvider(),
770
- });
771
- const runTask = tools.find((tool) => tool.name === "team_run_task");
772
- expect(runTask).toBeDefined();
773
- if (!runTask) {
774
- throw new Error("Expected team_run_task tool to be defined");
775
- }
776
-
777
- const ctx = { agentId: "lead", conversationId: "conv-1", iteration: 1 };
778
- const input = {
779
- agentId: "educator",
780
- task: "Explain probability",
781
- runMode: "sync",
782
- };
783
-
784
- // Fire two concurrent sync calls to the same agent
785
- const call1 = runTask.execute(input, ctx);
786
- const call2 = runTask.execute(input, ctx);
787
-
788
- // Second call should throw with duplicate detection error
789
- await expect(call2).rejects.toThrow(
790
- 'Duplicate team_run_task call detected for agent "educator"',
791
- );
792
-
793
- // Only one routeToTeammate call should have been made
794
- expect(routeToTeammate).toHaveBeenCalledTimes(1);
795
-
796
- // Now resolve the first call
797
- resolveRoute({ text: "Probability explained", iterations: 3 });
798
- const result1 = (await call1) as { text?: string; iterations?: number };
799
- expect(result1.text).toBe("Probability explained");
800
- expect(result1.iterations).toBe(3);
801
- });
802
-
803
- it("allows concurrent sync team_run_task calls to different agents", async () => {
804
- let resolveRoute1!: (value: { text: string; iterations: number }) => void;
805
- let resolveRoute2!: (value: { text: string; iterations: number }) => void;
806
- const routeToTeammate = vi.fn((agentId: string) => {
807
- if (agentId === "educator") {
808
- return new Promise<{ text: string; iterations: number }>((resolve) => {
809
- resolveRoute1 = resolve;
810
- });
811
- }
812
- return new Promise<{ text: string; iterations: number }>((resolve) => {
813
- resolveRoute2 = resolve;
814
- });
815
- });
816
- const runtime = {
817
- routeToTeammate,
818
- getMemberRole: vi.fn(() => "lead"),
819
- } as unknown as AgentTeamsRuntime;
820
-
821
- const tools = createAgentTeamsTools({
822
- runtime,
823
- requesterId: "lead",
824
- teammateConfigProvider: makeTeammateConfigProvider(),
825
- });
826
- const runTask = tools.find((tool) => tool.name === "team_run_task");
827
- expect(runTask).toBeDefined();
828
- if (!runTask) {
829
- throw new Error("Expected team_run_task tool to be defined");
830
- }
831
-
832
- const ctx = { agentId: "lead", conversationId: "conv-1", iteration: 1 };
833
-
834
- // Fire sync calls to two different agents - both should proceed
835
- const call1 = runTask.execute(
836
- { agentId: "educator", task: "Explain probability", runMode: "sync" },
837
- ctx,
838
- );
839
- const call2 = runTask.execute(
840
- { agentId: "assessor", task: "Evaluate answer", runMode: "sync" },
841
- ctx,
842
- );
843
-
844
- // Both should have called routeToTeammate
845
- expect(routeToTeammate).toHaveBeenCalledTimes(2);
846
-
847
- // Resolve both
848
- resolveRoute1({ text: "Explained", iterations: 2 });
849
- resolveRoute2({ text: "Evaluated", iterations: 1 });
850
-
851
- const result1 = (await call1) as { text?: string };
852
- const result2 = (await call2) as { text?: string };
853
- expect(result1.text).toBe("Explained");
854
- expect(result2.text).toBe("Evaluated");
855
- });
856
-
857
- it("lists team tasks through team_task list action", async () => {
858
- const runtime = new AgentTeamsRuntime({ teamName: "test-team" });
859
- const tools = createAgentTeamsTools({
860
- runtime,
861
- requesterId: "lead",
862
- teammateConfigProvider: makeTeammateConfigProvider(),
863
- });
864
- const teamTask = tools.find((tool) => tool.name === "team_task");
865
- expect(teamTask).toBeDefined();
866
-
867
- const first = (await teamTask?.execute(
868
- {
869
- action: "create",
870
- title: "Ready task",
871
- description: "Claim immediately",
872
- },
873
- {
874
- agentId: "lead",
875
- conversationId: "conv-1",
876
- iteration: 1,
877
- },
878
- )) as { taskId: string };
879
- await teamTask?.execute(
880
- {
881
- action: "create",
882
- title: "Blocked task",
883
- description: "Wait on dependency",
884
- dependsOn: [first.taskId],
885
- },
886
- {
887
- agentId: "lead",
888
- conversationId: "conv-1",
889
- iteration: 1,
890
- },
891
- );
892
-
893
- await expect(
894
- teamTask?.execute(
895
- { action: "list" },
896
- {
897
- agentId: "lead",
898
- conversationId: "conv-1",
899
- iteration: 1,
900
- },
901
- ),
902
- ).resolves.toEqual({
903
- action: "list",
904
- tasks: [
905
- expect.objectContaining({
906
- id: first.taskId,
907
- isReady: true,
908
- blockedBy: [],
909
- }),
910
- expect.objectContaining({
911
- title: "Blocked task",
912
- isReady: false,
913
- blockedBy: [first.taskId],
914
- }),
915
- ],
916
- });
917
- });
918
- });