@clinebot/core 0.0.33 → 0.0.35

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 (412) hide show
  1. package/README.md +12 -8
  2. package/dist/ClineCore.d.ts +48 -29
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/auth/client.d.ts +19 -0
  5. package/dist/auth/client.d.ts.map +1 -1
  6. package/dist/auth/cline.d.ts.map +1 -1
  7. package/dist/auth/oca.d.ts.map +1 -1
  8. package/dist/auth/server.d.ts +32 -0
  9. package/dist/auth/server.d.ts.map +1 -1
  10. package/dist/auth/types.d.ts +29 -0
  11. package/dist/auth/types.d.ts.map +1 -1
  12. package/dist/extensions/config/agent-config-loader.d.ts +2 -2
  13. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  14. package/dist/extensions/config/agent-config-parser.d.ts +1 -1
  15. package/dist/extensions/config/agent-config-parser.d.ts.map +1 -1
  16. package/dist/extensions/config/hooks-config-loader.d.ts +2 -2
  17. package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -1
  18. package/dist/extensions/config/index.d.ts +3 -3
  19. package/dist/extensions/config/index.d.ts.map +1 -1
  20. package/dist/extensions/config/user-instruction-config-loader.d.ts +2 -2
  21. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/index.d.ts +2 -1
  23. package/dist/extensions/index.d.ts.map +1 -1
  24. package/dist/extensions/plugin/plugin-config-loader.d.ts +2 -1
  25. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/plugin/plugin-load-report.d.ts +19 -0
  27. package/dist/extensions/plugin/plugin-load-report.d.ts.map +1 -0
  28. package/dist/extensions/plugin/plugin-loader.d.ts +6 -0
  29. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  30. package/dist/extensions/plugin/plugin-sandbox.d.ts +2 -1
  31. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  32. package/dist/extensions/plugin-sandbox-bootstrap.js +242 -242
  33. package/dist/extensions/tools/constants.d.ts.map +1 -0
  34. package/dist/extensions/tools/definitions.d.ts.map +1 -0
  35. package/dist/extensions/tools/executors/apply-patch-parser.d.ts.map +1 -0
  36. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -0
  37. package/dist/extensions/tools/executors/bash.d.ts.map +1 -0
  38. package/dist/extensions/tools/executors/editor.d.ts.map +1 -0
  39. package/dist/extensions/tools/executors/file-read.d.ts.map +1 -0
  40. package/dist/extensions/tools/executors/index.d.ts.map +1 -0
  41. package/dist/extensions/tools/executors/search.d.ts.map +1 -0
  42. package/dist/extensions/tools/executors/web-fetch.d.ts.map +1 -0
  43. package/dist/extensions/tools/helpers.d.ts.map +1 -0
  44. package/dist/extensions/tools/index.d.ts.map +1 -0
  45. package/dist/{tools → extensions/tools}/model-tool-routing.d.ts +1 -1
  46. package/dist/extensions/tools/model-tool-routing.d.ts.map +1 -0
  47. package/dist/{tools → extensions/tools}/presets.d.ts +1 -2
  48. package/dist/extensions/tools/presets.d.ts.map +1 -0
  49. package/dist/extensions/tools/schemas.d.ts.map +1 -0
  50. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -0
  51. package/dist/extensions/tools/team/index.d.ts.map +1 -0
  52. package/dist/{team → extensions/tools/team}/multi-agent.d.ts +1 -3
  53. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -0
  54. package/dist/extensions/tools/team/projections.d.ts.map +1 -0
  55. package/dist/extensions/tools/team/runtime.d.ts.map +1 -0
  56. package/dist/{team → extensions/tools/team}/spawn-agent-tool.d.ts +0 -1
  57. package/dist/extensions/tools/team/spawn-agent-tool.d.ts.map +1 -0
  58. package/dist/extensions/tools/team/subagent-prompts.d.ts.map +1 -0
  59. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -0
  60. package/dist/{tools → extensions/tools}/types.d.ts +4 -3
  61. package/dist/extensions/tools/types.d.ts.map +1 -0
  62. package/dist/{runtime → hooks}/checkpoint-hooks.d.ts +7 -0
  63. package/dist/hooks/checkpoint-hooks.d.ts.map +1 -0
  64. package/dist/{runtime → hooks}/hook-file-hooks.d.ts +0 -2
  65. package/dist/hooks/hook-file-hooks.d.ts.map +1 -0
  66. package/dist/hooks/subprocess.d.ts +3 -130
  67. package/dist/hooks/subprocess.d.ts.map +1 -1
  68. package/dist/index.d.ts +38 -35
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +386 -384
  71. package/dist/runtime/history.d.ts +4 -0
  72. package/dist/runtime/history.d.ts.map +1 -0
  73. package/dist/runtime/host.d.ts +9 -0
  74. package/dist/runtime/host.d.ts.map +1 -0
  75. package/dist/{session → runtime}/rpc-runtime-ensure.d.ts +13 -1
  76. package/dist/{session → runtime}/rpc-runtime-ensure.d.ts.map +1 -1
  77. package/dist/{session → runtime}/rpc-spawn-lease.d.ts.map +1 -1
  78. package/dist/runtime/runtime-builder.d.ts +1 -1
  79. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  80. package/dist/{session/session-manager.d.ts → runtime/runtime-host.d.ts} +55 -12
  81. package/dist/runtime/runtime-host.d.ts.map +1 -0
  82. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts +1 -1
  83. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts.map +1 -1
  84. package/dist/runtime/session-runtime.d.ts +2 -2
  85. package/dist/runtime/session-runtime.d.ts.map +1 -1
  86. package/dist/runtime/subprocess-sandbox.d.ts +2 -0
  87. package/dist/runtime/subprocess-sandbox.d.ts.map +1 -1
  88. package/dist/runtime/tool-approval.d.ts.map +1 -1
  89. package/dist/{session/session-agent-events.d.ts → services/agent-events.d.ts} +4 -4
  90. package/dist/services/agent-events.d.ts.map +1 -0
  91. package/dist/services/config.d.ts +3 -0
  92. package/dist/services/config.d.ts.map +1 -0
  93. package/dist/services/local-runtime-bootstrap.d.ts +41 -0
  94. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -0
  95. package/dist/services/providers/local-provider-registry.d.ts.map +1 -0
  96. package/dist/services/providers/local-provider-service.d.ts.map +1 -0
  97. package/dist/{session → services}/session-artifacts.d.ts +2 -4
  98. package/dist/services/session-artifacts.d.ts.map +1 -0
  99. package/dist/{session/utils/helpers.d.ts → services/session-data.d.ts} +19 -27
  100. package/dist/services/session-data.d.ts.map +1 -0
  101. package/dist/{session → services}/session-telemetry.d.ts +2 -2
  102. package/dist/services/session-telemetry.d.ts.map +1 -0
  103. package/dist/{storage → services/storage}/file-team-store.d.ts +2 -2
  104. package/dist/services/storage/file-team-store.d.ts.map +1 -0
  105. package/dist/{storage → services/storage}/provider-settings-legacy-migration.d.ts +1 -1
  106. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  107. package/dist/{storage → services/storage}/provider-settings-manager.d.ts +1 -1
  108. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -0
  109. package/dist/{storage → services/storage}/sqlite-session-store.d.ts +3 -3
  110. package/dist/services/storage/sqlite-session-store.d.ts.map +1 -0
  111. package/dist/{storage → services/storage}/sqlite-team-store.d.ts +2 -2
  112. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -0
  113. package/dist/{storage → services/storage}/team-store.d.ts +1 -1
  114. package/dist/services/storage/team-store.d.ts.map +1 -0
  115. package/dist/services/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  116. package/dist/services/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  117. package/dist/services/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  118. package/dist/services/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
  119. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  120. package/dist/services/telemetry/core-events.d.ts.map +1 -0
  121. package/dist/services/telemetry/distinct-id.d.ts.map +1 -0
  122. package/dist/services/telemetry/index.d.ts.map +1 -0
  123. package/dist/{telemetry → services/telemetry}/index.js +6 -6
  124. package/dist/{session/utils → services}/usage.d.ts +1 -1
  125. package/dist/services/usage.d.ts.map +1 -0
  126. package/dist/services/workspace/file-indexer.d.ts.map +1 -0
  127. package/dist/services/workspace/index.d.ts.map +1 -0
  128. package/dist/services/workspace/mention-enricher.d.ts.map +1 -0
  129. package/dist/services/workspace-manifest.d.ts.map +1 -0
  130. package/dist/session/file-session-service.d.ts +4 -1
  131. package/dist/session/file-session-service.d.ts.map +1 -1
  132. package/dist/session/persistence-service.d.ts +8 -6
  133. package/dist/session/persistence-service.d.ts.map +1 -1
  134. package/dist/session/rpc-session-service.d.ts +3 -0
  135. package/dist/session/rpc-session-service.d.ts.map +1 -1
  136. package/dist/session/session-service.d.ts +8 -9
  137. package/dist/session/session-service.d.ts.map +1 -1
  138. package/dist/session/session-team-coordination.d.ts +4 -4
  139. package/dist/session/session-team-coordination.d.ts.map +1 -1
  140. package/dist/session/sqlite-rpc-session-backend.d.ts.map +1 -1
  141. package/dist/{session/default-session-manager.d.ts → transports/local.d.ts} +24 -14
  142. package/dist/transports/local.d.ts.map +1 -0
  143. package/dist/transports/rpc.d.ts +51 -0
  144. package/dist/transports/rpc.d.ts.map +1 -0
  145. package/dist/transports/runtime-host-support.d.ts +21 -0
  146. package/dist/transports/runtime-host-support.d.ts.map +1 -0
  147. package/dist/types/chat-schema.d.ts.map +1 -0
  148. package/dist/types/config.d.ts +3 -2
  149. package/dist/types/config.d.ts.map +1 -1
  150. package/dist/{session/utils/types.d.ts → types/session.d.ts} +15 -6
  151. package/dist/types/session.d.ts.map +1 -0
  152. package/dist/types/sessions.d.ts +19 -0
  153. package/dist/types/sessions.d.ts.map +1 -1
  154. package/dist/types/storage.d.ts +1 -3
  155. package/dist/types/storage.d.ts.map +1 -1
  156. package/dist/types.d.ts +7 -6
  157. package/dist/types.d.ts.map +1 -1
  158. package/package.json +7 -12
  159. package/src/ClineCore.test.ts +95 -19
  160. package/src/ClineCore.ts +120 -50
  161. package/src/auth/client.test.ts +29 -0
  162. package/src/auth/client.ts +21 -0
  163. package/src/auth/cline.ts +3 -1
  164. package/src/auth/codex.ts +1 -1
  165. package/src/auth/oca.ts +3 -1
  166. package/src/auth/server.test.ts +287 -0
  167. package/src/auth/server.ts +50 -1
  168. package/src/auth/types.ts +29 -0
  169. package/src/extensions/config/agent-config-loader.test.ts +3 -3
  170. package/src/extensions/config/agent-config-loader.ts +1 -5
  171. package/src/extensions/config/agent-config-parser.ts +1 -1
  172. package/src/extensions/config/hooks-config-loader.ts +1 -2
  173. package/src/extensions/config/index.ts +0 -4
  174. package/src/extensions/config/user-instruction-config-loader.ts +0 -4
  175. package/src/extensions/index.ts +6 -0
  176. package/src/extensions/plugin/plugin-config-loader.test.ts +39 -0
  177. package/src/extensions/plugin/plugin-config-loader.ts +18 -10
  178. package/src/extensions/plugin/plugin-load-report.ts +20 -0
  179. package/src/extensions/plugin/plugin-loader.test.ts +45 -0
  180. package/src/extensions/plugin/plugin-loader.ts +57 -3
  181. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +158 -86
  182. package/src/extensions/plugin/plugin-sandbox.test.ts +70 -0
  183. package/src/extensions/plugin/plugin-sandbox.ts +17 -6
  184. package/src/{tools → extensions/tools}/definitions.ts +1 -1
  185. package/src/extensions/tools/executors/file-read.test.ts +125 -0
  186. package/src/{tools → extensions/tools}/executors/file-read.ts +29 -4
  187. package/src/{tools → extensions/tools}/executors/search.ts +1 -1
  188. package/src/{tools → extensions/tools}/model-tool-routing.ts +1 -1
  189. package/src/{tools → extensions/tools}/presets.ts +2 -3
  190. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +455 -0
  191. package/src/{team → extensions/tools/team}/multi-agent.ts +80 -17
  192. package/src/{team → extensions/tools/team}/spawn-agent-tool.test.ts +0 -6
  193. package/src/{team → extensions/tools/team}/spawn-agent-tool.ts +1 -7
  194. package/src/{team → extensions/tools/team}/subagent-prompts.ts +2 -2
  195. package/src/{team → extensions/tools/team}/team-tools.test.ts +146 -30
  196. package/src/{team → extensions/tools/team}/team-tools.ts +98 -69
  197. package/src/{tools → extensions/tools}/types.ts +5 -3
  198. package/src/{runtime → hooks}/checkpoint-hooks.ts +27 -0
  199. package/src/{runtime → hooks}/hook-file-hooks.test.ts +42 -7
  200. package/src/{runtime → hooks}/hook-file-hooks.ts +6 -11
  201. package/src/hooks/subprocess.ts +48 -257
  202. package/src/index.ts +178 -158
  203. package/src/runtime/history.test.ts +114 -0
  204. package/src/runtime/history.ts +237 -0
  205. package/src/runtime/host.test.ts +230 -0
  206. package/src/runtime/host.ts +362 -0
  207. package/src/runtime/rpc-runtime-ensure.test.ts +123 -0
  208. package/src/{session → runtime}/rpc-runtime-ensure.ts +165 -27
  209. package/src/{session → runtime}/rpc-spawn-lease.test.ts +33 -1
  210. package/src/{session → runtime}/rpc-spawn-lease.ts +54 -20
  211. package/src/runtime/runtime-builder.team-persistence.test.ts +6 -3
  212. package/src/runtime/runtime-builder.test.ts +101 -4
  213. package/src/runtime/runtime-builder.ts +125 -86
  214. package/src/runtime/runtime-host.ts +178 -0
  215. package/src/{session → runtime}/runtime-oauth-token-manager.ts +1 -1
  216. package/src/runtime/runtime-parity.test.ts +1 -1
  217. package/src/runtime/session-runtime.ts +2 -2
  218. package/src/runtime/subprocess-sandbox.ts +26 -23
  219. package/src/runtime/tool-approval.ts +13 -15
  220. package/src/{session/session-agent-events.ts → services/agent-events.ts} +7 -7
  221. package/src/services/config.ts +5 -0
  222. package/src/services/local-runtime-bootstrap.ts +280 -0
  223. package/src/{providers → services/providers}/local-provider-service.ts +4 -4
  224. package/src/{session → services}/session-artifacts.ts +23 -19
  225. package/src/{session/utils/helpers.test.ts → services/session-data.test.ts} +1 -1
  226. package/src/{session/utils/helpers.ts → services/session-data.ts} +76 -72
  227. package/src/{session → services}/session-telemetry.ts +7 -9
  228. package/src/services/storage/artifact-store.ts +1 -0
  229. package/src/{storage → services/storage}/file-team-store.ts +2 -2
  230. package/src/{storage → services/storage}/provider-settings-legacy-migration.test.ts +1 -1
  231. package/src/{storage → services/storage}/provider-settings-legacy-migration.ts +2 -2
  232. package/src/{storage → services/storage}/provider-settings-manager.ts +2 -2
  233. package/src/services/storage/session-store.ts +1 -0
  234. package/src/{storage → services/storage}/sqlite-session-store.ts +7 -12
  235. package/src/{storage → services/storage}/sqlite-team-store.ts +4 -4
  236. package/src/{storage → services/storage}/team-store.ts +1 -1
  237. package/src/{session/utils → services}/usage.ts +1 -1
  238. package/src/{input → services/workspace}/file-indexer.test.ts +30 -1
  239. package/src/{input → services/workspace}/file-indexer.ts +26 -2
  240. package/src/{input → services/workspace}/mention-enricher.test.ts +21 -0
  241. package/src/{input → services/workspace}/mention-enricher.ts +1 -1
  242. package/src/session/file-session-service.ts +9 -7
  243. package/src/session/index.ts +25 -17
  244. package/src/session/persistence-service.test.ts +121 -24
  245. package/src/session/persistence-service.ts +118 -102
  246. package/src/session/rpc-session-service.ts +9 -2
  247. package/src/session/session-service.team-persistence.test.ts +1 -1
  248. package/src/session/session-service.ts +32 -19
  249. package/src/session/session-team-coordination.ts +13 -6
  250. package/src/session/sqlite-rpc-session-backend.ts +4 -6
  251. package/src/session/workspace-manager.ts +1 -1
  252. package/src/{session/default-session-manager.e2e.test.ts → transports/local.e2e.test.ts} +13 -17
  253. package/src/{session/default-session-manager.test.ts → transports/local.test.ts} +316 -230
  254. package/src/{session/default-session-manager.ts → transports/local.ts} +138 -172
  255. package/src/transports/rpc.test.ts +82 -0
  256. package/src/transports/rpc.ts +665 -0
  257. package/src/transports/runtime-host-support.ts +86 -0
  258. package/src/types/config.ts +3 -2
  259. package/src/{session/utils/types.ts → types/session.ts} +18 -5
  260. package/src/types/sessions.ts +21 -0
  261. package/src/types/storage.ts +1 -6
  262. package/src/types.ts +25 -18
  263. package/dist/chat/chat-schema.d.ts.map +0 -1
  264. package/dist/input/file-indexer.d.ts.map +0 -1
  265. package/dist/input/index.d.ts.map +0 -1
  266. package/dist/input/mention-enricher.d.ts.map +0 -1
  267. package/dist/prompt/default-system.d.ts +0 -2
  268. package/dist/prompt/default-system.d.ts.map +0 -1
  269. package/dist/providers/local-provider-registry.d.ts.map +0 -1
  270. package/dist/providers/local-provider-service.d.ts.map +0 -1
  271. package/dist/runtime/checkpoint-hooks.d.ts.map +0 -1
  272. package/dist/runtime/hook-file-hooks.d.ts.map +0 -1
  273. package/dist/runtime/team-runtime-registry.d.ts +0 -13
  274. package/dist/runtime/team-runtime-registry.d.ts.map +0 -1
  275. package/dist/session/default-session-manager.d.ts.map +0 -1
  276. package/dist/session/session-agent-events.d.ts.map +0 -1
  277. package/dist/session/session-artifacts.d.ts.map +0 -1
  278. package/dist/session/session-config-builder.d.ts +0 -16
  279. package/dist/session/session-config-builder.d.ts.map +0 -1
  280. package/dist/session/session-host.d.ts +0 -15
  281. package/dist/session/session-host.d.ts.map +0 -1
  282. package/dist/session/session-manager.d.ts.map +0 -1
  283. package/dist/session/session-telemetry.d.ts.map +0 -1
  284. package/dist/session/utils/helpers.d.ts.map +0 -1
  285. package/dist/session/utils/types.d.ts.map +0 -1
  286. package/dist/session/utils/usage.d.ts.map +0 -1
  287. package/dist/session/workspace-manifest.d.ts.map +0 -1
  288. package/dist/storage/file-team-store.d.ts.map +0 -1
  289. package/dist/storage/provider-settings-legacy-migration.d.ts.map +0 -1
  290. package/dist/storage/provider-settings-manager.d.ts.map +0 -1
  291. package/dist/storage/sqlite-session-store.d.ts.map +0 -1
  292. package/dist/storage/sqlite-team-store.d.ts.map +0 -1
  293. package/dist/storage/team-store.d.ts.map +0 -1
  294. package/dist/team/delegated-agent.d.ts.map +0 -1
  295. package/dist/team/index.d.ts.map +0 -1
  296. package/dist/team/multi-agent.d.ts.map +0 -1
  297. package/dist/team/projections.d.ts.map +0 -1
  298. package/dist/team/runtime.d.ts.map +0 -1
  299. package/dist/team/spawn-agent-tool.d.ts.map +0 -1
  300. package/dist/team/subagent-prompts.d.ts.map +0 -1
  301. package/dist/team/team-tools.d.ts.map +0 -1
  302. package/dist/telemetry/ITelemetryAdapter.d.ts.map +0 -1
  303. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +0 -1
  304. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +0 -1
  305. package/dist/telemetry/TelemetryLoggerSink.d.ts.map +0 -1
  306. package/dist/telemetry/TelemetryService.d.ts.map +0 -1
  307. package/dist/telemetry/core-events.d.ts.map +0 -1
  308. package/dist/telemetry/distinct-id.d.ts.map +0 -1
  309. package/dist/telemetry/index.d.ts.map +0 -1
  310. package/dist/tools/constants.d.ts.map +0 -1
  311. package/dist/tools/definitions.d.ts.map +0 -1
  312. package/dist/tools/executors/apply-patch-parser.d.ts.map +0 -1
  313. package/dist/tools/executors/apply-patch.d.ts.map +0 -1
  314. package/dist/tools/executors/bash.d.ts.map +0 -1
  315. package/dist/tools/executors/editor.d.ts.map +0 -1
  316. package/dist/tools/executors/file-read.d.ts.map +0 -1
  317. package/dist/tools/executors/index.d.ts.map +0 -1
  318. package/dist/tools/executors/search.d.ts.map +0 -1
  319. package/dist/tools/executors/web-fetch.d.ts.map +0 -1
  320. package/dist/tools/helpers.d.ts.map +0 -1
  321. package/dist/tools/index.d.ts.map +0 -1
  322. package/dist/tools/model-tool-routing.d.ts.map +0 -1
  323. package/dist/tools/presets.d.ts.map +0 -1
  324. package/dist/tools/schemas.d.ts.map +0 -1
  325. package/dist/tools/types.d.ts.map +0 -1
  326. package/src/prompt/default-system.ts +0 -21
  327. package/src/runtime/team-runtime-registry.ts +0 -43
  328. package/src/session/session-config-builder.ts +0 -126
  329. package/src/session/session-host.test.ts +0 -89
  330. package/src/session/session-host.ts +0 -213
  331. package/src/session/session-manager.ts +0 -74
  332. package/src/storage/artifact-store.ts +0 -1
  333. package/src/storage/session-store.ts +0 -1
  334. package/src/team/multi-agent.lifecycle.test.ts +0 -201
  335. package/src/tools/executors/file-read.test.ts +0 -49
  336. /package/dist/{tools → extensions/tools}/constants.d.ts +0 -0
  337. /package/dist/{tools → extensions/tools}/definitions.d.ts +0 -0
  338. /package/dist/{tools → extensions/tools}/executors/apply-patch-parser.d.ts +0 -0
  339. /package/dist/{tools → extensions/tools}/executors/apply-patch.d.ts +0 -0
  340. /package/dist/{tools → extensions/tools}/executors/bash.d.ts +0 -0
  341. /package/dist/{tools → extensions/tools}/executors/editor.d.ts +0 -0
  342. /package/dist/{tools → extensions/tools}/executors/file-read.d.ts +0 -0
  343. /package/dist/{tools → extensions/tools}/executors/index.d.ts +0 -0
  344. /package/dist/{tools → extensions/tools}/executors/search.d.ts +0 -0
  345. /package/dist/{tools → extensions/tools}/executors/web-fetch.d.ts +0 -0
  346. /package/dist/{tools → extensions/tools}/helpers.d.ts +0 -0
  347. /package/dist/{tools → extensions/tools}/index.d.ts +0 -0
  348. /package/dist/{tools → extensions/tools}/schemas.d.ts +0 -0
  349. /package/dist/{team → extensions/tools/team}/delegated-agent.d.ts +0 -0
  350. /package/dist/{team → extensions/tools/team}/index.d.ts +0 -0
  351. /package/dist/{team → extensions/tools/team}/projections.d.ts +0 -0
  352. /package/dist/{team → extensions/tools/team}/runtime.d.ts +0 -0
  353. /package/dist/{team → extensions/tools/team}/subagent-prompts.d.ts +0 -0
  354. /package/dist/{team → extensions/tools/team}/team-tools.d.ts +0 -0
  355. /package/dist/{session → runtime}/rpc-spawn-lease.d.ts +0 -0
  356. /package/dist/{providers → services/providers}/local-provider-registry.d.ts +0 -0
  357. /package/dist/{providers → services/providers}/local-provider-service.d.ts +0 -0
  358. /package/dist/{telemetry → services/telemetry}/ITelemetryAdapter.d.ts +0 -0
  359. /package/dist/{telemetry → services/telemetry}/OpenTelemetryAdapter.d.ts +0 -0
  360. /package/dist/{telemetry → services/telemetry}/OpenTelemetryProvider.d.ts +0 -0
  361. /package/dist/{telemetry → services/telemetry}/TelemetryLoggerSink.d.ts +0 -0
  362. /package/dist/{telemetry → services/telemetry}/TelemetryService.d.ts +0 -0
  363. /package/dist/{telemetry → services/telemetry}/core-events.d.ts +0 -0
  364. /package/dist/{telemetry → services/telemetry}/distinct-id.d.ts +0 -0
  365. /package/dist/{telemetry → services/telemetry}/index.d.ts +0 -0
  366. /package/dist/{input → services/workspace}/file-indexer.d.ts +0 -0
  367. /package/dist/{input → services/workspace}/index.d.ts +0 -0
  368. /package/dist/{input → services/workspace}/mention-enricher.d.ts +0 -0
  369. /package/dist/{session → services}/workspace-manifest.d.ts +0 -0
  370. /package/dist/{chat → types}/chat-schema.d.ts +0 -0
  371. /package/src/{tools → extensions/tools}/constants.ts +0 -0
  372. /package/src/{tools → extensions/tools}/definitions.test.ts +0 -0
  373. /package/src/{tools → extensions/tools}/executors/apply-patch-parser.ts +0 -0
  374. /package/src/{tools → extensions/tools}/executors/apply-patch.ts +0 -0
  375. /package/src/{tools → extensions/tools}/executors/bash.test.ts +0 -0
  376. /package/src/{tools → extensions/tools}/executors/bash.ts +0 -0
  377. /package/src/{tools → extensions/tools}/executors/editor.test.ts +0 -0
  378. /package/src/{tools → extensions/tools}/executors/editor.ts +0 -0
  379. /package/src/{tools → extensions/tools}/executors/index.ts +0 -0
  380. /package/src/{tools → extensions/tools}/executors/web-fetch.ts +0 -0
  381. /package/src/{tools → extensions/tools}/helpers.ts +0 -0
  382. /package/src/{tools → extensions/tools}/index.ts +0 -0
  383. /package/src/{tools → extensions/tools}/model-tool-routing.test.ts +0 -0
  384. /package/src/{tools → extensions/tools}/presets.test.ts +0 -0
  385. /package/src/{tools → extensions/tools}/schemas.ts +0 -0
  386. /package/src/{team → extensions/tools/team}/delegated-agent.ts +0 -0
  387. /package/src/{team → extensions/tools/team}/index.ts +0 -0
  388. /package/src/{team → extensions/tools/team}/projections.ts +0 -0
  389. /package/src/{team → extensions/tools/team}/runtime.ts +0 -0
  390. /package/src/{runtime → hooks}/checkpoint-hooks.test.ts +0 -0
  391. /package/src/{session → runtime}/runtime-oauth-token-manager.test.ts +0 -0
  392. /package/src/{providers → services/providers}/local-provider-registry.ts +0 -0
  393. /package/src/{providers → services/providers}/local-provider-service.test.ts +0 -0
  394. /package/src/{storage → services/storage}/index.ts +0 -0
  395. /package/src/{storage → services/storage}/provider-settings-manager.test.ts +0 -0
  396. /package/src/{telemetry → services/telemetry}/ITelemetryAdapter.ts +0 -0
  397. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.test.ts +0 -0
  398. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.ts +0 -0
  399. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.test.ts +0 -0
  400. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.ts +0 -0
  401. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.test.ts +0 -0
  402. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.ts +0 -0
  403. /package/src/{telemetry → services/telemetry}/TelemetryService.test.ts +0 -0
  404. /package/src/{telemetry → services/telemetry}/TelemetryService.ts +0 -0
  405. /package/src/{telemetry → services/telemetry}/core-events.ts +0 -0
  406. /package/src/{telemetry → services/telemetry}/distinct-id.test.ts +0 -0
  407. /package/src/{telemetry → services/telemetry}/distinct-id.ts +0 -0
  408. /package/src/{telemetry → services/telemetry}/index.ts +0 -0
  409. /package/src/{input → services/workspace}/file-indexer.d.ts +0 -0
  410. /package/src/{input → services/workspace}/index.ts +0 -0
  411. /package/src/{session → services}/workspace-manifest.ts +0 -0
  412. /package/src/{chat → types}/chat-schema.ts +0 -0
