@clinebot/core 0.0.20 → 0.0.21

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 (356) hide show
  1. package/dist/account/cline-account-service.d.ts +3 -2
  2. package/dist/account/cline-account-service.d.ts.map +1 -0
  3. package/dist/account/index.d.ts +1 -0
  4. package/dist/account/index.d.ts.map +1 -0
  5. package/dist/account/rpc.d.ts +1 -0
  6. package/dist/account/rpc.d.ts.map +1 -0
  7. package/dist/account/types.d.ts +1 -0
  8. package/dist/account/types.d.ts.map +1 -0
  9. package/dist/agents/agent-config-loader.d.ts +1 -0
  10. package/dist/agents/agent-config-loader.d.ts.map +1 -0
  11. package/dist/agents/agent-config-parser.d.ts +1 -0
  12. package/dist/agents/agent-config-parser.d.ts.map +1 -0
  13. package/dist/agents/hooks-config-loader.d.ts +1 -0
  14. package/dist/agents/hooks-config-loader.d.ts.map +1 -0
  15. package/dist/agents/index.d.ts +1 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/plugin-config-loader.d.ts +1 -0
  18. package/dist/agents/plugin-config-loader.d.ts.map +1 -0
  19. package/dist/agents/plugin-loader.d.ts +1 -0
  20. package/dist/agents/plugin-loader.d.ts.map +1 -0
  21. package/dist/agents/plugin-sandbox.d.ts +1 -0
  22. package/dist/agents/plugin-sandbox.d.ts.map +1 -0
  23. package/dist/agents/unified-config-file-watcher.d.ts +1 -0
  24. package/dist/agents/unified-config-file-watcher.d.ts.map +1 -0
  25. package/dist/agents/user-instruction-config-loader.d.ts +1 -0
  26. package/dist/agents/user-instruction-config-loader.d.ts.map +1 -0
  27. package/dist/auth/client.d.ts +1 -0
  28. package/dist/auth/client.d.ts.map +1 -0
  29. package/dist/auth/cline.d.ts +1 -0
  30. package/dist/auth/cline.d.ts.map +1 -0
  31. package/dist/auth/codex.d.ts +1 -0
  32. package/dist/auth/codex.d.ts.map +1 -0
  33. package/dist/auth/oca.d.ts +1 -0
  34. package/dist/auth/oca.d.ts.map +1 -0
  35. package/dist/auth/server.d.ts +1 -0
  36. package/dist/auth/server.d.ts.map +1 -0
  37. package/dist/auth/types.d.ts +1 -0
  38. package/dist/auth/types.d.ts.map +1 -0
  39. package/dist/auth/utils.d.ts +1 -0
  40. package/dist/auth/utils.d.ts.map +1 -0
  41. package/dist/chat/chat-schema.d.ts +13 -12
  42. package/dist/chat/chat-schema.d.ts.map +1 -0
  43. package/dist/index.d.ts +3 -1
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.node.d.ts +2 -0
  46. package/dist/index.node.d.ts.map +1 -0
  47. package/dist/index.node.js +303 -302
  48. package/dist/input/file-indexer.d.ts +1 -0
  49. package/dist/input/file-indexer.d.ts.map +1 -0
  50. package/dist/input/index.d.ts +1 -0
  51. package/dist/input/index.d.ts.map +1 -0
  52. package/dist/input/mention-enricher.d.ts +1 -0
  53. package/dist/input/mention-enricher.d.ts.map +1 -0
  54. package/dist/mcp/config-loader.d.ts +1 -0
  55. package/dist/mcp/config-loader.d.ts.map +1 -0
  56. package/dist/mcp/index.d.ts +1 -0
  57. package/dist/mcp/index.d.ts.map +1 -0
  58. package/dist/mcp/manager.d.ts +1 -0
  59. package/dist/mcp/manager.d.ts.map +1 -0
  60. package/dist/mcp/types.d.ts +1 -0
  61. package/dist/mcp/types.d.ts.map +1 -0
  62. package/dist/providers/local-provider-registry.d.ts +36 -0
  63. package/dist/providers/local-provider-registry.d.ts.map +1 -0
  64. package/dist/providers/local-provider-service.d.ts +2 -1
  65. package/dist/providers/local-provider-service.d.ts.map +1 -0
  66. package/dist/runtime/commands.d.ts +1 -0
  67. package/dist/runtime/commands.d.ts.map +1 -0
  68. package/dist/runtime/hook-file-hooks.d.ts +1 -0
  69. package/dist/runtime/hook-file-hooks.d.ts.map +1 -0
  70. package/dist/runtime/rules.d.ts +1 -0
  71. package/dist/runtime/rules.d.ts.map +1 -0
  72. package/dist/runtime/runtime-builder.d.ts +1 -0
  73. package/dist/runtime/runtime-builder.d.ts.map +1 -0
  74. package/dist/runtime/sandbox/subprocess-sandbox.d.ts +1 -0
  75. package/dist/runtime/sandbox/subprocess-sandbox.d.ts.map +1 -0
  76. package/dist/runtime/session-runtime.d.ts +2 -0
  77. package/dist/runtime/session-runtime.d.ts.map +1 -0
  78. package/dist/runtime/skills.d.ts +1 -0
  79. package/dist/runtime/skills.d.ts.map +1 -0
  80. package/dist/runtime/tool-approval.d.ts +1 -0
  81. package/dist/runtime/tool-approval.d.ts.map +1 -0
  82. package/dist/runtime/workflows.d.ts +1 -0
  83. package/dist/runtime/workflows.d.ts.map +1 -0
  84. package/dist/session/default-session-manager.d.ts +4 -0
  85. package/dist/session/default-session-manager.d.ts.map +1 -0
  86. package/dist/session/file-session-service.d.ts +1 -0
  87. package/dist/session/file-session-service.d.ts.map +1 -0
  88. package/dist/session/rpc-session-service.d.ts +1 -0
  89. package/dist/session/rpc-session-service.d.ts.map +1 -0
  90. package/dist/session/rpc-spawn-lease.d.ts +1 -0
  91. package/dist/session/rpc-spawn-lease.d.ts.map +1 -0
  92. package/dist/session/runtime-oauth-token-manager.d.ts +1 -0
  93. package/dist/session/runtime-oauth-token-manager.d.ts.map +1 -0
  94. package/dist/session/session-agent-events.d.ts +20 -1
  95. package/dist/session/session-agent-events.d.ts.map +1 -0
  96. package/dist/session/session-artifacts.d.ts +1 -0
  97. package/dist/session/session-artifacts.d.ts.map +1 -0
  98. package/dist/session/session-config-builder.d.ts +1 -0
  99. package/dist/session/session-config-builder.d.ts.map +1 -0
  100. package/dist/session/session-graph.d.ts +1 -0
  101. package/dist/session/session-graph.d.ts.map +1 -0
  102. package/dist/session/session-host.d.ts +1 -0
  103. package/dist/session/session-host.d.ts.map +1 -0
  104. package/dist/session/session-manager.d.ts +1 -0
  105. package/dist/session/session-manager.d.ts.map +1 -0
  106. package/dist/session/session-manifest.d.ts +2 -1
  107. package/dist/session/session-manifest.d.ts.map +1 -0
  108. package/dist/session/session-service.d.ts +1 -0
  109. package/dist/session/session-service.d.ts.map +1 -0
  110. package/dist/session/session-team-coordination.d.ts +1 -0
  111. package/dist/session/session-team-coordination.d.ts.map +1 -0
  112. package/dist/session/session-telemetry.d.ts +3 -1
  113. package/dist/session/session-telemetry.d.ts.map +1 -0
  114. package/dist/session/sqlite-rpc-session-backend.d.ts +1 -0
  115. package/dist/session/sqlite-rpc-session-backend.d.ts.map +1 -0
  116. package/dist/session/unified-session-persistence-service.d.ts +1 -0
  117. package/dist/session/unified-session-persistence-service.d.ts.map +1 -0
  118. package/dist/session/utils/helpers.d.ts +1 -0
  119. package/dist/session/utils/helpers.d.ts.map +1 -0
  120. package/dist/session/utils/types.d.ts +1 -0
  121. package/dist/session/utils/types.d.ts.map +1 -0
  122. package/dist/session/utils/usage.d.ts +1 -0
  123. package/dist/session/utils/usage.d.ts.map +1 -0
  124. package/dist/session/workspace-manager.d.ts +1 -0
  125. package/dist/session/workspace-manager.d.ts.map +1 -0
  126. package/dist/session/workspace-manifest.d.ts +1 -0
  127. package/dist/session/workspace-manifest.d.ts.map +1 -0
  128. package/dist/storage/file-team-store.d.ts +1 -0
  129. package/dist/storage/file-team-store.d.ts.map +1 -0
  130. package/dist/storage/provider-settings-legacy-migration.d.ts +1 -0
  131. package/dist/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  132. package/dist/storage/provider-settings-manager.d.ts +1 -0
  133. package/dist/storage/provider-settings-manager.d.ts.map +1 -0
  134. package/dist/storage/sqlite-session-store.d.ts +1 -0
  135. package/dist/storage/sqlite-session-store.d.ts.map +1 -0
  136. package/dist/storage/sqlite-team-store.d.ts +1 -0
  137. package/dist/storage/sqlite-team-store.d.ts.map +1 -0
  138. package/dist/storage/team-store.d.ts +1 -0
  139. package/dist/storage/team-store.d.ts.map +1 -0
  140. package/dist/team/index.d.ts +1 -0
  141. package/dist/team/index.d.ts.map +1 -0
  142. package/dist/team/projections.d.ts +1 -0
  143. package/dist/team/projections.d.ts.map +1 -0
  144. package/dist/telemetry/ITelemetryAdapter.d.ts +1 -0
  145. package/dist/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  146. package/dist/telemetry/LoggerTelemetryAdapter.d.ts +1 -0
  147. package/dist/telemetry/LoggerTelemetryAdapter.d.ts.map +1 -0
  148. package/dist/telemetry/OpenTelemetryAdapter.d.ts +1 -0
  149. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  150. package/dist/telemetry/OpenTelemetryProvider.d.ts +1 -0
  151. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  152. package/dist/telemetry/TelemetryService.d.ts +1 -0
  153. package/dist/telemetry/TelemetryService.d.ts.map +1 -0
  154. package/dist/telemetry/core-events.d.ts +55 -22
  155. package/dist/telemetry/core-events.d.ts.map +1 -0
  156. package/dist/telemetry/opentelemetry.d.ts +1 -0
  157. package/dist/telemetry/opentelemetry.d.ts.map +1 -0
  158. package/dist/tools/constants.d.ts +1 -0
  159. package/dist/tools/constants.d.ts.map +1 -0
  160. package/dist/tools/definitions.d.ts +8 -1
  161. package/dist/tools/definitions.d.ts.map +1 -0
  162. package/dist/tools/executors/apply-patch-parser.d.ts +1 -0
  163. package/dist/tools/executors/apply-patch-parser.d.ts.map +1 -0
  164. package/dist/tools/executors/apply-patch.d.ts +1 -0
  165. package/dist/tools/executors/apply-patch.d.ts.map +1 -0
  166. package/dist/tools/executors/bash.d.ts +2 -1
  167. package/dist/tools/executors/bash.d.ts.map +1 -0
  168. package/dist/tools/executors/editor.d.ts +1 -0
  169. package/dist/tools/executors/editor.d.ts.map +1 -0
  170. package/dist/tools/executors/file-read.d.ts +1 -0
  171. package/dist/tools/executors/file-read.d.ts.map +1 -0
  172. package/dist/tools/executors/index.d.ts +14 -7
  173. package/dist/tools/executors/index.d.ts.map +1 -0
  174. package/dist/tools/executors/search.d.ts +1 -0
  175. package/dist/tools/executors/search.d.ts.map +1 -0
  176. package/dist/tools/executors/web-fetch.d.ts +1 -0
  177. package/dist/tools/executors/web-fetch.d.ts.map +1 -0
  178. package/dist/tools/helpers.d.ts +15 -0
  179. package/dist/tools/helpers.d.ts.map +1 -0
  180. package/dist/tools/index.d.ts +2 -1
  181. package/dist/tools/index.d.ts.map +1 -0
  182. package/dist/tools/model-tool-routing.d.ts +1 -0
  183. package/dist/tools/model-tool-routing.d.ts.map +1 -0
  184. package/dist/tools/presets.d.ts +1 -0
  185. package/dist/tools/presets.d.ts.map +1 -0
  186. package/dist/tools/schemas.d.ts +41 -0
  187. package/dist/tools/schemas.d.ts.map +1 -0
  188. package/dist/tools/types.d.ts +3 -2
  189. package/dist/tools/types.d.ts.map +1 -0
  190. package/dist/types/common.d.ts +1 -0
  191. package/dist/types/common.d.ts.map +1 -0
  192. package/dist/types/config.d.ts +1 -0
  193. package/dist/types/config.d.ts.map +1 -0
  194. package/dist/types/events.d.ts +1 -0
  195. package/dist/types/events.d.ts.map +1 -0
  196. package/dist/types/provider-settings.d.ts +1 -0
  197. package/dist/types/provider-settings.d.ts.map +1 -0
  198. package/dist/types/sessions.d.ts +1 -0
  199. package/dist/types/sessions.d.ts.map +1 -0
  200. package/dist/types/storage.d.ts +1 -0
  201. package/dist/types/storage.d.ts.map +1 -0
  202. package/dist/types/workspace.d.ts +1 -0
  203. package/dist/types/workspace.d.ts.map +1 -0
  204. package/dist/types.d.ts +1 -0
  205. package/dist/types.d.ts.map +1 -0
  206. package/package.json +6 -4
  207. package/src/account/cline-account-service.test.ts +0 -101
  208. package/src/account/cline-account-service.ts +0 -287
  209. package/src/account/index.ts +0 -22
  210. package/src/account/rpc.test.ts +0 -62
  211. package/src/account/rpc.ts +0 -172
  212. package/src/account/types.ts +0 -98
  213. package/src/agents/agent-config-loader.test.ts +0 -236
  214. package/src/agents/agent-config-loader.ts +0 -108
  215. package/src/agents/agent-config-parser.ts +0 -198
  216. package/src/agents/hooks-config-loader.test.ts +0 -20
  217. package/src/agents/hooks-config-loader.ts +0 -118
  218. package/src/agents/index.ts +0 -85
  219. package/src/agents/plugin-config-loader.test.ts +0 -140
  220. package/src/agents/plugin-config-loader.ts +0 -97
  221. package/src/agents/plugin-loader.test.ts +0 -228
  222. package/src/agents/plugin-loader.ts +0 -172
  223. package/src/agents/plugin-sandbox-bootstrap.ts +0 -445
  224. package/src/agents/plugin-sandbox.test.ts +0 -317
  225. package/src/agents/plugin-sandbox.ts +0 -341
  226. package/src/agents/unified-config-file-watcher.test.ts +0 -196
  227. package/src/agents/unified-config-file-watcher.ts +0 -483
  228. package/src/agents/user-instruction-config-loader.test.ts +0 -158
  229. package/src/agents/user-instruction-config-loader.ts +0 -438
  230. package/src/auth/client.test.ts +0 -40
  231. package/src/auth/client.ts +0 -25
  232. package/src/auth/cline.test.ts +0 -130
  233. package/src/auth/cline.ts +0 -420
  234. package/src/auth/codex.test.ts +0 -170
  235. package/src/auth/codex.ts +0 -491
  236. package/src/auth/oca.test.ts +0 -215
  237. package/src/auth/oca.ts +0 -573
  238. package/src/auth/server.ts +0 -216
  239. package/src/auth/types.ts +0 -81
  240. package/src/auth/utils.test.ts +0 -128
  241. package/src/auth/utils.ts +0 -247
  242. package/src/chat/chat-schema.ts +0 -82
  243. package/src/index.node.ts +0 -285
  244. package/src/index.ts +0 -211
  245. package/src/input/file-indexer.d.ts +0 -11
  246. package/src/input/file-indexer.test.ts +0 -127
  247. package/src/input/file-indexer.ts +0 -327
  248. package/src/input/index.ts +0 -7
  249. package/src/input/mention-enricher.test.ts +0 -85
  250. package/src/input/mention-enricher.ts +0 -122
  251. package/src/mcp/config-loader.test.ts +0 -238
  252. package/src/mcp/config-loader.ts +0 -219
  253. package/src/mcp/index.ts +0 -26
  254. package/src/mcp/manager.test.ts +0 -106
  255. package/src/mcp/manager.ts +0 -262
  256. package/src/mcp/types.ts +0 -88
  257. package/src/providers/local-provider-service.ts +0 -608
  258. package/src/runtime/commands.test.ts +0 -98
  259. package/src/runtime/commands.ts +0 -83
  260. package/src/runtime/hook-file-hooks.test.ts +0 -237
  261. package/src/runtime/hook-file-hooks.ts +0 -859
  262. package/src/runtime/index.ts +0 -37
  263. package/src/runtime/rules.ts +0 -34
  264. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -202
  265. package/src/runtime/runtime-builder.test.ts +0 -371
  266. package/src/runtime/runtime-builder.ts +0 -589
  267. package/src/runtime/runtime-parity.test.ts +0 -143
  268. package/src/runtime/sandbox/subprocess-sandbox.ts +0 -231
  269. package/src/runtime/session-runtime.ts +0 -46
  270. package/src/runtime/skills.ts +0 -44
  271. package/src/runtime/tool-approval.ts +0 -104
  272. package/src/runtime/workflows.test.ts +0 -119
  273. package/src/runtime/workflows.ts +0 -45
  274. package/src/session/default-session-manager.e2e.test.ts +0 -384
  275. package/src/session/default-session-manager.test.ts +0 -1741
  276. package/src/session/default-session-manager.ts +0 -1233
  277. package/src/session/file-session-service.ts +0 -280
  278. package/src/session/index.ts +0 -42
  279. package/src/session/rpc-session-service.ts +0 -107
  280. package/src/session/rpc-spawn-lease.test.ts +0 -49
  281. package/src/session/rpc-spawn-lease.ts +0 -122
  282. package/src/session/runtime-oauth-token-manager.test.ts +0 -137
  283. package/src/session/runtime-oauth-token-manager.ts +0 -272
  284. package/src/session/session-agent-events.ts +0 -159
  285. package/src/session/session-artifacts.ts +0 -106
  286. package/src/session/session-config-builder.ts +0 -113
  287. package/src/session/session-graph.ts +0 -92
  288. package/src/session/session-host.test.ts +0 -29
  289. package/src/session/session-host.ts +0 -242
  290. package/src/session/session-manager.ts +0 -69
  291. package/src/session/session-manifest.ts +0 -29
  292. package/src/session/session-service.team-persistence.test.ts +0 -48
  293. package/src/session/session-service.ts +0 -673
  294. package/src/session/session-team-coordination.ts +0 -229
  295. package/src/session/session-telemetry.ts +0 -95
  296. package/src/session/sqlite-rpc-session-backend.ts +0 -303
  297. package/src/session/unified-session-persistence-service.test.ts +0 -85
  298. package/src/session/unified-session-persistence-service.ts +0 -996
  299. package/src/session/utils/helpers.ts +0 -139
  300. package/src/session/utils/types.ts +0 -57
  301. package/src/session/utils/usage.ts +0 -32
  302. package/src/session/workspace-manager.ts +0 -98
  303. package/src/session/workspace-manifest.ts +0 -100
  304. package/src/storage/artifact-store.ts +0 -1
  305. package/src/storage/file-team-store.ts +0 -257
  306. package/src/storage/index.ts +0 -11
  307. package/src/storage/provider-settings-legacy-migration.test.ts +0 -307
  308. package/src/storage/provider-settings-legacy-migration.ts +0 -689
  309. package/src/storage/provider-settings-manager.test.ts +0 -145
  310. package/src/storage/provider-settings-manager.ts +0 -150
  311. package/src/storage/session-store.ts +0 -1
  312. package/src/storage/sqlite-session-store.ts +0 -275
  313. package/src/storage/sqlite-team-store.ts +0 -454
  314. package/src/storage/team-store.ts +0 -40
  315. package/src/team/index.ts +0 -4
  316. package/src/team/projections.ts +0 -285
  317. package/src/telemetry/ITelemetryAdapter.ts +0 -94
  318. package/src/telemetry/LoggerTelemetryAdapter.test.ts +0 -42
  319. package/src/telemetry/LoggerTelemetryAdapter.ts +0 -114
  320. package/src/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/telemetry/OpenTelemetryAdapter.ts +0 -348
  322. package/src/telemetry/OpenTelemetryProvider.test.ts +0 -113
  323. package/src/telemetry/OpenTelemetryProvider.ts +0 -322
  324. package/src/telemetry/TelemetryService.test.ts +0 -134
  325. package/src/telemetry/TelemetryService.ts +0 -141
  326. package/src/telemetry/core-events.ts +0 -344
  327. package/src/telemetry/opentelemetry.ts +0 -20
  328. package/src/tools/constants.ts +0 -35
  329. package/src/tools/definitions.test.ts +0 -658
  330. package/src/tools/definitions.ts +0 -726
  331. package/src/tools/executors/apply-patch-parser.ts +0 -520
  332. package/src/tools/executors/apply-patch.ts +0 -359
  333. package/src/tools/executors/bash.ts +0 -205
  334. package/src/tools/executors/editor.test.ts +0 -35
  335. package/src/tools/executors/editor.ts +0 -219
  336. package/src/tools/executors/file-read.test.ts +0 -49
  337. package/src/tools/executors/file-read.ts +0 -110
  338. package/src/tools/executors/index.ts +0 -75
  339. package/src/tools/executors/search.ts +0 -278
  340. package/src/tools/executors/web-fetch.ts +0 -259
  341. package/src/tools/index.ts +0 -168
  342. package/src/tools/model-tool-routing.test.ts +0 -86
  343. package/src/tools/model-tool-routing.ts +0 -132
  344. package/src/tools/presets.test.ts +0 -62
  345. package/src/tools/presets.ts +0 -168
  346. package/src/tools/schemas.ts +0 -284
  347. package/src/tools/types.ts +0 -328
  348. package/src/types/common.ts +0 -14
  349. package/src/types/config.ts +0 -84
  350. package/src/types/events.ts +0 -74
  351. package/src/types/index.ts +0 -24
  352. package/src/types/provider-settings.ts +0 -43
  353. package/src/types/sessions.ts +0 -16
  354. package/src/types/storage.ts +0 -64
  355. package/src/types/workspace.ts +0 -7
  356. package/src/types.ts +0 -128
