@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,665 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import type * as LlmsProviders from "@clinebot/llms";
3
- import { RpcSessionClient } from "@clinebot/rpc";
4
- import {
5
- type AgentEvent,
6
- type AgentResult,
7
- createSessionId,
8
- type RpcChatRunTurnRequest,
9
- type RpcChatStartSessionRequest,
10
- type RpcChatTurnResult,
11
- type TeamProgressLifecycleEvent,
12
- type TeamProgressSummary,
13
- type ToolApprovalRequest,
14
- type ToolApprovalResult,
15
- type ToolPolicy,
16
- } from "@clinebot/shared";
17
- import type { HookEventPayload } from "../hooks";
18
- import type {
19
- RuntimeHost,
20
- SendSessionInput,
21
- SessionAccumulatedUsage,
22
- StartSessionInput,
23
- StartSessionResult,
24
- } from "../runtime/runtime-host";
25
- import { toSessionRecord } from "../services/session-data";
26
- import type { RpcCoreSessionService } from "../session/rpc-session-service";
27
- import type { CoreSessionEvent } from "../types/events";
28
- import type { SessionRecord } from "../types/sessions";
29
- import {
30
- cloneAccumulatedUsage,
31
- RuntimeHostEventBus,
32
- readPersistedMessagesFile,
33
- replaySubagentHookEvent,
34
- } from "./runtime-host-support";
35
-
36
- type ApprovalRequester = (
37
- request: ToolApprovalRequest,
38
- ) => Promise<ToolApprovalResult>;
39
-
40
- const DEFAULT_MANUAL_APPROVAL_POLICY: ToolPolicy = {
41
- enabled: true,
42
- autoApprove: false,
43
- };
44
-
45
- function unsupportedRpcFeature(name: string): Error {
46
- return new Error(
47
- `RPC-backed ClineCore does not support ${name}. Use local backend mode for this session.`,
48
- );
49
- }
50
-
51
- function validateRpcStartInput(input: StartSessionInput): void {
52
- const overrides = input.localRuntime?.configOverrides;
53
- if (
54
- input.localRuntime?.userInstructionWatcher ||
55
- input.localRuntime?.onTeamRestored ||
56
- (overrides != null && Object.keys(overrides).length > 0)
57
- ) {
58
- throw unsupportedRpcFeature("local runtime bootstrap options");
59
- }
60
- }
61
-
62
- function toRpcStartRequest(
63
- input: StartSessionInput,
64
- ): RpcChatStartSessionRequest {
65
- const workspaceRoot =
66
- input.config.workspaceRoot?.trim() || input.config.cwd.trim();
67
- return {
68
- sessionId: input.config.sessionId?.trim() || undefined,
69
- workspaceRoot,
70
- cwd: input.config.cwd,
71
- provider: input.config.providerId,
72
- model: input.config.modelId,
73
- mode: input.config.mode,
74
- apiKey: input.config.apiKey?.trim() || "",
75
- systemPrompt: input.config.systemPrompt,
76
- rules: input.config.rules,
77
- maxIterations: input.config.maxIterations,
78
- enableTools: input.config.enableTools,
79
- enableSpawn: input.config.enableSpawnAgent,
80
- enableTeams: input.config.enableAgentTeams,
81
- disableMcpSettingsTools: input.config.disableMcpSettingsTools,
82
- autoApproveTools: input.toolPolicies?.["*"]?.autoApprove,
83
- teamName: input.config.teamName ?? "",
84
- missionStepInterval: input.config.missionLogIntervalSteps ?? 3,
85
- missionTimeIntervalMs: input.config.missionLogIntervalMs ?? 120_000,
86
- toolPolicies: input.toolPolicies,
87
- initialMessages: input.initialMessages as
88
- | RpcChatStartSessionRequest["initialMessages"]
89
- | undefined,
90
- sessions: undefined,
91
- source: input.source,
92
- interactive: input.interactive === true,
93
- };
94
- }
95
-
96
- async function buildTurnRequest(
97
- config: RpcChatStartSessionRequest,
98
- messages: LlmsProviders.Message[] | undefined,
99
- input: {
100
- prompt: string;
101
- userImages?: string[];
102
- userFiles?: string[];
103
- delivery?: "queue" | "steer";
104
- },
105
- ): Promise<RpcChatRunTurnRequest> {
106
- return {
107
- config,
108
- messages: messages as RpcChatRunTurnRequest["messages"] | undefined,
109
- prompt: input.prompt,
110
- delivery: input.delivery,
111
- attachments:
112
- input.userImages?.length || input.userFiles?.length
113
- ? {
114
- userImages: input.userImages,
115
- userFiles: input.userFiles
116
- ? await Promise.all(
117
- input.userFiles.map(async (path) => ({
118
- name: path.split("/").at(-1) || path,
119
- content: await readFile(path, "utf8"),
120
- })),
121
- )
122
- : undefined,
123
- }
124
- : undefined,
125
- };
126
- }
127
-
128
- function toAgentResult(
129
- result: RpcChatTurnResult,
130
- config: RpcChatStartSessionRequest,
131
- startedAt: Date,
132
- ): AgentResult {
133
- const endedAt = new Date();
134
- return {
135
- text: result.text,
136
- usage: result.usage,
137
- messages: result.messages as LlmsProviders.Message[],
138
- toolCalls: result.toolCalls.map((call) => ({
139
- id: createSessionId(),
140
- name: call.name,
141
- input: call.input,
142
- output: call.output,
143
- error: call.error,
144
- durationMs: call.durationMs ?? 0,
145
- startedAt,
146
- endedAt,
147
- })),
148
- iterations: result.iterations,
149
- finishReason: result.finishReason as AgentResult["finishReason"],
150
- model: {
151
- id: config.model,
152
- provider: config.provider,
153
- },
154
- startedAt,
155
- endedAt,
156
- durationMs: Math.max(0, endedAt.getTime() - startedAt.getTime()),
157
- };
158
- }
159
-
160
- function accumulateUsage(
161
- base: SessionAccumulatedUsage | undefined,
162
- result: RpcChatTurnResult,
163
- ): SessionAccumulatedUsage {
164
- return {
165
- inputTokens: (base?.inputTokens ?? 0) + result.usage.inputTokens,
166
- outputTokens: (base?.outputTokens ?? 0) + result.usage.outputTokens,
167
- cacheReadTokens:
168
- (base?.cacheReadTokens ?? 0) + (result.usage.cacheReadTokens ?? 0),
169
- cacheWriteTokens:
170
- (base?.cacheWriteTokens ?? 0) + (result.usage.cacheWriteTokens ?? 0),
171
- totalCost: (base?.totalCost ?? 0) + (result.usage.totalCost ?? 0),
172
- };
173
- }
174
-
175
- export class RpcRuntimeHost implements RuntimeHost {
176
- public readonly runtimeAddress: string;
177
- private readonly client: RpcSessionClient;
178
- private readonly events = new RuntimeHostEventBus();
179
- private readonly sessionConfigs = new Map<
180
- string,
181
- RpcChatStartSessionRequest
182
- >();
183
- private readonly sessionApprovals = new Map<
184
- string,
185
- ApprovalRequester | undefined
186
- >();
187
- private readonly usageBySession = new Map<string, SessionAccumulatedUsage>();
188
- private readonly trackedSessionIds = new Set<string>();
189
- private stopEventStream?: () => void;
190
-
191
- constructor(
192
- private readonly backend: RpcCoreSessionService,
193
- private readonly defaultToolPolicies?: RpcChatStartSessionRequest["toolPolicies"],
194
- private readonly defaultRequestToolApproval?: ApprovalRequester,
195
- ) {
196
- this.runtimeAddress = backend.address;
197
- this.client = new RpcSessionClient({
198
- address: backend.address,
199
- });
200
- }
201
-
202
- async start(input: StartSessionInput): Promise<StartSessionResult> {
203
- validateRpcStartInput(input);
204
- const config = toRpcStartRequest(input);
205
- if (!config.toolPolicies && this.defaultToolPolicies) {
206
- config.toolPolicies = this.defaultToolPolicies;
207
- }
208
- const response = await this.client.startRuntimeSession(config);
209
- const sessionId = response.sessionId.trim();
210
- if (!sessionId) {
211
- throw new Error("RPC runtime start returned an empty session id");
212
- }
213
- const startResult = response.startResult;
214
- if (!startResult) {
215
- throw new Error("RPC runtime start did not return session artifacts");
216
- }
217
-
218
- this.sessionConfigs.set(sessionId, { ...config, sessionId });
219
- this.sessionApprovals.set(
220
- sessionId,
221
- input.requestToolApproval ?? this.defaultRequestToolApproval,
222
- );
223
- this.usageBySession.set(sessionId, {
224
- inputTokens: 0,
225
- outputTokens: 0,
226
- cacheReadTokens: 0,
227
- cacheWriteTokens: 0,
228
- totalCost: 0,
229
- });
230
- this.trackedSessionIds.add(sessionId);
231
- this.refreshEventStream();
232
- this.emit({
233
- type: "status",
234
- payload: { sessionId, status: "running" },
235
- });
236
-
237
- let result: AgentResult | undefined;
238
- if (input.prompt?.trim()) {
239
- result = await this.send({
240
- sessionId,
241
- prompt: input.prompt,
242
- userImages: input.userImages,
243
- userFiles: input.userFiles,
244
- });
245
- }
246
-
247
- const manifest = this.backend.readSessionManifest(sessionId);
248
- if (!manifest) {
249
- throw new Error(`Session manifest unavailable for ${sessionId}`);
250
- }
251
-
252
- return {
253
- sessionId,
254
- manifest,
255
- manifestPath: startResult.manifestPath,
256
- messagesPath: startResult.messagesPath,
257
- result,
258
- };
259
- }
260
-
261
- async send(input: SendSessionInput): Promise<AgentResult | undefined> {
262
- const config = this.sessionConfigs.get(input.sessionId);
263
- if (!config) {
264
- throw new Error(
265
- `RPC-backed session ${input.sessionId} is not attached to this ClineCore instance`,
266
- );
267
- }
268
- const messages = await this.readMessages(input.sessionId);
269
- const startedAt = new Date();
270
- const response = await this.client.sendRuntimeSession(
271
- input.sessionId,
272
- await buildTurnRequest(config, messages, input),
273
- );
274
- if (!response.result) {
275
- return undefined;
276
- }
277
- const usage = accumulateUsage(
278
- this.usageBySession.get(input.sessionId),
279
- response.result,
280
- );
281
- this.usageBySession.set(input.sessionId, usage);
282
- const result = toAgentResult(response.result, config, startedAt);
283
- await this.syncRemoteSessionState(input.sessionId);
284
- return result;
285
- }
286
-
287
- async getAccumulatedUsage(
288
- sessionId: string,
289
- ): Promise<SessionAccumulatedUsage | undefined> {
290
- return cloneAccumulatedUsage(this.usageBySession.get(sessionId));
291
- }
292
-
293
- async abort(sessionId: string, reason?: unknown): Promise<void> {
294
- void reason;
295
- await this.client.abortRuntimeSession(sessionId);
296
- }
297
-
298
- async stop(sessionId: string): Promise<void> {
299
- await this.client.stopRuntimeSession(sessionId);
300
- this.detachSession(sessionId);
301
- this.emit({
302
- type: "status",
303
- payload: { sessionId, status: "cancelled" },
304
- });
305
- this.emit({
306
- type: "ended",
307
- payload: {
308
- sessionId,
309
- reason: "rpc_stop_requested",
310
- ts: Date.now(),
311
- },
312
- });
313
- }
314
-
315
- async dispose(reason = "rpc_session_host_dispose"): Promise<void> {
316
- const sessionIds = [...this.trackedSessionIds];
317
- await Promise.allSettled(
318
- sessionIds.map(async (sessionId) => {
319
- try {
320
- await this.client.abortRuntimeSession(sessionId);
321
- } catch {
322
- // Best effort before stop.
323
- }
324
- try {
325
- await this.client.stopRuntimeSession(sessionId);
326
- } catch {
327
- // Best effort during dispose.
328
- }
329
- this.emit({
330
- type: "ended",
331
- payload: { sessionId, reason, ts: Date.now() },
332
- });
333
- }),
334
- );
335
- this.stopEventStream?.();
336
- this.stopEventStream = undefined;
337
- this.sessionConfigs.clear();
338
- this.sessionApprovals.clear();
339
- this.usageBySession.clear();
340
- this.trackedSessionIds.clear();
341
- this.client.close();
342
- }
343
-
344
- async get(sessionId: string): Promise<SessionRecord | undefined> {
345
- const row = await this.client.getSession(sessionId);
346
- return row ? toSessionRecord(row) : undefined;
347
- }
348
-
349
- async list(limit = 200): Promise<SessionRecord[]> {
350
- const rows = await this.backend.listSessions(limit);
351
- return rows.map(toSessionRecord);
352
- }
353
-
354
- async delete(sessionId: string): Promise<boolean> {
355
- const result = await this.backend.deleteSession(sessionId);
356
- if (result.deleted) {
357
- this.detachSession(sessionId);
358
- }
359
- return result.deleted;
360
- }
361
-
362
- async update(
363
- sessionId: string,
364
- updates: {
365
- prompt?: string | null;
366
- metadata?: Record<string, unknown> | null;
367
- title?: string | null;
368
- },
369
- ): Promise<{ updated: boolean }> {
370
- const result = await this.backend.updateSession({
371
- sessionId,
372
- prompt: updates.prompt,
373
- metadata: updates.metadata,
374
- title: updates.title,
375
- });
376
- return { updated: result.updated };
377
- }
378
-
379
- async readMessages(sessionId: string): Promise<LlmsProviders.Message[]> {
380
- const row = await this.client.getSession(sessionId);
381
- return readPersistedMessagesFile(row?.messagesPath);
382
- }
383
-
384
- async handleHookEvent(payload: HookEventPayload): Promise<void> {
385
- await replaySubagentHookEvent(payload, {
386
- queueSpawnRequest: (event: HookEventPayload) =>
387
- this.backend.queueSpawnRequest(event),
388
- upsertSubagentSessionFromHook: (event: HookEventPayload) =>
389
- this.backend.upsertSubagentSessionFromHook(event),
390
- appendSubagentHookAudit: (sessionId: string, event: HookEventPayload) =>
391
- this.backend.appendSubagentHookAudit(sessionId, event),
392
- applySubagentStatus: (sessionId: string, event: HookEventPayload) =>
393
- this.backend.applySubagentStatus(sessionId, event),
394
- });
395
- }
396
-
397
- subscribe(listener: (event: CoreSessionEvent) => void): () => void {
398
- const unsubscribe = this.events.subscribe(listener);
399
- this.refreshEventStream();
400
- return () => {
401
- unsubscribe();
402
- if (this.events.size === 0) {
403
- this.stopEventStream?.();
404
- this.stopEventStream = undefined;
405
- }
406
- };
407
- }
408
-
409
- async updateSessionModel(): Promise<void> {
410
- // Model updates for remote sessions are applied per-turn from the stored config.
411
- }
412
-
413
- private emit(event: CoreSessionEvent): void {
414
- this.events.emit(event);
415
- }
416
-
417
- private detachSession(sessionId: string): void {
418
- this.sessionConfigs.delete(sessionId);
419
- this.sessionApprovals.delete(sessionId);
420
- this.usageBySession.delete(sessionId);
421
- this.trackedSessionIds.delete(sessionId);
422
- this.refreshEventStream();
423
- }
424
-
425
- private refreshEventStream(): void {
426
- if (this.events.size === 0) {
427
- return;
428
- }
429
- this.stopEventStream?.();
430
- this.stopEventStream = undefined;
431
- if (this.trackedSessionIds.size === 0) {
432
- return;
433
- }
434
- this.stopEventStream = this.client.streamEvents(
435
- {
436
- clientId: `core-session-host-${createSessionId()}`,
437
- sessionIds: [...this.trackedSessionIds],
438
- },
439
- {
440
- onEvent: (event) => {
441
- void this.handleRpcEvent(event);
442
- },
443
- },
444
- );
445
- }
446
-
447
- private async handleRpcEvent(event: {
448
- sessionId: string;
449
- eventType: string;
450
- payload: Record<string, unknown>;
451
- }): Promise<void> {
452
- if (event.eventType === "approval.requested") {
453
- await this.handleApprovalRequest(event.sessionId, event.payload);
454
- return;
455
- }
456
- const mapped = this.mapRpcEvent(
457
- event.sessionId,
458
- event.eventType,
459
- event.payload,
460
- );
461
- if (mapped) {
462
- this.emit(mapped);
463
- }
464
- }
465
-
466
- private async handleApprovalRequest(
467
- sessionId: string,
468
- payload: Record<string, unknown>,
469
- ): Promise<void> {
470
- const requester = this.sessionApprovals.get(sessionId);
471
- if (!requester) {
472
- return;
473
- }
474
- const approvalId =
475
- typeof payload.approvalId === "string" ? payload.approvalId.trim() : "";
476
- const toolCallId =
477
- typeof payload.toolCallId === "string" ? payload.toolCallId.trim() : "";
478
- const toolName =
479
- typeof payload.toolName === "string" ? payload.toolName.trim() : "";
480
- if (!approvalId || !toolCallId || !toolName) {
481
- return;
482
- }
483
- let inputJson: unknown;
484
- if (typeof payload.inputJson === "string" && payload.inputJson.trim()) {
485
- try {
486
- inputJson = JSON.parse(payload.inputJson);
487
- } catch {
488
- inputJson = payload.inputJson;
489
- }
490
- }
491
- const decision = await requester({
492
- agentId: "",
493
- conversationId: sessionId,
494
- iteration: 0,
495
- toolCallId,
496
- toolName,
497
- input: inputJson,
498
- policy: DEFAULT_MANUAL_APPROVAL_POLICY,
499
- });
500
- await this.client.respondToolApproval({
501
- approvalId,
502
- approved: decision.approved,
503
- reason: decision.reason,
504
- responderClientId: `core-session-host-${sessionId}`,
505
- });
506
- }
507
-
508
- private mapRpcEvent(
509
- sessionId: string,
510
- eventType: string,
511
- payload: Record<string, unknown>,
512
- ): CoreSessionEvent | undefined {
513
- if (eventType === "runtime.chat.text_delta") {
514
- return {
515
- type: "agent_event",
516
- payload: {
517
- sessionId,
518
- event: {
519
- type: "content_start",
520
- contentType: "text",
521
- text: typeof payload.text === "string" ? payload.text : undefined,
522
- accumulated:
523
- typeof payload.accumulated === "string"
524
- ? payload.accumulated
525
- : undefined,
526
- } satisfies AgentEvent,
527
- },
528
- };
529
- }
530
- if (eventType === "runtime.chat.tool_call_start") {
531
- return {
532
- type: "agent_event",
533
- payload: {
534
- sessionId,
535
- event: {
536
- type: "content_start",
537
- contentType: "tool",
538
- toolCallId:
539
- typeof payload.toolCallId === "string"
540
- ? payload.toolCallId
541
- : undefined,
542
- toolName:
543
- typeof payload.toolName === "string"
544
- ? payload.toolName
545
- : undefined,
546
- input: payload.input,
547
- } satisfies AgentEvent,
548
- },
549
- };
550
- }
551
- if (eventType === "runtime.chat.tool_call_end") {
552
- return {
553
- type: "agent_event",
554
- payload: {
555
- sessionId,
556
- event: {
557
- type: "content_end",
558
- contentType: "tool",
559
- toolCallId:
560
- typeof payload.toolCallId === "string"
561
- ? payload.toolCallId
562
- : undefined,
563
- toolName:
564
- typeof payload.toolName === "string"
565
- ? payload.toolName
566
- : undefined,
567
- output: payload.output,
568
- error:
569
- typeof payload.error === "string" ? payload.error : undefined,
570
- durationMs:
571
- typeof payload.durationMs === "number"
572
- ? payload.durationMs
573
- : undefined,
574
- } satisfies AgentEvent,
575
- },
576
- };
577
- }
578
- if (eventType === "runtime.chat.error") {
579
- return {
580
- type: "agent_event",
581
- payload: {
582
- sessionId,
583
- event: {
584
- type: "error",
585
- error: new Error(
586
- typeof payload.message === "string"
587
- ? payload.message
588
- : "RPC runtime error",
589
- ),
590
- recoverable: payload.recoverable === true,
591
- iteration:
592
- typeof payload.iteration === "number" ? payload.iteration : 0,
593
- } satisfies AgentEvent,
594
- },
595
- };
596
- }
597
- if (eventType === "runtime.chat.pending_prompts") {
598
- const prompts = Array.isArray(payload.prompts) ? payload.prompts : [];
599
- return {
600
- type: "pending_prompts",
601
- payload: {
602
- sessionId,
603
- prompts: prompts.map((prompt) => {
604
- const typed = prompt as Record<string, unknown>;
605
- return {
606
- id: typeof typed.id === "string" ? typed.id : "",
607
- prompt: typeof typed.prompt === "string" ? typed.prompt : "",
608
- delivery: typed.delivery === "steer" ? "steer" : "queue",
609
- attachmentCount:
610
- typeof typed.attachmentCount === "number"
611
- ? typed.attachmentCount
612
- : 0,
613
- };
614
- }),
615
- },
616
- };
617
- }
618
- if (eventType === "runtime.team.progress.v1") {
619
- const summary =
620
- typeof payload.summary === "object" && payload.summary
621
- ? payload.summary
622
- : undefined;
623
- const lifecycle =
624
- typeof payload.lastEvent === "object" && payload.lastEvent
625
- ? payload.lastEvent
626
- : undefined;
627
- if (!summary || !lifecycle) {
628
- return undefined;
629
- }
630
- const typedSummary = summary as {
631
- teamName?: string;
632
- } & TeamProgressSummary;
633
- return {
634
- type: "team_progress",
635
- payload: {
636
- sessionId,
637
- teamName: typedSummary.teamName ?? "",
638
- summary: summary as TeamProgressSummary,
639
- lifecycle: lifecycle as TeamProgressLifecycleEvent,
640
- },
641
- };
642
- }
643
- return undefined;
644
- }
645
-
646
- private async syncRemoteSessionState(sessionId: string): Promise<void> {
647
- const row = await this.client.getSession(sessionId);
648
- if (!row || row.status === "running") {
649
- return;
650
- }
651
- this.emit({
652
- type: "status",
653
- payload: { sessionId, status: row.status },
654
- });
655
- this.emit({
656
- type: "ended",
657
- payload: {
658
- sessionId,
659
- reason: row.status,
660
- ts: row.endedAt ? new Date(row.endedAt).getTime() : Date.now(),
661
- },
662
- });
663
- this.detachSession(sessionId);
664
- }
665
- }