@@ -16,13 +16,6 @@ import {
16
16
  registerMcpServersFromSettingsFile,
17
17
  resolveDefaultMcpSettingsPath,
18
18
  } from "../extensions/mcp";
19
- import { createLocalTeamStore } from "../storage/team-store";
20
- import {
21
- AgentTeamsRuntime,
22
- bootstrapAgentTeams,
23
- createDelegatedAgentConfigProvider,
24
- type TeamEvent,
25
- } from "../team";
26
19
  import {
27
20
  createBuiltinTools,
28
21
  DEFAULT_MODEL_TOOL_ROUTING_RULES,
@@ -32,14 +25,20 @@ import {
32
25
  type ToolExecutors,
33
26
  ToolPresets,
34
27
  type ToolRoutingRule,
35
- } from "../tools";
28
+ } from "../extensions/tools";
29
+ import {
30
+ AgentTeamsRuntime,
31
+ bootstrapAgentTeams,
32
+ createDelegatedAgentConfigProvider,
33
+ type TeamEvent,
34
+ } from "../extensions/tools/team";
35
+ import { createLocalTeamStore } from "../services/storage/team-store";
36
36
  import type { CoreAgentMode, CoreSessionConfig } from "../types/config";
37
37
  import type {
38
38
  RuntimeBuilder,
39
39
  RuntimeBuilderInput,
40
40
  BuiltRuntime as RuntimeEnvironment,
41
41
  } from "./session-runtime";
