@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
@@ -1,387 +1,20 @@
1
- import {
2
- appendFileSync,
3
- existsSync,
4
- mkdirSync,
5
- readFileSync,
6
- renameSync,
7
- unlinkSync,
8
- writeFileSync,
9
- } from "node:fs";
10
- import { join } from "node:path";
11
- import type { TeamTeammateSpec } from "@clinebot/shared";
12
- import {
13
- resolveSessionDataDir,
14
- resolveTeamDataDir,
15
- } from "@clinebot/shared/storage";
16
- import type { AgentTeamsRuntime, TeamEvent } from "../extensions/tools/team";
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { resolveSessionDataDir } from "@clinebot/shared/storage";
17
3
  import { nowIso } from "../services/session-artifacts";
18
4
  import type { SqliteSessionStore } from "../services/storage/sqlite-session-store";
19
- import type { SessionSource, SessionStatus } from "../types/common";
20
5
  import type { SessionMessagesArtifactUploader } from "../types/session";
21
6
  import type {
22
7
  PersistedSessionUpdateInput,
23
8
  SessionPersistenceAdapter,
24
9
  } from "./persistence-service";
25
10
  import { UnifiedSessionPersistenceService } from "./persistence-service";
26
- import type { SessionManifest } from "./session-manifest";
27
-
28
- export interface SessionRow {
29
- sessionId: string;
30
- source: string;
31
- pid: number;
32
- startedAt: string;
33
- endedAt?: string | null;
34
- exitCode?: number | null;
35
- status: SessionStatus;
36
- statusLock: number;
37
- interactive: boolean;
38
- provider: string;
39
- model: string;
40
- cwd: string;
41
- workspaceRoot: string;
42
- teamName?: string | null;
43
- enableTools: boolean;
44
- enableSpawn: boolean;
45
- enableTeams: boolean;
46
- parentSessionId?: string | null;
47
- parentAgentId?: string | null;
48
- agentId?: string | null;
49
- conversationId?: string | null;
50
- isSubagent: boolean;
51
- prompt?: string | null;
52
- metadata?: Record<string, unknown> | null;
53
- hookPath?: string;
54
- messagesPath?: string | null;
55
- updatedAt: string;
56
- }
57
-
58
- export interface CreateRootSessionInput {
59
- sessionId: string;
60
- source: SessionSource;
61
- pid: number;
62
- startedAt: string;
63
- interactive: boolean;
64
- provider: string;
65
- model: string;
66
- cwd: string;
67
- workspaceRoot: string;
68
- teamName?: string;
69
- enableTools: boolean;
70
- enableSpawn: boolean;
71
- enableTeams: boolean;
72
- prompt?: string;
73
- metadata?: Record<string, unknown>;
74
- messagesPath: string;
75
- }
76
-
77
- export interface CreateRootSessionWithArtifactsInput {
78
- sessionId: string;
79
- source: SessionSource;
80
- pid: number;
81
- interactive: boolean;
82
- provider: string;
83
- model: string;
84
- cwd: string;
85
- workspaceRoot: string;
86
- teamName?: string;
87
- enableTools: boolean;
88
- enableSpawn: boolean;
89
- enableTeams: boolean;
90
- prompt?: string;
91
- metadata?: Record<string, unknown>;
92
- startedAt?: string;
93
- }
94
-
95
- export interface RootSessionArtifacts {
96
- manifestPath: string;
97
- messagesPath: string;
98
- manifest: SessionManifest;
99
- }
100
-
101
- export interface UpsertSubagentInput {
102
- agentId: string;
103
- parentAgentId: string;
104
- conversationId: string;
105
- prompt?: string;
106
- rootSessionId?: string;
107
- }
108
-
109
- // ── SQLite helpers ───────────────────────────────────────────────────
110
-
111
- /** SELECT clause that aliases snake_case columns to camelCase SessionRow keys. */
112
- const SESSION_SELECT_COLUMNS = `
113
- session_id AS sessionId,
114
- source,
115
- pid,
116
- started_at AS startedAt,
117
- ended_at AS endedAt,
118
- exit_code AS exitCode,
119
- status,
120
- status_lock AS statusLock,
121
- interactive,
122
- provider,
123
- model,
124
- cwd,
125
- workspace_root AS workspaceRoot,
126
- team_name AS teamName,
127
- enable_tools AS enableTools,
128
- enable_spawn AS enableSpawn,
129
- enable_teams AS enableTeams,
130
- parent_session_id AS parentSessionId,
131
- parent_agent_id AS parentAgentId,
132
- agent_id AS agentId,
133
- conversation_id AS conversationId,
134
- is_subagent AS isSubagent,
135
- prompt,
136
- metadata_json AS metadata,
137
- hook_path AS hookPath,
138
- messages_path AS messagesPath,
139
- updated_at AS updatedAt`;
140
-
141
- /**
142
- * Patch a raw SQLite result into a proper SessionRow.
143
- * SQLite returns 0/1 for booleans and a JSON string for metadata —
144
- * this converts them in-place to avoid allocating a second object.
145
- */
146
- function patchSqliteRow(raw: Record<string, unknown>): SessionRow {
147
- raw.interactive = raw.interactive === 1;
148
- raw.enableTools = raw.enableTools === 1;
149
- raw.enableSpawn = raw.enableSpawn === 1;
150
- raw.enableTeams = raw.enableTeams === 1;
151
- raw.isSubagent = raw.isSubagent === 1;
152
- const meta = raw.metadata;
153
- if (typeof meta === "string" && meta.trim()) {
154
- try {
155
- const parsed = JSON.parse(meta) as unknown;
156
- raw.metadata =
157
- parsed && typeof parsed === "object" && !Array.isArray(parsed)
158
- ? parsed
159
- : null;
160
- } catch {
161
- raw.metadata = null;
162
- }
163
- } else {
164
- raw.metadata = null;
165
- }
166
- return raw as unknown as SessionRow;
167
- }
168
-
169
- function stringifyMetadata(
170
- metadata: Record<string, unknown> | null | undefined,
171
- ): string | null {
172
- if (!metadata || Object.keys(metadata).length === 0) return null;
173
- return JSON.stringify(metadata);
174
- }
175
-
176
- function reviveTeamStateDates(state: TeamRuntimeState): TeamRuntimeState {
177
- return {
178
- ...state,
179
- tasks: state.tasks.map((task) => ({
180
- ...task,
181
- createdAt: new Date(task.createdAt),
182
- updatedAt: new Date(task.updatedAt),
183
- })),
184
- mailbox: state.mailbox.map((message) => ({
185
- ...message,
186
- sentAt: new Date(message.sentAt),
187
- readAt: message.readAt ? new Date(message.readAt) : undefined,
188
- })),
189
- missionLog: state.missionLog.map((entry) => ({
190
- ...entry,
191
- ts: new Date(entry.ts),
192
- })),
193
- runs: (state.runs ?? []).map((run) => ({
194
- ...run,
195
- startedAt: new Date(run.startedAt),
196
- endedAt: run.endedAt ? new Date(run.endedAt) : undefined,
197
- nextAttemptAt: run.nextAttemptAt
198
- ? new Date(run.nextAttemptAt)
199
- : undefined,
200
- heartbeatAt: run.heartbeatAt ? new Date(run.heartbeatAt) : undefined,
201
- })),
202
- outcomes: (state.outcomes ?? []).map((outcome) => ({
203
- ...outcome,
204
- createdAt: new Date(outcome.createdAt),
205
- finalizedAt: outcome.finalizedAt
206
- ? new Date(outcome.finalizedAt)
207
- : undefined,
208
- })),
209
- outcomeFragments: (state.outcomeFragments ?? []).map((fragment) => ({
210
- ...fragment,
211
- createdAt: new Date(fragment.createdAt),
212
- reviewedAt: fragment.reviewedAt
213
- ? new Date(fragment.reviewedAt)
214
- : undefined,
215
- })),
216
- };
217
- }
218
-
219
- function sanitizeTeamName(name: string): string {
220
- return name
221
- .toLowerCase()
222
- .replace(/[^a-z0-9._-]+/g, "-")
223
- .replace(/^-+|-+$/g, "");
224
- }
225
-
226
- interface PersistedTeamEnvelope {
227
- version: 1;
228
- updatedAt: string;
229
- teamState: TeamRuntimeState;
230
- teammates: TeamTeammateSpec[];
231
- }
232
-
233
- type TeamRuntimeState = ReturnType<AgentTeamsRuntime["exportState"]>;
234
-
235
- export interface FileTeamPersistenceStoreOptions {
236
- teamName: string;
237
- baseDir?: string;
238
- }
239
-
240
- export class FileTeamPersistenceStore {
241
- private readonly dirPath: string;
242
- private readonly statePath: string;
243
- private readonly taskHistoryPath: string;
244
- private readonly teammateSpecs: Map<string, TeamTeammateSpec> = new Map();
245
-
246
- constructor(options: FileTeamPersistenceStoreOptions) {
247
- const safeTeamName = sanitizeTeamName(options.teamName);
248
- const baseDir = options.baseDir?.trim() || resolveTeamDataDir();
249
- this.dirPath = join(baseDir, safeTeamName);
250
- this.statePath = join(this.dirPath, "state.json");
251
- this.taskHistoryPath = join(this.dirPath, "task-history.jsonl");
252
- }
253
-
254
- loadState(): TeamRuntimeState | undefined {
255
- if (!existsSync(this.statePath)) {
256
- return undefined;
257
- }
258
- try {
259
- const raw = readFileSync(this.statePath, "utf8");
260
- const parsed = JSON.parse(raw) as PersistedTeamEnvelope;
261
- if (parsed.version !== 1 || !parsed.teamState) {
262
- return undefined;
263
- }
264
- for (const spec of parsed.teammates ?? []) {
265
- this.teammateSpecs.set(spec.agentId, spec);
266
- }
267
- return reviveTeamStateDates(parsed.teamState);
268
- } catch {
269
- return undefined;
270
- }
271
- }
272
-
273
- getTeammateSpecs(): TeamTeammateSpec[] {
274
- return Array.from(this.teammateSpecs.values());
275
- }
276
-
277
- upsertTeammateSpec(spec: TeamTeammateSpec): void {
278
- this.teammateSpecs.set(spec.agentId, spec);
279
- }
280
-
281
- removeTeammateSpec(agentId: string): void {
282
- this.teammateSpecs.delete(agentId);
283
- }
284
-
285
- persist(runtime: AgentTeamsRuntime): void {
286
- if (!this.hasPersistableState(runtime)) {
287
- this.clearPersistedState();
288
- return;
289
- }
290
- this.ensureDir();
291
- const envelope: PersistedTeamEnvelope = {
292
- version: 1,
293
- updatedAt: new Date().toISOString(),
294
- teamState: runtime.exportState(),
295
- teammates: Array.from(this.teammateSpecs.values()),
296
- };
297
- const tmpPath = `${this.statePath}.tmp`;
298
- writeFileSync(tmpPath, `${JSON.stringify(envelope, null, 2)}\n`, "utf8");
299
- renameSync(tmpPath, this.statePath);
300
- }
301
-
302
- appendTaskHistory(event: TeamEvent): void {
303
- let task: Record<string, unknown> = {};
304
- switch (event.type) {
305
- case "team_task_updated":
306
- task = event.task as unknown as Record<string, unknown>;
307
- break;
308
- case "team_message":
309
- task = {
310
- agentId: event.message.fromAgentId,
311
- toAgentId: event.message.toAgentId,
312
- subject: event.message.subject,
313
- taskId: event.message.taskId,
314
- };
315
- break;
316
- case "team_mission_log":
317
- task = {
318
- agentId: event.entry.agentId,
319
- kind: event.entry.kind,
320
- summary: event.entry.summary,
321
- taskId: event.entry.taskId,
322
- };
323
- break;
324
- case "teammate_spawned":
325
- case "teammate_shutdown":
326
- case "task_start":
327
- task = {
328
- agentId: event.agentId,
329
- message: "message" in event ? event.message : undefined,
330
- };
331
- break;
332
- case "task_end":
333
- task = {
334
- agentId: event.agentId,
335
- finishReason: event.result?.finishReason,
336
- error: event.error?.message,
337
- };
338
- break;
339
- case "agent_event":
340
- task = {
341
- agentId: event.agentId,
342
- eventType: event.event.type,
343
- };
344
- break;
345
- }
346
- this.ensureDir();
347
- appendFileSync(
348
- this.taskHistoryPath,
349
- `${JSON.stringify({
350
- ts: new Date().toISOString(),
351
- type: event.type,
352
- task,
353
- })}\n`,
354
- "utf8",
355
- );
356
- }
357
-
358
- private ensureDir(): void {
359
- if (!existsSync(this.dirPath)) {
360
- mkdirSync(this.dirPath, { recursive: true });
361
- }
362
- }
363
-
364
- private hasPersistableState(runtime: AgentTeamsRuntime): boolean {
365
- const state = runtime.exportState();
366
- if (this.teammateSpecs.size > 0) {
367
- return true;
368
- }
369
- if (state.members.some((member) => member.role === "teammate")) {
370
- return true;
371
- }
372
- return (
373
- state.tasks.length > 0 ||
374
- state.mailbox.length > 0 ||
375
- state.missionLog.length > 0
376
- );
377
- }
378
-
379
- private clearPersistedState(): void {
380
- if (existsSync(this.statePath)) {
381
- unlinkSync(this.statePath);
382
- }
383
- }
384
- }
11
+ import {
12
+ type CreateRootSessionInput,
13
+ patchSqliteRow,
14
+ SESSION_SELECT_COLUMNS,
15
+ type SessionRow,
16
+ stringifyMetadata,
17
+ } from "./session-row";
385
18
 
386
19
  class LocalSessionPersistenceAdapter implements SessionPersistenceAdapter {
387
20
  constructor(
@@ -681,3 +314,11 @@ export class CoreSessionService extends UnifiedSessionPersistenceService {
681
314
  );
682
315
  }
683
316
  }
317
+
318
+ export type {
319
+ CreateRootSessionInput,
320
+ CreateRootSessionWithArtifactsInput,
321
+ RootSessionArtifacts,
322
+ SessionRow,
323
+ UpsertSubagentInput,
324
+ } from "./session-row";
@@ -141,7 +141,7 @@ export function emitTeamProgress(
141
141
  emit: (event: CoreSessionEvent) => void,
142
142
  ): void {
143
143
  if (!session.runtime.teamRuntime) return;
144
- const teamName = session.config.teamName?.trim() || "team";
144
+ const teamName = session.runtime.teamRuntime.getTeamName();
145
145
  emit({
146
146
  type: "team_progress",
147
147
  payload: {