@clinebot/core 0.0.34 → 0.0.36

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 (546) hide show
  1. package/README.md +13 -10
  2. package/dist/ClineCore.d.ts +96 -63
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/index.d.ts +1 -1
  5. package/dist/account/index.d.ts.map +1 -1
  6. package/dist/account/rpc.d.ts +6 -6
  7. package/dist/account/rpc.d.ts.map +1 -1
  8. package/dist/cron/index.d.ts +6 -0
  9. package/dist/cron/index.d.ts.map +1 -0
  10. package/dist/cron/resource-limiter.d.ts +9 -0
  11. package/dist/cron/resource-limiter.d.ts.map +1 -0
  12. package/dist/cron/schedule-command-service.d.ts +10 -0
  13. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  14. package/dist/cron/schedule-service.d.ts +100 -0
  15. package/dist/cron/schedule-service.d.ts.map +1 -0
  16. package/dist/cron/scheduler.d.ts +66 -0
  17. package/dist/cron/scheduler.d.ts.map +1 -0
  18. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  19. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  20. package/dist/extensions/config/agent-config-loader.d.ts +6 -5
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/agent-config-parser.d.ts +1 -1
  23. package/dist/extensions/config/agent-config-parser.d.ts.map +1 -1
  24. package/dist/extensions/config/hooks-config-loader.d.ts +2 -2
  25. package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/config/index.d.ts +3 -3
  27. package/dist/extensions/config/index.d.ts.map +1 -1
  28. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  29. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  30. package/dist/extensions/config/user-instruction-config-loader.d.ts +3 -2
  31. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  32. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  33. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  34. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  35. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  36. package/dist/extensions/context/compaction.d.ts.map +1 -1
  37. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  38. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  39. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  40. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  41. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  42. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  43. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  44. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  45. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  46. package/dist/extensions/plugin-sandbox-bootstrap.js +253 -253
  47. package/dist/extensions/tools/constants.d.ts.map +1 -0
  48. package/dist/{tools → extensions/tools}/definitions.d.ts +1 -1
  49. package/dist/extensions/tools/definitions.d.ts.map +1 -0
  50. package/dist/extensions/tools/executors/apply-patch-parser.d.ts.map +1 -0
  51. package/dist/{tools → extensions/tools}/executors/apply-patch.d.ts +3 -1
  52. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -0
  53. package/dist/extensions/tools/executors/bash.d.ts.map +1 -0
  54. package/dist/extensions/tools/executors/editor.d.ts.map +1 -0
  55. package/dist/extensions/tools/executors/file-read.d.ts.map +1 -0
  56. package/dist/extensions/tools/executors/index.d.ts.map +1 -0
  57. package/dist/{tools → extensions/tools}/executors/search.d.ts +1 -1
  58. package/dist/extensions/tools/executors/search.d.ts.map +1 -0
  59. package/dist/extensions/tools/executors/web-fetch.d.ts.map +1 -0
  60. package/dist/extensions/tools/helpers.d.ts.map +1 -0
  61. package/dist/{tools → extensions/tools}/index.d.ts +2 -0
  62. package/dist/extensions/tools/index.d.ts.map +1 -0
  63. package/dist/{tools → extensions/tools}/model-tool-routing.d.ts +1 -1
  64. package/dist/extensions/tools/model-tool-routing.d.ts.map +1 -0
  65. package/dist/{tools → extensions/tools}/presets.d.ts +26 -44
  66. package/dist/extensions/tools/presets.d.ts.map +1 -0
  67. package/dist/extensions/tools/runtime.d.ts +25 -0
  68. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  69. package/dist/extensions/tools/schemas.d.ts.map +1 -0
  70. package/dist/extensions/tools/team/delegated-agent.d.ts.map +1 -0
  71. package/dist/extensions/tools/team/index.d.ts.map +1 -0
  72. package/dist/{team → extensions/tools/team}/multi-agent.d.ts +1 -3
  73. package/dist/extensions/tools/team/multi-agent.d.ts.map +1 -0
  74. package/dist/extensions/tools/team/projections.d.ts.map +1 -0
  75. package/dist/extensions/tools/team/runtime.d.ts.map +1 -0
  76. package/dist/{team → extensions/tools/team}/spawn-agent-tool.d.ts +0 -1
  77. package/dist/extensions/tools/team/spawn-agent-tool.d.ts.map +1 -0
  78. package/dist/extensions/tools/team/subagent-prompts.d.ts.map +1 -0
  79. package/dist/{team → extensions/tools/team}/team-tools.d.ts +1 -0
  80. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -0
  81. package/dist/{tools → extensions/tools}/types.d.ts +4 -3
  82. package/dist/extensions/tools/types.d.ts.map +1 -0
  83. package/dist/{runtime → hooks}/checkpoint-hooks.d.ts +7 -0
  84. package/dist/hooks/checkpoint-hooks.d.ts.map +1 -0
  85. package/dist/{runtime → hooks}/hook-file-hooks.d.ts +4 -3
  86. package/dist/hooks/hook-file-hooks.d.ts.map +1 -0
  87. package/dist/hooks/index.d.ts +0 -1
  88. package/dist/hooks/index.d.ts.map +1 -1
  89. package/dist/hooks/subprocess.d.ts +10 -130
  90. package/dist/hooks/subprocess.d.ts.map +1 -1
  91. package/dist/hub/browser-websocket.d.ts +18 -0
  92. package/dist/hub/browser-websocket.d.ts.map +1 -0
  93. package/dist/hub/client.d.ts +45 -0
  94. package/dist/hub/client.d.ts.map +1 -0
  95. package/dist/hub/connect.d.ts +15 -0
  96. package/dist/hub/connect.d.ts.map +1 -0
  97. package/dist/hub/daemon-entry.d.ts +2 -0
  98. package/dist/hub/daemon-entry.d.ts.map +1 -0
  99. package/dist/hub/daemon-entry.js +1045 -0
  100. package/dist/hub/daemon.d.ts +5 -0
  101. package/dist/hub/daemon.d.ts.map +1 -0
  102. package/dist/hub/defaults.d.ts +13 -0
  103. package/dist/hub/defaults.d.ts.map +1 -0
  104. package/dist/hub/discovery.d.ts +29 -0
  105. package/dist/hub/discovery.d.ts.map +1 -0
  106. package/dist/hub/index.d.ts +15 -0
  107. package/dist/hub/index.d.ts.map +1 -0
  108. package/dist/hub/index.js +1044 -0
  109. package/dist/hub/native-transport.d.ts +17 -0
  110. package/dist/hub/native-transport.d.ts.map +1 -0
  111. package/dist/hub/runtime-handlers.d.ts +11 -0
  112. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  113. package/dist/hub/server.d.ts +86 -0
  114. package/dist/hub/server.d.ts.map +1 -0
  115. package/dist/hub/session-client.d.ts +87 -0
  116. package/dist/hub/session-client.d.ts.map +1 -0
  117. package/dist/hub/start-shared-server.d.ts +19 -0
  118. package/dist/hub/start-shared-server.d.ts.map +1 -0
  119. package/dist/hub/transport.d.ts +8 -0
  120. package/dist/hub/transport.d.ts.map +1 -0
  121. package/dist/hub/ui-client.d.ts +44 -0
  122. package/dist/hub/ui-client.d.ts.map +1 -0
  123. package/dist/hub/workspace.d.ts +4 -0
  124. package/dist/hub/workspace.d.ts.map +1 -0
  125. package/dist/index.d.ts +52 -39
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +557 -533
  128. package/dist/llms/configured-provider-registry.d.ts +28 -0
  129. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  130. package/dist/llms/provider-defaults.d.ts +27 -0
  131. package/dist/llms/provider-defaults.d.ts.map +1 -0
  132. package/dist/llms/provider-settings.d.ts +202 -0
  133. package/dist/llms/provider-settings.d.ts.map +1 -0
  134. package/dist/llms/runtime-config.d.ts +4 -0
  135. package/dist/llms/runtime-config.d.ts.map +1 -0
  136. package/dist/llms/runtime-registry.d.ts +20 -0
  137. package/dist/llms/runtime-registry.d.ts.map +1 -0
  138. package/dist/llms/runtime-types.d.ts +85 -0
  139. package/dist/llms/runtime-types.d.ts.map +1 -0
  140. package/dist/runtime/history.d.ts +4 -0
  141. package/dist/runtime/history.d.ts.map +1 -0
  142. package/dist/runtime/host.d.ts +8 -0
  143. package/dist/runtime/host.d.ts.map +1 -0
  144. package/dist/runtime/rules.d.ts +1 -0
  145. package/dist/runtime/rules.d.ts.map +1 -1
  146. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  147. package/dist/runtime/runtime-host.d.ts +103 -0
  148. package/dist/runtime/runtime-host.d.ts.map +1 -0
  149. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts +1 -1
  150. package/dist/{session → runtime}/runtime-oauth-token-manager.d.ts.map +1 -1
  151. package/dist/runtime/session-runtime.d.ts +3 -21
  152. package/dist/runtime/session-runtime.d.ts.map +1 -1
  153. package/dist/{session/session-agent-events.d.ts → services/agent-events.d.ts} +4 -4
  154. package/dist/services/agent-events.d.ts.map +1 -0
  155. package/dist/services/config.d.ts +3 -0
  156. package/dist/services/config.d.ts.map +1 -0
  157. package/dist/services/global-settings.d.ts +12 -0
  158. package/dist/services/global-settings.d.ts.map +1 -0
  159. package/dist/services/local-runtime-bootstrap.d.ts +47 -0
  160. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -0
  161. package/dist/services/plugin-tools.d.ts +16 -0
  162. package/dist/services/plugin-tools.d.ts.map +1 -0
  163. package/dist/{providers → services/providers}/local-provider-registry.d.ts +4 -4
  164. package/dist/services/providers/local-provider-registry.d.ts.map +1 -0
  165. package/dist/{providers → services/providers}/local-provider-service.d.ts +13 -13
  166. package/dist/services/providers/local-provider-service.d.ts.map +1 -0
  167. package/dist/{session → services}/session-artifacts.d.ts +0 -4
  168. package/dist/services/session-artifacts.d.ts.map +1 -0
  169. package/dist/{session/utils/helpers.d.ts → services/session-data.d.ts} +19 -27
  170. package/dist/services/session-data.d.ts.map +1 -0
  171. package/dist/{session → services}/session-telemetry.d.ts +2 -2
  172. package/dist/services/session-telemetry.d.ts.map +1 -0
  173. package/dist/{storage → services/storage}/file-team-store.d.ts +2 -2
  174. package/dist/services/storage/file-team-store.d.ts.map +1 -0
  175. package/dist/{storage → services/storage}/provider-settings-legacy-migration.d.ts +1 -1
  176. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  177. package/dist/{storage → services/storage}/provider-settings-manager.d.ts +1 -1
  178. package/dist/services/storage/provider-settings-manager.d.ts.map +1 -0
  179. package/dist/{storage → services/storage}/sqlite-session-store.d.ts +3 -3
  180. package/dist/services/storage/sqlite-session-store.d.ts.map +1 -0
  181. package/dist/{storage → services/storage}/sqlite-team-store.d.ts +2 -2
  182. package/dist/services/storage/sqlite-team-store.d.ts.map +1 -0
  183. package/dist/{storage → services/storage}/team-store.d.ts +1 -1
  184. package/dist/services/storage/team-store.d.ts.map +1 -0
  185. package/dist/services/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  186. package/dist/services/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  187. package/dist/services/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  188. package/dist/services/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
  189. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  190. package/dist/services/telemetry/core-events.d.ts.map +1 -0
  191. package/dist/services/telemetry/distinct-id.d.ts.map +1 -0
  192. package/dist/services/telemetry/index.d.ts.map +1 -0
  193. package/dist/services/telemetry/index.js +28 -0
  194. package/dist/{session/utils → services}/usage.d.ts +1 -1
  195. package/dist/services/usage.d.ts.map +1 -0
  196. package/dist/services/workspace/file-indexer.d.ts.map +1 -0
  197. package/dist/services/workspace/index.d.ts.map +1 -0
  198. package/dist/services/workspace/mention-enricher.d.ts.map +1 -0
  199. package/dist/services/workspace-manifest.d.ts +16 -0
  200. package/dist/services/workspace-manifest.d.ts.map +1 -0
  201. package/dist/session/file-session-service.d.ts +4 -1
  202. package/dist/session/file-session-service.d.ts.map +1 -1
  203. package/dist/session/persistence-service.d.ts +15 -25
  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-row.d.ts +93 -0
  208. package/dist/session/session-row.d.ts.map +1 -0
  209. package/dist/session/session-service.d.ts +8 -109
  210. package/dist/session/session-service.d.ts.map +1 -1
  211. package/dist/session/session-team-coordination.d.ts +4 -4
  212. package/dist/session/session-team-coordination.d.ts.map +1 -1
  213. package/dist/session/subagent-session-manager.d.ts +36 -0
  214. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  215. package/dist/session/team-persistence-store.d.ts +24 -0
  216. package/dist/session/team-persistence-store.d.ts.map +1 -0
  217. package/dist/transports/hub.d.ts +47 -0
  218. package/dist/transports/hub.d.ts.map +1 -0
  219. package/dist/{session/default-session-manager.d.ts → transports/local.d.ts} +30 -16
  220. package/dist/transports/local.d.ts.map +1 -0
  221. package/dist/transports/remote.d.ts +10 -0
  222. package/dist/transports/remote.d.ts.map +1 -0
  223. package/dist/transports/runtime-host-support.d.ts +22 -0
  224. package/dist/transports/runtime-host-support.d.ts.map +1 -0
  225. package/dist/{chat → types}/chat-schema.d.ts +10 -12
  226. package/dist/types/chat-schema.d.ts.map +1 -0
  227. package/dist/types/config.d.ts +10 -9
  228. package/dist/types/config.d.ts.map +1 -1
  229. package/dist/types/provider-settings.d.ts +4 -5
  230. package/dist/types/provider-settings.d.ts.map +1 -1
  231. package/dist/{session/utils/types.d.ts → types/session.d.ts} +16 -6
  232. package/dist/types/session.d.ts.map +1 -0
  233. package/dist/types/sessions.d.ts +19 -0
  234. package/dist/types/sessions.d.ts.map +1 -1
  235. package/dist/types/storage.d.ts +1 -3
  236. package/dist/types/storage.d.ts.map +1 -1
  237. package/dist/types.d.ts +14 -6
  238. package/dist/types.d.ts.map +1 -1
  239. package/package.json +22 -13
  240. package/src/ClineCore.ts +183 -85
  241. package/src/account/index.ts +3 -3
  242. package/src/account/rpc.ts +12 -12
  243. package/src/auth/cline.ts +1 -1
  244. package/src/auth/codex.ts +1 -1
  245. package/src/auth/oca.ts +1 -1
  246. package/src/cron/index.ts +5 -0
  247. package/src/cron/resource-limiter.ts +46 -0
  248. package/src/cron/schedule-command-service.ts +193 -0
  249. package/src/cron/schedule-service.ts +703 -0
  250. package/src/cron/scheduler.ts +637 -0
  251. package/src/cron/sqlite-schedule-store.ts +708 -0
  252. package/src/extensions/config/agent-config-loader.ts +18 -12
  253. package/src/extensions/config/agent-config-parser.ts +1 -1
  254. package/src/extensions/config/hooks-config-loader.ts +1 -2
  255. package/src/extensions/config/index.ts +0 -4
  256. package/src/extensions/config/runtime-commands.ts +6 -0
  257. package/src/extensions/config/user-instruction-config-loader.ts +1 -4
  258. package/src/extensions/context/agentic-compaction.ts +3 -3
  259. package/src/extensions/context/basic-compaction.ts +2 -2
  260. package/src/extensions/context/compaction-shared.ts +5 -4
  261. package/src/extensions/context/compaction.ts +3 -3
  262. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  263. package/src/extensions/plugin/plugin-loader.ts +48 -4
  264. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  265. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  266. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  267. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  268. package/src/{tools → extensions/tools}/definitions.ts +31 -50
  269. package/src/{tools → extensions/tools}/executors/apply-patch.ts +69 -80
  270. package/src/{tools → extensions/tools}/executors/file-read.ts +29 -4
  271. package/src/{tools → extensions/tools}/executors/search.ts +196 -4
  272. package/src/{tools → extensions/tools}/index.ts +10 -0
  273. package/src/{tools → extensions/tools}/model-tool-routing.ts +1 -1
  274. package/src/{tools → extensions/tools}/presets.ts +31 -47
  275. package/src/extensions/tools/runtime.ts +261 -0
  276. package/src/{tools → extensions/tools}/schemas.ts +4 -2
  277. package/src/{team → extensions/tools/team}/multi-agent.ts +80 -17
  278. package/src/{team → extensions/tools/team}/spawn-agent-tool.ts +1 -7
  279. package/src/{team → extensions/tools/team}/subagent-prompts.ts +2 -2
  280. package/src/{team → extensions/tools/team}/team-tools.ts +84 -53
  281. package/src/{tools → extensions/tools}/types.ts +5 -3
  282. package/src/{runtime → hooks}/checkpoint-hooks.ts +27 -0
  283. package/src/{runtime → hooks}/hook-file-hooks.ts +14 -13
  284. package/src/hooks/index.ts +0 -7
  285. package/src/hooks/subprocess-runner.ts +1 -1
  286. package/src/hooks/subprocess.ts +57 -257
  287. package/src/hub/browser-websocket.ts +137 -0
  288. package/src/hub/client.ts +574 -0
  289. package/src/hub/connect.ts +156 -0
  290. package/src/hub/daemon-entry.ts +87 -0
  291. package/src/hub/daemon.ts +181 -0
  292. package/src/hub/defaults.ts +43 -0
  293. package/src/hub/discovery.ts +247 -0
  294. package/src/hub/index.ts +14 -0
  295. package/src/hub/native-transport.ts +31 -0
  296. package/src/hub/runtime-handlers.ts +140 -0
  297. package/src/hub/server.ts +1888 -0
  298. package/src/hub/session-client.ts +460 -0
  299. package/src/hub/start-shared-server.ts +58 -0
  300. package/src/hub/transport.ts +14 -0
  301. package/src/hub/ui-client.ts +122 -0
  302. package/src/hub/workspace.ts +19 -0
  303. package/src/index.ts +264 -199
  304. package/src/llms/configured-provider-registry.ts +193 -0
  305. package/src/llms/provider-defaults.ts +637 -0
  306. package/src/llms/provider-settings.ts +263 -0
  307. package/src/llms/runtime-config.ts +43 -0
  308. package/src/llms/runtime-registry.ts +171 -0
  309. package/src/llms/runtime-types.ts +121 -0
  310. package/src/runtime/history.ts +237 -0
  311. package/src/runtime/host.ts +200 -0
  312. package/src/runtime/index.ts +1 -0
  313. package/src/runtime/rules.ts +12 -0
  314. package/src/runtime/runtime-builder.ts +37 -29
  315. package/src/runtime/runtime-host.ts +206 -0
  316. package/src/{session → runtime}/runtime-oauth-token-manager.ts +12 -16
  317. package/src/runtime/session-runtime.ts +2 -26
  318. package/src/{session/session-agent-events.ts → services/agent-events.ts} +7 -7
  319. package/src/services/config.ts +5 -0
  320. package/src/services/global-settings.ts +122 -0
  321. package/src/services/local-runtime-bootstrap.ts +318 -0
  322. package/src/services/plugin-tools.ts +85 -0
  323. package/src/{providers → services/providers}/local-provider-registry.ts +6 -6
  324. package/src/{providers → services/providers}/local-provider-service.ts +46 -41
  325. package/src/{session → services}/session-artifacts.ts +7 -19
  326. package/src/{session/utils/helpers.ts → services/session-data.ts} +90 -80
  327. package/src/{session → services}/session-telemetry.ts +7 -9
  328. package/src/services/storage/artifact-store.ts +1 -0
  329. package/src/{storage → services/storage}/file-team-store.ts +2 -2
  330. package/src/{storage → services/storage}/provider-settings-legacy-migration.ts +6 -4
  331. package/src/{storage → services/storage}/provider-settings-manager.ts +3 -3
  332. package/src/services/storage/session-store.ts +1 -0
  333. package/src/{storage → services/storage}/sqlite-session-store.ts +7 -12
  334. package/src/{storage → services/storage}/sqlite-team-store.ts +4 -4
  335. package/src/{storage → services/storage}/team-store.ts +1 -1
  336. package/src/{session/utils → services}/usage.ts +1 -1
  337. package/src/{input → services/workspace}/file-indexer.ts +26 -2
  338. package/src/{input → services/workspace}/mention-enricher.ts +1 -1
  339. package/src/{session → services}/workspace-manifest.ts +18 -0
  340. package/src/session/file-session-service.ts +10 -8
  341. package/src/session/index.ts +10 -23
  342. package/src/session/persistence-service.ts +144 -528
  343. package/src/session/session-manifest-store.ts +158 -0
  344. package/src/session/session-row.ts +199 -0
  345. package/src/session/session-service.ts +43 -389
  346. package/src/session/session-team-coordination.ts +14 -7
  347. package/src/session/subagent-session-manager.ts +397 -0
  348. package/src/session/team-persistence-store.ts +176 -0
  349. package/src/session/workspace-manager.ts +1 -1
  350. package/src/transports/hub.ts +656 -0
  351. package/src/{session/default-session-manager.ts → transports/local.ts} +263 -200
  352. package/src/transports/remote.ts +26 -0
  353. package/src/transports/runtime-host-support.ts +140 -0
  354. package/src/{chat → types}/chat-schema.ts +4 -5
  355. package/src/types/config.ts +10 -9
  356. package/src/types/provider-settings.ts +11 -7
  357. package/src/{session/utils/types.ts → types/session.ts} +16 -5
  358. package/src/types/sessions.ts +21 -0
  359. package/src/types/storage.ts +1 -6
  360. package/src/types.ts +52 -19
  361. package/dist/chat/chat-schema.d.ts.map +0 -1
  362. package/dist/hooks/persistent.d.ts +0 -64
  363. package/dist/hooks/persistent.d.ts.map +0 -1
  364. package/dist/input/file-indexer.d.ts.map +0 -1
  365. package/dist/input/index.d.ts.map +0 -1
  366. package/dist/input/mention-enricher.d.ts.map +0 -1
  367. package/dist/prompt/default-system.d.ts +0 -2
  368. package/dist/prompt/default-system.d.ts.map +0 -1
  369. package/dist/providers/local-provider-registry.d.ts.map +0 -1
  370. package/dist/providers/local-provider-service.d.ts.map +0 -1
  371. package/dist/runtime/checkpoint-hooks.d.ts.map +0 -1
  372. package/dist/runtime/hook-file-hooks.d.ts.map +0 -1
  373. package/dist/session/default-session-manager.d.ts.map +0 -1
  374. package/dist/session/rpc-runtime-ensure.d.ts +0 -53
  375. package/dist/session/rpc-runtime-ensure.d.ts.map +0 -1
  376. package/dist/session/rpc-session-service.d.ts +0 -13
  377. package/dist/session/rpc-session-service.d.ts.map +0 -1
  378. package/dist/session/rpc-spawn-lease.d.ts +0 -8
  379. package/dist/session/rpc-spawn-lease.d.ts.map +0 -1
  380. package/dist/session/session-agent-events.d.ts.map +0 -1
  381. package/dist/session/session-artifacts.d.ts.map +0 -1
  382. package/dist/session/session-config-builder.d.ts +0 -16
  383. package/dist/session/session-config-builder.d.ts.map +0 -1
  384. package/dist/session/session-host.d.ts +0 -15
  385. package/dist/session/session-host.d.ts.map +0 -1
  386. package/dist/session/session-manager.d.ts +0 -62
  387. package/dist/session/session-manager.d.ts.map +0 -1
  388. package/dist/session/session-telemetry.d.ts.map +0 -1
  389. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  390. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  391. package/dist/session/utils/helpers.d.ts.map +0 -1
  392. package/dist/session/utils/types.d.ts.map +0 -1
  393. package/dist/session/utils/usage.d.ts.map +0 -1
  394. package/dist/session/workspace-manifest.d.ts +0 -5
  395. package/dist/session/workspace-manifest.d.ts.map +0 -1
  396. package/dist/storage/file-team-store.d.ts.map +0 -1
  397. package/dist/storage/provider-settings-legacy-migration.d.ts.map +0 -1
  398. package/dist/storage/provider-settings-manager.d.ts.map +0 -1
  399. package/dist/storage/sqlite-session-store.d.ts.map +0 -1
  400. package/dist/storage/sqlite-team-store.d.ts.map +0 -1
  401. package/dist/storage/team-store.d.ts.map +0 -1
  402. package/dist/team/delegated-agent.d.ts.map +0 -1
  403. package/dist/team/index.d.ts.map +0 -1
  404. package/dist/team/multi-agent.d.ts.map +0 -1
  405. package/dist/team/projections.d.ts.map +0 -1
  406. package/dist/team/runtime.d.ts.map +0 -1
  407. package/dist/team/spawn-agent-tool.d.ts.map +0 -1
  408. package/dist/team/subagent-prompts.d.ts.map +0 -1
  409. package/dist/team/team-tools.d.ts.map +0 -1
  410. package/dist/telemetry/ITelemetryAdapter.d.ts.map +0 -1
  411. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +0 -1
  412. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +0 -1
  413. package/dist/telemetry/TelemetryLoggerSink.d.ts.map +0 -1
  414. package/dist/telemetry/TelemetryService.d.ts.map +0 -1
  415. package/dist/telemetry/core-events.d.ts.map +0 -1
  416. package/dist/telemetry/distinct-id.d.ts.map +0 -1
  417. package/dist/telemetry/index.d.ts.map +0 -1
  418. package/dist/telemetry/index.js +0 -15
  419. package/dist/tools/constants.d.ts.map +0 -1
  420. package/dist/tools/definitions.d.ts.map +0 -1
  421. package/dist/tools/executors/apply-patch-parser.d.ts.map +0 -1
  422. package/dist/tools/executors/apply-patch.d.ts.map +0 -1
  423. package/dist/tools/executors/bash.d.ts.map +0 -1
  424. package/dist/tools/executors/editor.d.ts.map +0 -1
  425. package/dist/tools/executors/file-read.d.ts.map +0 -1
  426. package/dist/tools/executors/index.d.ts.map +0 -1
  427. package/dist/tools/executors/search.d.ts.map +0 -1
  428. package/dist/tools/executors/web-fetch.d.ts.map +0 -1
  429. package/dist/tools/helpers.d.ts.map +0 -1
  430. package/dist/tools/index.d.ts.map +0 -1
  431. package/dist/tools/model-tool-routing.d.ts.map +0 -1
  432. package/dist/tools/presets.d.ts.map +0 -1
  433. package/dist/tools/schemas.d.ts.map +0 -1
  434. package/dist/tools/types.d.ts.map +0 -1
  435. package/src/ClineCore.test.ts +0 -150
  436. package/src/account/cline-account-service.test.ts +0 -185
  437. package/src/account/featurebase-token.test.ts +0 -175
  438. package/src/account/rpc.test.ts +0 -63
  439. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  440. package/src/auth/client.test.ts +0 -69
  441. package/src/auth/cline.test.ts +0 -267
  442. package/src/auth/codex.test.ts +0 -170
  443. package/src/auth/oca.test.ts +0 -340
  444. package/src/auth/server.test.ts +0 -287
  445. package/src/auth/utils.test.ts +0 -128
  446. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  447. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  448. package/src/extensions/config/runtime-commands.test.ts +0 -115
  449. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  450. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  451. package/src/extensions/context/compaction.test.ts +0 -483
  452. package/src/extensions/mcp/config-loader.test.ts +0 -238
  453. package/src/extensions/mcp/manager.test.ts +0 -105
  454. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -182
  455. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  456. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  457. package/src/hooks/persistent.ts +0 -661
  458. package/src/input/file-indexer.d.ts +0 -11
  459. package/src/input/file-indexer.test.ts +0 -127
  460. package/src/input/mention-enricher.test.ts +0 -85
  461. package/src/prompt/default-system.ts +0 -21
  462. package/src/providers/local-provider-service.test.ts +0 -1062
  463. package/src/runtime/checkpoint-hooks.test.ts +0 -168
  464. package/src/runtime/hook-file-hooks.test.ts +0 -311
  465. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -242
  466. package/src/runtime/runtime-builder.test.ts +0 -616
  467. package/src/runtime/runtime-parity.test.ts +0 -143
  468. package/src/session/default-session-manager.e2e.test.ts +0 -384
  469. package/src/session/default-session-manager.test.ts +0 -2473
  470. package/src/session/persistence-service.test.ts +0 -241
  471. package/src/session/rpc-runtime-ensure.ts +0 -521
  472. package/src/session/rpc-session-service.ts +0 -107
  473. package/src/session/rpc-spawn-lease.test.ts +0 -49
  474. package/src/session/rpc-spawn-lease.ts +0 -122
  475. package/src/session/runtime-oauth-token-manager.test.ts +0 -137
  476. package/src/session/session-config-builder.ts +0 -172
  477. package/src/session/session-host.test.ts +0 -89
  478. package/src/session/session-host.ts +0 -213
  479. package/src/session/session-manager.ts +0 -74
  480. package/src/session/session-service.team-persistence.test.ts +0 -48
  481. package/src/session/sqlite-rpc-session-backend.ts +0 -303
  482. package/src/session/utils/helpers.test.ts +0 -160
  483. package/src/storage/artifact-store.ts +0 -1
  484. package/src/storage/provider-settings-legacy-migration.test.ts +0 -424
  485. package/src/storage/provider-settings-manager.test.ts +0 -191
  486. package/src/storage/session-store.ts +0 -1
  487. package/src/team/multi-agent.lifecycle.test.ts +0 -201
  488. package/src/team/spawn-agent-tool.test.ts +0 -387
  489. package/src/team/team-tools.test.ts +0 -906
  490. package/src/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  491. package/src/telemetry/OpenTelemetryProvider.test.ts +0 -326
  492. package/src/telemetry/TelemetryLoggerSink.test.ts +0 -42
  493. package/src/telemetry/TelemetryService.test.ts +0 -134
  494. package/src/telemetry/distinct-id.test.ts +0 -57
  495. package/src/tools/definitions.test.ts +0 -780
  496. package/src/tools/executors/bash.test.ts +0 -87
  497. package/src/tools/executors/editor.test.ts +0 -35
  498. package/src/tools/executors/file-read.test.ts +0 -49
  499. package/src/tools/model-tool-routing.test.ts +0 -86
  500. package/src/tools/presets.test.ts +0 -70
  501. /package/dist/{tools → extensions/tools}/constants.d.ts +0 -0
  502. /package/dist/{tools → extensions/tools}/executors/apply-patch-parser.d.ts +0 -0
  503. /package/dist/{tools → extensions/tools}/executors/bash.d.ts +0 -0
  504. /package/dist/{tools → extensions/tools}/executors/editor.d.ts +0 -0
  505. /package/dist/{tools → extensions/tools}/executors/file-read.d.ts +0 -0
  506. /package/dist/{tools → extensions/tools}/executors/index.d.ts +0 -0
  507. /package/dist/{tools → extensions/tools}/executors/web-fetch.d.ts +0 -0
  508. /package/dist/{tools → extensions/tools}/helpers.d.ts +0 -0
  509. /package/dist/{tools → extensions/tools}/schemas.d.ts +0 -0
  510. /package/dist/{team → extensions/tools/team}/delegated-agent.d.ts +0 -0
  511. /package/dist/{team → extensions/tools/team}/index.d.ts +0 -0
  512. /package/dist/{team → extensions/tools/team}/projections.d.ts +0 -0
  513. /package/dist/{team → extensions/tools/team}/runtime.d.ts +0 -0
  514. /package/dist/{team → extensions/tools/team}/subagent-prompts.d.ts +0 -0
  515. /package/dist/{telemetry → services/telemetry}/ITelemetryAdapter.d.ts +0 -0
  516. /package/dist/{telemetry → services/telemetry}/OpenTelemetryAdapter.d.ts +0 -0
  517. /package/dist/{telemetry → services/telemetry}/OpenTelemetryProvider.d.ts +0 -0
  518. /package/dist/{telemetry → services/telemetry}/TelemetryLoggerSink.d.ts +0 -0
  519. /package/dist/{telemetry → services/telemetry}/TelemetryService.d.ts +0 -0
  520. /package/dist/{telemetry → services/telemetry}/core-events.d.ts +0 -0
  521. /package/dist/{telemetry → services/telemetry}/distinct-id.d.ts +0 -0
  522. /package/dist/{telemetry → services/telemetry}/index.d.ts +0 -0
  523. /package/dist/{input → services/workspace}/file-indexer.d.ts +0 -0
  524. /package/dist/{input → services/workspace}/index.d.ts +0 -0
  525. /package/dist/{input → services/workspace}/mention-enricher.d.ts +0 -0
  526. /package/src/{tools → extensions/tools}/constants.ts +0 -0
  527. /package/src/{tools → extensions/tools}/executors/apply-patch-parser.ts +0 -0
  528. /package/src/{tools → extensions/tools}/executors/bash.ts +0 -0
  529. /package/src/{tools → extensions/tools}/executors/editor.ts +0 -0
  530. /package/src/{tools → extensions/tools}/executors/index.ts +0 -0
  531. /package/src/{tools → extensions/tools}/executors/web-fetch.ts +0 -0
  532. /package/src/{tools → extensions/tools}/helpers.ts +0 -0
  533. /package/src/{team → extensions/tools/team}/delegated-agent.ts +0 -0
  534. /package/src/{team → extensions/tools/team}/index.ts +0 -0
  535. /package/src/{team → extensions/tools/team}/projections.ts +0 -0
  536. /package/src/{team → extensions/tools/team}/runtime.ts +0 -0
  537. /package/src/{storage → services/storage}/index.ts +0 -0
  538. /package/src/{telemetry → services/telemetry}/ITelemetryAdapter.ts +0 -0
  539. /package/src/{telemetry → services/telemetry}/OpenTelemetryAdapter.ts +0 -0
  540. /package/src/{telemetry → services/telemetry}/OpenTelemetryProvider.ts +0 -0
  541. /package/src/{telemetry → services/telemetry}/TelemetryLoggerSink.ts +0 -0
  542. /package/src/{telemetry → services/telemetry}/TelemetryService.ts +0 -0
  543. /package/src/{telemetry → services/telemetry}/core-events.ts +0 -0
  544. /package/src/{telemetry → services/telemetry}/distinct-id.ts +0 -0
  545. /package/src/{telemetry → services/telemetry}/index.ts +0 -0
  546. /package/src/{input → services/workspace}/index.ts +0 -0
