@loompad/cli 0.1.0 → 1.1.1

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 (687) hide show
  1. package/ARCHITECTURE.md +96 -11
  2. package/CHANGELOG.md +1042 -0
  3. package/README.md +1473 -44
  4. package/THIRD_PARTY_NOTICES.md +275 -0
  5. package/dist/adapters/antigravity-cli.d.ts +62 -0
  6. package/dist/adapters/antigravity-cli.js +258 -0
  7. package/dist/adapters/antigravity-cli.js.map +1 -0
  8. package/dist/adapters/base.d.ts +61 -9
  9. package/dist/adapters/base.js +266 -15
  10. package/dist/adapters/base.js.map +1 -1
  11. package/dist/adapters/bridges/antigravity.d.ts +9 -12
  12. package/dist/adapters/bridges/antigravity.js +9 -12
  13. package/dist/adapters/bridges/antigravity.js.map +1 -1
  14. package/dist/adapters/echo.d.ts +1 -0
  15. package/dist/adapters/echo.js +59 -3
  16. package/dist/adapters/echo.js.map +1 -1
  17. package/dist/adapters/grok.d.ts +7 -0
  18. package/dist/adapters/grok.js +20 -10
  19. package/dist/adapters/grok.js.map +1 -1
  20. package/dist/adapters/index.d.ts +5 -1
  21. package/dist/adapters/index.js +53 -7
  22. package/dist/adapters/index.js.map +1 -1
  23. package/dist/adapters/model.d.ts +137 -0
  24. package/dist/adapters/model.js +527 -0
  25. package/dist/adapters/model.js.map +1 -0
  26. package/dist/adapters/opencode.d.ts +101 -1
  27. package/dist/adapters/opencode.js +874 -98
  28. package/dist/adapters/opencode.js.map +1 -1
  29. package/dist/cli/doctor.d.ts +32 -0
  30. package/dist/cli/doctor.js +89 -4
  31. package/dist/cli/doctor.js.map +1 -1
  32. package/dist/cli/index.js +2651 -87
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/tui-model.js +3 -1
  35. package/dist/cli/tui-model.js.map +1 -1
  36. package/dist/cli/tui.js +44 -1
  37. package/dist/cli/tui.js.map +1 -1
  38. package/dist/cli/ui.d.ts +2 -0
  39. package/dist/cli/ui.js +13 -0
  40. package/dist/cli/ui.js.map +1 -1
  41. package/dist/core/ades.d.ts +32 -16
  42. package/dist/core/ades.js +57 -20
  43. package/dist/core/ades.js.map +1 -1
  44. package/dist/core/agent-state.d.ts +14 -0
  45. package/dist/core/agent-state.js +32 -0
  46. package/dist/core/agent-state.js.map +1 -0
  47. package/dist/core/approvals.d.ts +33 -0
  48. package/dist/core/approvals.js +29 -0
  49. package/dist/core/approvals.js.map +1 -0
  50. package/dist/core/backup.d.ts +19 -0
  51. package/dist/core/backup.js +86 -0
  52. package/dist/core/backup.js.map +1 -0
  53. package/dist/core/baton.d.ts +2 -2
  54. package/dist/core/baton.js.map +1 -1
  55. package/dist/core/brain-extract.d.ts +17 -0
  56. package/dist/core/brain-extract.js +28 -2
  57. package/dist/core/brain-extract.js.map +1 -1
  58. package/dist/core/brain-index.d.ts +71 -0
  59. package/dist/core/brain-index.js +204 -5
  60. package/dist/core/brain-index.js.map +1 -1
  61. package/dist/core/brain.d.ts +58 -2
  62. package/dist/core/brain.js +79 -1
  63. package/dist/core/brain.js.map +1 -1
  64. package/dist/core/chat-import.d.ts +71 -0
  65. package/dist/core/chat-import.js +419 -0
  66. package/dist/core/chat-import.js.map +1 -0
  67. package/dist/core/checkpoint.d.ts +107 -0
  68. package/dist/core/checkpoint.js +259 -0
  69. package/dist/core/checkpoint.js.map +1 -0
  70. package/dist/core/claude-cli.js +1 -1
  71. package/dist/core/claude-cli.js.map +1 -1
  72. package/dist/core/continuity/artifacts.d.ts +14 -0
  73. package/dist/core/continuity/artifacts.js +118 -0
  74. package/dist/core/continuity/artifacts.js.map +1 -0
  75. package/dist/core/continuity/capabilities.d.ts +65 -0
  76. package/dist/core/continuity/capabilities.js +129 -0
  77. package/dist/core/continuity/capabilities.js.map +1 -0
  78. package/dist/core/continuity/contracts.d.ts +352 -0
  79. package/dist/core/continuity/contracts.js +117 -0
  80. package/dist/core/continuity/contracts.js.map +1 -0
  81. package/dist/core/continuity/engine.d.ts +55 -0
  82. package/dist/core/continuity/engine.js +504 -0
  83. package/dist/core/continuity/engine.js.map +1 -0
  84. package/dist/core/continuity/store.d.ts +73 -0
  85. package/dist/core/continuity/store.js +438 -0
  86. package/dist/core/continuity/store.js.map +1 -0
  87. package/dist/core/conversations.d.ts +19 -0
  88. package/dist/core/conversations.js +87 -0
  89. package/dist/core/conversations.js.map +1 -0
  90. package/dist/core/crew-coordination.d.ts +6 -0
  91. package/dist/core/crew-coordination.js +24 -0
  92. package/dist/core/crew-coordination.js.map +1 -0
  93. package/dist/core/crew-policy.d.ts +18 -0
  94. package/dist/core/crew-policy.js +40 -0
  95. package/dist/core/crew-policy.js.map +1 -0
  96. package/dist/core/crew-protocol.d.ts +64 -0
  97. package/dist/core/crew-protocol.js +146 -0
  98. package/dist/core/crew-protocol.js.map +1 -0
  99. package/dist/core/crew-requests.d.ts +14 -0
  100. package/dist/core/crew-requests.js +22 -0
  101. package/dist/core/crew-requests.js.map +1 -0
  102. package/dist/core/crew.d.ts +395 -0
  103. package/dist/core/crew.js +1857 -0
  104. package/dist/core/crew.js.map +1 -0
  105. package/dist/core/digest.d.ts +40 -0
  106. package/dist/core/digest.js +94 -0
  107. package/dist/core/digest.js.map +1 -0
  108. package/dist/core/distill.js +3 -5
  109. package/dist/core/distill.js.map +1 -1
  110. package/dist/core/eventlog.d.ts +27 -25
  111. package/dist/core/eventlog.js +97 -150
  112. package/dist/core/eventlog.js.map +1 -1
  113. package/dist/core/events/contracts.d.ts +51 -0
  114. package/dist/core/events/contracts.js +2 -0
  115. package/dist/core/events/contracts.js.map +1 -0
  116. package/dist/core/events/jsonl-store.d.ts +23 -0
  117. package/dist/core/events/jsonl-store.js +90 -0
  118. package/dist/core/events/jsonl-store.js.map +1 -0
  119. package/dist/core/events/sqlite-store.d.ts +37 -0
  120. package/dist/core/events/sqlite-store.js +215 -0
  121. package/dist/core/events/sqlite-store.js.map +1 -0
  122. package/dist/core/forecast.d.ts +44 -0
  123. package/dist/core/forecast.js +46 -0
  124. package/dist/core/forecast.js.map +1 -0
  125. package/dist/core/free-pool.d.ts +65 -0
  126. package/dist/core/free-pool.js +171 -0
  127. package/dist/core/free-pool.js.map +1 -0
  128. package/dist/core/git.d.ts +30 -0
  129. package/dist/core/git.js +50 -2
  130. package/dist/core/git.js.map +1 -1
  131. package/dist/core/github-events.d.ts +53 -0
  132. package/dist/core/github-events.js +227 -0
  133. package/dist/core/github-events.js.map +1 -0
  134. package/dist/core/goal-lanes.d.ts +53 -0
  135. package/dist/core/goal-lanes.js +99 -0
  136. package/dist/core/goal-lanes.js.map +1 -0
  137. package/dist/core/hosted.d.ts +27 -0
  138. package/dist/core/hosted.js +50 -0
  139. package/dist/core/hosted.js.map +1 -0
  140. package/dist/core/http-server.d.ts +5 -0
  141. package/dist/core/http-server.js +8 -0
  142. package/dist/core/http-server.js.map +1 -0
  143. package/dist/core/invite-link.d.ts +31 -0
  144. package/dist/core/invite-link.js +45 -0
  145. package/dist/core/invite-link.js.map +1 -0
  146. package/dist/core/loops.d.ts +37 -0
  147. package/dist/core/loops.js +81 -0
  148. package/dist/core/loops.js.map +1 -0
  149. package/dist/core/mcp-catalog.d.ts +182 -0
  150. package/dist/core/mcp-catalog.js +431 -0
  151. package/dist/core/mcp-catalog.js.map +1 -0
  152. package/dist/core/mcp.d.ts +87 -0
  153. package/dist/core/mcp.js +181 -0
  154. package/dist/core/mcp.js.map +1 -0
  155. package/dist/core/memory.d.ts +1 -0
  156. package/dist/core/memory.js +5 -2
  157. package/dist/core/memory.js.map +1 -1
  158. package/dist/core/model-tools.d.ts +97 -0
  159. package/dist/core/model-tools.js +388 -0
  160. package/dist/core/model-tools.js.map +1 -0
  161. package/dist/core/notify.js +19 -1
  162. package/dist/core/notify.js.map +1 -1
  163. package/dist/core/orchestra.d.ts +635 -0
  164. package/dist/core/orchestra.js +2120 -0
  165. package/dist/core/orchestra.js.map +1 -0
  166. package/dist/core/permissions.d.ts +56 -0
  167. package/dist/core/permissions.js +122 -0
  168. package/dist/core/permissions.js.map +1 -0
  169. package/dist/core/preview-proxy.d.ts +70 -0
  170. package/dist/core/preview-proxy.js +563 -0
  171. package/dist/core/preview-proxy.js.map +1 -0
  172. package/dist/core/preview-shot.d.ts +46 -0
  173. package/dist/core/preview-shot.js +109 -0
  174. package/dist/core/preview-shot.js.map +1 -0
  175. package/dist/core/process.d.ts +36 -0
  176. package/dist/core/process.js +168 -0
  177. package/dist/core/process.js.map +1 -0
  178. package/dist/core/prompt-queue.d.ts +136 -0
  179. package/dist/core/prompt-queue.js +269 -0
  180. package/dist/core/prompt-queue.js.map +1 -0
  181. package/dist/core/prompts.d.ts +53 -0
  182. package/dist/core/prompts.js +127 -0
  183. package/dist/core/prompts.js.map +1 -0
  184. package/dist/core/proof.d.ts +82 -0
  185. package/dist/core/proof.js +216 -0
  186. package/dist/core/proof.js.map +1 -0
  187. package/dist/core/provider-text.d.ts +23 -0
  188. package/dist/core/provider-text.js +66 -0
  189. package/dist/core/provider-text.js.map +1 -0
  190. package/dist/core/providers.d.ts +152 -0
  191. package/dist/core/providers.js +343 -0
  192. package/dist/core/providers.js.map +1 -0
  193. package/dist/core/quota.d.ts +33 -0
  194. package/dist/core/quota.js +74 -0
  195. package/dist/core/quota.js.map +1 -0
  196. package/dist/core/recipes.d.ts +50 -0
  197. package/dist/core/recipes.js +99 -0
  198. package/dist/core/recipes.js.map +1 -0
  199. package/dist/core/registry.d.ts +54 -0
  200. package/dist/core/registry.js +62 -5
  201. package/dist/core/registry.js.map +1 -1
  202. package/dist/core/relay-client.d.ts +67 -0
  203. package/dist/core/relay-client.js +184 -0
  204. package/dist/core/relay-client.js.map +1 -0
  205. package/dist/core/relay-protocol.d.ts +140 -0
  206. package/dist/core/relay-protocol.js +189 -0
  207. package/dist/core/relay-protocol.js.map +1 -0
  208. package/dist/core/replay.d.ts +18 -0
  209. package/dist/core/replay.js +191 -0
  210. package/dist/core/replay.js.map +1 -0
  211. package/dist/core/review-triage.d.ts +41 -0
  212. package/dist/core/review-triage.js +124 -0
  213. package/dist/core/review-triage.js.map +1 -0
  214. package/dist/core/router.js +2 -2
  215. package/dist/core/router.js.map +1 -1
  216. package/dist/core/routes.d.ts +39 -3
  217. package/dist/core/routes.js +137 -4
  218. package/dist/core/routes.js.map +1 -1
  219. package/dist/core/run-command.d.ts +14 -0
  220. package/dist/core/run-command.js +45 -0
  221. package/dist/core/run-command.js.map +1 -0
  222. package/dist/core/runner-setup.d.ts +36 -0
  223. package/dist/core/runner-setup.js +114 -0
  224. package/dist/core/runner-setup.js.map +1 -0
  225. package/dist/core/search.js +0 -0
  226. package/dist/core/search.js.map +1 -1
  227. package/dist/core/semantic.d.ts +92 -0
  228. package/dist/core/semantic.js +227 -0
  229. package/dist/core/semantic.js.map +1 -0
  230. package/dist/core/servers.d.ts +115 -0
  231. package/dist/core/servers.js +305 -0
  232. package/dist/core/servers.js.map +1 -0
  233. package/dist/core/setup.js +64 -6
  234. package/dist/core/setup.js.map +1 -1
  235. package/dist/core/shield.d.ts +17 -0
  236. package/dist/core/shield.js +81 -0
  237. package/dist/core/shield.js.map +1 -0
  238. package/dist/core/shift.d.ts +69 -0
  239. package/dist/core/shift.js +120 -0
  240. package/dist/core/shift.js.map +1 -0
  241. package/dist/core/skill-install.d.ts +125 -0
  242. package/dist/core/skill-install.js +328 -0
  243. package/dist/core/skill-install.js.map +1 -0
  244. package/dist/core/skills.d.ts +116 -0
  245. package/dist/core/skills.js +223 -0
  246. package/dist/core/skills.js.map +1 -0
  247. package/dist/core/step-conditions.d.ts +65 -0
  248. package/dist/core/step-conditions.js +102 -0
  249. package/dist/core/step-conditions.js.map +1 -0
  250. package/dist/core/subagents.d.ts +45 -0
  251. package/dist/core/subagents.js +90 -0
  252. package/dist/core/subagents.js.map +1 -0
  253. package/dist/core/team-canon.d.ts +42 -0
  254. package/dist/core/team-canon.js +121 -0
  255. package/dist/core/team-canon.js.map +1 -0
  256. package/dist/core/team-crypto.d.ts +97 -0
  257. package/dist/core/team-crypto.js +175 -0
  258. package/dist/core/team-crypto.js.map +1 -0
  259. package/dist/core/team-hub.d.ts +514 -0
  260. package/dist/core/team-hub.js +964 -0
  261. package/dist/core/team-hub.js.map +1 -0
  262. package/dist/core/team-landing.d.ts +239 -0
  263. package/dist/core/team-landing.js +504 -0
  264. package/dist/core/team-landing.js.map +1 -0
  265. package/dist/core/team-leases.d.ts +44 -0
  266. package/dist/core/team-leases.js +145 -0
  267. package/dist/core/team-leases.js.map +1 -0
  268. package/dist/core/team-memory.d.ts +42 -0
  269. package/dist/core/team-memory.js +84 -0
  270. package/dist/core/team-memory.js.map +1 -0
  271. package/dist/core/team-policy.d.ts +85 -0
  272. package/dist/core/team-policy.js +191 -0
  273. package/dist/core/team-policy.js.map +1 -0
  274. package/dist/core/thread-md.d.ts +6 -0
  275. package/dist/core/thread-md.js +42 -0
  276. package/dist/core/thread-md.js.map +1 -0
  277. package/dist/core/turn-stats.d.ts +61 -0
  278. package/dist/core/turn-stats.js +124 -0
  279. package/dist/core/turn-stats.js.map +1 -0
  280. package/dist/core/updater.d.ts +73 -0
  281. package/dist/core/updater.js +153 -0
  282. package/dist/core/updater.js.map +1 -0
  283. package/dist/core/usage.d.ts +75 -0
  284. package/dist/core/usage.js +163 -0
  285. package/dist/core/usage.js.map +1 -0
  286. package/dist/core/windows-jobs.d.ts +15 -0
  287. package/dist/core/windows-jobs.js +170 -0
  288. package/dist/core/windows-jobs.js.map +1 -0
  289. package/dist/core/worktree-merge.d.ts +57 -0
  290. package/dist/core/worktree-merge.js +123 -0
  291. package/dist/core/worktree-merge.js.map +1 -0
  292. package/dist/core/worktree.d.ts +5 -0
  293. package/dist/core/worktree.js +45 -5
  294. package/dist/core/worktree.js.map +1 -1
  295. package/dist/core/worktrees.d.ts +6 -0
  296. package/dist/core/worktrees.js +21 -0
  297. package/dist/core/worktrees.js.map +1 -0
  298. package/dist/daemon/app-page.d.ts +0 -17
  299. package/dist/daemon/app-page.js +10 -6346
  300. package/dist/daemon/app-page.js.map +1 -1
  301. package/dist/daemon/auth.d.ts +24 -3
  302. package/dist/daemon/auth.js +66 -7
  303. package/dist/daemon/auth.js.map +1 -1
  304. package/dist/daemon/board.d.ts +7 -0
  305. package/dist/daemon/board.js +12 -1
  306. package/dist/daemon/board.js.map +1 -1
  307. package/dist/daemon/brand-icons.d.ts +6 -1
  308. package/dist/daemon/brand-icons.js +11 -3
  309. package/dist/daemon/brand-icons.js.map +1 -1
  310. package/dist/daemon/client.d.ts +665 -1
  311. package/dist/daemon/client.js +381 -3
  312. package/dist/daemon/client.js.map +1 -1
  313. package/dist/daemon/delivery.d.ts +34 -0
  314. package/dist/daemon/delivery.js +63 -0
  315. package/dist/daemon/delivery.js.map +1 -0
  316. package/dist/daemon/deploys.d.ts +62 -0
  317. package/dist/daemon/deploys.js +159 -0
  318. package/dist/daemon/deploys.js.map +1 -0
  319. package/dist/daemon/landing.d.ts +192 -0
  320. package/dist/daemon/landing.js +992 -0
  321. package/dist/daemon/landing.js.map +1 -0
  322. package/dist/daemon/onboard.d.ts +150 -0
  323. package/dist/daemon/onboard.js +390 -0
  324. package/dist/daemon/onboard.js.map +1 -0
  325. package/dist/daemon/proof.d.ts +70 -0
  326. package/dist/daemon/proof.js +172 -0
  327. package/dist/daemon/proof.js.map +1 -0
  328. package/dist/daemon/push.d.ts +19 -1
  329. package/dist/daemon/push.js +90 -3
  330. package/dist/daemon/push.js.map +1 -1
  331. package/dist/daemon/relay.d.ts +82 -0
  332. package/dist/daemon/relay.js +351 -0
  333. package/dist/daemon/relay.js.map +1 -0
  334. package/dist/daemon/routes/agent-discovery.d.ts +4 -0
  335. package/dist/daemon/routes/agent-discovery.js +29 -0
  336. package/dist/daemon/routes/agent-discovery.js.map +1 -0
  337. package/dist/daemon/routes/agent-settings.d.ts +4 -0
  338. package/dist/daemon/routes/agent-settings.js +94 -0
  339. package/dist/daemon/routes/agent-settings.js.map +1 -0
  340. package/dist/daemon/routes/agents.d.ts +4 -0
  341. package/dist/daemon/routes/agents.js +105 -0
  342. package/dist/daemon/routes/agents.js.map +1 -0
  343. package/dist/daemon/routes/alerts.d.ts +4 -0
  344. package/dist/daemon/routes/alerts.js +137 -0
  345. package/dist/daemon/routes/alerts.js.map +1 -0
  346. package/dist/daemon/routes/approvals.d.ts +4 -0
  347. package/dist/daemon/routes/approvals.js +40 -0
  348. package/dist/daemon/routes/approvals.js.map +1 -0
  349. package/dist/daemon/routes/assets.d.ts +3 -0
  350. package/dist/daemon/routes/assets.js +64 -0
  351. package/dist/daemon/routes/assets.js.map +1 -0
  352. package/dist/daemon/routes/board.d.ts +4 -0
  353. package/dist/daemon/routes/board.js +147 -0
  354. package/dist/daemon/routes/board.js.map +1 -0
  355. package/dist/daemon/routes/brain.d.ts +4 -0
  356. package/dist/daemon/routes/brain.js +270 -0
  357. package/dist/daemon/routes/brain.js.map +1 -0
  358. package/dist/daemon/routes/chats.d.ts +4 -0
  359. package/dist/daemon/routes/chats.js +249 -0
  360. package/dist/daemon/routes/chats.js.map +1 -0
  361. package/dist/daemon/routes/clients.d.ts +4 -0
  362. package/dist/daemon/routes/clients.js +49 -0
  363. package/dist/daemon/routes/clients.js.map +1 -0
  364. package/dist/daemon/routes/cloud.d.ts +4 -0
  365. package/dist/daemon/routes/cloud.js +46 -0
  366. package/dist/daemon/routes/cloud.js.map +1 -0
  367. package/dist/daemon/routes/config.d.ts +4 -0
  368. package/dist/daemon/routes/config.js +35 -0
  369. package/dist/daemon/routes/config.js.map +1 -0
  370. package/dist/daemon/routes/context.d.ts +51 -0
  371. package/dist/daemon/routes/context.js +2 -0
  372. package/dist/daemon/routes/context.js.map +1 -0
  373. package/dist/daemon/routes/crews.d.ts +4 -0
  374. package/dist/daemon/routes/crews.js +149 -0
  375. package/dist/daemon/routes/crews.js.map +1 -0
  376. package/dist/daemon/routes/files.d.ts +3 -0
  377. package/dist/daemon/routes/files.js +253 -0
  378. package/dist/daemon/routes/files.js.map +1 -0
  379. package/dist/daemon/routes/git.d.ts +4 -0
  380. package/dist/daemon/routes/git.js +96 -0
  381. package/dist/daemon/routes/git.js.map +1 -0
  382. package/dist/daemon/routes/history.d.ts +4 -0
  383. package/dist/daemon/routes/history.js +101 -0
  384. package/dist/daemon/routes/history.js.map +1 -0
  385. package/dist/daemon/routes/integrations-project.d.ts +3 -0
  386. package/dist/daemon/routes/integrations-project.js +103 -0
  387. package/dist/daemon/routes/integrations-project.js.map +1 -0
  388. package/dist/daemon/routes/integrations.d.ts +3 -0
  389. package/dist/daemon/routes/integrations.js +111 -0
  390. package/dist/daemon/routes/integrations.js.map +1 -0
  391. package/dist/daemon/routes/logs.d.ts +3 -0
  392. package/dist/daemon/routes/logs.js +40 -0
  393. package/dist/daemon/routes/logs.js.map +1 -0
  394. package/dist/daemon/routes/messages.d.ts +4 -0
  395. package/dist/daemon/routes/messages.js +60 -0
  396. package/dist/daemon/routes/messages.js.map +1 -0
  397. package/dist/daemon/routes/observability.d.ts +4 -0
  398. package/dist/daemon/routes/observability.js +247 -0
  399. package/dist/daemon/routes/observability.js.map +1 -0
  400. package/dist/daemon/routes/onboard.d.ts +12 -0
  401. package/dist/daemon/routes/onboard.js +67 -0
  402. package/dist/daemon/routes/onboard.js.map +1 -0
  403. package/dist/daemon/routes/orchestra.d.ts +4 -0
  404. package/dist/daemon/routes/orchestra.js +110 -0
  405. package/dist/daemon/routes/orchestra.js.map +1 -0
  406. package/dist/daemon/routes/pairing.d.ts +4 -0
  407. package/dist/daemon/routes/pairing.js +155 -0
  408. package/dist/daemon/routes/pairing.js.map +1 -0
  409. package/dist/daemon/routes/preview.d.ts +24 -0
  410. package/dist/daemon/routes/preview.js +122 -0
  411. package/dist/daemon/routes/preview.js.map +1 -0
  412. package/dist/daemon/routes/project-actions.d.ts +4 -0
  413. package/dist/daemon/routes/project-actions.js +53 -0
  414. package/dist/daemon/routes/project-actions.js.map +1 -0
  415. package/dist/daemon/routes/project-team.d.ts +4 -0
  416. package/dist/daemon/routes/project-team.js +201 -0
  417. package/dist/daemon/routes/project-team.js.map +1 -0
  418. package/dist/daemon/routes/projects.d.ts +14 -0
  419. package/dist/daemon/routes/projects.js +138 -0
  420. package/dist/daemon/routes/projects.js.map +1 -0
  421. package/dist/daemon/routes/prompts.d.ts +4 -0
  422. package/dist/daemon/routes/prompts.js +44 -0
  423. package/dist/daemon/routes/prompts.js.map +1 -0
  424. package/dist/daemon/routes/proof.d.ts +4 -0
  425. package/dist/daemon/routes/proof.js +22 -0
  426. package/dist/daemon/routes/proof.js.map +1 -0
  427. package/dist/daemon/routes/providers.d.ts +3 -0
  428. package/dist/daemon/routes/providers.js +60 -0
  429. package/dist/daemon/routes/providers.js.map +1 -0
  430. package/dist/daemon/routes/public.d.ts +4 -0
  431. package/dist/daemon/routes/public.js +64 -0
  432. package/dist/daemon/routes/public.js.map +1 -0
  433. package/dist/daemon/routes/queue.d.ts +4 -0
  434. package/dist/daemon/routes/queue.js +140 -0
  435. package/dist/daemon/routes/queue.js.map +1 -0
  436. package/dist/daemon/routes/routing.d.ts +4 -0
  437. package/dist/daemon/routes/routing.js +61 -0
  438. package/dist/daemon/routes/routing.js.map +1 -0
  439. package/dist/daemon/routes/runtime-handler.d.ts +2 -0
  440. package/dist/daemon/routes/runtime-handler.js +63 -0
  441. package/dist/daemon/routes/runtime-handler.js.map +1 -0
  442. package/dist/daemon/routes/search.d.ts +4 -0
  443. package/dist/daemon/routes/search.js +17 -0
  444. package/dist/daemon/routes/search.js.map +1 -0
  445. package/dist/daemon/routes/servers.d.ts +4 -0
  446. package/dist/daemon/routes/servers.js +133 -0
  447. package/dist/daemon/routes/servers.js.map +1 -0
  448. package/dist/daemon/routes/setup.d.ts +3 -0
  449. package/dist/daemon/routes/setup.js +50 -0
  450. package/dist/daemon/routes/setup.js.map +1 -0
  451. package/dist/daemon/routes/shift.d.ts +4 -0
  452. package/dist/daemon/routes/shift.js +30 -0
  453. package/dist/daemon/routes/shift.js.map +1 -0
  454. package/dist/daemon/routes/specs.d.ts +4 -0
  455. package/dist/daemon/routes/specs.js +57 -0
  456. package/dist/daemon/routes/specs.js.map +1 -0
  457. package/dist/daemon/routes/task-delivery.d.ts +4 -0
  458. package/dist/daemon/routes/task-delivery.js +38 -0
  459. package/dist/daemon/routes/task-delivery.js.map +1 -0
  460. package/dist/daemon/routes/team.d.ts +4 -0
  461. package/dist/daemon/routes/team.js +193 -0
  462. package/dist/daemon/routes/team.js.map +1 -0
  463. package/dist/daemon/routes/terminals.d.ts +4 -0
  464. package/dist/daemon/routes/terminals.js +87 -0
  465. package/dist/daemon/routes/terminals.js.map +1 -0
  466. package/dist/daemon/routes/tools.d.ts +4 -0
  467. package/dist/daemon/routes/tools.js +180 -0
  468. package/dist/daemon/routes/tools.js.map +1 -0
  469. package/dist/daemon/routes/updates.d.ts +4 -0
  470. package/dist/daemon/routes/updates.js +89 -0
  471. package/dist/daemon/routes/updates.js.map +1 -0
  472. package/dist/daemon/routes/voice.d.ts +4 -0
  473. package/dist/daemon/routes/voice.js +53 -0
  474. package/dist/daemon/routes/voice.js.map +1 -0
  475. package/dist/daemon/runner.d.ts +186 -0
  476. package/dist/daemon/runner.js +612 -0
  477. package/dist/daemon/runner.js.map +1 -0
  478. package/dist/daemon/runtime/accounting.d.ts +130 -0
  479. package/dist/daemon/runtime/accounting.js +303 -0
  480. package/dist/daemon/runtime/accounting.js.map +1 -0
  481. package/dist/daemon/runtime/agents.d.ts +16 -0
  482. package/dist/daemon/runtime/agents.js +71 -0
  483. package/dist/daemon/runtime/agents.js.map +1 -0
  484. package/dist/daemon/runtime/briefings.d.ts +134 -0
  485. package/dist/daemon/runtime/briefings.js +329 -0
  486. package/dist/daemon/runtime/briefings.js.map +1 -0
  487. package/dist/daemon/runtime/native-usage.d.ts +21 -0
  488. package/dist/daemon/runtime/native-usage.js +71 -0
  489. package/dist/daemon/runtime/native-usage.js.map +1 -0
  490. package/dist/daemon/runtime/queue.d.ts +94 -0
  491. package/dist/daemon/runtime/queue.js +222 -0
  492. package/dist/daemon/runtime/queue.js.map +1 -0
  493. package/dist/daemon/runtime/relay.d.ts +93 -0
  494. package/dist/daemon/runtime/relay.js +240 -0
  495. package/dist/daemon/runtime/relay.js.map +1 -0
  496. package/dist/daemon/runtime/turns.d.ts +202 -0
  497. package/dist/daemon/runtime/turns.js +663 -0
  498. package/dist/daemon/runtime/turns.js.map +1 -0
  499. package/dist/daemon/runtime-support.d.ts +76 -0
  500. package/dist/daemon/runtime-support.js +134 -0
  501. package/dist/daemon/runtime-support.js.map +1 -0
  502. package/dist/daemon/runtime.d.ts +739 -70
  503. package/dist/daemon/runtime.js +2751 -470
  504. package/dist/daemon/runtime.js.map +1 -1
  505. package/dist/daemon/server.d.ts +82 -55
  506. package/dist/daemon/server.js +674 -1435
  507. package/dist/daemon/server.js.map +1 -1
  508. package/dist/daemon/shift.d.ts +70 -0
  509. package/dist/daemon/shift.js +170 -0
  510. package/dist/daemon/shift.js.map +1 -0
  511. package/dist/daemon/specs.d.ts +92 -0
  512. package/dist/daemon/specs.js +285 -0
  513. package/dist/daemon/specs.js.map +1 -0
  514. package/dist/daemon/system.d.ts +208 -0
  515. package/dist/daemon/system.js +557 -0
  516. package/dist/daemon/system.js.map +1 -0
  517. package/dist/daemon/tasks.js +1 -1
  518. package/dist/daemon/team-brain.d.ts +136 -0
  519. package/dist/daemon/team-brain.js +659 -0
  520. package/dist/daemon/team-brain.js.map +1 -0
  521. package/dist/daemon/team-coordinator.d.ts +78 -0
  522. package/dist/daemon/team-coordinator.js +408 -0
  523. package/dist/daemon/team-coordinator.js.map +1 -0
  524. package/dist/daemon/team.d.ts +339 -0
  525. package/dist/daemon/team.js +1433 -0
  526. package/dist/daemon/team.js.map +1 -0
  527. package/dist/daemon/terminals.d.ts +22 -3
  528. package/dist/daemon/terminals.js +236 -16
  529. package/dist/daemon/terminals.js.map +1 -1
  530. package/dist/hub/client.d.ts +120 -0
  531. package/dist/hub/client.js +228 -0
  532. package/dist/hub/client.js.map +1 -0
  533. package/dist/hub/server.d.ts +32 -0
  534. package/dist/hub/server.js +180 -0
  535. package/dist/hub/server.js.map +1 -0
  536. package/dist/hub/supabase-client.d.ts +220 -0
  537. package/dist/hub/supabase-client.js +843 -0
  538. package/dist/hub/supabase-client.js.map +1 -0
  539. package/dist/observability/ask.d.ts +91 -0
  540. package/dist/observability/ask.js +179 -0
  541. package/dist/observability/ask.js.map +1 -0
  542. package/dist/observability/clickhouse.d.ts +33 -0
  543. package/dist/observability/clickhouse.js +48 -0
  544. package/dist/observability/clickhouse.js.map +1 -0
  545. package/dist/observability/decisions.d.ts +176 -0
  546. package/dist/observability/decisions.js +377 -0
  547. package/dist/observability/decisions.js.map +1 -0
  548. package/dist/observability/index.d.ts +89 -0
  549. package/dist/observability/index.js +348 -0
  550. package/dist/observability/index.js.map +1 -0
  551. package/dist/observability/insights.d.ts +151 -0
  552. package/dist/observability/insights.js +319 -0
  553. package/dist/observability/insights.js.map +1 -0
  554. package/dist/observability/logs-query.d.ts +82 -0
  555. package/dist/observability/logs-query.js +102 -0
  556. package/dist/observability/logs-query.js.map +1 -0
  557. package/dist/observability/logs.d.ts +72 -0
  558. package/dist/observability/logs.js +295 -0
  559. package/dist/observability/logs.js.map +1 -0
  560. package/dist/observability/metrics.d.ts +86 -0
  561. package/dist/observability/metrics.js +303 -0
  562. package/dist/observability/metrics.js.map +1 -0
  563. package/dist/observability/otlp.d.ts +127 -0
  564. package/dist/observability/otlp.js +242 -0
  565. package/dist/observability/otlp.js.map +1 -0
  566. package/dist/observability/snapshots.d.ts +43 -0
  567. package/dist/observability/snapshots.js +129 -0
  568. package/dist/observability/snapshots.js.map +1 -0
  569. package/dist/observability/triage.d.ts +49 -0
  570. package/dist/observability/triage.js +284 -0
  571. package/dist/observability/triage.js.map +1 -0
  572. package/dist/providers/adapter.d.ts +50 -0
  573. package/dist/providers/adapter.js +38 -0
  574. package/dist/providers/adapter.js.map +1 -0
  575. package/dist/providers/agent.d.ts +110 -0
  576. package/dist/providers/agent.js +487 -0
  577. package/dist/providers/agent.js.map +1 -0
  578. package/dist/providers/approvals.d.ts +24 -0
  579. package/dist/providers/approvals.js +78 -0
  580. package/dist/providers/approvals.js.map +1 -0
  581. package/dist/providers/attachments.d.ts +20 -0
  582. package/dist/providers/attachments.js +51 -0
  583. package/dist/providers/attachments.js.map +1 -0
  584. package/dist/providers/claude/adapter.d.ts +99 -0
  585. package/dist/providers/claude/adapter.js +790 -0
  586. package/dist/providers/claude/adapter.js.map +1 -0
  587. package/dist/providers/codex/adapter.d.ts +113 -0
  588. package/dist/providers/codex/adapter.js +881 -0
  589. package/dist/providers/codex/adapter.js.map +1 -0
  590. package/dist/providers/codex/instructions.d.ts +11 -0
  591. package/dist/providers/codex/instructions.js +154 -0
  592. package/dist/providers/codex/instructions.js.map +1 -0
  593. package/dist/providers/codex/rpc.d.ts +36 -0
  594. package/dist/providers/codex/rpc.js +104 -0
  595. package/dist/providers/codex/rpc.js.map +1 -0
  596. package/dist/providers/contracts.d.ts +339 -0
  597. package/dist/providers/contracts.js +19 -0
  598. package/dist/providers/contracts.js.map +1 -0
  599. package/dist/providers/directory.d.ts +70 -0
  600. package/dist/providers/directory.js +95 -0
  601. package/dist/providers/directory.js.map +1 -0
  602. package/dist/providers/errors.d.ts +47 -0
  603. package/dist/providers/errors.js +24 -0
  604. package/dist/providers/errors.js.map +1 -0
  605. package/dist/providers/index.d.ts +18 -0
  606. package/dist/providers/index.js +19 -0
  607. package/dist/providers/index.js.map +1 -0
  608. package/dist/providers/ingestion.d.ts +80 -0
  609. package/dist/providers/ingestion.js +330 -0
  610. package/dist/providers/ingestion.js.map +1 -0
  611. package/dist/providers/live.d.ts +22 -0
  612. package/dist/providers/live.js +56 -0
  613. package/dist/providers/live.js.map +1 -0
  614. package/dist/providers/process.d.ts +29 -0
  615. package/dist/providers/process.js +71 -0
  616. package/dist/providers/process.js.map +1 -0
  617. package/dist/providers/reaper.d.ts +33 -0
  618. package/dist/providers/reaper.js +65 -0
  619. package/dist/providers/reaper.js.map +1 -0
  620. package/dist/providers/service.d.ts +87 -0
  621. package/dist/providers/service.js +256 -0
  622. package/dist/providers/service.js.map +1 -0
  623. package/dist/sdk.d.ts +1 -1
  624. package/dist/sdk.js +1 -1
  625. package/dist/sdk.js.map +1 -1
  626. package/dist/types.d.ts +385 -6
  627. package/dist/types.js +1 -0
  628. package/dist/types.js.map +1 -1
  629. package/dist/version.d.ts +7 -0
  630. package/dist/version.js +16 -0
  631. package/dist/version.js.map +1 -0
  632. package/dist/web/app.css +4643 -0
  633. package/dist/web/app.js +22640 -0
  634. package/dist/web/app.js.map +7 -0
  635. package/dist/web/shell.html +39 -0
  636. package/docs/README.md +21 -0
  637. package/docs/SETUP.md +10 -0
  638. package/docs/adapters.md +21 -8
  639. package/docs/brain-continuity.md +186 -0
  640. package/docs/cloud.md +108 -0
  641. package/docs/crews.md +62 -0
  642. package/docs/design-system.md +31 -2
  643. package/docs/integration-notes.md +128 -20
  644. package/docs/loompad.md +105 -0
  645. package/docs/observability.md +220 -0
  646. package/docs/play-store.md +123 -0
  647. package/docs/proposals/agent-teams.md +249 -0
  648. package/docs/proposals/brain-continuity-implementation.md +468 -0
  649. package/docs/proposals/brain-session-continuity.md +623 -0
  650. package/docs/proposals/t3code-port.md +81 -0
  651. package/docs/proposals/t3code-reference.md +95 -0
  652. package/docs/refactoring/AGENT-TEAMS-PROGRESS.md +88 -0
  653. package/docs/refactoring/BOUNDARIES.md +120 -0
  654. package/docs/refactoring/BRAIN-AUDIT.md +176 -0
  655. package/docs/refactoring/BRAIN-NOTES.md +390 -0
  656. package/docs/refactoring/BRAIN-TODO.md +214 -0
  657. package/docs/refactoring/NOTES.md +129 -0
  658. package/docs/refactoring/T3-PORT-NOTES.md +165 -0
  659. package/docs/refactoring/T3-PORT-TODO.md +123 -0
  660. package/docs/refactoring/TODO.md +46 -0
  661. package/docs/refactoring/brain-benchmark-2026-09-28.json +48 -0
  662. package/docs/refactoring/brain-benchmark-audit-2026-09-28.json +48 -0
  663. package/docs/release-notes/v0.2.0.md +35 -0
  664. package/docs/release-notes/v0.2.1.md +59 -0
  665. package/docs/release-notes/v0.2.3.md +77 -0
  666. package/docs/release-notes/v0.2.4.md +128 -0
  667. package/docs/release-notes/v0.2.5.md +153 -0
  668. package/docs/release-notes/v0.2.6.md +62 -0
  669. package/docs/release-notes/v1.0.0.md +120 -0
  670. package/docs/release-notes/v1.0.1.md +77 -0
  671. package/docs/release-notes/v1.1.0.md +71 -0
  672. package/docs/release-notes/v1.1.1.md +38 -0
  673. package/docs/teams-architecture.md +697 -0
  674. package/docs/teams.md +171 -0
  675. package/docs/windows.md +85 -0
  676. package/package.json +22 -9
  677. package/dist/adapters/claude-code.d.ts +0 -26
  678. package/dist/adapters/claude-code.js +0 -209
  679. package/dist/adapters/claude-code.js.map +0 -1
  680. package/dist/adapters/codex.d.ts +0 -51
  681. package/dist/adapters/codex.js +0 -291
  682. package/dist/adapters/codex.js.map +0 -1
  683. package/docs/img/board-linear.png +0 -0
  684. package/docs/img/board-projects.png +0 -0
  685. package/docs/img/brain.png +0 -0
  686. package/docs/img/settings.png +0 -0
  687. package/docs/img/workspace.png +0 -0