42
- import { TeamRuntimeRegistry } from "./team-runtime-registry";
43
42
 
44
43
  type SkillsExecutorMetadataItem = {
45
44
  id: string;
@@ -52,6 +51,29 @@ type SkillsExecutorWithMetadata = SkillsExecutor & {
52
51
  configuredSkills?: SkillsExecutorMetadataItem[];
53
52
  };
54
53
 
54
+ function isToolEnabledByPolicies(
55
+ toolName: string,
56
+ toolPolicies: CoreSessionConfig["toolPolicies"],
57
+ ): boolean {
58
+ const globalPolicy = toolPolicies?.["*"] ?? {};
59
+ const toolPolicy = toolPolicies?.[toolName] ?? {};
60
+ return (
61
+ {
62
+ ...globalPolicy,
63
+ ...toolPolicy,
64
+ }.enabled !== false
65
+ );
66
+ }
67
+
68
+ function filterToolsByPolicies(
69
+ tools: Tool[],
70
+ toolPolicies: CoreSessionConfig["toolPolicies"],
71
+ ): Tool[] {
72
+ return tools.filter((tool) =>
73
+ isToolEnabledByPolicies(tool.name, toolPolicies),
74
+ );
75
+ }
76
+
55
77
  export function createTeamName(): string {
56
78
  return `team-${nanoid(5)}`;
57
79
  }
@@ -60,13 +82,13 @@ function createBuiltinToolsList(
60
82
  cwd: string,
61
83
  providerId: string,
62
84
  mode: CoreAgentMode,
63
- yolo: boolean | undefined,
64
85
  modelId: string,
65
86
  toolRoutingRules: ToolRoutingRule[] | undefined,
87
+ toolPolicies: CoreSessionConfig["toolPolicies"],
66
88
  skillsExecutor?: SkillsExecutorWithMetadata,
67
89
  executorOverrides?: Partial<ToolExecutors>,
68
90
  ): Tool[] {
69
- const preset = ToolPresets[resolveToolPresetName({ mode, yolo })];
91
+ const preset = ToolPresets[resolveToolPresetName({ mode })];
70
92
  const toolRoutingConfig = resolveToolRoutingConfig(
71
93
  providerId,
72
94
  modelId,
@@ -74,20 +96,23 @@ function createBuiltinToolsList(
74
96
  toolRoutingRules ?? DEFAULT_MODEL_TOOL_ROUTING_RULES,
75
97
  );
76
98
 
77
- return createBuiltinTools({
78
- cwd,
79
- ...preset,
80
- enableSkills: !!skillsExecutor,
81
- ...toolRoutingConfig,
82
- executors: {
83
- ...(skillsExecutor
84
- ? {
85
- skills: skillsExecutor,
86
- }
87
- : {}),
88
- ...(executorOverrides ?? {}),
89
- },
90
- });
99
+ return filterToolsByPolicies(
100
+ createBuiltinTools({
101
+ cwd,
102
+ ...preset,
103
+ enableSkills: !!skillsExecutor,
104
+ ...toolRoutingConfig,
105
+ executors: {
106
+ ...(skillsExecutor
107
+ ? {
108
+ skills: skillsExecutor,
109
+ }
110
+ : {}),
111
+ ...(executorOverrides ?? {}),
112
+ },
113
+ }),
114
+ toolPolicies,
115
+ );
91
116
  }
92
117
 
93
118
  const SKILL_FILE_NAME = "SKILL.md";
@@ -96,7 +121,7 @@ function listAvailableSkillNames(
96
121
  watcher: UserInstructionConfigWatcher,
97
122
  allowedSkillNames?: ReadonlyArray<string>,
98
123
  ): string[] {
99
- return listConfiguredSkills(watcher, allowedSkillNames)
124
+ return getConfiguredSkills(watcher, allowedSkillNames)
100
125
  .filter((skill) => !skill.disabled)
101
126
  .map((skill) => skill.name.trim())
102
127
  .filter((name) => name.length > 0)
@@ -143,10 +168,14 @@ function isSkillAllowed(
143
168
  );
144
169
  }
145
170
 
146
- function listConfiguredSkills(
171
+ type ConfiguredSkill = SkillsExecutorMetadataItem & {
172
+ skill: SkillConfig;
173
+ };
174
+
175
+ function getConfiguredSkills(
147
176
  watcher: UserInstructionConfigWatcher,
148
177
  allowedSkillNames?: ReadonlyArray<string>,
149
- ): SkillsExecutorMetadataItem[] {
178
+ ): ConfiguredSkill[] {
150
179
  const allowedSkills = toAllowedSkillSet(allowedSkillNames);
151
180
  const snapshot = watcher.getSnapshot("skill");
152
181
  return [...snapshot.entries()]
@@ -157,6 +186,7 @@ function listConfiguredSkills(
157
186
  name: skill.name.trim(),
158
187
  description: skill.description?.trim(),
159
188
  disabled: skill.disabled === true,
189
+ skill,
160
190
  };
161
191
  })
162
192
  .filter((skill) => isSkillAllowed(skill.id, skill.name, allowedSkills));
@@ -254,28 +284,22 @@ function resolveSkillRecord(
254
284
  requestedSkill: string,
255
285
  allowedSkillNames?: ReadonlyArray<string>,
256
286
  ): { id: string; skill: SkillConfig } | { error: string } {
257
- const allowedSkills = toAllowedSkillSet(allowedSkillNames);
258
287
  const normalized = requestedSkill.trim().replace(/^\/+/, "").toLowerCase();
259
288
  if (!normalized) {
260
289
  return { error: "Missing skill name." };
261
290
  }
262
291
 
263
- const snapshot = watcher.getSnapshot("skill");
264
- const scopedEntries = [...snapshot.entries()].filter(([id, record]) => {
265
- const skill = record.item as SkillConfig;
266
- return isSkillAllowed(id, skill.name, allowedSkills);
267
- });
268
- const scopedSnapshot = new Map(scopedEntries);
269
- const exact = scopedSnapshot.get(normalized);
292
+ const configuredSkills = getConfiguredSkills(watcher, allowedSkillNames);
293
+ const exact = configuredSkills.find((entry) => entry.id === normalized);
270
294
  if (exact) {
271
- const skill = exact.item as SkillConfig;
295
+ const { skill } = exact;
272
296
  if (skill.disabled === true) {
273
297
  return {
274
298
  error: `Skill "${skill.name}" is configured but disabled.`,
275
299
  };
276
300
  }
277
301
  return {
278
- id: normalized,
302
+ id: exact.id,
279
303
  skill,
280
304
  };
281
305
  }
@@ -284,30 +308,38 @@ function resolveSkillRecord(
284
308
  ? (normalized.split(":").at(-1) ?? normalized)
285
309
  : normalized;
286
310
 
287
- const suffixMatches = [...scopedSnapshot.entries()].filter(([id]) => {
311
+ const suffixMatches = configuredSkills.filter(({ id }) => {
288
312
  if (id === bareName) {
289
313
  return true;
290
314
  }
291
315
  return id.endsWith(`:${bareName}`);
292
316
  });
293
317
 
318
+ const enabledSuffixMatches = suffixMatches.filter(
319
+ ({ skill }) => skill.disabled !== true,
320
+ );
321
+
322
+ if (enabledSuffixMatches.length === 1) {
323
+ const { id, skill } = enabledSuffixMatches[0];
324
+ return { id, skill };
325
+ }
326
+
327
+ if (enabledSuffixMatches.length > 1) {
328
+ return {
329
+ error: `Skill "${requestedSkill}" is ambiguous. Use one of: ${enabledSuffixMatches.map(({ id }) => id).join(", ")}`,
330
+ };
331
+ }
332
+
294
333
  if (suffixMatches.length === 1) {
295
- const [id, record] = suffixMatches[0];
296
- const skill = record.item as SkillConfig;
297
- if (skill.disabled === true) {
298
- return {
299
- error: `Skill "${skill.name}" is configured but disabled.`,
300
- };
301
- }
334
+ const { skill } = suffixMatches[0];
302
335
  return {
303
- id,
304
- skill,
336
+ error: `Skill "${skill.name}" is configured but disabled.`,
305
337
  };
306
338
  }
307
339
 
308
340
  if (suffixMatches.length > 1) {
309
341
  return {
310
- error: `Skill "${requestedSkill}" is ambiguous. Use one of: ${suffixMatches.map(([id]) => id).join(", ")}`,
342
+ error: `Skill "${requestedSkill}" is ambiguous, and all matches are disabled: ${suffixMatches.map(({ id }) => id).join(", ")}`,
311
343
  };
312
344
  }
313
345
 
@@ -354,7 +386,10 @@ function createSkillsExecutor(
354
386
  }
355
387
  };
356
388
  Object.defineProperty(executor, "configuredSkills", {
357
- get: () => listConfiguredSkills(watcher, allowedSkillNames),
389
+ get: () =>
390
+ getConfiguredSkills(watcher, allowedSkillNames).map(
391
+ ({ skill: _skill, ...metadata }) => metadata,
392
+ ),
358
393
  enumerable: true,
359
394
  configurable: false,
360
395
  });
@@ -386,27 +421,24 @@ function normalizeConfig(
386
421
  | "enableTools"
387
422
  | "enableSpawnAgent"
388
423
  | "enableAgentTeams"
424
+ | "disableMcpSettingsTools"
389
425
  | "yolo"
390
426
  | "missionLogIntervalSteps"
391
427
  | "missionLogIntervalMs"
392
428
  | "sessionId"
393
429
  >
394
430
  > {
395
- const preset =
396
- ToolPresets[
397
- resolveToolPresetName({
398
- mode: config.mode,
399
- yolo: config.yolo,
400
- })
401
- ];
431
+ const preset = ToolPresets[resolveToolPresetName({ mode: config.mode })];
402
432
  return {
403
433
  sessionId: config.sessionId || "",
404
- mode: config.mode === "plan" ? "plan" : "act",
434
+ mode:
435
+ config.mode === "plan" ? "plan" : config.mode === "yolo" ? "yolo" : "act",
405
436
  enableTools: config.enableTools !== false,
406
437
  enableSpawnAgent:
407
438
  config.enableSpawnAgent ?? preset.enableSpawnAgent ?? true,
408
439
  enableAgentTeams:
409
440
  config.enableAgentTeams ?? preset.enableAgentTeams ?? true,
441
+ disableMcpSettingsTools: config.disableMcpSettingsTools === true,
410
442
  yolo: config.yolo === true,
411
443
  missionLogIntervalSteps:
412
444
  typeof config.missionLogIntervalSteps === "number" &&
@@ -422,7 +454,15 @@ function normalizeConfig(
422
454
  }
423
455
 
424
456
  export class DefaultRuntimeBuilder implements RuntimeBuilder {
425
- private readonly teamRuntimeRegistry = new TeamRuntimeRegistry();
457
+ private readonly teamRuntimeEntries = new Map<
458
+ string,
459
+ {
460
+ runtime?: AgentTeamsRuntime;
461
+ delegatedAgentConfigProvider: ReturnType<
462
+ typeof createDelegatedAgentConfigProvider
463
+ >;
464
+ }
465
+ >();
426
466
 
427
467
  async build(input: RuntimeBuilderInput): Promise<RuntimeEnvironment> {
428
468
  const {
@@ -440,6 +480,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
440
480
  const normalized = normalizeConfig(config);
441
481
  const tools: Tool[] = [];
442
482
  const effectiveTeamName = config.teamName?.trim() || createTeamName();
483
+ const hasLocalSkills = hasSkillsFiles(config.cwd);
443
484
  let teamToolsRegistered = false;
444
485
  const watcherProvided = Boolean(sharedUserInstructionWatcher);
445
486
  let userInstructionWatcher = sharedUserInstructionWatcher;
@@ -447,11 +488,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
447
488
  let skillsExecutor: SkillsExecutorWithMetadata | undefined;
448
489
  let mcpShutdown: (() => Promise<void>) | undefined;
449
490
 
450
- if (
451
- !userInstructionWatcher &&
452
- normalized.enableTools &&
453
- hasSkillsFiles(config.cwd)
454
- ) {
491
+ if (!userInstructionWatcher && normalized.enableTools && hasLocalSkills) {
455
492
  userInstructionWatcher = createUserInstructionConfigWatcher({
456
493
  skills: { workspacePath: config.cwd },
457
494
  rules: { workspacePath: config.cwd },
@@ -464,8 +501,8 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
464
501
  normalized.enableTools &&
465
502
  userInstructionWatcher &&
466
503
  (watcherProvided ||
467
- hasSkillsFiles(config.cwd) ||
468
- listConfiguredSkills(userInstructionWatcher, config.skills).length > 0)
504
+ hasLocalSkills ||
505
+ getConfiguredSkills(userInstructionWatcher, config.skills).length > 0)
469
506
  ) {
470
507
  skillsExecutor = createSkillsExecutor(
471
508
  userInstructionWatcher,
@@ -480,16 +517,18 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
480
517
  config.cwd,
481
518
  config.providerId,
482
519
  normalized.mode,
483
- normalized.yolo,
484
520
  config.modelId,
485
521
  config.toolRoutingRules,
522
+ config.toolPolicies,
486
523
  skillsExecutor,
487
524
  defaultToolExecutors,
488
525
  ),
489
526
  );
490
- const mcpRuntime = await loadConfiguredMcpTools(config.logger);
491
- tools.push(...mcpRuntime.tools);
492
- mcpShutdown = mcpRuntime.shutdown;
527
+ if (!normalized.disableMcpSettingsTools) {
528
+ const mcpRuntime = await loadConfiguredMcpTools(config.logger);
529
+ tools.push(...mcpRuntime.tools);
530
+ mcpShutdown = mcpRuntime.shutdown;
531
+ }
493
532
  }
494
533
 
495
534
  let teamRuntime: AgentTeamsRuntime | undefined;
@@ -526,21 +565,21 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
526
565
  telemetry: input.telemetry ?? config.telemetry,
527
566
  workspaceMetadata: config.workspaceMetadata,
528
567
  });
529
- this.teamRuntimeRegistry.getOrCreate(registryKey, () => ({
530
- delegatedAgentConfigProvider,
531
- }));
568
+ if (!this.teamRuntimeEntries.has(registryKey)) {
569
+ this.teamRuntimeEntries.set(registryKey, {
570
+ delegatedAgentConfigProvider,
571
+ });
572
+ }
532
573
 
533
574
  const ensureTeamRuntime = (): AgentTeamsRuntime | undefined => {
534
575
  if (!normalized.enableAgentTeams) {
535
576
  return undefined;
536
577
  }
537
578
 
538
- const registryEntry = this.teamRuntimeRegistry.getOrCreate(
539
- registryKey,
540
- () => ({
541
- delegatedAgentConfigProvider,
542
- }),
543
- );
579
+ const registryEntry = this.teamRuntimeEntries.get(registryKey) ?? {
580
+ delegatedAgentConfigProvider,
581
+ };
582
+ this.teamRuntimeEntries.set(registryKey, registryEntry);
544
583
  teamRuntime = registryEntry.runtime;
545
584
 
546
585
  if (!teamRuntime) {
@@ -592,7 +631,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
592
631
  const factory = input.teamToolsFactory ?? bootstrapAgentTeams;
593
632
  const teamBootstrap = factory({
594
633
  runtime: teamRuntime,
595
- leadAgentId: "lead",
634
+ leadAgentId: config.sessionId || "lead",
596
635
  restoredFromPersistence: Boolean(restoredTeamState),
597
636
  restoredTeammates: restoredTeammateSpecs,
598
637
  includeLeadSpawnTool: true,
@@ -607,9 +646,9 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
607
646
  config.cwd,
608
647
  config.providerId,
609
648
  normalized.mode,
610
- normalized.yolo,
611
649
  config.modelId,
612
650
  config.toolRoutingRules,
651
+ config.toolPolicies,
613
652
  skillsExecutor,
614
653
  defaultToolExecutors,
615
654
  )
@@ -643,7 +682,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
643
682
 
644
683
  const completionGuard = normalized.enableAgentTeams
645
684
  ? () => {
646
- const rt = this.teamRuntimeRegistry.get(registryKey)?.runtime;
685
+ const rt = this.teamRuntimeEntries.get(registryKey)?.runtime;
647
686
  if (!rt) return undefined;
648
687
  const tasks = rt.listTasks();
649
688
  const hasInProgress = tasks.some(
@@ -668,20 +707,20 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
668
707
  if (pending) parts.push(`Unfinished tasks: ${pending}`);
669
708
  if (activeRunSummary)
670
709
  parts.push(`Active runs: ${activeRunSummary}`);
671
- return `[SYSTEM] You still have team obligations. ${parts.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_run / team_await_all_runs to wait for active runs. Do NOT stop until all tasks are completed.`;
710
+ return `[SYSTEM] You still have team obligations. ${parts.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`;
672
711
  }
673
712
  return undefined;
674
713
  }
675
714
  : undefined;
676
715
 
677
716
  return {
678
- tools,
717
+ tools: filterToolsByPolicies(tools, config.toolPolicies),
679
718
  logger: logger ?? config.logger,
680
719
  telemetry: telemetry ?? config.telemetry,
681
720
  teamRuntime,
682
721
  teamRestoredFromPersistence: Boolean(restoredTeamState),
683
722
  delegatedAgentConfigProvider:
684
- this.teamRuntimeRegistry.get(registryKey)
723
+ this.teamRuntimeEntries.get(registryKey)
685
724
  ?.delegatedAgentConfigProvider ?? delegatedAgentConfigProvider,
686
725
  completionGuard,
687
726
  registerLeadAgent: (agent) => {
@@ -692,7 +731,7 @@ export class DefaultRuntimeBuilder implements RuntimeBuilder {
692
731
  },
693
732
  shutdown: async (reason: string) => {
694
733
  shutdownTeamRuntime(teamRuntime, reason);
695
- this.teamRuntimeRegistry.delete(registryKey);
734
+ this.teamRuntimeEntries.delete(registryKey);
696
735
  await mcpShutdown?.();
697
736
  if (!watcherProvided) {
698
737
  userInstructionWatcher?.stop();
@@ -0,0 +1,178 @@
1
+ import type * as LlmsProviders from "@clinebot/llms";
2
+ import type {
3
+ AgentResult,
4
+ ToolApprovalRequest,
5
+ ToolApprovalResult,
6
+ } from "@clinebot/shared";
7
+ import type { HookEventPayload } from "../hooks";
8
+ import type { SessionManifest } from "../session/session-manifest";
9
+ import type { SessionSource } from "../types/common";
10
+ import type { CoreSessionConfig } from "../types/config";
11
+ import type { CoreSessionEvent } from "../types/events";
12
+ import type { SessionRecord } from "../types/sessions";
13
+
14
+ export interface RuntimeSessionConfig {
15
+ sessionId?: string;
16
+ providerId: string;
17
+ modelId: string;
18
+ apiKey?: string;
19
+ cwd: string;
20
+ workspaceRoot?: string;
21
+ systemPrompt: string;
22
+ mode: CoreSessionConfig["mode"];
23
+ rules?: CoreSessionConfig["rules"];
24
+ maxIterations?: CoreSessionConfig["maxIterations"];
25
+ enableTools: boolean;
26
+ enableSpawnAgent: boolean;
27
+ enableAgentTeams: boolean;
28
+ disableMcpSettingsTools?: boolean;
29
+ teamName?: string;
30
+ missionLogIntervalSteps?: number;
31
+ missionLogIntervalMs?: number;
32
+ }
33
+
34
+ export type LocalRuntimeConfigOverrides = Omit<
35
+ CoreSessionConfig,
36
+ keyof RuntimeSessionConfig
37
+ >;
38
+
39
+ export interface LocalRuntimeStartOptions {
40
+ configOverrides?: Partial<LocalRuntimeConfigOverrides>;
41
+ userInstructionWatcher?: import("../extensions/config").UserInstructionConfigWatcher;
42
+ onTeamRestored?: () => void;
43
+ }
44
+
45
+ export interface StartSessionInput {
46
+ config: RuntimeSessionConfig;
47
+ source?: SessionSource;
48
+ prompt?: string;
49
+ interactive?: boolean;
50
+ sessionMetadata?: Record<string, unknown>;
51
+ initialMessages?: LlmsProviders.Message[];
52
+ userImages?: string[];
53
+ userFiles?: string[];
54
+ /**
55
+ * Local runtime bootstrap options. These are intentionally isolated under a
56
+ * local-only bag so the transport-facing host contract stays transport-safe.
57
+ */
58
+ localRuntime?: LocalRuntimeStartOptions;
59
+ toolPolicies?: import("@clinebot/shared").AgentConfig["toolPolicies"];
60
+ requestToolApproval?: (
61
+ request: ToolApprovalRequest,
62
+ ) => Promise<ToolApprovalResult>;
63
+ }
64
+
65
+ export function splitCoreSessionConfig(config: CoreSessionConfig): {
66
+ config: RuntimeSessionConfig;
67
+ localRuntime?: LocalRuntimeStartOptions;
68
+ } {
69
+ const {
70
+ sessionId,
71
+ providerId,
72
+ modelId,
73
+ apiKey,
74
+ cwd,
75
+ workspaceRoot,
76
+ systemPrompt,
77
+ mode,
78
+ rules,
79
+ maxIterations,
80
+ enableTools,
81
+ enableSpawnAgent,
82
+ enableAgentTeams,
83
+ disableMcpSettingsTools,
84
+ teamName,
85
+ missionLogIntervalSteps,
86
+ missionLogIntervalMs,
87
+ ...localConfigOverrides
88
+ } = config;
89
+
90
+ const localRuntime =
91
+ Object.keys(localConfigOverrides).length > 0
92
+ ? {
93
+ configOverrides:
94
+ localConfigOverrides as Partial<LocalRuntimeConfigOverrides>,
95
+ }
96
+ : undefined;
97
+
98
+ return {
99
+ config: {
100
+ ...(sessionId ? { sessionId } : {}),
101
+ providerId,
102
+ modelId,
103
+ ...(apiKey ? { apiKey } : {}),
104
+ cwd,
105
+ ...(workspaceRoot ? { workspaceRoot } : {}),
106
+ systemPrompt,
107
+ mode,
108
+ rules,
109
+ maxIterations,
110
+ enableTools,
111
+ enableSpawnAgent,
112
+ enableAgentTeams,
113
+ disableMcpSettingsTools,
114
+ teamName,
115
+ missionLogIntervalSteps,
116
+ missionLogIntervalMs,
117
+ },
118
+ ...(localRuntime ? { localRuntime } : {}),
119
+ };
120
+ }
121
+
122
+ export interface StartSessionResult {
123
+ sessionId: string;
124
+ manifest: SessionManifest;
125
+ manifestPath: string;
126
+ messagesPath: string;
127
+ result?: AgentResult;
128
+ }
129
+
130
+ export interface SendSessionInput {
131
+ sessionId: string;
132
+ prompt: string;
133
+ userImages?: string[];
134
+ userFiles?: string[];
135
+ delivery?: "queue" | "steer";
136
+ }
137
+
138
+ export interface SessionAccumulatedUsage {
139
+ inputTokens: number;
140
+ outputTokens: number;
141
+ cacheReadTokens: number;
142
+ cacheWriteTokens: number;
143
+ totalCost: number;
144
+ }
145
+
146
+ /**
147
+ * RuntimeHost is the transport/runtime boundary for core session execution.
148
+ * Callers must normalize broad local config into `RuntimeSessionConfig`
149
+ * plus optional `localRuntime` overrides before invoking a host.
150
+ */
151
+ export interface RuntimeHost {
152
+ readonly runtimeAddress?: string;
153
+ start(input: StartSessionInput): Promise<StartSessionResult>;
154
+ send(input: SendSessionInput): Promise<AgentResult | undefined>;
155
+ getAccumulatedUsage(
156
+ sessionId: string,
157
+ ): Promise<SessionAccumulatedUsage | undefined>;
158
+ abort(sessionId: string, reason?: unknown): Promise<void>;
159
+ stop(sessionId: string): Promise<void>;
160
+ dispose(reason?: string): Promise<void>;
161
+ get(sessionId: string): Promise<SessionRecord | undefined>;
162
+ list(limit?: number): Promise<SessionRecord[]>;
163
+ delete(sessionId: string): Promise<boolean>;
164
+ update(
165
+ sessionId: string,
166
+ updates: {
167
+ prompt?: string | null;
168
+ metadata?: Record<string, unknown> | null;
169
+ title?: string | null;
170
+ },
171
+ ): Promise<{ updated: boolean }>;
172
+ readMessages(sessionId: string): Promise<LlmsProviders.Message[]>;
173
+ handleHookEvent(payload: HookEventPayload): Promise<void>;
174
+ subscribe(listener: (event: CoreSessionEvent) => void): () => void;
175
+ updateSessionModel?(sessionId: string, modelId: string): Promise<void>;
176
+ }
177
+
178
+ export type RuntimeHostMode = "auto" | "rpc" | "local";
@@ -11,7 +11,7 @@ import {
11
11
  import { getValidOpenAICodexCredentials } from "../auth/codex";
12
12
  import { getValidOcaCredentials } from "../auth/oca";
13
13
  import { decodeJwtPayload } from "../auth/utils";
14
- import { ProviderSettingsManager } from "../storage/provider-settings-manager";
14
+ import { ProviderSettingsManager } from "../services/storage/provider-settings-manager";
15
15
 
16
16
  const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot";
17
17
  const WORKOS_TOKEN_PREFIX = "workos:";
@@ -3,7 +3,7 @@ import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import type { Tool } from "@clinebot/shared";
5
5
  import { describe, expect, it } from "vitest";
6
- import { createBuiltinTools } from "../tools";
6
+ import { createBuiltinTools } from "../extensions/tools";
7
7
  import { DefaultRuntimeBuilder } from "./runtime-builder";
8
8
 
9
9
  type LegacyConfig = {
@@ -9,12 +9,12 @@ import type {
9
9
  Tool,
10
10
  } from "@clinebot/shared";
11
11
  import type { UserInstructionConfigWatcher } from "../extensions/config";
12
+ import type { ToolExecutors } from "../extensions/tools";
12
13
  import type {
13
14
  AgentTeamsRuntime,
14
15
  DelegatedAgentConfigProvider,
15
16
  TeamEvent,
16
- } from "../team";
17
- import type { ToolExecutors } from "../tools";
17
+ } from "../extensions/tools/team";
18
18
  import type { CoreSessionConfig } from "../types/config";
19
19
 
20
20
  export interface BuiltRuntime {