@clinebot/core 0.0.35 → 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 (335) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +53 -39
  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 +4 -3
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  23. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  24. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  25. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  27. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  28. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  29. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  30. package/dist/extensions/context/compaction.d.ts.map +1 -1
  31. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  32. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  33. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  34. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  35. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  36. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  37. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  38. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  39. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  40. package/dist/extensions/plugin-sandbox-bootstrap.js +211 -211
  41. package/dist/extensions/tools/definitions.d.ts +1 -1
  42. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  43. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  44. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  45. package/dist/extensions/tools/executors/search.d.ts +1 -1
  46. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  47. package/dist/extensions/tools/index.d.ts +2 -0
  48. package/dist/extensions/tools/index.d.ts.map +1 -1
  49. package/dist/extensions/tools/presets.d.ts +26 -43
  50. package/dist/extensions/tools/presets.d.ts.map +1 -1
  51. package/dist/extensions/tools/runtime.d.ts +25 -0
  52. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  53. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  54. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  55. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  56. package/dist/hooks/hook-file-hooks.d.ts +4 -1
  57. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  58. package/dist/hooks/index.d.ts +0 -1
  59. package/dist/hooks/index.d.ts.map +1 -1
  60. package/dist/hooks/subprocess.d.ts +8 -1
  61. package/dist/hooks/subprocess.d.ts.map +1 -1
  62. package/dist/hub/browser-websocket.d.ts +18 -0
  63. package/dist/hub/browser-websocket.d.ts.map +1 -0
  64. package/dist/hub/client.d.ts +45 -0
  65. package/dist/hub/client.d.ts.map +1 -0
  66. package/dist/hub/connect.d.ts +15 -0
  67. package/dist/hub/connect.d.ts.map +1 -0
  68. package/dist/hub/daemon-entry.d.ts +2 -0
  69. package/dist/hub/daemon-entry.d.ts.map +1 -0
  70. package/dist/hub/daemon-entry.js +1045 -0
  71. package/dist/hub/daemon.d.ts +5 -0
  72. package/dist/hub/daemon.d.ts.map +1 -0
  73. package/dist/hub/defaults.d.ts +13 -0
  74. package/dist/hub/defaults.d.ts.map +1 -0
  75. package/dist/hub/discovery.d.ts +29 -0
  76. package/dist/hub/discovery.d.ts.map +1 -0
  77. package/dist/hub/index.d.ts +15 -0
  78. package/dist/hub/index.d.ts.map +1 -0
  79. package/dist/hub/index.js +1044 -0
  80. package/dist/hub/native-transport.d.ts +17 -0
  81. package/dist/hub/native-transport.d.ts.map +1 -0
  82. package/dist/hub/runtime-handlers.d.ts +11 -0
  83. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  84. package/dist/hub/server.d.ts +86 -0
  85. package/dist/hub/server.d.ts.map +1 -0
  86. package/dist/hub/session-client.d.ts +87 -0
  87. package/dist/hub/session-client.d.ts.map +1 -0
  88. package/dist/hub/start-shared-server.d.ts +19 -0
  89. package/dist/hub/start-shared-server.d.ts.map +1 -0
  90. package/dist/hub/transport.d.ts +8 -0
  91. package/dist/hub/transport.d.ts.map +1 -0
  92. package/dist/hub/ui-client.d.ts +44 -0
  93. package/dist/hub/ui-client.d.ts.map +1 -0
  94. package/dist/hub/workspace.d.ts +4 -0
  95. package/dist/hub/workspace.d.ts.map +1 -0
  96. package/dist/index.d.ts +26 -15
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +498 -476
  99. package/dist/llms/configured-provider-registry.d.ts +28 -0
  100. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  101. package/dist/llms/provider-defaults.d.ts +27 -0
  102. package/dist/llms/provider-defaults.d.ts.map +1 -0
  103. package/dist/llms/provider-settings.d.ts +202 -0
  104. package/dist/llms/provider-settings.d.ts.map +1 -0
  105. package/dist/llms/runtime-config.d.ts +4 -0
  106. package/dist/llms/runtime-config.d.ts.map +1 -0
  107. package/dist/llms/runtime-registry.d.ts +20 -0
  108. package/dist/llms/runtime-registry.d.ts.map +1 -0
  109. package/dist/llms/runtime-types.d.ts +85 -0
  110. package/dist/llms/runtime-types.d.ts.map +1 -0
  111. package/dist/runtime/host.d.ts +1 -2
  112. package/dist/runtime/host.d.ts.map +1 -1
  113. package/dist/runtime/rules.d.ts +1 -0
  114. package/dist/runtime/rules.d.ts.map +1 -1
  115. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  116. package/dist/runtime/runtime-host.d.ts +22 -24
  117. package/dist/runtime/runtime-host.d.ts.map +1 -1
  118. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  119. package/dist/runtime/session-runtime.d.ts +1 -19
  120. package/dist/runtime/session-runtime.d.ts.map +1 -1
  121. package/dist/services/global-settings.d.ts +12 -0
  122. package/dist/services/global-settings.d.ts.map +1 -0
  123. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  124. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  125. package/dist/services/plugin-tools.d.ts +16 -0
  126. package/dist/services/plugin-tools.d.ts.map +1 -0
  127. package/dist/services/providers/local-provider-registry.d.ts +4 -4
  128. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  129. package/dist/services/providers/local-provider-service.d.ts +13 -13
  130. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  131. package/dist/services/session-data.d.ts +1 -1
  132. package/dist/services/session-data.d.ts.map +1 -1
  133. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  134. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  135. package/dist/services/telemetry/index.js +28 -15
  136. package/dist/services/workspace-manifest.d.ts +11 -0
  137. package/dist/services/workspace-manifest.d.ts.map +1 -1
  138. package/dist/session/persistence-service.d.ts +11 -23
  139. package/dist/session/persistence-service.d.ts.map +1 -1
  140. package/dist/session/session-manifest-store.d.ts +22 -0
  141. package/dist/session/session-manifest-store.d.ts.map +1 -0
  142. package/dist/session/session-row.d.ts +93 -0
  143. package/dist/session/session-row.d.ts.map +1 -0
  144. package/dist/session/session-service.d.ts +2 -102
  145. package/dist/session/session-service.d.ts.map +1 -1
  146. package/dist/session/subagent-session-manager.d.ts +36 -0
  147. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  148. package/dist/session/team-persistence-store.d.ts +24 -0
  149. package/dist/session/team-persistence-store.d.ts.map +1 -0
  150. package/dist/transports/hub.d.ts +47 -0
  151. package/dist/transports/hub.d.ts.map +1 -0
  152. package/dist/transports/local.d.ts +10 -6
  153. package/dist/transports/local.d.ts.map +1 -1
  154. package/dist/transports/remote.d.ts +10 -0
  155. package/dist/transports/remote.d.ts.map +1 -0
  156. package/dist/transports/runtime-host-support.d.ts +3 -2
  157. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  158. package/dist/types/chat-schema.d.ts +10 -12
  159. package/dist/types/chat-schema.d.ts.map +1 -1
  160. package/dist/types/config.d.ts +8 -7
  161. package/dist/types/config.d.ts.map +1 -1
  162. package/dist/types/provider-settings.d.ts +4 -5
  163. package/dist/types/provider-settings.d.ts.map +1 -1
  164. package/dist/types/session.d.ts +2 -1
  165. package/dist/types/session.d.ts.map +1 -1
  166. package/dist/types.d.ts +8 -1
  167. package/dist/types.d.ts.map +1 -1
  168. package/package.json +20 -6
  169. package/src/ClineCore.ts +68 -40
  170. package/src/account/index.ts +3 -3
  171. package/src/account/rpc.ts +12 -12
  172. package/src/cron/index.ts +5 -0
  173. package/src/cron/resource-limiter.ts +46 -0
  174. package/src/cron/schedule-command-service.ts +193 -0
  175. package/src/cron/schedule-service.ts +703 -0
  176. package/src/cron/scheduler.ts +637 -0
  177. package/src/cron/sqlite-schedule-store.ts +708 -0
  178. package/src/extensions/config/agent-config-loader.ts +17 -7
  179. package/src/extensions/config/runtime-commands.ts +6 -0
  180. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  181. package/src/extensions/context/agentic-compaction.ts +3 -3
  182. package/src/extensions/context/basic-compaction.ts +2 -2
  183. package/src/extensions/context/compaction-shared.ts +5 -4
  184. package/src/extensions/context/compaction.ts +3 -3
  185. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  186. package/src/extensions/plugin/plugin-loader.ts +48 -4
  187. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  188. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  189. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  190. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  191. package/src/extensions/tools/definitions.ts +30 -49
  192. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  193. package/src/extensions/tools/executors/search.ts +195 -3
  194. package/src/extensions/tools/index.ts +10 -0
  195. package/src/extensions/tools/presets.ts +31 -46
  196. package/src/extensions/tools/runtime.ts +261 -0
  197. package/src/extensions/tools/schemas.ts +4 -2
  198. package/src/extensions/tools/team/team-tools.ts +21 -0
  199. package/src/hooks/hook-file-hooks.ts +8 -2
  200. package/src/hooks/index.ts +0 -7
  201. package/src/hooks/subprocess-runner.ts +1 -1
  202. package/src/hooks/subprocess.ts +9 -0
  203. package/src/hub/browser-websocket.ts +137 -0
  204. package/src/hub/client.ts +574 -0
  205. package/src/hub/connect.ts +156 -0
  206. package/src/hub/daemon-entry.ts +87 -0
  207. package/src/hub/daemon.ts +181 -0
  208. package/src/hub/defaults.ts +43 -0
  209. package/src/hub/discovery.ts +247 -0
  210. package/src/hub/index.ts +14 -0
  211. package/src/hub/native-transport.ts +31 -0
  212. package/src/hub/runtime-handlers.ts +140 -0
  213. package/src/hub/server.ts +1888 -0
  214. package/src/hub/session-client.ts +460 -0
  215. package/src/hub/start-shared-server.ts +58 -0
  216. package/src/hub/transport.ts +14 -0
  217. package/src/hub/ui-client.ts +122 -0
  218. package/src/hub/workspace.ts +19 -0
  219. package/src/index.ts +124 -68
  220. package/src/llms/configured-provider-registry.ts +193 -0
  221. package/src/llms/provider-defaults.ts +637 -0
  222. package/src/llms/provider-settings.ts +263 -0
  223. package/src/llms/runtime-config.ts +43 -0
  224. package/src/llms/runtime-registry.ts +171 -0
  225. package/src/llms/runtime-types.ts +121 -0
  226. package/src/runtime/host.ts +107 -269
  227. package/src/runtime/index.ts +1 -0
  228. package/src/runtime/rules.ts +12 -0
  229. package/src/runtime/runtime-builder.ts +24 -8
  230. package/src/runtime/runtime-host.ts +89 -61
  231. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  232. package/src/runtime/session-runtime.ts +0 -24
  233. package/src/services/global-settings.ts +122 -0
  234. package/src/services/local-runtime-bootstrap.ts +51 -13
  235. package/src/services/plugin-tools.ts +85 -0
  236. package/src/services/providers/local-provider-registry.ts +6 -6
  237. package/src/services/providers/local-provider-service.ts +42 -37
  238. package/src/services/session-data.ts +15 -9
  239. package/src/services/storage/provider-settings-legacy-migration.ts +6 -4
  240. package/src/services/storage/provider-settings-manager.ts +1 -1
  241. package/src/services/workspace-manifest.ts +18 -0
  242. package/src/session/file-session-service.ts +1 -1
  243. package/src/session/index.ts +6 -27
  244. package/src/session/persistence-service.ts +119 -504
  245. package/src/session/session-manifest-store.ts +158 -0
  246. package/src/session/session-row.ts +199 -0
  247. package/src/session/session-service.ts +17 -376
  248. package/src/session/session-team-coordination.ts +1 -1
  249. package/src/session/subagent-session-manager.ts +397 -0
  250. package/src/session/team-persistence-store.ts +176 -0
  251. package/src/transports/hub.ts +656 -0
  252. package/src/transports/local.ts +135 -40
  253. package/src/transports/remote.ts +26 -0
  254. package/src/transports/runtime-host-support.ts +63 -9
  255. package/src/types/chat-schema.ts +4 -5
  256. package/src/types/config.ts +8 -7
  257. package/src/types/provider-settings.ts +11 -7
  258. package/src/types/session.ts +2 -4
  259. package/src/types.ts +27 -1
  260. package/dist/hooks/persistent.d.ts +0 -64
  261. package/dist/hooks/persistent.d.ts.map +0 -1
  262. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  263. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  264. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  265. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  266. package/dist/session/rpc-session-service.d.ts +0 -16
  267. package/dist/session/rpc-session-service.d.ts.map +0 -1
  268. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  269. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  270. package/dist/transports/rpc.d.ts +0 -51
  271. package/dist/transports/rpc.d.ts.map +0 -1
  272. package/src/ClineCore.test.ts +0 -226
  273. package/src/account/cline-account-service.test.ts +0 -185
  274. package/src/account/featurebase-token.test.ts +0 -175
  275. package/src/account/rpc.test.ts +0 -63
  276. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  277. package/src/auth/client.test.ts +0 -69
  278. package/src/auth/cline.test.ts +0 -267
  279. package/src/auth/codex.test.ts +0 -170
  280. package/src/auth/oca.test.ts +0 -340
  281. package/src/auth/server.test.ts +0 -287
  282. package/src/auth/utils.test.ts +0 -128
  283. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  284. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  285. package/src/extensions/config/runtime-commands.test.ts +0 -115
  286. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  287. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  288. package/src/extensions/context/compaction.test.ts +0 -483
  289. package/src/extensions/mcp/config-loader.test.ts +0 -238
  290. package/src/extensions/mcp/manager.test.ts +0 -105
  291. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  292. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  293. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  294. package/src/extensions/tools/definitions.test.ts +0 -780
  295. package/src/extensions/tools/executors/bash.test.ts +0 -87
  296. package/src/extensions/tools/executors/editor.test.ts +0 -35
  297. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  298. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  299. package/src/extensions/tools/presets.test.ts +0 -70
  300. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  301. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  302. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  303. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  304. package/src/hooks/hook-file-hooks.test.ts +0 -311
  305. package/src/hooks/persistent.ts +0 -661
  306. package/src/runtime/history.test.ts +0 -114
  307. package/src/runtime/host.test.ts +0 -230
  308. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  309. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  310. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  311. package/src/runtime/rpc-spawn-lease.ts +0 -156
  312. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  313. package/src/runtime/runtime-builder.test.ts +0 -615
  314. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  315. package/src/runtime/runtime-parity.test.ts +0 -143
  316. package/src/services/providers/local-provider-service.test.ts +0 -1062
  317. package/src/services/session-data.test.ts +0 -160
  318. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  319. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  320. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  322. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  323. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  324. package/src/services/telemetry/distinct-id.test.ts +0 -57
  325. package/src/services/workspace/file-indexer.d.ts +0 -11
  326. package/src/services/workspace/file-indexer.test.ts +0 -156
  327. package/src/services/workspace/mention-enricher.test.ts +0 -106
  328. package/src/session/persistence-service.test.ts +0 -300
  329. package/src/session/rpc-session-service.ts +0 -114
  330. package/src/session/session-service.team-persistence.test.ts +0 -48
  331. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  332. package/src/transports/local.e2e.test.ts +0 -380
  333. package/src/transports/local.test.ts +0 -2559
  334. package/src/transports/rpc.test.ts +0 -82
  335. package/src/transports/rpc.ts +0 -665
