@clinebot/core 0.0.28 → 0.0.30

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 (340) hide show
  1. package/README.md +7 -0
  2. package/dist/ClineCore.d.ts +28 -2
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/cline-account-service.d.ts +1 -1
  5. package/dist/account/cline-account-service.d.ts.map +1 -1
  6. package/dist/account/index.d.ts +1 -1
  7. package/dist/account/index.d.ts.map +1 -1
  8. package/dist/account/types.d.ts +5 -0
  9. package/dist/account/types.d.ts.map +1 -1
  10. package/dist/auth/bounded-ttl-cache.d.ts +14 -0
  11. package/dist/auth/bounded-ttl-cache.d.ts.map +1 -0
  12. package/dist/auth/cline.d.ts +27 -2
  13. package/dist/auth/cline.d.ts.map +1 -1
  14. package/dist/auth/oca.d.ts.map +1 -1
  15. package/dist/chat/chat-schema.d.ts +11 -11
  16. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -0
  17. package/dist/{agents → extensions/config}/agent-config-parser.d.ts +2 -2
  18. package/dist/extensions/config/agent-config-parser.d.ts.map +1 -0
  19. package/dist/{agents → extensions/config}/hooks-config-loader.d.ts +1 -1
  20. package/dist/extensions/config/hooks-config-loader.d.ts.map +1 -0
  21. package/dist/{agents → extensions/config}/index.d.ts +2 -4
  22. package/dist/extensions/config/index.d.ts.map +1 -0
  23. package/dist/{runtime/commands.d.ts → extensions/config/runtime-commands.d.ts} +2 -3
  24. package/dist/extensions/config/runtime-commands.d.ts.map +1 -0
  25. package/dist/extensions/config/unified-config-file-watcher.d.ts.map +1 -0
  26. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -0
  27. package/dist/extensions/context/agentic-compaction.d.ts +13 -0
  28. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -0
  29. package/dist/extensions/context/basic-compaction.d.ts +9 -0
  30. package/dist/extensions/context/basic-compaction.d.ts.map +1 -0
  31. package/dist/extensions/context/compaction-shared.d.ts +60 -0
  32. package/dist/extensions/context/compaction-shared.d.ts.map +1 -0
  33. package/dist/extensions/context/compaction.d.ts +20 -0
  34. package/dist/extensions/context/compaction.d.ts.map +1 -0
  35. package/dist/extensions/index.d.ts +5 -0
  36. package/dist/extensions/index.d.ts.map +1 -0
  37. package/dist/extensions/mcp/client.d.ts +3 -0
  38. package/dist/extensions/mcp/client.d.ts.map +1 -0
  39. package/dist/extensions/mcp/config-loader.d.ts.map +1 -0
  40. package/dist/extensions/mcp/index.d.ts +9 -0
  41. package/dist/extensions/mcp/index.d.ts.map +1 -0
  42. package/dist/{mcp → extensions/mcp}/manager.d.ts +1 -2
  43. package/dist/extensions/mcp/manager.d.ts.map +1 -0
  44. package/dist/extensions/mcp/name-transform.d.ts +3 -0
  45. package/dist/extensions/mcp/name-transform.d.ts.map +1 -0
  46. package/dist/extensions/mcp/policies.d.ts +15 -0
  47. package/dist/extensions/mcp/policies.d.ts.map +1 -0
  48. package/dist/extensions/mcp/tools.d.ts +4 -0
  49. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  50. package/dist/{mcp → extensions/mcp}/types.d.ts +29 -1
  51. package/dist/extensions/mcp/types.d.ts.map +1 -0
  52. package/dist/{agents → extensions/plugin}/plugin-config-loader.d.ts +1 -1
  53. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -0
  54. package/dist/{agents → extensions/plugin}/plugin-loader.d.ts +1 -1
  55. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -0
  56. package/dist/extensions/plugin/plugin-module-import.d.ts +5 -0
  57. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -0
  58. package/dist/{agents → extensions/plugin}/plugin-sandbox.d.ts +1 -1
  59. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -0
  60. package/dist/extensions/plugin-sandbox-bootstrap.js +485 -0
  61. package/dist/hooks/index.d.ts +4 -0
  62. package/dist/hooks/index.d.ts.map +1 -0
  63. package/dist/hooks/persistent.d.ts +64 -0
  64. package/dist/hooks/persistent.d.ts.map +1 -0
  65. package/dist/hooks/subprocess-runner.d.ts +22 -0
  66. package/dist/hooks/subprocess-runner.d.ts.map +1 -0
  67. package/dist/hooks/subprocess.d.ts +189 -0
  68. package/dist/hooks/subprocess.d.ts.map +1 -0
  69. package/dist/index.d.ts +22 -25
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +560 -447
  72. package/dist/prompt/default-system.d.ts +2 -0
  73. package/dist/prompt/default-system.d.ts.map +1 -0
  74. package/dist/providers/local-provider-service.d.ts +1 -1
  75. package/dist/providers/local-provider-service.d.ts.map +1 -1
  76. package/dist/runtime/checkpoint-hooks.d.ts +21 -0
  77. package/dist/runtime/checkpoint-hooks.d.ts.map +1 -0
  78. package/dist/runtime/hook-file-hooks.d.ts +1 -1
  79. package/dist/runtime/hook-file-hooks.d.ts.map +1 -1
  80. package/dist/runtime/rules.d.ts +1 -1
  81. package/dist/runtime/rules.d.ts.map +1 -1
  82. package/dist/runtime/runtime-builder.d.ts +1 -1
  83. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  84. package/dist/runtime/session-runtime.d.ts +25 -5
  85. package/dist/runtime/session-runtime.d.ts.map +1 -1
  86. package/dist/runtime/subprocess-sandbox.d.ts.map +1 -0
  87. package/dist/runtime/team-runtime-registry.d.ts +1 -1
  88. package/dist/runtime/team-runtime-registry.d.ts.map +1 -1
  89. package/dist/runtime/tool-approval.d.ts +1 -1
  90. package/dist/session/default-session-manager.d.ts +9 -3
  91. package/dist/session/default-session-manager.d.ts.map +1 -1
  92. package/dist/session/file-session-service.d.ts +1 -1
  93. package/dist/session/file-session-service.d.ts.map +1 -1
  94. package/dist/session/{unified-session-persistence-service.d.ts → persistence-service.d.ts} +11 -42
  95. package/dist/session/persistence-service.d.ts.map +1 -0
  96. package/dist/session/rpc-session-service.d.ts +1 -1
  97. package/dist/session/rpc-session-service.d.ts.map +1 -1
  98. package/dist/session/session-agent-events.d.ts +1 -1
  99. package/dist/session/session-artifacts.d.ts.map +1 -1
  100. package/dist/session/session-config-builder.d.ts.map +1 -1
  101. package/dist/session/session-graph.d.ts +1 -1
  102. package/dist/session/session-graph.d.ts.map +1 -1
  103. package/dist/session/session-host.d.ts.map +1 -1
  104. package/dist/session/session-manager.d.ts +6 -5
  105. package/dist/session/session-manager.d.ts.map +1 -1
  106. package/dist/session/session-manifest.d.ts +1 -1
  107. package/dist/session/session-service.d.ts +3 -2
  108. package/dist/session/session-service.d.ts.map +1 -1
  109. package/dist/session/session-team-coordination.d.ts +2 -1
  110. package/dist/session/session-team-coordination.d.ts.map +1 -1
  111. package/dist/session/utils/helpers.d.ts +51 -3
  112. package/dist/session/utils/helpers.d.ts.map +1 -1
  113. package/dist/session/utils/types.d.ts +41 -7
  114. package/dist/session/utils/types.d.ts.map +1 -1
  115. package/dist/session/workspace-manager.d.ts +1 -2
  116. package/dist/session/workspace-manager.d.ts.map +1 -1
  117. package/dist/session/workspace-manifest.d.ts +1 -22
  118. package/dist/session/workspace-manifest.d.ts.map +1 -1
  119. package/dist/storage/file-team-store.d.ts +2 -1
  120. package/dist/storage/file-team-store.d.ts.map +1 -1
  121. package/dist/storage/sqlite-team-store.d.ts +4 -1
  122. package/dist/storage/sqlite-team-store.d.ts.map +1 -1
  123. package/dist/storage/team-store.d.ts.map +1 -1
  124. package/dist/team/delegated-agent.d.ts +44 -0
  125. package/dist/team/delegated-agent.d.ts.map +1 -0
  126. package/dist/team/index.d.ts +1 -0
  127. package/dist/team/index.d.ts.map +1 -1
  128. package/dist/team/multi-agent.d.ts +229 -0
  129. package/dist/team/multi-agent.d.ts.map +1 -0
  130. package/dist/team/projections.d.ts +2 -2
  131. package/dist/team/projections.d.ts.map +1 -1
  132. package/dist/team/runtime.d.ts +5 -0
  133. package/dist/team/runtime.d.ts.map +1 -0
  134. package/dist/team/spawn-agent-tool.d.ts +85 -0
  135. package/dist/team/spawn-agent-tool.d.ts.map +1 -0
  136. package/dist/team/subagent-prompts.d.ts +4 -0
  137. package/dist/team/subagent-prompts.d.ts.map +1 -0
  138. package/dist/team/team-tools.d.ts +35 -0
  139. package/dist/team/team-tools.d.ts.map +1 -0
  140. package/dist/telemetry/OpenTelemetryProvider.d.ts +11 -1
  141. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +1 -1
  142. package/dist/telemetry/{LoggerTelemetryAdapter.d.ts → TelemetryLoggerSink.d.ts} +10 -4
  143. package/dist/telemetry/TelemetryLoggerSink.d.ts.map +1 -0
  144. package/dist/telemetry/TelemetryService.d.ts.map +1 -1
  145. package/dist/telemetry/index.js +15 -28
  146. package/dist/tools/definitions.d.ts +4 -3
  147. package/dist/tools/definitions.d.ts.map +1 -1
  148. package/dist/tools/index.d.ts +5 -5
  149. package/dist/tools/index.d.ts.map +1 -1
  150. package/dist/tools/model-tool-routing.d.ts.map +1 -1
  151. package/dist/tools/presets.d.ts +26 -0
  152. package/dist/tools/presets.d.ts.map +1 -1
  153. package/dist/tools/schemas.d.ts +8 -0
  154. package/dist/tools/schemas.d.ts.map +1 -1
  155. package/dist/tools/types.d.ts +23 -2
  156. package/dist/tools/types.d.ts.map +1 -1
  157. package/dist/types/config.d.ts +47 -3
  158. package/dist/types/config.d.ts.map +1 -1
  159. package/dist/types/events.d.ts +1 -1
  160. package/dist/types/provider-settings.d.ts +1 -1
  161. package/dist/types/provider-settings.d.ts.map +1 -1
  162. package/dist/types/storage.d.ts +2 -1
  163. package/dist/types/storage.d.ts.map +1 -1
  164. package/dist/types.d.ts +7 -16
  165. package/dist/types.d.ts.map +1 -1
  166. package/package.json +15 -12
  167. package/src/ClineCore.test.ts +150 -0
  168. package/src/ClineCore.ts +114 -8
  169. package/src/account/cline-account-service.test.ts +84 -0
  170. package/src/account/cline-account-service.ts +2 -2
  171. package/src/account/index.ts +1 -0
  172. package/src/account/types.ts +6 -0
  173. package/src/auth/bounded-ttl-cache.test.ts +38 -0
  174. package/src/auth/bounded-ttl-cache.ts +53 -0
  175. package/src/auth/cline.test.ts +173 -36
  176. package/src/auth/cline.ts +395 -93
  177. package/src/auth/oca.test.ts +125 -0
  178. package/src/auth/oca.ts +17 -4
  179. package/src/{agents → extensions/config}/agent-config-loader.test.ts +1 -1
  180. package/src/{agents → extensions/config}/agent-config-parser.ts +2 -2
  181. package/src/{agents → extensions/config}/hooks-config-loader.ts +1 -1
  182. package/src/{agents → extensions/config}/index.ts +7 -11
  183. package/src/{runtime/commands.test.ts → extensions/config/runtime-commands.test.ts} +20 -3
  184. package/src/{runtime/commands.ts → extensions/config/runtime-commands.ts} +1 -8
  185. package/src/{agents → extensions/config}/unified-config-file-watcher.ts +15 -2
  186. package/src/{agents → extensions/config}/user-instruction-config-loader.test.ts +90 -2
  187. package/src/{agents → extensions/config}/user-instruction-config-loader.ts +126 -12
  188. package/src/extensions/context/agentic-compaction.ts +119 -0
  189. package/src/extensions/context/basic-compaction.ts +275 -0
  190. package/src/extensions/context/compaction-shared.ts +458 -0
  191. package/src/extensions/context/compaction.test.ts +477 -0
  192. package/src/extensions/context/compaction.ts +203 -0
  193. package/src/extensions/index.ts +12 -0
  194. package/src/extensions/mcp/client.ts +420 -0
  195. package/src/{mcp → extensions/mcp}/index.ts +16 -0
  196. package/src/{mcp → extensions/mcp}/manager.test.ts +1 -2
  197. package/src/{mcp → extensions/mcp}/manager.ts +3 -5
  198. package/src/extensions/mcp/name-transform.ts +33 -0
  199. package/src/extensions/mcp/policies.ts +47 -0
  200. package/src/extensions/mcp/tools.ts +47 -0
  201. package/src/{mcp → extensions/mcp}/types.ts +35 -7
  202. package/src/{agents → extensions/plugin}/plugin-config-loader.test.ts +18 -13
  203. package/src/{agents → extensions/plugin}/plugin-config-loader.ts +1 -1
  204. package/src/{agents → extensions/plugin}/plugin-loader.test.ts +41 -4
  205. package/src/extensions/plugin/plugin-loader.ts +106 -0
  206. package/src/extensions/plugin/plugin-module-import.ts +278 -0
  207. package/src/{agents → extensions/plugin}/plugin-sandbox-bootstrap.ts +30 -92
  208. package/src/{agents → extensions/plugin}/plugin-sandbox.test.ts +60 -3
  209. package/src/{agents → extensions/plugin}/plugin-sandbox.ts +146 -56
  210. package/src/hooks/index.ts +25 -0
  211. package/src/hooks/persistent.ts +661 -0
  212. package/src/hooks/subprocess-runner.ts +196 -0
  213. package/src/hooks/subprocess.ts +669 -0
  214. package/src/index.ts +200 -118
  215. package/src/prompt/default-system.ts +21 -0
  216. package/src/providers/local-provider-registry.ts +1 -1
  217. package/src/providers/local-provider-service.test.ts +23 -2
  218. package/src/providers/local-provider-service.ts +2 -2
  219. package/src/runtime/checkpoint-hooks.test.ts +168 -0
  220. package/src/runtime/checkpoint-hooks.ts +186 -0
  221. package/src/runtime/hook-file-hooks.test.ts +40 -1
  222. package/src/runtime/hook-file-hooks.ts +35 -16
  223. package/src/runtime/index.ts +4 -19
  224. package/src/runtime/rules.ts +4 -1
  225. package/src/runtime/runtime-builder.team-persistence.test.ts +3 -6
  226. package/src/runtime/runtime-builder.test.ts +266 -160
  227. package/src/runtime/runtime-builder.ts +120 -47
  228. package/src/runtime/runtime-parity.test.ts +22 -22
  229. package/src/runtime/session-runtime.ts +36 -6
  230. package/src/runtime/{sandbox/subprocess-sandbox.ts → subprocess-sandbox.ts} +24 -3
  231. package/src/runtime/team-runtime-registry.ts +1 -4
  232. package/src/runtime/tool-approval.ts +1 -1
  233. package/src/session/default-session-manager.e2e.test.ts +2 -2
  234. package/src/session/default-session-manager.test.ts +553 -9
  235. package/src/session/default-session-manager.ts +162 -46
  236. package/src/session/file-session-service.ts +3 -3
  237. package/src/session/index.ts +6 -6
  238. package/src/session/persistence-service.test.ts +212 -0
  239. package/src/session/{unified-session-persistence-service.ts → persistence-service.ts} +106 -172
  240. package/src/session/rpc-session-service.ts +3 -3
  241. package/src/session/runtime-oauth-token-manager.ts +1 -1
  242. package/src/session/session-agent-events.ts +1 -1
  243. package/src/session/session-artifacts.ts +32 -4
  244. package/src/session/session-config-builder.ts +22 -9
  245. package/src/session/session-graph.ts +1 -1
  246. package/src/session/session-host.ts +19 -11
  247. package/src/session/session-manager.ts +11 -6
  248. package/src/session/session-service.team-persistence.test.ts +1 -1
  249. package/src/session/session-service.ts +6 -9
  250. package/src/session/session-team-coordination.ts +7 -3
  251. package/src/session/session-telemetry.ts +1 -1
  252. package/src/session/utils/helpers.test.ts +160 -0
  253. package/src/session/utils/helpers.ts +289 -42
  254. package/src/session/utils/types.ts +47 -7
  255. package/src/session/workspace-manager.ts +5 -3
  256. package/src/session/workspace-manifest.ts +3 -49
  257. package/src/storage/file-team-store.ts +2 -5
  258. package/src/storage/provider-settings-legacy-migration.ts +2 -2
  259. package/src/storage/provider-settings-manager.test.ts +1 -1
  260. package/src/storage/sqlite-team-store.ts +212 -125
  261. package/src/storage/team-store.ts +1 -5
  262. package/src/team/delegated-agent.ts +131 -0
  263. package/src/team/index.ts +1 -0
  264. package/src/team/multi-agent.lifecycle.test.ts +201 -0
  265. package/src/team/multi-agent.ts +1666 -0
  266. package/src/team/projections.ts +2 -4
  267. package/src/team/runtime.ts +54 -0
  268. package/src/team/spawn-agent-tool.test.ts +387 -0
  269. package/src/team/spawn-agent-tool.ts +207 -0
  270. package/src/team/subagent-prompts.ts +41 -0
  271. package/src/team/team-tools.test.ts +802 -0
  272. package/src/team/team-tools.ts +792 -0
  273. package/src/telemetry/OpenTelemetryAdapter.ts +1 -1
  274. package/src/telemetry/OpenTelemetryProvider.test.ts +216 -3
  275. package/src/telemetry/OpenTelemetryProvider.ts +110 -20
  276. package/src/telemetry/TelemetryLoggerSink.test.ts +42 -0
  277. package/src/telemetry/{LoggerTelemetryAdapter.ts → TelemetryLoggerSink.ts} +21 -14
  278. package/src/telemetry/TelemetryService.test.ts +7 -7
  279. package/src/telemetry/TelemetryService.ts +2 -4
  280. package/src/tools/definitions.test.ts +76 -0
  281. package/src/tools/definitions.ts +41 -2
  282. package/src/tools/executors/apply-patch.ts +1 -1
  283. package/src/tools/executors/editor.ts +1 -1
  284. package/src/tools/executors/file-read.ts +1 -1
  285. package/src/tools/executors/search.ts +1 -1
  286. package/src/tools/executors/web-fetch.ts +1 -1
  287. package/src/tools/index.ts +6 -1
  288. package/src/tools/model-tool-routing.ts +2 -0
  289. package/src/tools/presets.test.ts +8 -0
  290. package/src/tools/presets.ts +40 -2
  291. package/src/tools/schemas.ts +19 -0
  292. package/src/tools/types.ts +31 -2
  293. package/src/types/config.ts +61 -7
  294. package/src/types/events.ts +1 -1
  295. package/src/types/index.ts +0 -1
  296. package/src/types/provider-settings.ts +1 -1
  297. package/src/types/storage.ts +2 -5
  298. package/src/types.ts +32 -44
  299. package/dist/agents/agent-config-loader.d.ts.map +0 -1
  300. package/dist/agents/agent-config-parser.d.ts.map +0 -1
  301. package/dist/agents/hooks-config-loader.d.ts.map +0 -1
  302. package/dist/agents/index.d.ts.map +0 -1
  303. package/dist/agents/plugin-config-loader.d.ts.map +0 -1
  304. package/dist/agents/plugin-loader.d.ts.map +0 -1
  305. package/dist/agents/plugin-sandbox-bootstrap.js +0 -446
  306. package/dist/agents/plugin-sandbox.d.ts.map +0 -1
  307. package/dist/agents/unified-config-file-watcher.d.ts.map +0 -1
  308. package/dist/agents/user-instruction-config-loader.d.ts.map +0 -1
  309. package/dist/mcp/config-loader.d.ts.map +0 -1
  310. package/dist/mcp/index.d.ts +0 -5
  311. package/dist/mcp/index.d.ts.map +0 -1
  312. package/dist/mcp/manager.d.ts.map +0 -1
  313. package/dist/mcp/types.d.ts.map +0 -1
  314. package/dist/runtime/commands.d.ts.map +0 -1
  315. package/dist/runtime/sandbox/subprocess-sandbox.d.ts.map +0 -1
  316. package/dist/runtime/skills.d.ts +0 -14
  317. package/dist/runtime/skills.d.ts.map +0 -1
  318. package/dist/runtime/workflows.d.ts +0 -14
  319. package/dist/runtime/workflows.d.ts.map +0 -1
  320. package/dist/session/unified-session-persistence-service.d.ts.map +0 -1
  321. package/dist/telemetry/LoggerTelemetryAdapter.d.ts.map +0 -1
  322. package/dist/types/workspace.d.ts +0 -8
  323. package/dist/types/workspace.d.ts.map +0 -1
  324. package/src/agents/plugin-loader.ts +0 -175
  325. package/src/runtime/skills.ts +0 -44
  326. package/src/runtime/workflows.test.ts +0 -119
  327. package/src/runtime/workflows.ts +0 -45
  328. package/src/session/unified-session-persistence-service.test.ts +0 -85
  329. package/src/telemetry/LoggerTelemetryAdapter.test.ts +0 -42
  330. package/src/types/workspace.ts +0 -7
  331. /package/dist/{agents → extensions/config}/agent-config-loader.d.ts +0 -0
  332. /package/dist/{agents → extensions/config}/unified-config-file-watcher.d.ts +0 -0
  333. /package/dist/{agents → extensions/config}/user-instruction-config-loader.d.ts +0 -0
  334. /package/dist/{mcp → extensions/mcp}/config-loader.d.ts +0 -0
  335. /package/dist/runtime/{sandbox/subprocess-sandbox.d.ts → subprocess-sandbox.d.ts} +0 -0
  336. /package/src/{agents → extensions/config}/agent-config-loader.ts +0 -0
  337. /package/src/{agents → extensions/config}/hooks-config-loader.test.ts +0 -0
  338. /package/src/{agents → extensions/config}/unified-config-file-watcher.test.ts +0 -0
  339. /package/src/{mcp → extensions/mcp}/config-loader.test.ts +0 -0
  340. /package/src/{mcp → extensions/mcp}/config-loader.ts +0 -0
