@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
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Build an `AgentRuntimeConfig` from an `AgentConfig` plus session-owned
3
+ * supporting objects (model handler, tools, hooks, plugins, telemetry).
4
+ *
5
+ * @see PLAN.md §3.1 — new file introduced alongside the core runtime port.
6
+ * @see PLAN.md §3.2.1 — field-by-field mapping.
7
+ *
8
+ * Implemented in Step 8c. The function is intentionally **pure** — it
9
+ * does not create handlers or tools itself; it receives them already
10
+ * adapted (via `agent-config-adapter.ts`) from the caller
11
+ * (`SessionRuntime`) and wires them into an `AgentRuntimeConfig`.
12
+ *
13
+ * Fields that do **not** round-trip into `AgentRuntimeConfig`
14
+ * (e.g. `execution.maxConsecutiveMistakes`,
15
+ * `execution.loopDetection`, `hookPolicies`) are
16
+ * consumed by `SessionRuntime` / `MistakeTracker` /
17
+ * `LoopDetectionTracker` — not passed through here. See §3.2.1's
18
+ * "Fields with no corresponding AgentRuntimeConfig slot" note.
19
+ */
20
+
21
+ import type {
22
+ AgentConfig,
23
+ AgentMessage,
24
+ AgentModel,
25
+ AgentRuntimeConfig,
26
+ AgentRuntimePlugin,
27
+ AgentTelemetry,
28
+ AgentTool,
29
+ BasicLogger,
30
+ } from "@clinebot/shared";
31
+ import type { HookBridge } from "../hooks/hook-bridge";
32
+
33
+ /**
34
+ * Inputs required to assemble an `AgentRuntimeConfig`. Distinct from
35
+ * `AgentConfig` because some of these (the model adapter, the hook
36
+ * bridge's runtime-hooks bag, a resolved plugin list) can only be
37
+ * produced inside `SessionRuntime`.
38
+ */
39
+ export interface CreateAgentRuntimeConfigInput {
40
+ readonly agentConfig: AgentConfig;
41
+ /**
42
+ * Core/hub runtime session identifier used for host lifecycle operations,
43
+ * event routing, persistence, and approval delivery.
44
+ */
45
+ readonly sessionId?: string;
46
+ readonly agentId: string;
47
+ /**
48
+ * Agent conversation/transcript identifier used by tools, hooks, telemetry,
49
+ * and model history correlation.
50
+ */
51
+ readonly conversationId?: string;
52
+ readonly parentAgentId?: string;
53
+ /** The role label for teammates (`AgentConfig.role` in sub-agent configs). */
54
+ readonly agentRole?: string;
55
+ /** Pre-built model adapter (produced by `apiHandlerToAgentModel`). */
56
+ readonly model: AgentModel;
57
+ readonly logger?: BasicLogger;
58
+ readonly telemetry?: AgentTelemetry;
59
+ /** Pre-built tool array (builtins + plugin-contributed + session extras). */
60
+ readonly tools?: readonly AgentTool<unknown, unknown>[];
61
+ /** Pre-resolved plugin list from the plugin loader. */
62
+ readonly plugins?: readonly AgentRuntimePlugin[];
63
+ /**
64
+ * Optional hook bridge. When provided, `AgentRuntimeConfig.hooks`
65
+ * is populated from `hookBridge.toRuntimeHooks()`. Omit for
66
+ * runtimes that do not need hook dispatch (e.g. unit tests).
67
+ */
68
+ readonly hookBridge?: HookBridge;
69
+ /** Seed messages (usually `session.conversation.getMessages()`). */
70
+ readonly initialMessages?: readonly AgentMessage[];
71
+ /**
72
+ * Override for `AgentRuntimeConfig.systemPrompt` — useful when
73
+ * the caller has composed additional guidance (e.g. via
74
+ * `LocalRuntimeHost.composeSystemPrompt`). Defaults to
75
+ * `agentConfig.systemPrompt`.
76
+ */
77
+ readonly systemPrompt?: string;
78
+ }
79
+
80
+ /**
81
+ * Produce an `AgentRuntimeConfig` per PLAN.md §3.2.1 mapping.
82
+ */
83
+ export function createAgentRuntimeConfig(
84
+ input: CreateAgentRuntimeConfigInput,
85
+ ): AgentRuntimeConfig {
86
+ const { agentConfig } = input;
87
+
88
+ const modelOptions = buildModelOptions(agentConfig);
89
+ const messageModelInfo = buildMessageModelInfo(agentConfig);
90
+ const hooks = input.hookBridge?.toRuntimeHooks();
91
+ const toolExecution = resolveToolExecution(agentConfig.maxParallelToolCalls);
92
+
93
+ const config: AgentRuntimeConfig = {
94
+ sessionId: input.sessionId ?? agentConfig.sessionId,
95
+ agentId: input.agentId,
96
+ conversationId: input.conversationId,
97
+ agentRole: input.agentRole,
98
+ systemPrompt: input.systemPrompt ?? agentConfig.systemPrompt,
99
+ messageModelInfo,
100
+ model: input.model,
101
+ modelOptions,
102
+ tools: input.tools,
103
+ hooks,
104
+ plugins: input.plugins,
105
+ logger: input.logger ?? agentConfig.logger,
106
+ telemetry: input.telemetry ?? mapTelemetry(agentConfig.telemetry),
107
+ initialMessages: input.initialMessages,
108
+ maxIterations: agentConfig.maxIterations,
109
+ toolExecution,
110
+ toolPolicies: agentConfig.toolPolicies,
111
+ requestToolApproval: agentConfig.requestToolApproval,
112
+ };
113
+
114
+ return config;
115
+ }
116
+
117
+ // =============================================================================
118
+ // Helpers
119
+ // =============================================================================
120
+
121
+ /**
122
+ * Collect the provider-/reasoning-related fields from `AgentConfig`
123
+ * into `AgentRuntimeConfig.modelOptions`. Kept undefined when every
124
+ * field is undefined so the runtime does not receive an empty object.
125
+ */
126
+ export function buildModelOptions(
127
+ config: AgentConfig,
128
+ ): Record<string, unknown> | undefined {
129
+ const options: Record<string, unknown> = {};
130
+ if (config.thinking !== undefined) {
131
+ options.thinking = config.thinking;
132
+ }
133
+ if (config.reasoningEffort !== undefined) {
134
+ options.reasoningEffort = config.reasoningEffort;
135
+ }
136
+ if (config.thinkingBudgetTokens !== undefined) {
137
+ options.thinkingBudgetTokens = config.thinkingBudgetTokens;
138
+ }
139
+ if (config.maxTokensPerTurn !== undefined) {
140
+ options.maxTokensPerTurn = config.maxTokensPerTurn;
141
+ }
142
+ if (config.apiTimeoutMs !== undefined) {
143
+ options.apiTimeoutMs = config.apiTimeoutMs;
144
+ }
145
+ return Object.keys(options).length > 0 ? options : undefined;
146
+ }
147
+
148
+ /**
149
+ * Compose `messageModelInfo` from the provider-related fields per
150
+ * §3.2.1: `{ id: modelId, provider: providerId, family:
151
+ * providerConfig?.family }`.
152
+ */
153
+ export function buildMessageModelInfo(
154
+ config: AgentConfig,
155
+ ): AgentMessage["modelInfo"] {
156
+ const family = (config.providerConfig as { family?: string } | undefined)
157
+ ?.family;
158
+ return {
159
+ id: config.modelId,
160
+ provider: config.providerId,
161
+ family,
162
+ };
163
+ }
164
+
165
+ /**
166
+ * `"parallel"` when `maxParallelToolCalls ≥ 2`, `"sequential"` when
167
+ * `1`, `undefined` when the caller did not specify.
168
+ */
169
+ export function resolveToolExecution(
170
+ maxParallelToolCalls: number | undefined,
171
+ ): "sequential" | "parallel" | undefined {
172
+ if (maxParallelToolCalls === undefined) {
173
+ return undefined;
174
+ }
175
+ return maxParallelToolCalls >= 2 ? "parallel" : "sequential";
176
+ }
177
+
178
+ /**
179
+ * Adapt the full `ITelemetryService` to the minimal `AgentTelemetry`
180
+ * shape. The runtime only calls `capture(event, properties)`; the
181
+ * remaining methods are host concerns and stay on the
182
+ * `ITelemetryService` instance owned by `SessionRuntime`.
183
+ */
184
+ export function mapTelemetry(
185
+ telemetry: AgentConfig["telemetry"],
186
+ ): AgentTelemetry | undefined {
187
+ if (!telemetry) {
188
+ return undefined;
189
+ }
190
+ return {
191
+ capture: (event, properties) => {
192
+ // The runtime's `AgentTelemetry.capture` signature uses
193
+ // `Record<string, unknown>`, which is wider than
194
+ // `TelemetryProperties`. We cast at the boundary — any
195
+ // non-telemetry-compatible values are ignored by the
196
+ // underlying service.
197
+ telemetry.capture({
198
+ event,
199
+ properties: properties as
200
+ | Parameters<typeof telemetry.capture>[0]["properties"]
201
+ | undefined,
202
+ });
203
+ },
204
+ };
205
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Pure error-classification and tool-call-feedback helpers.
3
+ *
4
+ * @see PLAN.md §3.1 — moved from `packages/agents/src/api/error-handling.ts` lines 20–145.
5
+ *
6
+ * Consumed by `SessionRuntime` (and `MistakeTracker`) when composing
7
+ * follow-up turns after API failures or invalid tool calls.
8
+ */
9
+
10
+ import type * as LlmsProviders from "@clinebot/llms";
11
+ import type { ToolCallRecord } from "@clinebot/shared";
12
+
13
+ // =============================================================================
14
+ // API Error Classification
15
+ // =============================================================================
16
+
17
+ const NON_RECOVERABLE_STATUS_CODES = [
18
+ 400, 401, 402, 403, 404, 405, 406, 409, 410, 429,
19
+ ];
20
+
21
+ const NON_RECOVERABLE_PHRASES = [
22
+ "not found",
23
+ "unsupported for",
24
+ "missing api key",
25
+ "invalid api key",
26
+ "authentication",
27
+ "unauthorized",
28
+ "forbidden",
29
+ "overloaded",
30
+ "insufficient balance",
31
+ ];
32
+
33
+ export function isNonRecoverableApiError(error: Error): boolean {
34
+ const message = error.message.toLowerCase();
35
+
36
+ if (
37
+ NON_RECOVERABLE_STATUS_CODES.some((code) =>
38
+ new RegExp(`(?:\\b|\\"code\\"\\s*:\\s*)${code}(?:\\b|\\s)`).test(message),
39
+ )
40
+ ) {
41
+ return true;
42
+ }
43
+
44
+ if (NON_RECOVERABLE_PHRASES.some((s) => message.includes(s))) {
45
+ return true;
46
+ }
47
+
48
+ return false;
49
+ }
50
+
51
+ // =============================================================================
52
+ // Invalid Tool Call Feedback
53
+ // =============================================================================
54
+
55
+ export interface InvalidToolCall {
56
+ id: string;
57
+ name?: string;
58
+ input?: unknown;
59
+ reason: "missing_name" | "missing_arguments" | "invalid_arguments";
60
+ }
61
+
62
+ function extractParseError(input: unknown): string | undefined {
63
+ if (
64
+ input &&
65
+ typeof input === "object" &&
66
+ !Array.isArray(input) &&
67
+ typeof (input as { parse_error?: unknown }).parse_error === "string"
68
+ ) {
69
+ return (input as { parse_error: string }).parse_error;
70
+ }
71
+ return undefined;
72
+ }
73
+
74
+ export function buildInvalidToolCallFeedback(
75
+ invalidToolCalls: readonly InvalidToolCall[],
76
+ ): string {
77
+ const details = invalidToolCalls
78
+ .map((call) => {
79
+ const name = call.name?.trim() || "(unknown tool)";
80
+ const parseError = extractParseError(call.input);
81
+ const reason =
82
+ call.reason === "missing_name"
83
+ ? "missing tool name"
84
+ : call.reason === "missing_arguments"
85
+ ? "missing arguments"
86
+ : (parseError ?? "arguments could not be parsed as JSON");
87
+ return `${name} [${call.id}]: ${reason}`;
88
+ })
89
+ .join("; ");
90
+ return `One or more tool calls were invalid or missing required parameters (${details}). Retry with valid tool names and arguments.`;
91
+ }
92
+
93
+ export function buildInvalidToolResultMessage(
94
+ invalidToolCalls: readonly InvalidToolCall[],
95
+ ): LlmsProviders.Message {
96
+ return {
97
+ role: "user",
98
+ content: invalidToolCalls.map((call) => ({
99
+ type: "tool_result" as const,
100
+ tool_use_id: call.id,
101
+ content: JSON.stringify({
102
+ toolName: call.name?.trim() || "(unknown tool)",
103
+ query: call.input ?? {},
104
+ result: "",
105
+ error:
106
+ call.reason === "missing_name"
107
+ ? "Tool call was missing a tool name"
108
+ : call.reason === "missing_arguments"
109
+ ? "Tool call was missing required arguments"
110
+ : (extractParseError(call.input) ??
111
+ "Tool call arguments could not be parsed as JSON"),
112
+ success: false,
113
+ }),
114
+ is_error: true,
115
+ })),
116
+ };
117
+ }
118
+
119
+ // =============================================================================
120
+ // Failed Tool Call Feedback
121
+ // =============================================================================
122
+
123
+ export function buildFailedToolCallFeedback(
124
+ toolResults: readonly ToolCallRecord[],
125
+ ): string {
126
+ const failed = toolResults.filter((record) => !!record.error);
127
+ if (failed.length === 0) {
128
+ return "";
129
+ }
130
+ const details = failed
131
+ .slice(0, 3)
132
+ .map((record) => {
133
+ const message = String(record.error ?? "unknown tool error")
134
+ .replace(/\s+/g, " ")
135
+ .trim();
136
+ return `${record.name}: ${message}`;
137
+ })
138
+ .join("; ");
139
+ return failed.length > 3
140
+ ? `${details}; +${failed.length - 3} more failed tool call(s)`
141
+ : details;
142
+ }
@@ -1,5 +1,10 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
1
3
  import type * as LlmsProviders from "@clinebot/llms";
2
4
  import { formatDisplayUserInput, normalizeUserInput } from "@clinebot/shared";
5
+ import { resolveSessionDataDir } from "@clinebot/shared/storage";
6
+ import type { SessionManifest } from "../session/session-manifest";
7
+ import { SessionManifestSchema } from "../session/session-manifest";
3
8
  import type {
4
9
  SessionHistoryMetadata,
5
10
  SessionHistoryRecord,
@@ -7,6 +12,12 @@ import type {
7
12
  } from "../types/sessions";
8
13
  import type { RuntimeHost } from "./runtime-host";
9
14
 
15
+ export interface SessionHistoryListOptions {
16
+ limit?: number;
17
+ includeManifestFallback?: boolean;
18
+ hydrate?: boolean;
19
+ }
20
+
10
21
  type StoredSessionMessage = LlmsProviders.Message & {
11
22
  metrics?: {
12
23
  cost?: number;
@@ -51,6 +62,103 @@ function asHistoryMetadata(value: unknown): SessionHistoryMetadata | undefined {
51
62
  return { ...(value as Record<string, unknown>) };
52
63
  }
53
64
 
65
+ function normalizeHistoryLimit(limit: number | undefined): number {
66
+ const value = limit ?? 200;
67
+ return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 200;
68
+ }
69
+
70
+ function extractSessionRecencyToken(sessionId: string): number {
71
+ const matches = sessionId.match(/\d{13,}/g);
72
+ if (!matches || matches.length === 0) {
73
+ return 0;
74
+ }
75
+ let best = 0;
76
+ for (const match of matches) {
77
+ const value = Number.parseInt(match, 10);
78
+ if (Number.isFinite(value) && value > best) {
79
+ best = value;
80
+ }
81
+ }
82
+ return best;
83
+ }
84
+
85
+ function manifestToSessionRecord(manifest: SessionManifest): SessionRecord {
86
+ return {
87
+ sessionId: manifest.session_id,
88
+ source: manifest.source,
89
+ pid: manifest.pid,
90
+ startedAt: manifest.started_at,
91
+ endedAt: manifest.ended_at ?? null,
92
+ exitCode: manifest.exit_code ?? null,
93
+ status: manifest.status,
94
+ interactive: manifest.interactive,
95
+ provider: manifest.provider,
96
+ model: manifest.model,
97
+ cwd: manifest.cwd,
98
+ workspaceRoot: manifest.workspace_root,
99
+ teamName: manifest.team_name,
100
+ enableTools: manifest.enable_tools,
101
+ enableSpawn: manifest.enable_spawn,
102
+ enableTeams: manifest.enable_teams,
103
+ isSubagent: false,
104
+ prompt: manifest.prompt,
105
+ metadata: manifest.metadata,
106
+ messagesPath: manifest.messages_path,
107
+ updatedAt: manifest.ended_at ?? manifest.started_at,
108
+ };
109
+ }
110
+
111
+ async function listManifestHistoryRows(
112
+ limit: number,
113
+ ): Promise<SessionRecord[]> {
114
+ const requestedLimit = normalizeHistoryLimit(limit);
115
+ const sessionsDir = resolveSessionDataDir();
116
+ const entries = await readdir(sessionsDir, { withFileTypes: true }).catch(
117
+ () => [],
118
+ );
119
+ const candidateEntries = entries
120
+ .filter((entry) => entry.isDirectory())
121
+ .map((entry) => ({
122
+ entry,
123
+ recency: extractSessionRecencyToken(entry.name.trim()),
124
+ }))
125
+ .sort(
126
+ (left, right) =>
127
+ right.recency - left.recency ||
128
+ right.entry.name.localeCompare(left.entry.name),
129
+ )
130
+ .slice(0, requestedLimit);
131
+ const rows = await Promise.all(
132
+ candidateEntries.map(async ({ entry }) => {
133
+ const sessionId = entry.name.trim();
134
+ if (!sessionId) {
135
+ return undefined;
136
+ }
137
+ const manifestPath = join(sessionsDir, sessionId, `${sessionId}.json`);
138
+ const raw = await readFile(manifestPath, "utf8").catch(() => undefined);
139
+ if (!raw) {
140
+ return undefined;
141
+ }
142
+ let parsedJson: unknown;
143
+ try {
144
+ parsedJson = JSON.parse(raw) as unknown;
145
+ } catch {
146
+ return undefined;
147
+ }
148
+ const parsedManifest = SessionManifestSchema.safeParse(parsedJson);
149
+ if (!parsedManifest.success) {
150
+ return undefined;
151
+ }
152
+ return manifestToSessionRecord(parsedManifest.data);
153
+ }),
154
+ );
155
+
156
+ return rows
157
+ .filter((row): row is SessionRecord => Boolean(row))
158
+ .sort((left, right) => right.startedAt.localeCompare(left.startedAt))
159
+ .slice(0, requestedLimit);
160
+ }
161
+
54
162
  function extractTextFromContent(
55
163
  content: LlmsProviders.Message["content"],
56
164
  ): string {
@@ -235,3 +343,32 @@ export async function hydrateSessionHistory(
235
343
  }),
236
344
  );
237
345
  }
346
+
347
+ export async function listSessionHistory(
348
+ host: Pick<RuntimeHost, "list" | "readMessages">,
349
+ options: SessionHistoryListOptions = {},
350
+ ): Promise<SessionHistoryRecord[]> {
351
+ const limit = normalizeHistoryLimit(options.limit);
352
+ const backendRows = (await host.list(limit)).slice(0, limit);
353
+ const manifestRows =
354
+ options.includeManifestFallback === true && backendRows.length < limit
355
+ ? await listManifestHistoryRows(Math.min(Math.max(limit * 2, 100), 500))
356
+ : [];
357
+ const merged = new Map<string, SessionRecord>();
358
+ for (const row of [...backendRows, ...manifestRows]) {
359
+ if (merged.has(row.sessionId)) {
360
+ continue;
361
+ }
362
+ merged.set(row.sessionId, row);
363
+ }
364
+ const rows =
365
+ manifestRows.length === 0
366
+ ? backendRows
367
+ : Array.from(merged.values())
368
+ .sort((left, right) => right.startedAt.localeCompare(left.startedAt))
369
+ .slice(0, limit);
370
+ if (options.hydrate === false) {
371
+ return rows.map((row) => normalizeHistoryRow(row));
372
+ }
373
+ return await hydrateSessionHistory(host, rows);
374
+ }