@@ -0,0 +1,85 @@
1
+ import type { AgentConfig, Tool } from "@clinebot/shared";
2
+ import { resolveAgentPluginPaths } from "../extensions/plugin/plugin-config-loader";
3
+ import { loadAgentPluginsFromPathsWithDiagnostics } from "../extensions/plugin/plugin-loader";
4
+ import { resolveDisabledToolNames } from "./global-settings";
5
+
6
+ type AgentExtension = NonNullable<AgentConfig["extensions"]>[number];
7
+ type AgentExtensionApi = Parameters<NonNullable<AgentExtension["setup"]>>[0];
8
+
9
+ export interface PluginToolSummary {
10
+ name: string;
11
+ pluginName: string;
12
+ path: string;
13
+ source: "workspace-plugin" | "global-plugin";
14
+ enabled: boolean;
15
+ description?: string;
16
+ }
17
+
18
+ function collectRegisteredTools(
19
+ extension: AgentExtension,
20
+ workspaceInfo?: { rootPath: string },
21
+ ): Tool[] {
22
+ if (!extension.setup) {
23
+ return [];
24
+ }
25
+
26
+ const tools: Tool[] = [];
27
+ const api: AgentExtensionApi = {
28
+ registerTool: (tool) => tools.push(tool),
29
+ registerCommand: () => {},
30
+ registerMessageBuilder: () => {},
31
+ registerProvider: () => {},
32
+ };
33
+ extension.setup(api, { workspaceInfo });
34
+ return tools;
35
+ }
36
+
37
+ export async function listPluginTools(input: {
38
+ workspacePath: string;
39
+ cwd?: string;
40
+ disabledToolNames?: ReadonlyArray<string>;
41
+ providerId?: string;
42
+ modelId?: string;
43
+ }): Promise<PluginToolSummary[]> {
44
+ const pluginPaths = resolveAgentPluginPaths({
45
+ workspacePath: input.workspacePath,
46
+ cwd: input.cwd,
47
+ });
48
+ const disabled = resolveDisabledToolNames(input.disabledToolNames);
49
+ const summaries: PluginToolSummary[] = [];
50
+
51
+ for (const pluginPath of pluginPaths) {
52
+ const report = await loadAgentPluginsFromPathsWithDiagnostics(
53
+ [pluginPath],
54
+ {
55
+ cwd: input.cwd,
56
+ providerId: input.providerId,
57
+ modelId: input.modelId,
58
+ },
59
+ );
60
+ for (const extension of report.plugins) {
61
+ for (const tool of collectRegisteredTools(extension, {
62
+ rootPath: input.workspacePath,
63
+ })) {
64
+ summaries.push({
65
+ name: tool.name,
66
+ pluginName: extension.name,
67
+ path: pluginPath,
68
+ source: pluginPath.startsWith(input.workspacePath)
69
+ ? "workspace-plugin"
70
+ : "global-plugin",
71
+ enabled: !disabled.has(tool.name),
72
+ description: tool.description?.trim() || undefined,
73
+ });
74
+ }
75
+ }
76
+ }
77
+
78
+ return summaries.sort((left, right) => {
79
+ const nameOrder = left.name.localeCompare(right.name);
80
+ if (nameOrder !== 0) {
81
+ return nameOrder;
82
+ }
83
+ return left.path.localeCompare(right.path);
84
+ });
85
+ }
@@ -2,7 +2,7 @@ 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
4
  import * as LlmsModels from "@clinebot/llms";