package/src/index.ts CHANGED
@@ -4,24 +4,19 @@
4
4
  * Core contracts, shared state utilities, and Node runtime services.
5
5
  */
6
6
 
7
- export {
8
- type AgentConfig,
9
- type CreateMcpToolsOptions,
10
- createMcpTools,
11
- createTool,
12
- getClineDefaultSystemPrompt,
13
- type Tool,
14
- type ToolApprovalRequest,
15
- type ToolApprovalResult,
16
- type ToolContext,
17
- } from "@clinebot/agents";
18
- export * as LlmsModels from "@clinebot/llms/models";
19
- export * as LlmsProviders from "@clinebot/llms/providers";
7
+ export * as Llms from "@clinebot/llms";
20
8
  // Shared contracts and path helpers re-exported for app consumers.
21
9
  export type {
10
+ AgentConfig,
11
+ AgentEvent,
12
+ AgentExtension,
13
+ AgentExtensionCommand,
14
+ AgentHooks,
22
15
  AgentMode,
16
+ AgentResult,
23
17
  BasicLogger,
24
18
  ConnectorHookEvent,
19
+ emptyWorkspaceManifest,
25
20
  HookSessionContext,
26
21
  ITelemetryService,
27
22
  RpcAddProviderActionRequest,
@@ -33,6 +28,12 @@ export type {
33
28
  RpcChatStartSessionRequest,
34
29
  RpcChatTurnResult,
35
30
  RpcClineAccountActionRequest,
31
+ RpcEnterpriseAuthenticateRequest,
32
+ RpcEnterpriseAuthenticateResponse,
33
+ RpcEnterpriseStatusRequest,
34
+ RpcEnterpriseStatusResponse,
35
+ RpcEnterpriseSyncRequest,
36
+ RpcEnterpriseSyncResponse,
36
37
  RpcOAuthProviderId,
37
38
  RpcProviderActionRequest,
38
39
  RpcProviderCapability,
@@ -49,9 +50,21 @@ export type {
49
50
  TelemetryPrimitive,
50
51
  TelemetryProperties,
51
52
  TelemetryValue,
53
+ Tool,
54
+ ToolApprovalRequest,
55
+ ToolApprovalResult,
56
+ ToolContext,
52
57
  ToolPolicy,
58
+ WorkspaceInfo,
59
+ WorkspaceInfoSchema,
60
+ WorkspaceManifest,
61
+ WorkspaceManifestSchema,
53
62
  } from "@clinebot/shared";
54
63
  export {
64
+ ContributionRegistry,
65
+ createContributionRegistry,
66
+ createTool,
67
+ noopBasicLogger,
55
68
  normalizeUserInput,
56
69
  RPC_TEAM_LIFECYCLE_EVENT_TYPE,
57
70
  RPC_TEAM_PROGRESS_EVENT_TYPE,
@@ -75,84 +88,20 @@ export {
75
88
  isRpcClineAccountActionRequest,
76
89
  RpcClineAccountService,
77
90
  type RpcProviderActionExecutor,
91
+ type UserRemoteConfigOrganization,
78
92
  type UserRemoteConfigResponse,
79
93
  } from "./account";
80
- export type {
81
- AgentConfigWatcher,
82
- AgentConfigWatcherEvent,
83
- AgentYamlConfig,
84
- BuildAgentConfigOverridesOptions,
85
- CreateAgentConfigWatcherOptions,
86
- CreateInstructionWatcherOptions,
87
- CreateRulesConfigDefinitionOptions,
88
- CreateSkillsConfigDefinitionOptions,
89
- CreateUserInstructionConfigWatcherOptions,
90
- CreateWorkflowsConfigDefinitionOptions,
91
- HookConfigFileEntry,
92
- LoadAgentPluginFromPathOptions,
93
- ParseMarkdownFrontmatterResult,
94
- ParseYamlFrontmatterResult,
95
- ResolveAgentPluginPathsOptions,
96
- RuleConfig,
97
- SkillConfig,
98
- UnifiedConfigDefinition,
99
- UnifiedConfigFileCandidate,
100
- UnifiedConfigFileContext,
101
- UnifiedConfigRecord,
102
- UnifiedConfigWatcherEvent,
103
- UnifiedConfigWatcherOptions,
104
- UserInstructionConfig,
105
- UserInstructionConfigType,
106
- UserInstructionConfigWatcher,
107
- UserInstructionConfigWatcherEvent,
108
- WorkflowConfig,
109
- } from "./agents";
110
- export {
111
- createAgentConfigDefinition,
112
- createAgentConfigWatcher,
113
- createRulesConfigDefinition,
114
- createSkillsConfigDefinition,
115
- createUserInstructionConfigWatcher,
116
- createWorkflowsConfigDefinition,
117
- discoverPluginModulePaths,
118
- HOOK_CONFIG_FILE_EVENT_MAP,
119
- HOOKS_CONFIG_DIRECTORY_NAME,
120
- HookConfigFileName,
121
- listHookConfigFiles,
122
- loadAgentPluginFromPath,
123
- loadAgentPluginsFromPaths,
124
- parseAgentConfigFromYaml,
125
- parsePartialAgentConfigFromYaml,
126
- parseRuleConfigFromMarkdown,
127
- parseSkillConfigFromMarkdown,
128
- parseWorkflowConfigFromMarkdown,
129
- RULES_CONFIG_DIRECTORY_NAME,
130
- resolveAgentPluginPaths,
131
- resolveAgentTools,
132
- resolveAndLoadAgentPlugins,
133
- resolveDocumentsHooksDirectoryPath,
134
- resolveDocumentsRulesDirectoryPath,
135
- resolveDocumentsWorkflowsDirectoryPath,
136
- resolveHooksConfigSearchPaths,
137
- resolvePluginConfigSearchPaths,
138
- resolveRulesConfigSearchPaths,
139
- resolveSkillsConfigSearchPaths,
140
- resolveWorkflowsConfigSearchPaths,
141
- SKILLS_CONFIG_DIRECTORY_NAME,
142
- toHookConfigFileName,
143
- toPartialAgentConfig,
144
- UnifiedConfigFileWatcher,
145
- WORKFLOWS_CONFIG_DIRECTORY_NAME,
146
- } from "./agents";
147
94
  export {
148
95
  createOAuthClientCallbacks,
149
96
  type OAuthClientCallbacksOptions,
150
97
  } from "./auth/client";
151
98
  export {
99
+ completeClineDeviceAuth,
152
100
  createClineOAuthProvider,
153
101
  getValidClineCredentials,
154
102
  loginClineOAuth,
155
103
  refreshClineToken,
104
+ startClineDeviceAuth,
156
105
  } from "./auth/cline";
157
106
  export {
158
107
  getValidOpenAICodexCredentials,
@@ -213,16 +162,87 @@ export {
213
162
  ChatViewStateSchema,
214
163
  } from "./chat/chat-schema";
215
164
  export type {
216
- FastFileIndexOptions,
217
- MentionEnricherOptions,
218
- MentionEnrichmentResult,
219
- } from "./input";
165
+ LoadAgentPluginFromPathOptions,
166
+ ResolveAgentPluginPathsOptions,
167
+ } from "./extensions";
220
168
  export {
221
- enrichPromptWithMentions,
222
- getFileIndex,
223
- prewarmFileIndex,
224
- } from "./input";
169
+ discoverPluginModulePaths,
170
+ loadAgentPluginFromPath,
171
+ loadAgentPluginsFromPaths,
172
+ resolveAgentPluginPaths,
173
+ resolveAndLoadAgentPlugins,
174
+ resolvePluginConfigSearchPaths,
175
+ } from "./extensions";
176
+ export type {
177
+ AgentConfigWatcher,
178
+ AgentConfigWatcherEvent,
179
+ AgentYamlConfig,
180
+ AvailableRuntimeCommand,
181
+ BuildAgentConfigOverridesOptions,
182
+ CreateAgentConfigWatcherOptions,
183
+ CreateInstructionWatcherOptions,
184
+ CreateRulesConfigDefinitionOptions,
185
+ CreateSkillsConfigDefinitionOptions,
186
+ CreateUserInstructionConfigWatcherOptions,
187
+ CreateWorkflowsConfigDefinitionOptions,
188
+ HookConfigFileEntry,
189
+ ParseMarkdownFrontmatterResult,
190
+ ParseYamlFrontmatterResult,
191
+ RuleConfig,
192
+ SkillConfig,
193
+ UnifiedConfigDefinition,
194
+ UnifiedConfigFileCandidate,
195
+ UnifiedConfigFileContext,
196
+ UnifiedConfigRecord,
197
+ UnifiedConfigWatcherEvent,
198
+ UnifiedConfigWatcherOptions,
199
+ UserInstructionConfig,
200
+ UserInstructionConfigType,
201
+ UserInstructionConfigWatcher,
202
+ UserInstructionConfigWatcherEvent,
203
+ WorkflowConfig,
204
+ } from "./extensions/config";
205
+ export {
206
+ createAgentConfigDefinition,
207
+ createAgentConfigWatcher,
208
+ createRulesConfigDefinition,
209
+ createSkillsConfigDefinition,
210
+ createUserInstructionConfigWatcher,
211
+ createWorkflowsConfigDefinition,
212
+ HOOK_CONFIG_FILE_EVENT_MAP,
213
+ HOOKS_CONFIG_DIRECTORY_NAME,
214
+ HookConfigFileName,
215
+ listAvailableRuntimeCommandsFromWatcher,
216
+ listHookConfigFiles,
217
+ parseAgentConfigFromYaml,
218
+ parsePartialAgentConfigFromYaml,
219
+ parseRuleConfigFromMarkdown,
220
+ parseSkillConfigFromMarkdown,
221
+ parseWorkflowConfigFromMarkdown,
222
+ RULES_CONFIG_DIRECTORY_NAME,
223
+ resolveAgentTools,
224
+ resolveDocumentsHooksDirectoryPath,
225
+ resolveDocumentsRulesDirectoryPath,
226
+ resolveDocumentsWorkflowsDirectoryPath,
227
+ resolveHooksConfigSearchPaths,
228
+ resolveRulesConfigSearchPaths,
229
+ resolveRuntimeSlashCommandFromWatcher,
230
+ resolveSkillsConfigSearchPaths,
231
+ resolveWorkflowsConfigSearchPaths,
232
+ SKILLS_CONFIG_DIRECTORY_NAME,
233
+ toHookConfigFileName,
234
+ toPartialAgentConfig,
235
+ UnifiedConfigFileWatcher,
236
+ WORKFLOWS_CONFIG_DIRECTORY_NAME,
237
+ } from "./extensions/config";
225
238
  export {
239
+ type CreateDisabledMcpToolPoliciesOptions,
240
+ type CreateDisabledMcpToolPolicyOptions,
241
+ type CreateMcpToolsOptions,
242
+ createDefaultMcpServerClientFactory,
243
+ createDisabledMcpToolPolicies,
244
+ createDisabledMcpToolPolicy,
245
+ createMcpTools,
226
246
  hasMcpSettingsFile,
227
247
  InMemoryMcpManager,
228
248
  type LoadMcpSettingsOptions,
@@ -239,11 +259,48 @@ export {
239
259
  type McpSseTransportConfig,
240
260
  type McpStdioTransportConfig,
241
261
  type McpStreamableHttpTransportConfig,
262
+ type McpToolCallRequest,
263
+ type McpToolCallResult,
264
+ type McpToolDescriptor,
265
+ type McpToolNameTransform,
266
+ type McpToolProvider,
242
267
  type RegisterMcpServersFromSettingsOptions,
243
268
  registerMcpServersFromSettingsFile,
244
269
  resolveDefaultMcpSettingsPath,
245
270
  resolveMcpServerRegistrations,
246
- } from "./mcp";
271
+ } from "./extensions/mcp";
272
+ export {
273
+ createPersistentSubprocessHooks,
274
+ createSubprocessHooks,
275
+ type HookEventName,
276
+ HookEventNameSchema,
277
+ type HookEventPayload,
278
+ HookEventPayloadSchema,
279
+ PersistentHookClient,
280
+ type PersistentHookClientOptions,
281
+ type PersistentSubprocessHookControl,
282
+ type PersistentSubprocessHooksOptions,
283
+ parseHookEventPayload,
284
+ type RunHookOptions,
285
+ type RunHookResult,
286
+ type RunSubprocessEventOptions,
287
+ type RunSubprocessEventResult,
288
+ runHook,
289
+ runSubprocessEvent,
290
+ type SubprocessHookControl,
291
+ type SubprocessHooksOptions,
292
+ } from "./hooks";
293
+ export type {
294
+ FastFileIndexOptions,
295
+ MentionEnricherOptions,
296
+ MentionEnrichmentResult,
297
+ } from "./input";
298
+ export {
299
+ enrichPromptWithMentions,
300
+ getFileIndex,
301
+ prewarmFileIndex,
302
+ } from "./input";
303
+ export { getClineDefaultSystemPrompt } from "./prompt/default-system";
247
304
  export {
248
305
  addLocalProvider,
249
306
  type DeleteLocalProviderRequest,
@@ -259,11 +316,10 @@ export {
259
316
  type UpdateLocalProviderRequest,
260
317
  updateLocalProvider,
261
318
  } from "./providers/local-provider-service";
262
- export type { AvailableRuntimeCommand } from "./runtime/commands";
263
- export {
264
- listAvailableRuntimeCommandsFromWatcher,
265
- resolveRuntimeSlashCommandFromWatcher,
266
- } from "./runtime/commands";
319
+ export type {
320
+ CheckpointEntry,
321
+ CheckpointMetadata,
322
+ } from "./runtime/checkpoint-hooks";
267
323
  export {
268
324
  formatRulesForSystemPrompt,
269
325
  isRuleEnabled,
@@ -274,31 +330,24 @@ export {
274
330
  createTeamName,
275
331
  DefaultRuntimeBuilder,
276
332
  } from "./runtime/runtime-builder";
277
- export {
278
- type SandboxCallOptions,
279
- SubprocessSandbox,
280
- type SubprocessSandboxOptions,
281
- } from "./runtime/sandbox/subprocess-sandbox";
282
333
  export type {
283
334
  BuiltRuntime,
284
335
  RuntimeBuilder,
285
336
  RuntimeBuilderInput,
286
337
  SessionRuntime,
338
+ TeamToolsFactory,
339
+ TeamToolsFactoryOptions,
340
+ TeamToolsFactoryResult,
287
341
  } from "./runtime/session-runtime";
288
- export type { AvailableSkill } from "./runtime/skills";
289
342
  export {
290
- listAvailableSkillsFromWatcher,
291
- resolveSkillsSlashCommandFromWatcher,
292
- } from "./runtime/skills";
343
+ type SandboxCallOptions,
344
+ SubprocessSandbox,
345
+ type SubprocessSandboxOptions,
346
+ } from "./runtime/subprocess-sandbox";
293
347
  export {
294
348
  type DesktopToolApprovalOptions,
295
349
  requestDesktopToolApproval,
296
350
  } from "./runtime/tool-approval";
297
- export type { AvailableWorkflow } from "./runtime/workflows";
298
- export {
299
- listAvailableWorkflowsFromWatcher,
300
- resolveWorkflowSlashCommandFromWatcher,
301
- } from "./runtime/workflows";
302
351
  export { DefaultSessionManager } from "./session/default-session-manager";
303
352
  export {
304
353
  clearRpcDiscoveryIfAddressMatches,
@@ -365,15 +414,10 @@ export type {
365
414
  WorkspaceManagerEvent,
366
415
  } from "./session/workspace-manager";
367
416
  export { InMemoryWorkspaceManager } from "./session/workspace-manager";
368
- export type { WorkspaceManifest } from "./session/workspace-manifest";
369
417
  export {
370
418
  buildWorkspaceMetadata,
371
- emptyWorkspaceManifest,
372
419
  generateWorkspaceInfo,
373
420
  normalizeWorkspacePath,
374
- upsertWorkspaceInfo,
375
- WorkspaceInfoSchema,
376
- WorkspaceManifestSchema,
377
421
  } from "./session/workspace-manifest";
378
422
  export {
379
423
  type MigrateLegacyProviderSettingsOptions,
@@ -387,7 +431,33 @@ export {
387
431
  type SqliteTeamStoreOptions,
388
432
  } from "./storage/team-store";
389
433
  export {
434
+ type AgentTask,
435
+ AgentTeam,
436
+ AgentTeamsRuntime,
437
+ type AgentTeamsRuntimeOptions,
438
+ type BootstrapAgentTeamsOptions,
439
+ type BootstrapAgentTeamsResult,
440
+ bootstrapAgentTeams,
441
+ buildDelegatedAgentConfig,
390
442
  buildTeamProgressSummary,
443
+ type CreateAgentTeamsToolsOptions,
444
+ createAgentTeamsTools,
445
+ createDelegatedAgent,
446
+ createDelegatedAgentConfigProvider,
447
+ createSpawnAgentTool,
448
+ type DelegatedAgentConfigProvider,
449
+ type DelegatedAgentConnectionConfig,
450
+ type DelegatedAgentKind,
451
+ type DelegatedAgentRuntimeConfig,
452
+ reviveTeamStateDates,
453
+ type SpawnTeammateOptions,
454
+ type SubAgentEndContext,
455
+ type SubAgentStartContext,
456
+ sanitizeTeamName,
457
+ type TaskResult,
458
+ type TeamEvent,
459
+ type TeamMemberConfig,
460
+ type TeamTeammateRuntimeConfig,
391
461
  toTeamProgressLifecycleEvent,
392
462
  } from "./team";
393
463
  export type {
@@ -421,13 +491,21 @@ export {
421
491
  } from "./telemetry/core-events";
422
492
  export type { ITelemetryAdapter } from "./telemetry/ITelemetryAdapter";
423
493
  export {
424
- LoggerTelemetryAdapter,
425
- type LoggerTelemetryAdapterOptions,
426
- } from "./telemetry/LoggerTelemetryAdapter";
494
+ type CreateOpenTelemetryTelemetryServiceOptions,
495
+ createConfiguredTelemetryService,
496
+ createOpenTelemetryTelemetryService,
497
+ OpenTelemetryProvider,
498
+ type OpenTelemetryProviderOptions,
499
+ } from "./telemetry/OpenTelemetryProvider";
500
+ export {
501
+ TelemetryLoggerSink,
502
+ type TelemetryLoggerSinkOptions,
503
+ } from "./telemetry/TelemetryLoggerSink";
427
504
  export { CORE_BUILD_VERSION } from "./version";
428
505
  export async function loadOpenTelemetryAdapter() {
429
506
  return import("./telemetry/index.js");
430
507
  }
508
+ export { createContextCompactionPrepareTurn } from "./extensions/context/compaction";
431
509
  export {
432
510
  TelemetryService,
433
511
  type TelemetryServiceOptions,
@@ -452,11 +530,16 @@ export {
452
530
  ToolPresets,
453
531
  } from "./tools";
454
532
  // Compatibility barrel (legacy imports).
455
- export type { RuntimeEnvironment, SessionEvent, StoredMessages } from "./types";
533
+ export type { RuntimeEnvironment } from "./types";
456
534
  export type { SessionStatus } from "./types/common";
457
535
  export { SESSION_STATUSES, SessionSource } from "./types/common";
458
536
  export type {
459
537
  CoreAgentMode,
538
+ CoreCompactionConfig,
539
+ CoreCompactionContext,
540
+ CoreCompactionResult,
541
+ CoreCompactionStrategy,
542
+ CoreCompactionSummarizerConfig,
460
543
  CoreModelConfig,
461
544
  CoreRuntimeFeatures,
462
545
  CoreSessionConfig,
@@ -480,4 +563,3 @@ export {
480
563
  } from "./types/provider-settings";
481
564
  export type { SessionRecord, SessionRef } from "./types/sessions";
482
565
  export type { ArtifactStore, SessionStore, TeamStore } from "./types/storage";
483
- export type { WorkspaceInfo } from "./types/workspace";
@@ -0,0 +1,21 @@
1
+ import { basename, resolve } from "node:path";
2
+ import { buildClineSystemPrompt } from "@clinebot/shared";
3
+
4
+ export function getClineDefaultSystemPrompt(
5
+ ide: string,
6
+ cwd: string,
7
+ providerId: string,
8
+ metadata = "",
9
+ rules = "",
10
+ platform = (typeof process !== "undefined" && process?.platform) || "unknown",
11
+ ): string {
12
+ return buildClineSystemPrompt({
13
+ ide,
14
+ platform,
15
+ workspaceRoot: resolve(cwd),
16
+ workspaceName: basename(cwd),
17
+ metadata,
18
+ rules,
19
+ providerId,
20
+ });
21
+ }
@@ -1,7 +1,7 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { mkdir, readFile, writeFile } from "node:fs/promises";
3
3
  import { dirname, join } from "node:path";
4
- import * as LlmsModels from "@clinebot/llms/models";
4
+ import * as LlmsModels from "@clinebot/llms";
5
5
  import type { RpcProviderCapability, RpcProviderModel } from "@clinebot/shared";
6
6
  import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { mkdtempSync, rmSync } from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import * as LlmsModels from "@clinebot/llms/models";
4
+ import * as LlmsModels from "@clinebot/llms";
5
5
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
6
  import { ProviderSettingsManager } from "../storage/provider-settings-manager";
7
7
  import {
@@ -922,6 +922,27 @@ describe("listLocalProviders", () => {
922
922
  ).toBe(true);
923
923
  });
924
924
 
925
+ it("uses the same built-in model list for cline as vercel-ai-gateway", async () => {
926
+ manager.saveProviderSettings(
927
+ {
928
+ provider: "cline",
929
+ apiKey: "test-key",
930
+ baseUrl: "https://api.cline.bot/api/v1",
931
+ model: "anthropic/claude-sonnet-4.6",
932
+ },
933
+ { setLastUsed: false },
934
+ );
935
+
936
+ const { providers } = await listLocalProviders(manager);
937
+ const cline = providers.find((provider) => provider.id === "cline");
938
+ const gateway = providers.find(
939
+ (provider) => provider.id === "vercel-ai-gateway",
940
+ );
941
+
942
+ expect(cline?.modelList?.length).toBeGreaterThan(0);
943
+ expect(cline?.modelList).toEqual(gateway?.modelList);
944
+ });
945
+
925
946
  it("does not eagerly fetch LiteLLM private models while listing providers", async () => {
926
947
  manager.saveProviderSettings(
927
948
  {
@@ -950,7 +971,7 @@ describe("listLocalProviders", () => {
950
971
  const litellm = providers.find((provider) => provider.id === "litellm");
951
972
 
952
973
  expect(fetchMock).not.toHaveBeenCalled();
953
- expect(litellm?.modelList).toEqual([]);
974
+ expect(litellm?.modelList?.length).toBeGreaterThan(0);
954
975
  expect(
955
976
  litellm?.modelList?.some((model) => model.id === "team/private-model"),
956
977
  ).toBe(false);
@@ -1,5 +1,5 @@
1
- import * as LlmsModels from "@clinebot/llms/models";
2
- import * as LlmsProviders from "@clinebot/llms/providers";
1
+ import * as LlmsModels from "@clinebot/llms";
2
+ import * as LlmsProviders from "@clinebot/llms";
3
3
  import type {
4
4
  RpcAddProviderActionRequest,
5
5
  RpcOAuthProviderId,
@@ -0,0 +1,168 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { describe, expect, it } from "vitest";
7
+ import {
8
+ type CheckpointEntry,
9
+ type CheckpointMetadata,
10
+ createCheckpointHooks,
11
+ } from "./checkpoint-hooks";
12
+
13
+ const execFile = promisify(execFileCallback);
14
+
15
+ async function runGit(cwd: string, ...args: string[]): Promise<string> {
16
+ const result = await execFile("git", ["-C", cwd, ...args], {
17
+ windowsHide: true,
18
+ });
19
+ return result.stdout.trim();
20
+ }
21
+
22
+ async function createGitRepo(): Promise<string> {
23
+ const cwd = await mkdtemp(join(tmpdir(), "core-checkpoint-"));
24
+ await runGit(cwd, "init");
25
+ await runGit(cwd, "config", "user.name", "Codex Test");
26
+ await runGit(cwd, "config", "user.email", "codex@example.com");
27
+ await writeFile(join(cwd, "note.txt"), "base\n", "utf8");
28
+ await runGit(cwd, "add", "note.txt");
29
+ await runGit(cwd, "commit", "-m", "initial");
30
+ return cwd;
31
+ }
32
+
33
+ // Currently disabled for process?.env?.CLINE_CHECKPOINT
34
+ describe.skip("createCheckpointHooks", () => {
35
+ it("creates one checkpoint at the start of each root run and appends metadata", async () => {
36
+ const cwd = await createGitRepo();
37
+ let metadata: Record<string, unknown> | undefined;
38
+ try {
39
+ const hooks = createCheckpointHooks({
40
+ cwd,
41
+ sessionId: "sess_1",
42
+ readSessionMetadata: async () => metadata,
43
+ writeSessionMetadata: async (next) => {
44
+ metadata = next;
45
+ },
46
+ });
47
+
48
+ await writeFile(join(cwd, "note.txt"), "run-one\n", "utf8");
49
+ await hooks.onRunStart?.({
50
+ agentId: "agent_1",
51
+ conversationId: "conv_1",
52
+ parentAgentId: null,
53
+ userMessage: "first",
54
+ });
55
+ await hooks.onBeforeAgentStart?.({
56
+ agentId: "agent_1",
57
+ conversationId: "conv_1",
58
+ parentAgentId: null,
59
+ iteration: 1,
60
+ systemPrompt: "system",
61
+ messages: [],
62
+ });
63
+
64
+ const first = metadata?.checkpoint as CheckpointMetadata;
65
+ expect(first.history).toHaveLength(1);
66
+ expect(first.latest.runCount).toBe(1);
67
+ expect(first.latest.ref).toMatch(/^[0-9a-f]{40}$/);
68
+
69
+ await writeFile(join(cwd, "note.txt"), "run-two\n", "utf8");
70
+ await hooks.onRunStart?.({
71
+ agentId: "agent_1",
72
+ conversationId: "conv_1",
73
+ parentAgentId: null,
74
+ userMessage: "second",
75
+ });
76
+ await hooks.onBeforeAgentStart?.({
77
+ agentId: "agent_1",
78
+ conversationId: "conv_1",
79
+ parentAgentId: null,
80
+ iteration: 1,
81
+ systemPrompt: "system",
82
+ messages: [],
83
+ });
84
+
85
+ const checkpoint = metadata?.checkpoint as CheckpointMetadata;
86
+ expect(checkpoint.latest.runCount).toBe(2);
87
+ expect(checkpoint.history).toHaveLength(2);
88
+ expect(
89
+ checkpoint.history.map((entry: CheckpointEntry) => entry.runCount),
90
+ ).toEqual([1, 2]);
91
+ expect(checkpoint.latest.kind).toBe("stash");
92
+ } finally {
93
+ await rm(cwd, { recursive: true, force: true });
94
+ }
95
+ });
96
+
97
+ it("falls back to a commit checkpoint when the worktree is clean", async () => {
98
+ const cwd = await createGitRepo();
99
+ let metadata: Record<string, unknown> | undefined;
100
+ try {
101
+ const hooks = createCheckpointHooks({
102
+ cwd,
103
+ sessionId: "sess_clean",
104
+ readSessionMetadata: async () => metadata,
105
+ writeSessionMetadata: async (next) => {
106
+ metadata = next;
107
+ },
108
+ });
109
+
110
+ await hooks.onRunStart?.({
111
+ agentId: "agent_1",
112
+ conversationId: "conv_1",
113
+ parentAgentId: null,
114
+ userMessage: "clean",
115
+ });
116
+ await hooks.onBeforeAgentStart?.({
117
+ agentId: "agent_1",
118
+ conversationId: "conv_1",
119
+ parentAgentId: null,
120
+ iteration: 1,
121
+ systemPrompt: "system",
122
+ messages: [],
123
+ });
124
+
125
+ const checkpoint = metadata?.checkpoint as CheckpointMetadata;
126
+ expect(checkpoint.history).toHaveLength(1);
127
+ expect(checkpoint.latest.kind).toBe("commit");
128
+ expect(checkpoint.latest.ref).toMatch(/^[0-9a-f]{40}$/);
129
+ } finally {
130
+ await rm(cwd, { recursive: true, force: true });
131
+ }
132
+ });
133
+
134
+ it("skips checkpoint creation for subagents", async () => {
135
+ const cwd = await createGitRepo();
136
+ let writes = 0;
137
+ try {
138
+ const hooks = createCheckpointHooks({
139
+ cwd,
140
+ sessionId: "sess_1",
141
+ readSessionMetadata: async () => undefined,
142
+ writeSessionMetadata: async () => {
143
+ writes += 1;
144
+ },
145
+ });
146
+
147
+ await writeFile(join(cwd, "note.txt"), "subagent-dirty\n", "utf8");
148
+ await hooks.onRunStart?.({
149
+ agentId: "agent_child",
150
+ conversationId: "conv_child",
151
+ parentAgentId: "agent_root",
152
+ userMessage: "child",
153
+ });
154
+ await hooks.onBeforeAgentStart?.({
155
+ agentId: "agent_child",
156
+ conversationId: "conv_child",
157
+ parentAgentId: "agent_root",
158
+ iteration: 1,
159
+ systemPrompt: "system",
160
+ messages: [],
161
+ });
162
+
163
+ expect(writes).toBe(0);
164
+ } finally {
165
+ await rm(cwd, { recursive: true, force: true });
166
+ }
167
+ });
168
+ });