@@ -0,0 +1,73 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import type { LoomEvent } from "../../types.js";
3
+ import { type Binding, type ContextItem, type ContextPacket, type ContinuityRequest, type Receipt, type RenderedBriefing, type SourceRef } from "./contracts.js";
4
+ export declare const eventText: (e: LoomEvent) => string;
5
+ export declare const isUser: (e: LoomEvent) => boolean;
6
+ /** Uses the event journal's existing connection. There is no second writer,
7
+ * memory-only acknowledgement, or nested connection transaction here. */
8
+ export declare class ContinuityStore {
9
+ private readonly db;
10
+ private readonly file;
11
+ private readonly token;
12
+ private owned;
13
+ private active;
14
+ private fts;
15
+ constructor(db: DatabaseSync, file: string);
16
+ activate(): void;
17
+ claimOwner(): void;
18
+ releaseOwner(): void;
19
+ private assertOwner;
20
+ guardEventWriter(): void;
21
+ private meta;
22
+ private setMeta;
23
+ private transaction;
24
+ capture(request: ContinuityRequest, append: () => LoomEvent): {
25
+ event: LoomEvent;
26
+ created: boolean;
27
+ };
28
+ request(id: string): ContinuityRequest | undefined;
29
+ requestEvent(id: string): LoomEvent | undefined;
30
+ event(id: number): LoomEvent | undefined;
31
+ source(event: LoomEvent, projectId: string): SourceRef;
32
+ history(chat: string, through: number, since?: number, limit?: number): LoomEvent[];
33
+ protectedEvents(chat: string, through: number): LoomEvent[];
34
+ /** Governing user evidence after a snapshot. A newly queued request is not
35
+ * governing: it runs as its own turn after the current one. */
36
+ hasNewUserSources(chat: string, through: number): boolean;
37
+ /** Sources already placed in one native session by accepted packets. */
38
+ delivered(bindingId: string, epoch: number): {
39
+ messages: Set<number>;
40
+ evidence: Set<number>;
41
+ };
42
+ binding(slot: string, create: () => Binding): Binding;
43
+ updateBinding(binding: Binding): void;
44
+ bindingById(id: string): Binding | undefined;
45
+ items(chat: string): ContextItem[];
46
+ putItem(item: ContextItem): void;
47
+ revision(chat: string): number;
48
+ dispose(eventId: number, chat: string, itemId: string): void;
49
+ disposeMany(eventIds: number[], chat: string, itemId: string): void;
50
+ /** Checkpointed sources. `active` omits those whose item was superseded. */
51
+ dispositions(chat: string, active?: boolean): Map<number, string>;
52
+ /** Observation candidates (agent/tool output), newest first. */
53
+ observations(chat: string, since: number, through: number, limit: number): LoomEvent[];
54
+ countObservations(chat: string, since: number, through: number): number;
55
+ savePacket(packet: ContextPacket, rendered: RenderedBriefing, receipt: Receipt): void;
56
+ packet(id: string): {
57
+ packet: ContextPacket;
58
+ rendered: RenderedBriefing;
59
+ } | undefined;
60
+ packetSummary(id: string): object | null;
61
+ receipts(requestId?: string): Receipt[];
62
+ activeReceipts(): Receipt[];
63
+ lastAccepted(bindingId: string, epoch: number): Receipt | undefined;
64
+ receiptForRun(id: string): Receipt | undefined;
65
+ transition(id: string, status: Receipt["status"], execution: Receipt["execution"], evidence: string | null): Receipt;
66
+ private writeReceipt;
67
+ assertWorkspaceIdle(workspace: string): void;
68
+ reconcile(id: string, evidence: string): void;
69
+ search(chat: string, query: string, limit?: number): LoomEvent[];
70
+ rebuildSearch(): void;
71
+ get searchMode(): "fts5" | "lexical";
72
+ get backupFiles(): string[];
73
+ }
@@ -0,0 +1,438 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { MAIN_CHAT } from "../../types.js";
6
+ import { BindingV1, ContextItemV1, ContextPacketV1, DeliveryReceiptV1, RenderedBriefingV1, ContinuityError, digest, parseBounded } from "./contracts.js";
7
+ const decode = (row) => row ? JSON.parse(String(row.data)) : undefined;
8
+ export const eventText = (e) => typeof e.payload.text === "string" ? e.payload.text : JSON.stringify(e.payload);
9
+ export const isUser = (e) => !e.agentId &&
10
+ ((e.kind === "message" && e.payload.author !== "loom") || (e.kind === "decision" && e.payload.auto !== true && (e.payload.author === undefined || e.payload.author === "user")));
11
+ const USER_SOURCE = `agent_id IS NULL AND ((kind='decision' AND coalesce(json_extract(payload,'$.auto'),0)!=1
12
+ AND coalesce(json_extract(payload,'$.author'),'user')='user') OR (kind='message' AND coalesce(json_extract(payload,'$.author'),'user')!='loom'))`;
13
+ // A captured request is conversation history only once it may have reached a
14
+ // harness. Queued, overflowed or pre-launch-failed requests are not yet said.
15
+ const UNSENT_REQUESTS = `SELECT r.event_id FROM continuity_requests r WHERE r.chat=? AND NOT EXISTS
16
+ (SELECT 1 FROM continuity_receipts c WHERE c.request_id=r.id AND json_extract(c.data,'$.status') IN ('submitting','accepted','outcome_unknown'))`;
17
+ // Only a current checkpoint replaces its originals; superseding it restores them.
18
+ const CHECKPOINTED = `SELECT d.event_id FROM continuity_dispositions d JOIN continuity_items i ON i.id=d.item_id
19
+ WHERE d.chat=? AND json_extract(i.data,'$.status')!='superseded'`;
20
+ /** Uses the event journal's existing connection. There is no second writer,
21
+ * memory-only acknowledgement, or nested connection transaction here. */
22
+ export class ContinuityStore {
23
+ db;
24
+ file;
25
+ token = randomUUID();
26
+ owned = false;
27
+ active = false;
28
+ fts = false;
29
+ constructor(db, file) {
30
+ this.db = db;
31
+ this.file = file;
32
+ }
33
+ activate() {
34
+ if (this.active)
35
+ return;
36
+ const exists = this.db.prepare("SELECT name FROM sqlite_master WHERE name='continuity_meta'").get();
37
+ if (!exists) {
38
+ // VACUUM INTO produces a consistent backup even with another open reader.
39
+ // Never overwrite a previous backup, and never proceed after backup failure.
40
+ const backup = `${this.file}.before-brain-v1.${randomUUID()}.db`;
41
+ this.db.prepare("VACUUM INTO ?").run(backup);
42
+ }
43
+ this.db.exec("PRAGMA busy_timeout=1000; PRAGMA foreign_keys=ON");
44
+ this.transaction(() => {
45
+ this.db.exec(`
46
+ CREATE TABLE IF NOT EXISTS continuity_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
47
+ CREATE INDEX IF NOT EXISTS continuity_events_scope ON events(coalesce(chat,'${MAIN_CHAT}'),id);
48
+ CREATE INDEX IF NOT EXISTS continuity_events_intent ON events(coalesce(chat,'${MAIN_CHAT}'),id)
49
+ WHERE agent_id IS NULL AND (kind='message' OR kind='decision');
50
+ CREATE TABLE IF NOT EXISTS continuity_requests (id TEXT PRIMARY KEY, hash TEXT NOT NULL,
51
+ chat TEXT NOT NULL, event_id INTEGER NOT NULL UNIQUE REFERENCES events(id), data TEXT NOT NULL);
52
+ CREATE TABLE IF NOT EXISTS continuity_bindings (id TEXT PRIMARY KEY, slot TEXT NOT NULL UNIQUE, data TEXT NOT NULL);
53
+ CREATE TABLE IF NOT EXISTS continuity_items (id TEXT PRIMARY KEY, chat TEXT NOT NULL, data TEXT NOT NULL);
54
+ CREATE TABLE IF NOT EXISTS continuity_item_revisions (id TEXT NOT NULL, revision INTEGER NOT NULL,
55
+ data TEXT NOT NULL, PRIMARY KEY(id,revision));
56
+ CREATE INDEX IF NOT EXISTS continuity_items_chat ON continuity_items(chat);
57
+ CREATE TABLE IF NOT EXISTS continuity_packets (id TEXT PRIMARY KEY, request_id TEXT NOT NULL REFERENCES continuity_requests(id),
58
+ data TEXT NOT NULL, rendered TEXT NOT NULL);
59
+ CREATE TABLE IF NOT EXISTS continuity_receipts (id TEXT PRIMARY KEY, request_id TEXT NOT NULL REFERENCES continuity_requests(id),
60
+ binding_id TEXT NOT NULL REFERENCES continuity_bindings(id), packet_id TEXT NOT NULL REFERENCES continuity_packets(id),
61
+ workspace TEXT NOT NULL, active INTEGER NOT NULL, data TEXT NOT NULL);
62
+ CREATE UNIQUE INDEX IF NOT EXISTS continuity_writer ON continuity_receipts(workspace) WHERE active=1;
63
+ CREATE INDEX IF NOT EXISTS continuity_receipts_request ON continuity_receipts(request_id);
64
+ CREATE INDEX IF NOT EXISTS continuity_receipts_binding ON continuity_receipts(binding_id);
65
+ CREATE UNIQUE INDEX IF NOT EXISTS continuity_receipts_run ON continuity_receipts(json_extract(data,'$.runId'));
66
+ CREATE TABLE IF NOT EXISTS continuity_dispositions (event_id INTEGER PRIMARY KEY REFERENCES events(id),
67
+ chat TEXT NOT NULL, item_id TEXT NOT NULL REFERENCES continuity_items(id));
68
+ `);
69
+ const version = this.meta("version");
70
+ if (version && version !== "1")
71
+ throw new ContinuityError("unsupported", `unsupported Brain database version ${version}`);
72
+ this.setMeta("version", "1");
73
+ });
74
+ try {
75
+ this.db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS continuity_search USING fts5(chat UNINDEXED, text);
76
+ CREATE TRIGGER IF NOT EXISTS continuity_search_insert AFTER INSERT ON events BEGIN
77
+ INSERT INTO continuity_search(rowid, chat, text) VALUES (new.id, coalesce(new.chat, '${MAIN_CHAT}'),
78
+ coalesce(json_extract(new.payload, '$.text'), new.payload)); END;
79
+ CREATE TRIGGER IF NOT EXISTS continuity_search_delete AFTER DELETE ON events BEGIN
80
+ DELETE FROM continuity_search WHERE rowid=old.id; END;
81
+ CREATE TRIGGER IF NOT EXISTS continuity_search_update AFTER UPDATE ON events BEGIN
82
+ DELETE FROM continuity_search WHERE rowid=old.id;
83
+ INSERT INTO continuity_search(rowid, chat, text) VALUES (new.id, coalesce(new.chat, '${MAIN_CHAT}'),
84
+ coalesce(json_extract(new.payload, '$.text'), new.payload)); END;`);
85
+ this.db.exec(`INSERT INTO continuity_search(rowid,chat,text)
86
+ SELECT id,coalesce(chat,'${MAIN_CHAT}'),coalesce(json_extract(payload,'$.text'),payload) FROM events
87
+ WHERE id NOT IN (SELECT rowid FROM continuity_search)`);
88
+ this.fts = true;
89
+ }
90
+ catch (error) {
91
+ if (!/no such module: fts5/i.test(String(error)))
92
+ throw error;
93
+ this.fts = false;
94
+ }
95
+ this.active = true;
96
+ }
97
+ claimOwner() {
98
+ if (this.owned)
99
+ throw new ContinuityError("conflict", "this journal already has a Brain execution owner");
100
+ this.activate();
101
+ this.transaction(() => {
102
+ const raw = this.meta("owner");
103
+ if (raw) {
104
+ const previous = JSON.parse(raw);
105
+ if (previous.token !== this.token) {
106
+ if (previous.host !== os.hostname())
107
+ throw new ContinuityError("recovery_required", "project is owned on another host; use a local SQLite filesystem");
108
+ let dead = false;
109
+ try {
110
+ process.kill(previous.pid, 0);
111
+ }
112
+ catch (error) {
113
+ dead = error.code === "ESRCH";
114
+ }
115
+ // A reused PID conservatively blocks takeover, never authorizes one.
116
+ if (!dead)
117
+ throw new ContinuityError("conflict", "another live project owner holds Brain; close it first");
118
+ }
119
+ }
120
+ this.setMeta("owner", JSON.stringify({ token: this.token, pid: process.pid, host: os.hostname() }));
121
+ for (const r of this.activeReceipts()) {
122
+ if (r.execution === "running" || r.status === "submitting") {
123
+ this.writeReceipt({ ...r, status: r.status === "submitting" ? "outcome_unknown" : r.status,
124
+ execution: "unknown", evidence: "previous owner exited; native action outcome requires reconciliation", updatedAt: Date.now() }, true);
125
+ }
126
+ }
127
+ });
128
+ this.owned = true;
129
+ }
130
+ releaseOwner() {
131
+ if (!this.owned)
132
+ return;
133
+ this.assertOwner();
134
+ this.db.prepare("DELETE FROM continuity_meta WHERE key='owner'").run();
135
+ this.owned = false;
136
+ }
137
+ assertOwner() {
138
+ if (!this.owned || JSON.parse(this.meta("owner") ?? "null")?.token !== this.token)
139
+ throw new ContinuityError("conflict", "Brain project ownership changed");
140
+ }
141
+ guardEventWriter() {
142
+ if (!this.db.prepare("SELECT name FROM sqlite_master WHERE name='continuity_meta'").get())
143
+ return;
144
+ const owner = this.meta("owner");
145
+ if (owner && JSON.parse(owner).token !== this.token)
146
+ throw new ContinuityError("conflict", "another Brain owner holds this event journal");
147
+ if (!owner && this.db.prepare("SELECT id FROM continuity_receipts WHERE active=1 LIMIT 1").get())
148
+ throw new ContinuityError("recovery_required", "unresolved Brain writers remain; enable native continuity and reconcile before legacy writes");
149
+ }
150
+ meta(key) {
151
+ return this.db.prepare("SELECT value FROM continuity_meta WHERE key=?").get(key)?.value;
152
+ }
153
+ setMeta(key, value) {
154
+ this.db.prepare("INSERT INTO continuity_meta VALUES (?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(key, value);
155
+ }
156
+ transaction(fn) {
157
+ this.db.exec("BEGIN IMMEDIATE");
158
+ try {
159
+ const result = fn();
160
+ this.db.exec("COMMIT");
161
+ return result;
162
+ }
163
+ catch (error) {
164
+ this.db.exec("ROLLBACK");
165
+ throw error;
166
+ }
167
+ }
168
+ capture(request, append) {
169
+ this.assertOwner();
170
+ return this.transaction(() => {
171
+ const hash = digest(JSON.stringify(request));
172
+ const previous = this.db.prepare("SELECT hash,event_id FROM continuity_requests WHERE id=?").get(request.id);
173
+ if (previous) {
174
+ if (previous.hash !== hash)
175
+ throw new ContinuityError("conflict", "request ID already belongs to different content or target");
176
+ return { event: this.event(Number(previous.event_id)), created: false };
177
+ }
178
+ const event = append();
179
+ this.db.prepare("INSERT INTO continuity_requests VALUES (?,?,?,?,?)")
180
+ .run(request.id, hash, request.conversationId, event.id, JSON.stringify(request));
181
+ return { event, created: true };
182
+ });
183
+ }
184
+ request(id) {
185
+ return decode(this.db.prepare("SELECT data FROM continuity_requests WHERE id=?").get(id));
186
+ }
187
+ requestEvent(id) {
188
+ const row = this.db.prepare("SELECT event_id FROM continuity_requests WHERE id=?").get(id);
189
+ return row ? this.event(Number(row.event_id)) : undefined;
190
+ }
191
+ event(id) {
192
+ const r = this.db.prepare("SELECT * FROM events WHERE id=?").get(id);
193
+ return r ? { id: Number(r.id), ts: Number(r.ts), kind: String(r.kind),
194
+ ...(r.agent_id ? { agentId: String(r.agent_id) } : {}), ...(r.chat ? { chat: String(r.chat) } : {}),
195
+ payload: JSON.parse(String(r.payload)) } : undefined;
196
+ }
197
+ source(event, projectId) {
198
+ return { projectId, eventId: event.id, hash: digest(eventText(event)) };
199
+ }
200
+ history(chat, through, since = 0, limit = 10_001) {
201
+ // Bounded ascending pagination. Unlike EventLog.limit this never hides old intent.
202
+ const rows = this.db.prepare(`SELECT id FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND id>? AND id<=?
203
+ ORDER BY id LIMIT ?`).all(chat, since, through, limit);
204
+ return rows.map(r => this.event(Number(r.id)));
205
+ }
206
+ protectedEvents(chat, through) {
207
+ const rows = this.db.prepare(`SELECT id FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND id<=?
208
+ AND (kind='message' OR kind='decision') AND ${USER_SOURCE}
209
+ AND id NOT IN (${CHECKPOINTED}) AND id NOT IN (${UNSENT_REQUESTS}) ORDER BY id LIMIT 10001`)
210
+ .all(chat, through, chat, chat);
211
+ return rows.map(r => this.event(Number(r.id)));
212
+ }
213
+ /** Governing user evidence after a snapshot. A newly queued request is not
214
+ * governing: it runs as its own turn after the current one. */
215
+ hasNewUserSources(chat, through) {
216
+ return Boolean(this.db.prepare(`SELECT id FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND id>?
217
+ AND ${USER_SOURCE} AND id NOT IN (${UNSENT_REQUESTS}) LIMIT 1`).get(chat, through, chat));
218
+ }
219
+ /** Sources already placed in one native session by accepted packets. */
220
+ delivered(bindingId, epoch) {
221
+ const scope = `FROM continuity_receipts r JOIN continuity_packets p ON p.id=r.packet_id
222
+ WHERE r.binding_id=? AND json_extract(r.data,'$.status')='accepted' AND json_extract(p.data,'$.target.sessionEpoch')=?`;
223
+ const each = (path) => `SELECT json_extract(x.value,'$.source.eventId') AS id
224
+ ${scope.replace("WHERE", `, json_each(p.data,'${path}') x WHERE`)}`;
225
+ const ids = (parts) => new Set(this.db.prepare(parts.join(" UNION "))
226
+ .all(...parts.flatMap(() => [bindingId, epoch])).filter(r => r.id !== null).map(r => Number(r.id)));
227
+ return {
228
+ messages: ids([`SELECT json_extract(p.data,'$.currentRequest.eventId') AS id ${scope}`, each("$.messages"), each("$.references")]),
229
+ evidence: ids([each("$.evidence")]),
230
+ };
231
+ }
232
+ binding(slot, create) {
233
+ this.assertOwner();
234
+ const previous = decode(this.db.prepare("SELECT data FROM continuity_bindings WHERE slot=?").get(slot));
235
+ if (previous)
236
+ return BindingV1.parse(previous);
237
+ const binding = BindingV1.parse(create());
238
+ this.db.prepare("INSERT INTO continuity_bindings VALUES (?,?,?)").run(binding.id, slot, JSON.stringify(binding));
239
+ return binding;
240
+ }
241
+ updateBinding(binding) {
242
+ this.assertOwner();
243
+ BindingV1.parse(binding);
244
+ this.db.prepare("UPDATE continuity_bindings SET data=? WHERE id=?").run(JSON.stringify(binding), binding.id);
245
+ }
246
+ bindingById(id) {
247
+ return decode(this.db.prepare("SELECT data FROM continuity_bindings WHERE id=?").get(id));
248
+ }
249
+ items(chat) {
250
+ return this.db.prepare("SELECT data FROM continuity_items WHERE chat=? ORDER BY id").all(chat)
251
+ .map(r => ContextItemV1.parse(JSON.parse(String(r.data))));
252
+ }
253
+ putItem(item) {
254
+ this.assertOwner();
255
+ parseBounded(ContextItemV1, item);
256
+ this.transaction(() => {
257
+ const old = decode(this.db.prepare("SELECT data FROM continuity_items WHERE id=?").get(item.id));
258
+ if (old && (old.conversationId !== item.conversationId || item.revision !== old.revision + 1))
259
+ throw new ContinuityError("conflict", "context item revision or scope changed");
260
+ if (!old && item.revision !== 1)
261
+ throw new ContinuityError("invalid", "new item revision must be 1");
262
+ if (item.supersedes) {
263
+ const target = decode(this.db.prepare("SELECT data FROM continuity_items WHERE id=?").get(item.supersedes.id));
264
+ if (item.origin !== "user" || item.status !== "accepted")
265
+ throw new ContinuityError("invalid", "supersession requires an accepted user-reviewed correction");
266
+ if (!target || target.status === "superseded" || target.conversationId !== item.conversationId || target.revision !== item.supersedes.revision || target.id === item.id)
267
+ throw new ContinuityError("conflict", "superseded item is missing, stale or outside this chat");
268
+ this.db.prepare("UPDATE continuity_items SET data=? WHERE id=?").run(JSON.stringify({ ...target, revision: target.revision + 1, status: "superseded" }), target.id);
269
+ this.db.prepare("INSERT INTO continuity_item_revisions VALUES (?,?,?)").run(target.id, target.revision + 1, JSON.stringify({ ...target, revision: target.revision + 1, status: "superseded" }));
270
+ }
271
+ this.db.prepare("INSERT INTO continuity_items VALUES (?,?,?) ON CONFLICT(id) DO UPDATE SET data=excluded.data")
272
+ .run(item.id, item.conversationId, JSON.stringify(item));
273
+ this.db.prepare("INSERT INTO continuity_item_revisions VALUES (?,?,?)").run(item.id, item.revision, JSON.stringify(item));
274
+ // Removed checkpoint sources become mandatory again in the same transaction.
275
+ const retained = new Set(item.origin === "user" ? item.sources.filter(s => !s.span).map(s => s.eventId) : []);
276
+ for (const [eventId, itemId] of this.dispositions(item.conversationId)) {
277
+ if (itemId === item.id && !retained.has(eventId))
278
+ this.db.prepare("DELETE FROM continuity_dispositions WHERE event_id=?").run(eventId);
279
+ }
280
+ this.setMeta(`revision:${item.conversationId}`, String(this.revision(item.conversationId) + 1));
281
+ });
282
+ }
283
+ revision(chat) { return Number(this.meta(`revision:${chat}`) ?? 0); }
284
+ // A source disposition is an explicit user-reviewed checkpoint. Original text
285
+ // stays in events; deferred/uncertain discussion cannot disappear via top-K.
286
+ dispose(eventId, chat, itemId) {
287
+ this.disposeMany([eventId], chat, itemId);
288
+ }
289
+ disposeMany(eventIds, chat, itemId) {
290
+ this.assertOwner();
291
+ const item = this.items(chat).find(i => i.id === itemId);
292
+ if (!item || item.origin !== "user" || eventIds.length > 1000 || !eventIds.length ||
293
+ !eventIds.every(eventId => item.sources.some(s => s.eventId === eventId && !s.span)))
294
+ throw new ContinuityError("invalid", "checkpoint needs user-reviewed full-source evidence");
295
+ this.transaction(() => {
296
+ for (const eventId of eventIds)
297
+ this.db.prepare("INSERT INTO continuity_dispositions VALUES (?,?,?) ON CONFLICT(event_id) DO UPDATE SET item_id=excluded.item_id")
298
+ .run(eventId, chat, itemId);
299
+ this.setMeta(`revision:${chat}`, String(this.revision(chat) + 1));
300
+ });
301
+ }
302
+ /** Checkpointed sources. `active` omits those whose item was superseded. */
303
+ dispositions(chat, active = false) {
304
+ const sql = active
305
+ ? `SELECT d.event_id,d.item_id FROM continuity_dispositions d WHERE d.event_id IN (${CHECKPOINTED})`
306
+ : "SELECT event_id,item_id FROM continuity_dispositions WHERE chat=?";
307
+ return new Map(this.db.prepare(sql).all(chat).map(r => [Number(r.event_id), String(r.item_id)]));
308
+ }
309
+ /** Observation candidates (agent/tool output), newest first. */
310
+ observations(chat, since, through, limit) {
311
+ const rows = this.db.prepare(`SELECT id FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND id>? AND id<=?
312
+ AND kind IN ('message','tool_call','file_edit','turn_diff','run_complete','error') AND NOT (${USER_SOURCE})
313
+ ORDER BY id DESC LIMIT ?`).all(chat, since, through, limit);
314
+ return rows.map(r => this.event(Number(r.id)));
315
+ }
316
+ countObservations(chat, since, through) {
317
+ return Number(this.db.prepare(`SELECT count(*) AS n FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND id>? AND id<=?
318
+ AND kind IN ('message','tool_call','file_edit','turn_diff','run_complete','error') AND NOT (${USER_SOURCE})`)
319
+ .get(chat, since, through).n);
320
+ }
321
+ savePacket(packet, rendered, receipt) {
322
+ this.assertOwner();
323
+ parseBounded(ContextPacketV1, packet);
324
+ parseBounded(RenderedBriefingV1, rendered);
325
+ DeliveryReceiptV1.parse(receipt);
326
+ if (receipt.packetId !== packet.id || receipt.requestId !== packet.requestId || receipt.bindingId !== packet.target.id ||
327
+ receipt.status !== "prepared" || receipt.execution !== "idle" || rendered.packetId !== packet.id)
328
+ throw new ContinuityError("invalid", "prepared packet, render and receipt links do not match");
329
+ this.transaction(() => {
330
+ this.db.prepare("INSERT INTO continuity_packets VALUES (?,?,?,?)")
331
+ .run(packet.id, packet.requestId, JSON.stringify(packet), JSON.stringify(rendered));
332
+ this.db.prepare("INSERT INTO continuity_receipts VALUES (?,?,?,?,?,?,?)")
333
+ .run(receipt.id, receipt.requestId, receipt.bindingId, receipt.packetId, packet.snapshot.workspace.id, 0, JSON.stringify(receipt));
334
+ });
335
+ }
336
+ packet(id) {
337
+ const row = this.db.prepare("SELECT data,rendered FROM continuity_packets WHERE id=?").get(id);
338
+ return row ? { packet: ContextPacketV1.parse(JSON.parse(String(row.data))), rendered: RenderedBriefingV1.parse(JSON.parse(String(row.rendered))) } : undefined;
339
+ }
340
+ packetSummary(id) {
341
+ const row = this.db.prepare(`SELECT json_object('id',json_extract(data,'$.id'),
342
+ 'conversationId',json_extract(data,'$.conversationId'),'mode',json_extract(data,'$.mode'),
343
+ 'target',json_extract(data,'$.target'),'snapshot',json_extract(data,'$.snapshot'),'budget',json_extract(data,'$.budget'),
344
+ 'counts',json_object('protectedItems',json_array_length(data,'$.items'), 'exactMessages',json_array_length(data,'$.messages'),
345
+ 'evidence',json_array_length(data,'$.evidence'),'coverage',json_array_length(data,'$.coverage'))) AS summary
346
+ FROM continuity_packets WHERE id=?`).get(id);
347
+ return row ? JSON.parse(String(row.summary)) : null;
348
+ }
349
+ receipts(requestId) {
350
+ if (!this.active && !this.db.prepare("SELECT name FROM sqlite_master WHERE name='continuity_receipts'").get())
351
+ return [];
352
+ return this.db.prepare(`SELECT data FROM continuity_receipts ${requestId ? "WHERE request_id=?" : ""} ORDER BY rowid DESC LIMIT 100`)
353
+ .all(...(requestId ? [requestId] : [])).reverse().map(r => DeliveryReceiptV1.parse(JSON.parse(String(r.data))));
354
+ }
355
+ activeReceipts() {
356
+ return this.db.prepare("SELECT data FROM continuity_receipts WHERE active=1").all()
357
+ .map(r => DeliveryReceiptV1.parse(JSON.parse(String(r.data))));
358
+ }
359
+ lastAccepted(bindingId, epoch) {
360
+ return decode(this.db.prepare(`SELECT r.data AS data FROM continuity_receipts r JOIN continuity_packets p ON p.id=r.packet_id
361
+ WHERE r.binding_id=? AND json_extract(r.data,'$.status')='accepted' AND json_extract(p.data,'$.target.sessionEpoch')=?
362
+ ORDER BY r.rowid DESC LIMIT 1`).get(bindingId, epoch));
363
+ }
364
+ receiptForRun(id) {
365
+ return decode(this.db.prepare("SELECT data FROM continuity_receipts WHERE json_extract(data,'$.runId')=?").get(id));
366
+ }
367
+ transition(id, status, execution, evidence) {
368
+ this.assertOwner();
369
+ return this.transaction(() => {
370
+ const old = decode(this.db.prepare("SELECT data FROM continuity_receipts WHERE id=?").get(id));
371
+ if (!old)
372
+ throw new ContinuityError("invalid", "receipt not found");
373
+ const allowed = {
374
+ prepared: ["submitting", "failed"], submitting: ["accepted", "failed", "outcome_unknown"],
375
+ accepted: ["accepted"], failed: [], outcome_unknown: []
376
+ };
377
+ if (!allowed[old.status].includes(status))
378
+ throw new ContinuityError("conflict", `invalid receipt transition ${old.status} -> ${status}`);
379
+ if (status === "accepted" && !evidence)
380
+ throw new ContinuityError("invalid", "native acceptance requires correlated evidence");
381
+ const next = DeliveryReceiptV1.parse({ ...old, status, execution, evidence, updatedAt: Date.now() });
382
+ this.writeReceipt(next, execution === "running" || execution === "unknown");
383
+ return next;
384
+ });
385
+ }
386
+ writeReceipt(receipt, active) {
387
+ this.db.prepare("UPDATE continuity_receipts SET active=?,data=? WHERE id=?").run(active ? 1 : 0, JSON.stringify(receipt), receipt.id);
388
+ }
389
+ assertWorkspaceIdle(workspace) {
390
+ this.assertOwner();
391
+ if (this.db.prepare("SELECT id FROM continuity_receipts WHERE workspace=? AND active=1").get(workspace))
392
+ throw new ContinuityError("recovery_required", "workspace has an active or uncertain native run; finish, interrupt, or reconcile it first");
393
+ }
394
+ reconcile(id, evidence) {
395
+ this.assertOwner();
396
+ this.transaction(() => {
397
+ const receipt = decode(this.db.prepare("SELECT data FROM continuity_receipts WHERE id=?").get(id));
398
+ if (!receipt || receipt.execution !== "unknown")
399
+ throw new ContinuityError("conflict", "only uncertain runs require manual reconciliation");
400
+ if (!evidence.trim() || evidence.length > 2000)
401
+ throw new ContinuityError("invalid", "record how native process termination and workspace were checked");
402
+ this.writeReceipt({ ...receipt, execution: "interrupted", evidence: `user reconciliation: ${evidence}`, updatedAt: Date.now() }, false);
403
+ const row = this.db.prepare("SELECT data FROM continuity_bindings WHERE id=?").get(receipt.bindingId);
404
+ const binding = decode(row);
405
+ if (binding)
406
+ this.updateBinding({ ...binding, nativeSessionId: null, sessionEpoch: binding.sessionEpoch + 1, retention: "unknown" });
407
+ });
408
+ }
409
+ search(chat, query, limit = 12) {
410
+ const words = query.match(/[\p{L}\p{N}_./-]+/gu)?.slice(0, 24) ?? [];
411
+ if (!words.length)
412
+ return [];
413
+ let rows;
414
+ if (this.fts) {
415
+ const match = words.map(w => `"${w.replaceAll('"', '""')}"`).join(" OR ");
416
+ rows = this.db.prepare("SELECT rowid AS id FROM continuity_search WHERE chat=? AND continuity_search MATCH ? ORDER BY bm25(continuity_search) LIMIT ?")
417
+ .all(chat, match, Math.min(50, Math.max(1, limit)));
418
+ }
419
+ else {
420
+ rows = this.db.prepare(`SELECT id FROM events WHERE coalesce(chat,'${MAIN_CHAT}')=? AND payload LIKE ? ESCAPE '\\' ORDER BY id DESC LIMIT ?`)
421
+ .all(chat, `%${words[0].replace(/[\\%_]/g, "\\$&")}%`, Math.min(50, Math.max(1, limit)));
422
+ }
423
+ return rows.map(r => this.event(Number(r.id)));
424
+ }
425
+ rebuildSearch() {
426
+ this.assertOwner();
427
+ if (!this.fts)
428
+ return; // Lexical fallback reads canonical events directly.
429
+ this.transaction(() => {
430
+ this.db.exec(`DELETE FROM continuity_search;
431
+ INSERT INTO continuity_search(rowid,chat,text)
432
+ SELECT id,coalesce(chat,'${MAIN_CHAT}'),coalesce(json_extract(payload,'$.text'),payload) FROM events;`);
433
+ });
434
+ }
435
+ get searchMode() { return this.fts ? "fts5" : "lexical"; }
436
+ get backupFiles() { return fs.readdirSync(path.dirname(this.file)).filter(f => f.startsWith("log.db.before-brain-v1.")); }
437
+ }
438
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/continuity/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type ChatInfo } from "../types.js";
2
+ export declare class ConversationStore {
3
+ private readonly projectDir;
4
+ constructor(projectDir: string);
5
+ chats(): ChatInfo[];
6
+ createChat(title: string, opts?: {
7
+ agentId?: string;
8
+ model?: string;
9
+ }): ChatInfo;
10
+ setChatAgent(id: string, agentId: string | null, model?: string): ChatInfo | null;
11
+ renameChat(id: string, title: string): ChatInfo | null;
12
+ /**
13
+ * Forget a conversation. Its events stay in the log — it's append-only, and
14
+ * the brain is built from all of them; deleting the thread you had with an
15
+ * agent shouldn't quietly rewrite what the project decided. The chat just
16
+ * stops being listed.
17
+ */
18
+ deleteChat(id: string): boolean;
19
+ }