5
- import type { RpcProviderCapability, RpcProviderModel } from "@clinebot/shared";
5
+ import type { ProviderCapability, ProviderModel } from "@clinebot/shared";
6
6
  import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
7
7
 
8
8
  export type StoredModelsFile = {
@@ -14,7 +14,7 @@ export type StoredModelsFile = {
14
14
  name: string;
15
15
  baseUrl: string;
16
16
  defaultModelId?: string;
17
- capabilities?: RpcProviderCapability[];
17
+ capabilities?: ProviderCapability[];
18
18
  modelsSourceUrl?: string;
19
19
  };
20
20
  models: Record<
@@ -108,14 +108,14 @@ export async function writeModelsFile(
108
108
  await writeFile(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
109
109
  }
110
110
 
111
- export function toRpcProviderModel(
111
+ export function toProviderModel(
112
112
  modelId: string,
113
113
  info: {
114
114
  name?: string;
115
115
  capabilities?: string[];
116
116
  thinkingConfig?: unknown;
117
117
  },
118
- ): RpcProviderModel {
118
+ ): ProviderModel {
119
119
  return {
120
120
  id: modelId,
121
121
  name: info.name ?? modelId,
@@ -127,7 +127,7 @@ export function toRpcProviderModel(
127
127
  }
128
128
 
129
129
  function toProviderCapabilities(
130
- capabilities: RpcProviderCapability[] | undefined,
130
+ capabilities: ProviderCapability[] | undefined,
131
131
  ): Array<"reasoning" | "prompt-cache" | "tools"> | undefined {
132
132
  if (!capabilities || capabilities.length === 0) {
133
133
  return undefined;
@@ -146,7 +146,7 @@ function toProviderCapabilities(
146
146
  }
147
147
 
148
148
  function toModelCapabilities(
149
- capabilities: RpcProviderCapability[] | undefined,
149
+ capabilities: ProviderCapability[] | undefined,
150
150
  ): Array<
151
151
  "streaming" | "tools" | "reasoning" | "prompt-cache" | "images" | "files"
152
152
  > {
@@ -1,23 +1,28 @@
1
1
  import * as LlmsModels from "@clinebot/llms";
2
- import * as LlmsProviders from "@clinebot/llms";
3
2
  import type {
4
- RpcAddProviderActionRequest,
5
- RpcOAuthProviderId,
6
- RpcProviderCapability,
7
- RpcProviderListItem,
8
- RpcProviderModel,
9
- RpcSaveProviderSettingsActionRequest,
3
+ AddProviderActionRequest,
4
+ OAuthProviderId,
5
+ ProviderCapability,
6
+ ProviderListItem,
7
+ ProviderModel,
8
+ SaveProviderSettingsActionRequest,
10
9
  } from "@clinebot/shared";
11
10
  import { createOAuthClientCallbacks } from "../../auth/client";
12
11
  import { loginClineOAuth } from "../../auth/cline";
13
12
  import { loginOpenAICodex } from "../../auth/codex";
14
13
  import { loginOcaOAuth } from "../../auth/oca";
14
+ import { resolveProviderConfig } from "../../llms/provider-defaults";
15
+ import type {
16
+ ModelInfo,
17
+ ProviderConfig,
18
+ ProviderSettings,
19
+ } from "../../llms/provider-settings";
15
20
  import type { ProviderSettingsManager } from "../storage/provider-settings-manager";
16
21
  import {
17
22
  readModelsFile,
18
23
  registerCustomProvider,
19
24
  resolveModelsRegistryPath,
20
- toRpcProviderModel,
25
+ toProviderModel,
21
26
  writeModelsFile,
22
27
  } from "./local-provider-registry";
23
28
 
@@ -33,7 +38,7 @@ export interface UpdateLocalProviderRequest {
33
38
  models?: string[];
34
39
  defaultModelId?: string | null;
35
40
  modelsSourceUrl?: string | null;
36
- capabilities?: RpcProviderCapability[] | null;
41
+ capabilities?: ProviderCapability[] | null;
37
42
  }
38
43
 
39
44
  export interface DeleteLocalProviderRequest {
@@ -86,12 +91,12 @@ function stableColor(id: string): string {
86
91
  return palette[hash % palette.length];
87
92
  }
88
93
 
89
- function toSortedRpcProviderModels(
90
- modelMap: Record<string, LlmsProviders.ModelInfo>,
91
- ): RpcProviderModel[] {
94
+ function toSortedProviderModels(
95
+ modelMap: Record<string, ModelInfo>,
96
+ ): ProviderModel[] {
92
97
  return Object.entries(modelMap)
93
98
  .sort(([a], [b]) => a.localeCompare(b))
94
- .map(([modelId, info]) => toRpcProviderModel(modelId, info));
99
+ .map(([modelId, info]) => toProviderModel(modelId, info));
95
100
  }
96
101
 
97
102
  // --- Model ID parsing ---
@@ -163,14 +168,14 @@ async function fetchModelIdsFromSource(
163
168
 
164
169
  async function resolveProviderModelMap(
165
170
  providerId: string,
166
- config?: LlmsProviders.ProviderConfig,
167
- ): Promise<Record<string, LlmsProviders.ModelInfo>> {
171
+ config?: ProviderConfig,
172
+ ): Promise<Record<string, ModelInfo>> {
168
173
  const registeredModels = await LlmsModels.getModelsForProvider(providerId);
169
174
  if (!config) {
170
175
  return registeredModels;
171
176
  }
172
177
 
173
- const resolved = await LlmsProviders.resolveProviderConfig(
178
+ const resolved = await resolveProviderConfig(
174
179
  providerId,
175
180
  {
176
181
  loadPrivateOnAuth: true,
@@ -202,7 +207,7 @@ function normalizeHeaders(
202
207
 
203
208
  function buildProviderModels(
204
209
  modelIds: string[],
205
- capabilities: RpcProviderCapability[] | undefined,
210
+ capabilities: ProviderCapability[] | undefined,
206
211
  ) {
207
212
  const supportsVision = capabilities?.includes("vision") ?? false;
208
213
  const supportsReasoning = capabilities?.includes("reasoning") ?? false;
@@ -257,7 +262,7 @@ function removeProviderFromSettingsState(
257
262
 
258
263
  export async function addLocalProvider(
259
264
  manager: ProviderSettingsManager,
260
- request: Omit<RpcAddProviderActionRequest, "action">,
265
+ request: Omit<AddProviderActionRequest, "action">,
261
266
  ): Promise<{
262
267
  providerId: string;
263
268
  settingsPath: string;
@@ -508,17 +513,17 @@ export async function deleteLocalProvider(
508
513
 
509
514
  export async function listLocalProviders(
510
515
  manager: ProviderSettingsManager,
511
- ): Promise<{ providers: RpcProviderListItem[]; settingsPath: string }> {
516
+ ): Promise<{ providers: ProviderListItem[]; settingsPath: string }> {
512
517
  const state = manager.read();
513
518
  const ids = LlmsModels.getProviderIds().sort((a, b) => a.localeCompare(b));
514
519
 
515
520
  const providers = await Promise.all(
516
- ids.map(async (id): Promise<RpcProviderListItem> => {
521
+ ids.map(async (id): Promise<ProviderListItem> => {
517
522
  const [info, registeredModels] = await Promise.all([
518
523
  LlmsModels.getProvider(id),
519
524
  LlmsModels.getModelsForProvider(id),
520
525
  ]);
521
- const modelList = toSortedRpcProviderModels(registeredModels);
526
+ const modelList = toSortedProviderModels(registeredModels);
522
527
  const persistedSettings = state.providers[id]?.settings;
523
528
  const name = info?.name ?? titleCaseFromId(id);
524
529
  return {
@@ -548,17 +553,17 @@ export async function listLocalProviders(
548
553
 
549
554
  export async function getLocalProviderModels(
550
555
  providerId: string,
551
- config?: LlmsProviders.ProviderConfig,
552
- ): Promise<{ providerId: string; models: RpcProviderModel[] }> {
556
+ config?: ProviderConfig,
557
+ ): Promise<{ providerId: string; models: ProviderModel[] }> {
553
558
  const id = providerId.trim();
554
559
  const modelMap = await resolveProviderModelMap(id, config);
555
- const models = toSortedRpcProviderModels(modelMap);
560
+ const models = toSortedProviderModels(modelMap);
556
561
  return { providerId: id, models };
557
562
  }
558
563
 
559
564
  export function saveLocalProviderSettings(
560
565
  manager: ProviderSettingsManager,
561
- request: Omit<RpcSaveProviderSettingsActionRequest, "action">,
566
+ request: Omit<SaveProviderSettingsActionRequest, "action">,
562
567
  ): { providerId: string; enabled: boolean; settingsPath: string } {
563
568
  const providerId = request.providerId.trim();
564
569
 
@@ -621,7 +626,7 @@ export function saveLocalProviderSettings(
621
626
  return { providerId, enabled: true, settingsPath: manager.getFilePath() };
622
627
  }
623
628
 
624
- export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
629
+ export function normalizeOAuthProvider(provider: string): OAuthProviderId {
625
630
  const normalized = provider.trim().toLowerCase();
626
631
  if (normalized === "codex" || normalized === "openai-codex")
627
632
  return "openai-codex";
@@ -632,7 +637,7 @@ export function normalizeOAuthProvider(provider: string): RpcOAuthProviderId {
632
637
  }
633
638
 
634
639
  function toProviderApiKey(
635
- providerId: RpcOAuthProviderId,
640
+ providerId: OAuthProviderId,
636
641
  credentials: { access: string },
637
642
  ): string {
638
643
  return providerId === "cline"
@@ -641,8 +646,8 @@ function toProviderApiKey(
641
646
  }
642
647
 
643
648
  export async function loginLocalProvider(
644
- providerId: RpcOAuthProviderId,
645
- existing: LlmsProviders.ProviderSettings | undefined,
649
+ providerId: OAuthProviderId,
650
+ existing: ProviderSettings | undefined,
646
651
  openUrl: (url: string) => void,
647
652
  ): Promise<{
648
653
  access: string;
@@ -671,28 +676,28 @@ export async function loginLocalProvider(
671
676
 
672
677
  export function saveLocalProviderOAuthCredentials(
673
678
  manager: ProviderSettingsManager,
674
- providerId: RpcOAuthProviderId,
675
- existing: LlmsProviders.ProviderSettings | undefined,
679
+ providerId: OAuthProviderId,
680
+ existing: ProviderSettings | undefined,
676
681
  credentials: {
677
682
  access: string;
678
683
  refresh: string;
679
684
  expires: number;
680
685
  accountId?: string;
681
686
  },
682
- ): LlmsProviders.ProviderSettings {
687
+ ): ProviderSettings {
683
688
  const auth = {
684
689
  ...(existing?.auth ?? {}),
685
690
  accessToken: toProviderApiKey(providerId, credentials),
686
691
  refreshToken: credentials.refresh,
687
692
  accountId: credentials.accountId,
688
693
  expiresAt: credentials.expires,
689
- } as LlmsProviders.ProviderSettings["auth"] & { expiresAt?: number };
694
+ } as ProviderSettings["auth"] & { expiresAt?: number };
690
695
 
691
- const merged: LlmsProviders.ProviderSettings = {
696
+ const merged: ProviderSettings = {
692
697
  ...(existing ?? {
693
- provider: providerId as LlmsProviders.ProviderSettings["provider"],
698
+ provider: providerId as ProviderSettings["provider"],
694
699
  }),
695
- provider: providerId as LlmsProviders.ProviderSettings["provider"],
700
+ provider: providerId as ProviderSettings["provider"],
696
701
  auth,
697
702
  };
698
703
  manager.saveProviderSettings(merged, { tokenSource: "oauth" });
@@ -700,7 +705,7 @@ export function saveLocalProviderOAuthCredentials(
700
705
  }
701
706
 
702
707
  export function resolveLocalClineAuthToken(
703
- settings: LlmsProviders.ProviderSettings | undefined,
708
+ settings: ProviderSettings | undefined,
704
709
  ): string | undefined {
705
710
  const token = settings?.auth?.accessToken?.trim() || settings?.apiKey?.trim();
706
711
  return token && token.length > 0 ? token : undefined;
@@ -12,7 +12,7 @@ import {
12
12
  type SessionManifest,
13
13
  SessionManifestSchema,
14
14
  } from "../session/session-manifest";
15
- import type { SessionRow } from "../session/session-service";
15
+ import type { SessionRow } from "../session/session-row";
16
16
  import type { SessionSource, SessionStatus } from "../types/common";
17
17
  import type { StoredMessageWithMetadata } from "../types/session";
18
18
  import type { SessionRecord } from "../types/sessions";
@@ -154,22 +154,28 @@ export function withLatestAssistantTurnMetadata(
154
154
  }
155
155
 
156
156
  const usage = result.usage;
157
+ const lastAssistantIndexForUsage =
158
+ assistantIndexes[assistantIndexes.length - 1];
157
159
  for (const targetIndex of assistantIndexes) {
158
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;
159
172
  next[targetIndex] = {
160
173
  ...normalizeStoredMessageModelMetadata(target, {
161
174
  id: result.model.id,
162
175
  provider: result.model.provider,
163
176
  family: result.model.info?.family,
164
177
  }),
165
- metrics: {
166
- ...(target.metrics ?? {}),
167
- inputTokens: usage.inputTokens,
168
- outputTokens: usage.outputTokens,
169
- cacheReadTokens: usage.cacheReadTokens ?? 0,
170
- cacheWriteTokens: usage.cacheWriteTokens ?? 0,
171
- cost: usage.totalCost,
172
- },
178
+ ...(metrics ? { metrics } : {}),
173
179
  ts: target.ts ?? result.endedAt.getTime(),
174
180
  };
175
181
  }
@@ -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
  }
@@ -5,7 +5,7 @@ import {
5
5
  emptyStoredProviderSettings,
6
6
  type ProviderConfig,
7
7
  type ProviderSettings,
8
- ProviderSettingsSchema,
8
+ ProviderSettingsSchemaTyped as ProviderSettingsSchema,
9
9
  type ProviderTokenSource,
10
10
  type StoredProviderSettings,
11
11
  StoredProviderSettingsSchema,
@@ -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
+ }
@@ -13,7 +13,7 @@ import type {
13
13
  SessionPersistenceAdapter,
14
14
  } from "./persistence-service";
15
15
  import { UnifiedSessionPersistenceService } from "./persistence-service";
16
- import type { SessionRow } from "./session-service";
16
+ import type { SessionRow } from "./session-row";
17
17
 
18
18
  interface FileSessionIndex {
19
19
  version: 1;
@@ -4,36 +4,10 @@ export {
4
4
  type WorkspaceManifest,
5
5
  WorkspaceManifestSchema,
6
6
  } from "@clinebot/shared";
7
- export type {
8
- ClineCore,
9
- ClineCoreOptions,
10
- ClineCoreStartInput,
11
- } from "../ClineCore";
12
- export type { SessionBackend } from "../runtime/host";
13
- export {
14
- createRuntimeHost,
15
- resolveSessionBackend,
16
- } from "../runtime/host";
17
- export type {
18
- LocalRuntimeConfigOverrides,
19
- LocalRuntimeStartOptions,
20
- RuntimeHost,
21
- RuntimeHost as SessionHost,
22
- RuntimeHostMode,
23
- RuntimeSessionConfig,
24
- SendSessionInput,
25
- SessionAccumulatedUsage,
26
- StartSessionInput,
27
- StartSessionResult,
28
- } from "../runtime/runtime-host";
29
- export { splitCoreSessionConfig } from "../runtime/runtime-host";
30
7
  export {
31
8
  generateWorkspaceInfo,
32
9
  normalizeWorkspacePath,
33
10
  } from "../services/workspace-manifest";
34
- export { LocalRuntimeHost } from "../transports/local";
35
- export { RpcRuntimeHost } from "../transports/rpc";
36
- export { RpcCoreSessionService } from "./rpc-session-service";
37
11
  export {
38
12
  deriveSubsessionStatus,
39
13
  makeSubSessionId,
@@ -44,8 +18,13 @@ export type { SessionManifest } from "./session-manifest";
44
18
  export type {
45
19
  CreateRootSessionWithArtifactsInput,
46
20
  RootSessionArtifacts,
47
- } from "./session-service";
21
+ SessionRow,
22
+ } from "./session-row";
48
23
  export { CoreSessionService } from "./session-service";
24
+ export {
25
+ FileTeamPersistenceStore,
26
+ type FileTeamPersistenceStoreOptions,
27
+ } from "./team-persistence-store";
49
28
  export type {
50
29
  WorkspaceManager,
51
30
  WorkspaceManagerEvent,