@@ -1,454 +0,0 @@
1
- import { existsSync, mkdirSync } from "node:fs";
2
- import { join } from "node:path";
3
- import type {
4
- TeamEvent,
5
- TeamRuntimeState,
6
- TeamTeammateSpec,
7
- } from "@clinebot/agents";
8
- import { loadSqliteDb, nowIso, type SqliteDb } from "@clinebot/shared/db";
9
- import { resolveTeamDataDir } from "@clinebot/shared/storage";
10
- import type { TeamStore } from "../types/storage";
11
-
12
- function defaultTeamDir(): string {
13
- return resolveTeamDataDir();
14
- }
15
-
16
- function sanitizeTeamName(name: string): string {
17
- return name
18
- .toLowerCase()
19
- .replace(/[^a-z0-9._-]+/g, "-")
20
- .replace(/^-+|-+$/g, "");
21
- }
22
-
23
- export interface SqliteTeamStoreOptions {
24
- teamDir?: string;
25
- }
26
-
27
- export interface TeamRuntimeLoadResult {
28
- state?: TeamRuntimeState;
29
- teammates: TeamTeammateSpec[];
30
- interruptedRunIds: string[];
31
- }
32
-
33
- interface TeamSnapshotRow {
34
- team_name: string;
35
- state_json: string;
36
- teammates_json: string;
37
- updated_at: string;
38
- }
39
-
40
- interface TeamRunRow {
41
- run_id: string;
42
- }
43
-
44
- function reviveTeamRuntimeStateDates(
45
- state: TeamRuntimeState,
46
- ): TeamRuntimeState {
47
- return {
48
- ...state,
49
- tasks: state.tasks.map((task) => ({
50
- ...task,
51
- createdAt: new Date(task.createdAt),
52
- updatedAt: new Date(task.updatedAt),
53
- })),
54
- mailbox: state.mailbox.map((message) => ({
55
- ...message,
56
- sentAt: new Date(message.sentAt),
57
- readAt: message.readAt ? new Date(message.readAt) : undefined,
58
- })),
59
- missionLog: state.missionLog.map((entry) => ({
60
- ...entry,
61
- ts: new Date(entry.ts),
62
- })),
63
- runs: (state.runs ?? []).map((run) => ({
64
- ...run,
65
- startedAt: new Date(run.startedAt),
66
- endedAt: run.endedAt ? new Date(run.endedAt) : undefined,
67
- nextAttemptAt: run.nextAttemptAt
68
- ? new Date(run.nextAttemptAt)
69
- : undefined,
70
- heartbeatAt: run.heartbeatAt ? new Date(run.heartbeatAt) : undefined,
71
- })),
72
- outcomes: (state.outcomes ?? []).map((outcome) => ({
73
- ...outcome,
74
- createdAt: new Date(outcome.createdAt),
75
- finalizedAt: outcome.finalizedAt
76
- ? new Date(outcome.finalizedAt)
77
- : undefined,
78
- })),
79
- outcomeFragments: (state.outcomeFragments ?? []).map((fragment) => ({
80
- ...fragment,
81
- createdAt: new Date(fragment.createdAt),
82
- reviewedAt: fragment.reviewedAt
83
- ? new Date(fragment.reviewedAt)
84
- : undefined,
85
- })),
86
- };
87
- }
88
-
89
- export class SqliteTeamStore implements TeamStore {
90
- private readonly teamDirPath: string;
91
- private db: SqliteDb | undefined;
92
-
93
- constructor(options: SqliteTeamStoreOptions = {}) {
94
- this.teamDirPath = options.teamDir ?? defaultTeamDir();
95
- }
96
-
97
- init(): void {
98
- this.getRawDb();
99
- }
100
-
101
- private ensureTeamDir(): string {
102
- if (!existsSync(this.teamDirPath)) {
103
- mkdirSync(this.teamDirPath, { recursive: true });
104
- }
105
- return this.teamDirPath;
106
- }
107
-
108
- private dbPath(): string {
109
- return join(this.ensureTeamDir(), "teams.db");
110
- }
111
-
112
- private getRawDb(): SqliteDb {
113
- if (this.db) {
114
- return this.db;
115
- }
116
- const db = loadSqliteDb(this.dbPath());
117
- this.ensureSchema(db);
118
- this.db = db;
119
- return db;
120
- }
121
-
122
- private ensureSchema(db: SqliteDb): void {
123
- db.exec("PRAGMA journal_mode = WAL;");
124
- db.exec("PRAGMA busy_timeout = 5000;");
125
- db.exec(`
126
- CREATE TABLE IF NOT EXISTS team_events (
127
- id INTEGER PRIMARY KEY AUTOINCREMENT,
128
- team_name TEXT NOT NULL,
129
- ts TEXT NOT NULL,
130
- event_type TEXT NOT NULL,
131
- payload_json TEXT NOT NULL,
132
- causation_id TEXT,
133
- correlation_id TEXT
134
- );
135
- `);
136
- db.exec(`
137
- CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
138
- ON team_events(team_name, ts DESC);
139
- `);
140
- db.exec(`
141
- CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
142
- team_name TEXT PRIMARY KEY,
143
- state_json TEXT NOT NULL,
144
- teammates_json TEXT NOT NULL,
145
- updated_at TEXT NOT NULL
146
- );
147
- `);
148
- db.exec(`
149
- CREATE TABLE IF NOT EXISTS team_tasks (
150
- team_name TEXT NOT NULL,
151
- task_id TEXT NOT NULL,
152
- title TEXT NOT NULL,
153
- description TEXT NOT NULL,
154
- status TEXT NOT NULL,
155
- assignee TEXT,
156
- depends_on_json TEXT NOT NULL,
157
- summary TEXT,
158
- version INTEGER NOT NULL DEFAULT 1,
159
- updated_at TEXT NOT NULL,
160
- PRIMARY KEY(team_name, task_id)
161
- );
162
- `);
163
- db.exec(`
164
- CREATE TABLE IF NOT EXISTS team_runs (
165
- team_name TEXT NOT NULL,
166
- run_id TEXT NOT NULL,
167
- agent_id TEXT NOT NULL,
168
- task_id TEXT,
169
- status TEXT NOT NULL,
170
- message TEXT NOT NULL,
171
- started_at TEXT,
172
- ended_at TEXT,
173
- error TEXT,
174
- lease_owner TEXT,
175
- heartbeat_at TEXT,
176
- version INTEGER NOT NULL DEFAULT 1,
177
- PRIMARY KEY(team_name, run_id)
178
- );
179
- `);
180
- db.exec(`
181
- CREATE INDEX IF NOT EXISTS idx_team_runs_status
182
- ON team_runs(team_name, status);
183
- `);
184
- db.exec(`
185
- CREATE TABLE IF NOT EXISTS team_outcomes (
186
- team_name TEXT NOT NULL,
187
- outcome_id TEXT NOT NULL,
188
- title TEXT NOT NULL,
189
- status TEXT NOT NULL,
190
- schema_json TEXT NOT NULL,
191
- finalized_at TEXT,
192
- version INTEGER NOT NULL DEFAULT 1,
193
- PRIMARY KEY(team_name, outcome_id)
194
- );
195
- `);
196
- db.exec(`
197
- CREATE TABLE IF NOT EXISTS team_outcome_fragments (
198
- team_name TEXT NOT NULL,
199
- outcome_id TEXT NOT NULL,
200
- fragment_id TEXT NOT NULL,
201
- section TEXT NOT NULL,
202
- source_agent_id TEXT NOT NULL,
203
- source_run_id TEXT,
204
- content TEXT NOT NULL,
205
- status TEXT NOT NULL,
206
- reviewed_by TEXT,
207
- reviewed_at TEXT,
208
- version INTEGER NOT NULL DEFAULT 1,
209
- PRIMARY KEY(team_name, fragment_id)
210
- );
211
- `);
212
- }
213
-
214
- private run(sql: string, params: unknown[] = []): { changes?: number } {
215
- return this.getRawDb()
216
- .prepare(sql)
217
- .run(...params);
218
- }
219
-
220
- private queryOne<T>(sql: string, params: unknown[] = []): T | undefined {
221
- const row = this.getRawDb()
222
- .prepare(sql)
223
- .get(...params);
224
- return (row as T | null) ?? undefined;
225
- }
226
-
227
- private queryAll<T>(sql: string, params: unknown[] = []): T[] {
228
- return this.getRawDb()
229
- .prepare(sql)
230
- .all(...params) as T[];
231
- }
232
-
233
- listTeamNames(): string[] {
234
- return this.queryAll<{ team_name: string }>(
235
- `SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC`,
236
- ).map((row) => row.team_name);
237
- }
238
-
239
- readState(teamName: string): TeamRuntimeState | undefined {
240
- const row = this.queryOne<TeamSnapshotRow>(
241
- `SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?`,
242
- [sanitizeTeamName(teamName)],
243
- );
244
- if (!row) {
245
- return undefined;
246
- }
247
- return reviveTeamRuntimeStateDates(
248
- JSON.parse(row.state_json) as TeamRuntimeState,
249
- );
250
- }
251
-
252
- readHistory(teamName: string, limit = 200): unknown[] {
253
- return this.queryAll<{
254
- event_type: string;
255
- payload_json: string;
256
- ts: string;
257
- }>(
258
- `SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?`,
259
- [sanitizeTeamName(teamName), limit],
260
- ).map((row) => ({
261
- eventType: row.event_type,
262
- payload: JSON.parse(row.payload_json),
263
- ts: row.ts,
264
- }));
265
- }
266
-
267
- loadRuntime(teamName: string): TeamRuntimeLoadResult {
268
- const safeTeamName = sanitizeTeamName(teamName);
269
- const state = this.readState(safeTeamName);
270
- const snapshotRow = this.queryOne<TeamSnapshotRow>(
271
- `SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?`,
272
- [safeTeamName],
273
- );
274
- const teammates = snapshotRow
275
- ? (JSON.parse(snapshotRow.teammates_json) as TeamTeammateSpec[])
276
- : [];
277
- const interruptedRunIds = this.markInProgressRunsInterrupted(
278
- safeTeamName,
279
- "runtime_recovered",
280
- );
281
- return {
282
- state,
283
- teammates,
284
- interruptedRunIds,
285
- };
286
- }
287
-
288
- appendTeamEvent(
289
- teamName: string,
290
- eventType: string,
291
- payload: unknown,
292
- correlationId?: string,
293
- ): void {
294
- this.run(
295
- `INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
296
- VALUES (?, ?, ?, ?, NULL, ?)`,
297
- [
298
- sanitizeTeamName(teamName),
299
- nowIso(),
300
- eventType,
301
- JSON.stringify(payload),
302
- correlationId ?? null,
303
- ],
304
- );
305
- }
306
-
307
- persistRuntime(
308
- teamName: string,
309
- state: TeamRuntimeState,
310
- teammates: TeamTeammateSpec[],
311
- ): void {
312
- const safeTeamName = sanitizeTeamName(teamName);
313
- const now = nowIso();
314
- this.run(
315
- `INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
316
- VALUES (?, ?, ?, ?)
317
- ON CONFLICT(team_name) DO UPDATE SET
318
- state_json = excluded.state_json,
319
- teammates_json = excluded.teammates_json,
320
- updated_at = excluded.updated_at`,
321
- [safeTeamName, JSON.stringify(state), JSON.stringify(teammates), now],
322
- );
323
-
324
- for (const task of state.tasks) {
325
- this.run(
326
- `INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
327
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
328
- ON CONFLICT(team_name, task_id) DO UPDATE SET
329
- title = excluded.title,
330
- description = excluded.description,
331
- status = excluded.status,
332
- assignee = excluded.assignee,
333
- depends_on_json = excluded.depends_on_json,
334
- summary = excluded.summary,
335
- version = team_tasks.version + 1,
336
- updated_at = excluded.updated_at`,
337
- [
338
- safeTeamName,
339
- task.id,
340
- task.title,
341
- task.description,
342
- task.status,
343
- task.assignee ?? null,
344
- JSON.stringify(task.dependsOn ?? []),
345
- task.summary ?? null,
346
- task.updatedAt.toISOString(),
347
- ],
348
- );
349
- }
350
-
351
- for (const run of state.runs ?? []) {
352
- this.run(
353
- `INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
354
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
355
- ON CONFLICT(team_name, run_id) DO UPDATE SET
356
- agent_id = excluded.agent_id,
357
- task_id = excluded.task_id,
358
- status = excluded.status,
359
- message = excluded.message,
360
- started_at = excluded.started_at,
361
- ended_at = excluded.ended_at,
362
- error = excluded.error,
363
- lease_owner = excluded.lease_owner,
364
- heartbeat_at = excluded.heartbeat_at,
365
- version = team_runs.version + 1`,
366
- [
367
- safeTeamName,
368
- run.id,
369
- run.agentId,
370
- run.taskId ?? null,
371
- run.status,
372
- run.message,
373
- run.startedAt ? run.startedAt.toISOString() : null,
374
- run.endedAt ? run.endedAt.toISOString() : null,
375
- run.error ?? null,
376
- run.leaseOwner ?? null,
377
- run.heartbeatAt ? run.heartbeatAt.toISOString() : null,
378
- ],
379
- );
380
- }
381
-
382
- for (const outcome of state.outcomes ?? []) {
383
- this.run(
384
- `INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
385
- VALUES (?, ?, ?, ?, ?, ?, 1)
386
- ON CONFLICT(team_name, outcome_id) DO UPDATE SET
387
- title = excluded.title,
388
- status = excluded.status,
389
- schema_json = excluded.schema_json,
390
- finalized_at = excluded.finalized_at,
391
- version = team_outcomes.version + 1`,
392
- [
393
- safeTeamName,
394
- outcome.id,
395
- outcome.title,
396
- outcome.status,
397
- JSON.stringify({ requiredSections: outcome.requiredSections }),
398
- outcome.finalizedAt ? outcome.finalizedAt.toISOString() : null,
399
- ],
400
- );
401
- }
402
-
403
- for (const fragment of state.outcomeFragments ?? []) {
404
- this.run(
405
- `INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
406
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
407
- ON CONFLICT(team_name, fragment_id) DO UPDATE SET
408
- outcome_id = excluded.outcome_id,
409
- section = excluded.section,
410
- source_agent_id = excluded.source_agent_id,
411
- source_run_id = excluded.source_run_id,
412
- content = excluded.content,
413
- status = excluded.status,
414
- reviewed_by = excluded.reviewed_by,
415
- reviewed_at = excluded.reviewed_at,
416
- version = team_outcome_fragments.version + 1`,
417
- [
418
- safeTeamName,
419
- fragment.outcomeId,
420
- fragment.id,
421
- fragment.section,
422
- fragment.sourceAgentId,
423
- fragment.sourceRunId ?? null,
424
- fragment.content,
425
- fragment.status,
426
- fragment.reviewedBy ?? null,
427
- fragment.reviewedAt ? fragment.reviewedAt.toISOString() : null,
428
- ],
429
- );
430
- }
431
- }
432
-
433
- markInProgressRunsInterrupted(teamName: string, reason: string): string[] {
434
- const safeTeamName = sanitizeTeamName(teamName);
435
- const rows = this.queryAll<TeamRunRow>(
436
- `SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')`,
437
- [safeTeamName],
438
- );
439
- if (rows.length === 0) {
440
- return [];
441
- }
442
- const now = nowIso();
443
- this.run(
444
- `UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
445
- WHERE team_name = ? AND status IN ('queued', 'running')`,
446
- [reason, now, safeTeamName],
447
- );
448
- return rows.map((row) => row.run_id);
449
- }
450
-
451
- handleTeamEvent(teamName: string, event: TeamEvent): void {
452
- this.appendTeamEvent(teamName, event.type, event);
453
- }
454
- }
@@ -1,40 +0,0 @@
1
- export type { TeamStore } from "../types/storage";
2
- export {
3
- FileTeamStore,
4
- type FileTeamStoreOptions,
5
- } from "./file-team-store";
6
- export {
7
- SqliteTeamStore,
8
- type SqliteTeamStoreOptions,
9
- } from "./sqlite-team-store";
10
-
11
- import { FileTeamStore } from "./file-team-store";
12
- import {
13
- SqliteTeamStore,
14
- type SqliteTeamStoreOptions,
15
- } from "./sqlite-team-store";
16
-
17
- export function createLocalTeamStore(options: SqliteTeamStoreOptions = {}): {
18
- init(): void;
19
- listTeamNames(): string[];
20
- readState(teamName: string): ReturnType<FileTeamStore["readState"]>;
21
- readHistory(teamName: string, limit?: number): unknown[];
22
- loadRuntime(teamName: string): ReturnType<FileTeamStore["loadRuntime"]>;
23
- handleTeamEvent: FileTeamStore["handleTeamEvent"];
24
- persistRuntime: FileTeamStore["persistRuntime"];
25
- markInProgressRunsInterrupted: FileTeamStore["markInProgressRunsInterrupted"];
26
- } {
27
- try {
28
- const store = new SqliteTeamStore(options);
29
- store.init();
30
- return store;
31
- } catch (error) {
32
- console.warn(
33
- "SQLite team persistence unavailable, falling back to file-based team storage.",
34
- error,
35
- );
36
- const store = new FileTeamStore({ teamDir: options.teamDir });
37
- store.init();
38
- return store;
39
- }
40
- }
package/src/team/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export {
2
- buildTeamProgressSummary,
3
- toTeamProgressLifecycleEvent,
4
- } from "./projections";