@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,661 +0,0 @@
1
- import { type ChildProcessWithoutNullStreams, spawn } from "node:child_process";
2
- import {
3
- type AgentHooks,
4
- type HookSessionContextProvider,
5
- resolveHookSessionContext,
6
- } from "@clinebot/shared";
7
- import {
8
- type AgentAbortHookPayload,
9
- type AgentEndHookPayload,
10
- type AgentErrorHookPayload,
11
- type AgentResumeHookPayload,
12
- type AgentStartHookPayload,
13
- createSubprocessHooks,
14
- type HookEventName,
15
- type HookEventPayload,
16
- type HookEventPayloadBase,
17
- HookOutputSchema,
18
- type PromptSubmitHookPayload,
19
- type RunHookResult,
20
- type SessionShutdownHookPayload,
21
- type ToolCallHookPayload,
22
- type ToolResultHookPayload,
23
- } from "./subprocess";
24
-
25
- type AgentHookControl = NonNullable<
26
- Awaited<ReturnType<NonNullable<AgentHooks["onToolCallStart"]>>>
27
- >;
28
- type AgentHookRunStartContext = Parameters<
29
- NonNullable<AgentHooks["onRunStart"]>
30
- >[0];
31
- type AgentHookSessionShutdownContext = Parameters<
32
- NonNullable<AgentHooks["onSessionShutdown"]>
33
- >[0];
34
- type AgentHookStopErrorContext = Parameters<
35
- NonNullable<AgentHooks["onStopError"]>
36
- >[0];
37
- type AgentHookToolCallEndContext = Parameters<
38
- NonNullable<AgentHooks["onToolCallEnd"]>
39
- >[0];
40
- type AgentHookToolCallStartContext = Parameters<
41
- NonNullable<AgentHooks["onToolCallStart"]>
42
- >[0];
43
- type AgentHookTurnEndContext = Parameters<
44
- NonNullable<AgentHooks["onTurnEnd"]>
45
- >[0];
46
-
47
- interface PersistentHookRequest {
48
- id: string;
49
- payload: HookEventPayload;
50
- }
51
-
52
- interface PersistentHookResponse {
53
- id: string;
54
- ok: boolean;
55
- result?: RunHookResult;
56
- error?: string;
57
- }
58
-
59
- interface PendingRequest {
60
- resolve: (result: RunHookResult | undefined) => void;
61
- reject: (error: Error) => void;
62
- timeoutId?: NodeJS.Timeout;
63
- }
64
-
65
- export interface PersistentHookClientOptions {
66
- command: string[];
67
- cwd?: string;
68
- env?: NodeJS.ProcessEnv;
69
- onSpawn?: (event: {
70
- command: string[];
71
- pid?: number;
72
- detached: boolean;
73
- }) => void;
74
- }
75
-
76
- export class PersistentHookClient {
77
- private readonly options: PersistentHookClientOptions;
78
- private child?: ChildProcessWithoutNullStreams;
79
- private startPromise?: Promise<void>;
80
- private readonly pending = new Map<string, PendingRequest>();
81
- private nextId = 0;
82
- private stdoutBuffer = "";
83
- private closing = false;
84
-
85
- constructor(options: PersistentHookClientOptions) {
86
- this.options = options;
87
- }
88
-
89
- async send(
90
- payload: HookEventPayload,
91
- options?: { timeoutMs?: number },
92
- ): Promise<RunHookResult | undefined> {
93
- await this.ensureStarted();
94
- const child = this.child;
95
- if (!child?.stdin || child.stdin.destroyed) {
96
- throw new Error("persistent hook worker stdin is unavailable");
97
- }
98
-
99
- const id = `hook_req_${String(++this.nextId).padStart(8, "0")}`;
100
- const frame = `${JSON.stringify({ id, payload } satisfies PersistentHookRequest)}\n`;
101
-
102
- return await new Promise<RunHookResult | undefined>((resolve, reject) => {
103
- const pending: PendingRequest = { resolve, reject };
104
- const timeoutMs = options?.timeoutMs ?? 0;
105
- if (timeoutMs > 0) {
106
- pending.timeoutId = setTimeout(() => {
107
- this.pending.delete(id);
108
- reject(
109
- new Error(`Persistent hook request timed out after ${timeoutMs}ms`),
110
- );
111
- }, timeoutMs);
112
- }
113
- this.pending.set(id, pending);
114
- child.stdin.write(frame, (error) => {
115
- if (!error) {
116
- return;
117
- }
118
- this.clearPendingRequest(id);
119
- reject(error instanceof Error ? error : new Error(String(error)));
120
- });
121
- });
122
- }
123
-
124
- async close(): Promise<void> {
125
- this.closing = true;
126
- for (const id of [...this.pending.keys()]) {
127
- this.rejectPendingRequest(id, new Error("persistent hook worker closed"));
128
- }
129
- const child = this.child;
130
- this.child = undefined;
131
- this.startPromise = undefined;
132
- this.stdoutBuffer = "";
133
- if (!child) {
134
- return;
135
- }
136
- await new Promise<void>((resolve) => {
137
- let settled = false;
138
- let forceKillId: NodeJS.Timeout | undefined;
139
- const finish = () => {
140
- if (settled) {
141
- return;
142
- }
143
- settled = true;
144
- if (forceKillId) {
145
- clearTimeout(forceKillId);
146
- }
147
- resolve();
148
- };
149
-
150
- child.once("close", () => finish());
151
-
152
- try {
153
- child.stdin.end();
154
- } catch {
155
- // Ignore stdin shutdown failures and continue to terminate the child.
156
- }
157
-
158
- if (!child.killed) {
159
- try {
160
- child.kill("SIGTERM");
161
- } catch {
162
- finish();
163
- return;
164
- }
165
- }
166
-
167
- forceKillId = setTimeout(() => {
168
- if (!child.killed) {
169
- try {
170
- child.kill("SIGKILL");
171
- } catch {
172
- // Ignore final kill errors.
173
- }
174
- }
175
- }, 250);
176
-
177
- setTimeout(() => finish(), 1000);
178
- });
179
- }
180
-
181
- private async ensureStarted(): Promise<void> {
182
- if (this.child && !this.child.killed) {
183
- return;
184
- }
185
- if (this.startPromise) {
186
- return await this.startPromise;
187
- }
188
- this.closing = false;
189
- this.startPromise = this.start();
190
- try {
191
- await this.startPromise;
192
- } finally {
193
- this.startPromise = undefined;
194
- }
195
- }
196
-
197
- private async start(): Promise<void> {
198
- const command = this.options.command;
199
- if (!Array.isArray(command) || command.length === 0) {
200
- throw new Error("PersistentHookClient requires a non-empty command");
201
- }
202
- const child = spawn(command[0], command.slice(1), {
203
- cwd: this.options.cwd,
204
- env: this.options.env,
205
- stdio: ["pipe", "pipe", "pipe"],
206
- });
207
- this.child = child;
208
- this.stdoutBuffer = "";
209
-
210
- child.stdout.setEncoding("utf8");
211
- child.stdout.on("data", (chunk: string) => {
212
- this.handleStdout(chunk);
213
- });
214
-
215
- child.stderr.setEncoding("utf8");
216
- let stderr = "";
217
- child.stderr.on("data", (chunk: string) => {
218
- stderr += chunk;
219
- });
220
-
221
- child.once("error", (error) => {
222
- this.handleChildExit(
223
- error instanceof Error ? error : new Error(String(error)),
224
- );
225
- });
226
- child.once("close", (code, signal) => {
227
- const detail =
228
- stderr.trim() ||
229
- `persistent hook worker exited with code ${code ?? "null"}${signal ? ` signal ${signal}` : ""}`;
230
- this.handleChildExit(new Error(detail));
231
- });
232
-
233
- await new Promise<void>((resolve, reject) => {
234
- child.once("spawn", () => {
235
- try {
236
- this.options.onSpawn?.({
237
- command,
238
- pid: child.pid ?? undefined,
239
- detached: false,
240
- });
241
- } catch {
242
- // Logging callbacks must not break subprocess execution.
243
- }
244
- resolve();
245
- });
246
- child.once("error", (error) =>
247
- reject(error instanceof Error ? error : new Error(String(error))),
248
- );
249
- });
250
- }
251
-
252
- private handleStdout(chunk: string): void {
253
- this.stdoutBuffer += chunk;
254
- let newlineIndex = this.stdoutBuffer.indexOf("\n");
255
- while (newlineIndex >= 0) {
256
- const line = this.stdoutBuffer.slice(0, newlineIndex).trim();
257
- this.stdoutBuffer = this.stdoutBuffer.slice(newlineIndex + 1);
258
- if (line) {
259
- this.handleResponseLine(line);
260
- }
261
- newlineIndex = this.stdoutBuffer.indexOf("\n");
262
- }
263
- }
264
-
265
- private handleResponseLine(line: string): void {
266
- let parsed: PersistentHookResponse;
267
- try {
268
- parsed = JSON.parse(line) as PersistentHookResponse;
269
- } catch {
270
- return;
271
- }
272
- if (!parsed || typeof parsed.id !== "string") {
273
- return;
274
- }
275
- const pending = this.clearPendingRequest(parsed.id);
276
- if (!pending) {
277
- return;
278
- }
279
- if (!parsed.ok) {
280
- pending.reject(
281
- new Error(parsed.error || "persistent hook worker failed"),
282
- );
283
- return;
284
- }
285
- pending.resolve(parsed.result);
286
- }
287
-
288
- private handleChildExit(error: Error): void {
289
- const child = this.child;
290
- if (!child) {
291
- return;
292
- }
293
- this.child = undefined;
294
- this.stdoutBuffer = "";
295
- if (this.closing) {
296
- return;
297
- }
298
- for (const id of [...this.pending.keys()]) {
299
- this.rejectPendingRequest(id, error);
300
- }
301
- }
302
-
303
- private clearPendingRequest(id: string): PendingRequest | undefined {
304
- const pending = this.pending.get(id);
305
- if (!pending) {
306
- return undefined;
307
- }
308
- this.pending.delete(id);
309
- if (pending.timeoutId) {
310
- clearTimeout(pending.timeoutId);
311
- }
312
- return pending;
313
- }
314
-
315
- private rejectPendingRequest(id: string, error: Error): void {
316
- const pending = this.clearPendingRequest(id);
317
- pending?.reject(error);
318
- }
319
- }
320
-
321
- export interface PersistentSubprocessHooksOptions {
322
- command?: string[];
323
- cwd?: string;
324
- env?: NodeJS.ProcessEnv;
325
- timeoutMs?: number;
326
- onSpawn?: (event: {
327
- command: string[];
328
- pid?: number;
329
- detached: boolean;
330
- }) => void;
331
- onDispatchError?: (error: Error, payload: HookEventPayload) => void;
332
- onDispatch?: (event: {
333
- payload: HookEventPayload;
334
- result?: RunHookResult;
335
- detached: boolean;
336
- }) => void;
337
- sessionContext?: HookSessionContextProvider;
338
- fallbackToSubprocess?: boolean;
339
- }
340
-
341
- export interface PersistentSubprocessHookControl {
342
- hooks: AgentHooks;
343
- shutdown: (ctx: {
344
- agentId: string;
345
- conversationId: string;
346
- parentAgentId: string | null;
347
- reason?: string;
348
- }) => Promise<void>;
349
- client: PersistentHookClient;
350
- }
351
-
352
- const DEFAULT_HOOK_WORKER_COMMAND = ["agent", "hook-worker"];
353
-
354
- function toError(error: unknown): Error {
355
- return error instanceof Error ? error : new Error(String(error));
356
- }
357
-
358
- function toHookControl(value: unknown): AgentHookControl | undefined {
359
- if (!value || typeof value !== "object") {
360
- return undefined;
361
- }
362
- const parsed = HookOutputSchema.safeParse(value);
363
- if (!parsed.success) {
364
- return undefined;
365
- }
366
- const maybe = parsed.data;
367
- const hasControlKey =
368
- "cancel" in maybe ||
369
- "review" in maybe ||
370
- "context" in maybe ||
371
- "contextModification" in maybe ||
372
- "overrideInput" in maybe ||
373
- "errorMessage" in maybe;
374
- if (!hasControlKey) {
375
- return undefined;
376
- }
377
- const contextFromHook =
378
- typeof maybe.context === "string"
379
- ? maybe.context
380
- : typeof maybe.contextModification === "string"
381
- ? maybe.contextModification
382
- : typeof maybe.errorMessage === "string" &&
383
- maybe.errorMessage.length > 0
384
- ? maybe.errorMessage
385
- : undefined;
386
- return {
387
- cancel: typeof maybe.cancel === "boolean" ? maybe.cancel : undefined,
388
- review: typeof maybe.review === "boolean" ? maybe.review : undefined,
389
- context: contextFromHook,
390
- overrideInput: Object.hasOwn(maybe, "overrideInput")
391
- ? maybe.overrideInput
392
- : undefined,
393
- };
394
- }
395
-
396
- function mapParams(input: unknown): Record<string, string> {
397
- if (!input || typeof input !== "object") {
398
- return {};
399
- }
400
- const output: Record<string, string> = {};
401
- for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
402
- if (typeof value === "string") {
403
- output[key] = value;
404
- } else {
405
- output[key] = JSON.stringify(value);
406
- }
407
- }
408
- return output;
409
- }
410
-
411
- function basePayload(
412
- hookName: HookEventName,
413
- ctx: {
414
- agentId: string;
415
- conversationId: string;
416
- parentAgentId: string | null;
417
- },
418
- options: PersistentSubprocessHooksOptions,
419
- ): HookEventPayloadBase {
420
- const env = options.env ?? process.env;
421
- const userId = env.CLINE_USER_ID?.trim() || env.USER?.trim() || "unknown";
422
- const workspaceRoot = options.cwd || process.cwd();
423
- return {
424
- clineVersion: env.CLINE_VERSION?.trim() || "",
425
- hookName,
426
- timestamp: new Date().toISOString(),
427
- taskId: ctx.conversationId,
428
- sessionContext: resolveHookSessionContext(options.sessionContext, {
429
- hookName,
430
- conversationId: ctx.conversationId,
431
- agentId: ctx.agentId,
432
- parentAgentId: ctx.parentAgentId,
433
- }),
434
- workspaceRoots: workspaceRoot ? [workspaceRoot] : [],
435
- userId,
436
- agent_id: ctx.agentId,
437
- parent_agent_id: ctx.parentAgentId,
438
- };
439
- }
440
-
441
- function serializeHookError(error: Error): AgentErrorHookPayload["error"] {
442
- return {
443
- name: error.name,
444
- message: error.message,
445
- stack: error.stack,
446
- };
447
- }
448
-
449
- function isAbortReason(reason?: string): boolean {
450
- const value = String(reason ?? "").toLowerCase();
451
- return (
452
- value.includes("cancel") ||
453
- value.includes("abort") ||
454
- value.includes("interrupt")
455
- );
456
- }
457
-
458
- async function dispatchDetached(
459
- client: PersistentHookClient,
460
- payload: HookEventPayload,
461
- options: PersistentSubprocessHooksOptions,
462
- ): Promise<void> {
463
- try {
464
- const result = await client.send(payload, {
465
- timeoutMs: options.timeoutMs,
466
- });
467
- options.onDispatch?.({ payload, result, detached: true });
468
- } catch (error) {
469
- options.onDispatchError?.(toError(error), payload);
470
- }
471
- }
472
-
473
- export function createPersistentSubprocessHooks(
474
- options: PersistentSubprocessHooksOptions = {},
475
- ): PersistentSubprocessHookControl {
476
- const command = options.command ?? DEFAULT_HOOK_WORKER_COMMAND;
477
- const client = new PersistentHookClient({
478
- command,
479
- cwd: options.cwd,
480
- env: options.env,
481
- onSpawn: options.onSpawn,
482
- });
483
-
484
- const fallbackHooks = options.fallbackToSubprocess
485
- ? createSubprocessHooks(options)
486
- : undefined;
487
-
488
- const onRunStart = async (
489
- ctx: AgentHookRunStartContext,
490
- ): Promise<AgentHookControl | undefined> => {
491
- const isResume =
492
- (options.env ?? process.env).CLINE_HOOK_AGENT_RESUME === "1";
493
- if (isResume) {
494
- const resumePayload: AgentResumeHookPayload = {
495
- ...basePayload("agent_resume", ctx, options),
496
- hookName: "agent_resume",
497
- taskResume: {
498
- taskMetadata: {},
499
- previousState: {},
500
- },
501
- };
502
- await dispatchDetached(client, resumePayload, options);
503
- } else {
504
- const startPayload: AgentStartHookPayload = {
505
- ...basePayload("agent_start", ctx, options),
506
- hookName: "agent_start",
507
- taskStart: { taskMetadata: {} },
508
- };
509
- await dispatchDetached(client, startPayload, options);
510
- }
511
-
512
- const promptPayload: PromptSubmitHookPayload = {
513
- ...basePayload("prompt_submit", ctx, options),
514
- hookName: "prompt_submit",
515
- userPromptSubmit: {
516
- prompt: ctx.userMessage,
517
- attachments: [],
518
- },
519
- };
520
- await dispatchDetached(client, promptPayload, options);
521
- return undefined;
522
- };
523
-
524
- const onToolCallStart = async (
525
- ctx: AgentHookToolCallStartContext,
526
- ): Promise<AgentHookControl | undefined> => {
527
- const payload: ToolCallHookPayload = {
528
- ...basePayload("tool_call", ctx, options),
529
- hookName: "tool_call",
530
- iteration: ctx.iteration,
531
- tool_call: {
532
- id: ctx.call.id,
533
- name: ctx.call.name,
534
- input: ctx.call.input,
535
- },
536
- preToolUse: {
537
- toolName: ctx.call.name,
538
- parameters: mapParams(ctx.call.input),
539
- },
540
- };
541
-
542
- try {
543
- const result = await client.send(payload, {
544
- timeoutMs: options.timeoutMs,
545
- });
546
- options.onDispatch?.({ payload, result, detached: false });
547
- if (result?.timedOut) {
548
- throw new Error("tool_call hook command timed out");
549
- }
550
- if (result?.parseError) {
551
- throw new Error(
552
- `tool_call hook produced invalid control JSON: ${result.parseError}`,
553
- );
554
- }
555
- return toHookControl(result?.parsedJson);
556
- } catch (error) {
557
- options.onDispatchError?.(toError(error), payload);
558
- if (fallbackHooks) {
559
- return await fallbackHooks.hooks.onToolCallStart?.(ctx);
560
- }
561
- return undefined;
562
- }
563
- };
564
-
565
- const onToolCallEnd = async (
566
- ctx: AgentHookToolCallEndContext,
567
- ): Promise<AgentHookControl | undefined> => {
568
- const payload: ToolResultHookPayload = {
569
- ...basePayload("tool_result", ctx, options),
570
- hookName: "tool_result",
571
- iteration: ctx.iteration,
572
- tool_result: ctx.record,
573
- postToolUse: {
574
- toolName: ctx.record.name,
575
- parameters: mapParams(ctx.record.input),
576
- result:
577
- typeof ctx.record.output === "string"
578
- ? ctx.record.output
579
- : JSON.stringify(ctx.record.output),
580
- success: !ctx.record.error,
581
- executionTimeMs: ctx.record.durationMs,
582
- },
583
- };
584
- await dispatchDetached(client, payload, options);
585
- return undefined;
586
- };
587
-
588
- const onTurnEnd = async (
589
- ctx: AgentHookTurnEndContext,
590
- ): Promise<AgentHookControl | undefined> => {
591
- const payload: AgentEndHookPayload = {
592
- ...basePayload("agent_end", ctx, options),
593
- hookName: "agent_end",
594
- iteration: ctx.iteration,
595
- turn: ctx.turn,
596
- taskComplete: { taskMetadata: {} },
597
- };
598
- await dispatchDetached(client, payload, options);
599
- return undefined;
600
- };
601
-
602
- const onStopError = async (
603
- ctx: AgentHookStopErrorContext,
604
- ): Promise<AgentHookControl | undefined> => {
605
- const hookName: HookEventName = isAbortReason(ctx.error.message)
606
- ? "agent_abort"
607
- : "agent_error";
608
- const payload: AgentErrorHookPayload | AgentAbortHookPayload =
609
- hookName === "agent_error"
610
- ? {
611
- ...basePayload(hookName, ctx, options),
612
- hookName,
613
- iteration: ctx.iteration,
614
- error: serializeHookError(ctx.error),
615
- taskCancel: { taskMetadata: {} },
616
- }
617
- : {
618
- ...basePayload(hookName, ctx, options),
619
- hookName,
620
- reason: ctx.error.message,
621
- taskCancel: { taskMetadata: {} },
622
- };
623
- await dispatchDetached(client, payload, options);
624
- return undefined;
625
- };
626
-
627
- const shutdown = async ({
628
- agentId,
629
- conversationId,
630
- parentAgentId,
631
- reason,
632
- }: AgentHookSessionShutdownContext): Promise<void> => {
633
- const payload: SessionShutdownHookPayload = {
634
- ...basePayload(
635
- "session_shutdown",
636
- {
637
- agentId,
638
- conversationId,
639
- parentAgentId,
640
- },
641
- options,
642
- ),
643
- hookName: "session_shutdown",
644
- reason,
645
- };
646
- await dispatchDetached(client, payload, options);
647
- await client.close();
648
- };
649
-
650
- return {
651
- hooks: {
652
- onRunStart,
653
- onToolCallStart,
654
- onToolCallEnd,
655
- onTurnEnd,
656
- onStopError,
657
- },
658
- shutdown,
659
- client,
660
- };
661
- }