@@ -7,7 +7,10 @@ import {
7
7
  unlinkSync,
8
8
  } from "node:fs";
9
9
  import { dirname, join } from "node:path";
10
- import { parseSubSessionId, parseTeamTaskSubSessionId } from "./session-graph";
10
+ import {
11
+ parseSubSessionId,
12
+ parseTeamTaskSubSessionId,
13
+ } from "../session/session-graph";
11
14
 
12
15
  export function nowIso(): string {
13
16
  return new Date().toISOString();
@@ -25,8 +28,6 @@ export function unlinkIfExists(path: string | null | undefined): void {
25
28
  }
26
29
 
27
30
  export interface SessionArtifactPaths {
28
- transcriptPath: string;
29
- hookPath: string;
30
31
  messagesPath: string;
31
32
  }
32
33
 
@@ -71,25 +72,14 @@ export class SessionArtifacts {
71
72
  return dir;
72
73
  }
73
74
 
74
- public sessionTranscriptPath(sessionId: string): string {
75
- return join(this.ensureSessionArtifactsDir(sessionId), `${sessionId}.log`);
76
- }
77
-
78
- public sessionHookPath(sessionId: string): string {
79
- return join(
80
- this.ensureSessionArtifactsDir(sessionId),
81
- `${sessionId}.hooks.jsonl`,
82
- );
83
- }
84
-
85
75
  public sessionMessagesPath(sessionId: string): string {
86
76
  return join(
87
- this.ensureSessionArtifactsDir(sessionId),
77
+ this.sessionArtifactsDir(sessionId),
88
78
  `${sessionId}.messages.json`,
89
79
  );
90
80
  }
91
81
 
92
- public sessionManifestPath(sessionId: string, ensureDir = true): string {
82
+ public sessionManifestPath(sessionId: string, ensureDir = false): string {
93
83
  const base = ensureDir
94
84
  ? this.ensureSessionArtifactsDir(sessionId)
95
85
  : this.sessionArtifactsDir(sessionId);
@@ -140,10 +130,8 @@ export class SessionArtifacts {
140
130
  void subAgentId;
141
131
  void activeTeamTaskSessionId;
142
132
  const { rootSessionId, fileStem } = childArtifactFileStem(sessionId);
143
- const dir = this.ensureSessionArtifactsDir(rootSessionId);
133
+ const dir = this.sessionArtifactsDir(rootSessionId);
144
134
  return {
145
- transcriptPath: join(dir, `${fileStem}.log`),
146
- hookPath: join(dir, `${fileStem}.hooks.jsonl`),
147
135
  messagesPath: join(dir, `${fileStem}.messages.json`),
148
136
  };
149
137
  }
@@ -1,17 +1,21 @@
1
- import { writeFileSync } from "node:fs";
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname } from "node:path";
2
3
  import type * as LlmsProviders from "@clinebot/llms";
3
4
  import type { AgentConfig, AgentEvent, AgentResult } from "@clinebot/shared";
4
5
  import { normalizeUserInput } from "@clinebot/shared";
5
6
  import { nanoid } from "nanoid";
6
- import type { SessionSource, SessionStatus } from "../../types/common";
7
- import type { SessionRecord } from "../../types/sessions";
8
- import { parseSubSessionId, parseTeamTaskSubSessionId } from "../session-graph";
7
+ import {
8
+ parseSubSessionId,
9
+ parseTeamTaskSubSessionId,
10
+ } from "../session/session-graph";
9
11
  import {
10
12
  type SessionManifest,
11
13
  SessionManifestSchema,
12
- } from "../session-manifest";
13
- import type { SessionRow } from "../session-service";
14
- import type { StoredMessageWithMetadata } from "./types";
14
+ } from "../session/session-manifest";
15
+ import type { SessionRow } from "../session/session-row";
16
+ import type { SessionSource, SessionStatus } from "../types/common";
17
+ import type { StoredMessageWithMetadata } from "../types/session";
18
+ import type { SessionRecord } from "../types/sessions";
15
19
 
16
20
  export function hasRuntimeHooks(hooks: AgentConfig["hooks"]): boolean {
17
21
  if (!hooks) {
@@ -150,22 +154,28 @@ export function withLatestAssistantTurnMetadata(
150
154
  }
151
155
 
152
156
  const usage = result.usage;
157
+ const lastAssistantIndexForUsage =
158
+ assistantIndexes[assistantIndexes.length - 1];
153
159
  for (const targetIndex of assistantIndexes) {
154
160
  const target = next[targetIndex];
161
+ const metrics =
162
+ targetIndex === lastAssistantIndexForUsage
163
+ ? {
164
+ ...(target.metrics ?? {}),
165
+ inputTokens: usage.inputTokens,
166
+ outputTokens: usage.outputTokens,
167
+ cacheReadTokens: usage.cacheReadTokens ?? 0,
168
+ cacheWriteTokens: usage.cacheWriteTokens ?? 0,
169
+ cost: usage.totalCost,
170
+ }
171
+ : target.metrics;
155
172
  next[targetIndex] = {
156
173
  ...normalizeStoredMessageModelMetadata(target, {
157
174
  id: result.model.id,
158
175
  provider: result.model.provider,
159
176
  family: result.model.info?.family,
160
177
  }),
161
- metrics: {
162
- ...(target.metrics ?? {}),
163
- inputTokens: usage.inputTokens,
164
- outputTokens: usage.outputTokens,
165
- cacheReadTokens: usage.cacheReadTokens ?? 0,
166
- cacheWriteTokens: usage.cacheWriteTokens ?? 0,
167
- cost: usage.totalCost,
168
- },
178
+ ...(metrics ? { metrics } : {}),
169
179
  ts: target.ts ?? result.endedAt.getTime(),
170
180
  };
171
181
  }
@@ -197,15 +207,11 @@ export function toSessionRecord(row: SessionRow): SessionRecord {
197
207
  isSubagent: row.isSubagent,
198
208
  prompt: row.prompt ?? undefined,
199
209
  metadata: row.metadata ?? undefined,
200
- transcriptPath: row.transcriptPath,
201
- hookPath: row.hookPath,
202
210
  messagesPath: row.messagesPath ?? undefined,
203
211
  updatedAt: row.updatedAt,
204
212
  };
205
213
  }
206
214
 
207
- // ── Metadata helpers ──────────────────────────────────────────────────
208
-
209
215
  const MAX_TITLE_LENGTH = 120;
210
216
 
211
217
  export function normalizeTitle(title?: string | null): string | undefined {
@@ -251,38 +257,59 @@ export function resolveMetadataWithTitle(input: {
251
257
  return Object.keys(base).length > 0 ? base : undefined;
252
258
  }
253
259
 
254
- // ── Messages file helpers ─────────────────────────────────────────────
255
-
256
260
  export type MessagesFileContext = {
257
261
  agent: "lead" | "subagent" | "teammate";
258
262
  sessionId: string;
259
263
  taskType?: string;
260
264
  };
261
265
 
262
- export type MessagesFilePayload = {
263
- version: number;
264
- updated_at: string;
265
- agent: "lead" | "subagent" | "teammate";
266
- sessionId: string;
267
- taskType?: string;
268
- systemPrompt?: string;
269
- messages: LlmsProviders.Message[];
270
- };
266
+ export function resolveMessagesFileContext(
267
+ sessionId: string,
268
+ ): MessagesFileContext {
269
+ const teamTaskMatch = parseTeamTaskSubSessionId(sessionId);
270
+ if (teamTaskMatch) {
271
+ return {
272
+ agent: "teammate",
273
+ sessionId: teamTaskMatch.rootSessionId,
274
+ taskType: "team",
275
+ };
276
+ }
277
+ const subSessionMatch = parseSubSessionId(sessionId);
278
+ if (subSessionMatch) {
279
+ return {
280
+ agent: "subagent",
281
+ sessionId: subSessionMatch.rootSessionId,
282
+ taskType: "subagent_task",
283
+ };
284
+ }
285
+ return {
286
+ agent: "lead",
287
+ sessionId,
288
+ };
289
+ }
271
290
 
272
291
  export function buildMessagesFilePayload(input: {
273
292
  updatedAt: string;
274
293
  context: MessagesFileContext;
275
- messages: LlmsProviders.Message[];
294
+ messages: LlmsProviders.MessageWithMetadata[];
276
295
  systemPrompt?: string;
277
- }): MessagesFilePayload {
296
+ }): {
297
+ version: 1;
298
+ updated_at: string;
299
+ agent: "lead" | "subagent" | "teammate";
300
+ sessionId: string;
301
+ taskType?: string;
302
+ messages: StoredMessageWithMetadata[];
303
+ system_prompt?: string;
304
+ } {
278
305
  return {
279
306
  version: 1,
280
307
  updated_at: input.updatedAt,
281
308
  agent: input.context.agent,
282
309
  sessionId: input.context.sessionId,
283
310
  ...(input.context.taskType ? { taskType: input.context.taskType } : {}),
284
- ...(input.systemPrompt ? { systemPrompt: input.systemPrompt } : {}),
285
- messages: input.messages,
311
+ messages: normalizeStoredMessagesForPersistence(input.messages),
312
+ ...(input.systemPrompt ? { system_prompt: input.systemPrompt } : {}),
286
313
  };
287
314
  }
288
315
 
@@ -291,6 +318,7 @@ export function writeEmptyMessagesFile(
291
318
  startedAt: string,
292
319
  context: MessagesFileContext,
293
320
  ): void {
321
+ mkdirSync(dirname(path), { recursive: true });
294
322
  writeFileSync(
295
323
  path,
296
324
  `${JSON.stringify(
@@ -306,40 +334,12 @@ export function writeEmptyMessagesFile(
306
334
  );
307
335
  }
308
336
 
309
- export function resolveMessagesFileContext(
310
- sessionId: string,
311
- ): MessagesFileContext {
312
- const teamTask = parseTeamTaskSubSessionId(sessionId);
313
- if (teamTask) {
314
- return {
315
- agent: "teammate",
316
- sessionId: teamTask.rootSessionId,
317
- taskType: "team",
318
- };
319
- }
320
-
321
- const subagent = parseSubSessionId(sessionId);
322
- if (subagent) {
323
- return {
324
- agent: "subagent",
325
- sessionId: subagent.rootSessionId,
326
- };
327
- }
328
-
329
- return {
330
- agent: "lead",
331
- sessionId,
332
- };
333
- }
334
-
335
- // ── Manifest helper ───────────────────────────────────────────────────
336
-
337
337
  export function buildManifestFromRow(
338
338
  row: SessionRow,
339
339
  overrides?: {
340
340
  status?: SessionStatus;
341
- endedAt?: string | null;
342
- exitCode?: number | null;
341
+ endedAt?: string;
342
+ exitCode?: number;
343
343
  metadata?: Record<string, unknown>;
344
344
  },
345
345
  ): SessionManifest {
@@ -351,7 +351,7 @@ export function buildManifestFromRow(
351
351
  started_at: row.startedAt,
352
352
  ended_at: overrides?.endedAt ?? row.endedAt ?? undefined,
353
353
  exit_code: overrides?.exitCode ?? row.exitCode ?? undefined,
354
- status: overrides?.status ?? row.status,
354
+ status: (overrides?.status ?? row.status) as SessionStatus,
355
355
  interactive: row.interactive,
356
356
  provider: row.provider,
357
357
  model: row.model,
@@ -367,20 +367,30 @@ export function buildManifestFromRow(
367
367
  });
368
368
  }
369
369
 
370
- // ── OCC retry helper ──────────────────────────────────────────────────
371
-
372
- export const OCC_MAX_RETRIES = 4;
373
-
374
- export async function withOccRetry<T>(
375
- getRow: () => Promise<{ statusLock: number } | undefined>,
376
- action: (statusLock: number) => Promise<{ updated: boolean } & T>,
377
- maxRetries = OCC_MAX_RETRIES,
378
- ): Promise<({ updated: true } & T) | { updated: false }> {
379
- for (let attempt = 0; attempt < maxRetries; attempt++) {
380
- const row = getRow ? await getRow() : undefined;
381
- if (!row) return { updated: false } as { updated: false };
382
- const result = await action(row.statusLock);
383
- if (result.updated) return result as { updated: true } & T;
370
+ export async function withOccRetry<TFetch, TResult>(
371
+ load: () => Promise<TFetch | undefined>,
372
+ update: (loaded: TFetch) => Promise<TResult>,
373
+ maxRetries: number,
374
+ ): Promise<TResult | { updated: false }> {
375
+ let attempt = 0;
376
+ while (true) {
377
+ const loaded = await load();
378
+ if (loaded === undefined) {
379
+ return { updated: false };
380
+ }
381
+ const result = await update(loaded);
382
+ if (
383
+ typeof result === "object" &&
384
+ result !== null &&
385
+ "updated" in result &&
386
+ (result as { updated?: boolean }).updated === false
387
+ ) {
388
+ attempt += 1;
389
+ if (attempt >= maxRetries) {
390
+ return result as TResult;
391
+ }
392
+ continue;
393
+ }
394
+ return result;
384
395
  }
385
- return { updated: false } as { updated: false };
386
396
  }
@@ -1,9 +1,8 @@
1
1
  import type { ITelemetryService } from "@clinebot/shared";
2
- import {
3
- listHookConfigFiles,
4
- resolveDocumentsHooksDirectoryPath,
5
- } from "../extensions/config/hooks-config-loader";
6
- import type { enrichPromptWithMentions } from "../input";
2
+ import { resolveDocumentsExtensionPath } from "@clinebot/shared/storage";
3
+ import { listHookConfigFiles } from "../extensions/config/hooks-config-loader";
4
+ import type { SessionSource } from "../types/common";
5
+ import type { CoreSessionConfig } from "../types/config";
7
6
  import {
8
7
  captureHookDiscovery,
9
8
  captureMentionFailed,
@@ -12,9 +11,8 @@ import {
12
11
  captureTaskCreated,
13
12
  captureTaskRestarted,
14
13
  type TelemetryAgentIdentityProperties,
15
- } from "../telemetry/core-events";
16
- import type { SessionSource } from "../types/common";
17
- import type { CoreSessionConfig } from "../types/config";
14
+ } from "./telemetry/core-events";
15
+ import type { enrichPromptWithMentions } from "./workspace";
18
16
 
19
17
  export function emitSessionCreationTelemetry(
20
18
  config: CoreSessionConfig,
@@ -57,7 +55,7 @@ export function captureHookDiscoveryTelemetry(
57
55
  telemetry: ITelemetryService | undefined,
58
56
  options: { workspacePath: string },
59
57
  ): void {
60
- const globalHooksDir = resolveDocumentsHooksDirectoryPath();
58
+ const globalHooksDir = resolveDocumentsExtensionPath("Hooks");
61
59
  const entries = listHookConfigFiles(options.workspacePath);
62
60
  const counts = new Map<string, { global: number; workspace: number }>();
63
61
  for (const entry of entries) {
@@ -0,0 +1 @@
1
+ export type { ArtifactStore } from "../../types/storage";
@@ -10,8 +10,8 @@ import {
10
10
  import { join } from "node:path";
11
11
  import type { TeamRuntimeState, TeamTeammateSpec } from "@clinebot/shared";
12
12
  import { resolveTeamDataDir } from "@clinebot/shared/storage";
13
- import type { TeamEvent } from "../team";
14
- import type { TeamStore } from "../types/storage";
13
+ import type { TeamEvent } from "../../extensions/tools/team";
14
+ import type { TeamStore } from "../../types/storage";
15
15
 
16
16
  function nowIso(): string {
17
17
  return new Date().toISOString();
@@ -1,10 +1,12 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import * as LlmsModels from "@clinebot/llms";
4
- import * as LlmsProviders from "@clinebot/llms";
5
4
  import { resolveClineDataDir } from "@clinebot/shared/storage";
6
- import type { ProviderSettings } from "../types/provider-settings";
7
- import { emptyStoredProviderSettings } from "../types/provider-settings";
5
+ import {
6
+ emptyStoredProviderSettings,
7
+ type ProviderSettings,
8
+ ProviderSettingsSchemaTyped as ProviderSettingsSchema,
9
+ } from "../../types/provider-settings";
8
10
  import type { ProviderSettingsManager } from "./provider-settings-manager";
9
11
 
10
12
  type LegacyMode = "plan" | "act";
@@ -659,7 +661,7 @@ function buildLegacyProviderSettings(
659
661
  ...(timeout ? { timeout } : {}),
660
662
  ...providerSpecific,
661
663
  };
662
- const parsed = LlmsProviders.ProviderSettingsSchema.safeParse(settings);
664
+ const parsed = ProviderSettingsSchema.safeParse(settings);
663
665
  if (!parsed.success) {
664
666
  return undefined;
665
667
  }
@@ -1,17 +1,17 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { basename, dirname } from "node:path";
3
3
  import { resolveProviderSettingsPath } from "@clinebot/shared/storage";
4
- import { ensureCustomProvidersLoadedSync } from "../providers/local-provider-registry";
5
4
  import {
6
5
  emptyStoredProviderSettings,
7
6
  type ProviderConfig,
8
7
  type ProviderSettings,
9
- ProviderSettingsSchema,
8
+ ProviderSettingsSchemaTyped as ProviderSettingsSchema,
10
9
  type ProviderTokenSource,
11
10
  type StoredProviderSettings,
12
11
  StoredProviderSettingsSchema,
13
12
  toProviderConfig,
14
- } from "../types/provider-settings";
13
+ } from "../../types/provider-settings";
14
+ import { ensureCustomProvidersLoadedSync } from "../providers/local-provider-registry";
15
15
  import { migrateLegacyProviderSettings } from "./provider-settings-legacy-migration";
16
16
 
17
17
  function nowIso(): string {
@@ -0,0 +1 @@
1
+ export type { SessionStore } from "../../types/storage";
@@ -10,14 +10,10 @@ import {
10
10
  type SqliteDb,
11
11
  toBoolInt,
12
12
  } from "@clinebot/shared/db";
13
- import { resolveSessionDataDir } from "@clinebot/shared/storage";
14
- import type { SessionStatus } from "../types/common";
15
- import type { SessionRecord } from "../types/sessions";
16
- import type { SessionStore } from "../types/storage";
17
-
18
- function defaultSessionsDir(): string {
19
- return resolveSessionDataDir();
20
- }
13
+ import { resolveDbDataDir } from "@clinebot/shared/storage";
14
+ import type { SessionStatus } from "../../types/common";
15
+ import type { SessionRecord } from "../../types/sessions";
16
+ import type { SessionStore } from "../../types/storage";
21
17
 
22
18
  export interface SqliteSessionStoreOptions {
23
19
  sessionsDir?: string;
@@ -28,7 +24,7 @@ export class SqliteSessionStore implements SessionStore {
28
24
  private db: SqliteDb | undefined;
29
25
 
30
26
  constructor(options: SqliteSessionStoreOptions = {}) {
31
- this.sessionsDirPath = options.sessionsDir ?? defaultSessionsDir();
27
+ this.sessionsDirPath = options.sessionsDir ?? resolveDbDataDir();
32
28
  }
33
29
 
34
30
  init(): void {
@@ -115,7 +111,7 @@ export class SqliteSessionStore implements SessionStore {
115
111
  toBoolInt(record.isSubagent),
116
112
  record.prompt ?? null,
117
113
  record.metadata ? JSON.stringify(record.metadata) : null,
118
- record.transcriptPath ?? "",
114
+ "",
119
115
  record.hookPath ?? "",
120
116
  record.messagesPath ?? null,
121
117
  now,
@@ -196,7 +192,7 @@ export class SqliteSessionStore implements SessionStore {
196
192
  provider, model, cwd, workspace_root, team_name,
197
193
  enable_tools, enable_spawn, enable_teams,
198
194
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
199
- prompt, metadata_json, transcript_path, hook_path, messages_path, updated_at
195
+ prompt, metadata_json, hook_path, messages_path, updated_at
200
196
  FROM sessions WHERE session_id = ?`,
201
197
  [sessionId],
202
198
  );
@@ -241,7 +237,6 @@ export class SqliteSessionStore implements SessionStore {
241
237
  }
242
238
  return undefined;
243
239
  })(),
244
- transcriptPath: asOptionalString(row.transcript_path),
245
240
  hookPath: asOptionalString(row.hook_path),
246
241
  messagesPath: asOptionalString(row.messages_path),
247
242
  updatedAt: asOptionalString(row.updated_at) ?? nowIso(),
@@ -6,12 +6,12 @@ import {
6
6
  type TeamTeammateSpec,
7
7
  } from "@clinebot/shared";
8
8
  import { loadSqliteDb, nowIso, type SqliteDb } from "@clinebot/shared/db";
9
- import { resolveTeamDataDir } from "@clinebot/shared/storage";
10
- import type { TeamEvent } from "../team";
11
- import type { TeamStore } from "../types/storage";
9
+ import { resolveDbDataDir } from "@clinebot/shared/storage";
10
+ import type { TeamEvent } from "../../extensions/tools/team";
11
+ import type { TeamStore } from "../../types/storage";
12
12
 
13
13
  function defaultTeamDir(): string {
14
- return resolveTeamDataDir();
14
+ return resolveDbDataDir();
15
15
  }
16
16
 
17
17
  function sanitizeTeamName(name: string): string {
@@ -1,4 +1,4 @@
1
- export type { TeamStore } from "../types/storage";
1
+ export type { TeamStore } from "../../types/storage";
2
2
  export {
3
3
  FileTeamStore,
4
4
  type FileTeamStoreOptions,
@@ -1,4 +1,4 @@
1
- import type { SessionAccumulatedUsage } from "../session-manager";
1
+ import type { SessionAccumulatedUsage } from "../runtime/runtime-host";
2
2
 
3
3
  export function createInitialAccumulatedUsage(): SessionAccumulatedUsage {
4
4
  return {
@@ -1,4 +1,5 @@
1
1
  import { spawn } from "node:child_process";
2
+ import type { Dirent } from "node:fs";
2
3
  import { readdir } from "node:fs/promises";
3
4
  import path from "node:path";
4
5
  import { isMainThread, parentPort, Worker } from "node:worker_threads";
@@ -19,6 +20,14 @@ const DEFAULT_EXCLUDE_DIRS = new Set([
19
20
  "out",
20
21
  ]);
21
22
 
23
+ function shouldSkipWalkError(error: unknown): boolean {
24
+ const code =
25
+ error && typeof error === "object" && "code" in error
26
+ ? String((error as { code?: unknown }).code ?? "")
27
+ : "";
28
+ return code === "EACCES" || code === "EPERM" || code === "ENOENT";
29
+ }
30
+
22
31
  interface CacheEntry {
23
32
  files: Set<string>;
24
33
  lastBuiltAt: number;
@@ -103,14 +112,29 @@ async function walkDir(
103
112
  dir: string,
104
113
  files: Set<string>,
105
114
  ): Promise<void> {
106
- const entries = await readdir(dir, { withFileTypes: true });
115
+ let entries: Dirent[];
116
+ try {
117
+ entries = await readdir(dir, { withFileTypes: true });
118
+ } catch (error) {
119
+ if (shouldSkipWalkError(error)) {
120
+ return;
121
+ }
122
+ throw error;
123
+ }
107
124
  for (const entry of entries) {
108
125
  const absolutePath = path.join(dir, entry.name);
109
126
  if (entry.isDirectory()) {
110
127
  if (DEFAULT_EXCLUDE_DIRS.has(entry.name)) {
111
128
  continue;
112
129
  }
113
- await walkDir(cwd, absolutePath, files);
130
+ try {
131
+ await walkDir(cwd, absolutePath, files);
132
+ } catch (error) {
133
+ if (shouldSkipWalkError(error)) {
134
+ continue;
135
+ }
136
+ throw error;
137
+ }
114
138
  continue;
115
139
  }
116
140
  if (entry.isFile()) {
@@ -106,7 +106,7 @@ export async function enrichPromptWithMentions(
106
106
  continue;
107
107
  }
108
108
 
109
- totalBytes += nextBytes;
109
+ totalBytes = nextBytes;
110
110
  matched.push(relativePath);
111
111
  } catch {
112
112
  ignored.push(mention);
@@ -52,3 +52,21 @@ export async function buildWorkspaceMetadata(cwd: string): Promise<string> {
52
52
  const workspaceInfo = await generateWorkspaceInfo(cwd);
53
53
  return processWorkspaceInfo(workspaceInfo);
54
54
  }
55
+
56
+ /**
57
+ * Generate workspace metadata as both a structured `WorkspaceInfo` object and
58
+ * its pre-serialized string form.
59
+ *
60
+ * Use this instead of calling `buildWorkspaceMetadata` + `generateWorkspaceInfo`
61
+ * separately so the git I/O only happens once.
62
+ */
63
+ export async function buildWorkspaceMetadataWithInfo(cwd: string): Promise<{
64
+ workspaceInfo: WorkspaceInfo;
65
+ workspaceMetadata: string;
66
+ }> {
67
+ const workspaceInfo = await generateWorkspaceInfo(cwd);
68
+ return {
69
+ workspaceInfo,
70
+ workspaceMetadata: processWorkspaceInfo(workspaceInfo),
71
+ };
72
+ }
@@ -7,12 +7,13 @@ import {
7
7
  } from "node:fs";
8
8
  import { join } from "node:path";
9
9
  import { resolveSessionDataDir } from "@clinebot/shared/storage";
10
+ import type { SessionMessagesArtifactUploader } from "../types/session";
10
11
  import type {
11
12
  PersistedSessionUpdateInput,
12
13
  SessionPersistenceAdapter,
13
14
  } from "./persistence-service";
14
15
  import { UnifiedSessionPersistenceService } from "./persistence-service";
15
- import type { SessionRow } from "./session-service";
16
+ import type { SessionRow } from "./session-row";
16
17
 
17
18
  interface FileSessionIndex {
18
19
  version: 1;
@@ -45,13 +46,9 @@ function atomicWriteJson(path: string, value: unknown): void {
45
46
  renameSync(tempPath, path);
46
47
  }
47
48
 
48
- function defaultSessionsDir(): string {
49
- return resolveSessionDataDir();
50
- }
51
-
52
49
  class FileSessionPersistenceAdapter implements SessionPersistenceAdapter {
53
50
  constructor(
54
- private readonly sessionsDirPath: string = defaultSessionsDir(),
51
+ private readonly sessionsDirPath: string = resolveSessionDataDir(),
55
52
  ) {}
56
53
 
57
54
  ensureSessionsDir(): string {
@@ -270,8 +267,13 @@ class FileSessionPersistenceAdapter implements SessionPersistenceAdapter {
270
267
  }
271
268
 
272
269
  export class FileSessionService extends UnifiedSessionPersistenceService {
273
- constructor(sessionsDir?: string) {
274
- super(new FileSessionPersistenceAdapter(sessionsDir));
270
+ constructor(
271
+ sessionsDir?: string,
272
+ options: {
273
+ messagesArtifactUploader?: SessionMessagesArtifactUploader;
274
+ } = {},
275
+ ) {
276
+ super(new FileSessionPersistenceAdapter(sessionsDir), options);
275
277
  }
276
278
 
277
279
  override ensureSessionsDir(): string {