@loompad/cli 0.1.0 → 1.1.2

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 (688) hide show
  1. package/ARCHITECTURE.md +96 -11
  2. package/CHANGELOG.md +1054 -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 +4646 -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/release-notes/v1.1.2.md +21 -0
  674. package/docs/teams-architecture.md +697 -0
  675. package/docs/teams.md +171 -0
  676. package/docs/windows.md +85 -0
  677. package/package.json +22 -9
  678. package/dist/adapters/claude-code.d.ts +0 -26
  679. package/dist/adapters/claude-code.js +0 -209
  680. package/dist/adapters/claude-code.js.map +0 -1
  681. package/dist/adapters/codex.d.ts +0 -51
  682. package/dist/adapters/codex.js +0 -291
  683. package/dist/adapters/codex.js.map +0 -1
  684. package/docs/img/board-linear.png +0 -0
  685. package/docs/img/board-projects.png +0 -0
  686. package/docs/img/brain.png +0 -0
  687. package/docs/img/settings.png +0 -0
  688. package/docs/img/workspace.png +0 -0
@@ -0,0 +1,81 @@
1
+ # Porting t3code's core into Loom
2
+
3
+ Status: plan, agreed 2026-09-28. Functionality first; UI after.
4
+
5
+ Loom takes t3code's provider and turn machinery (MIT, attributed per file) and keeps
6
+ its own app, orchestra, teams, phone client and Brain. The port is plain TypeScript;
7
+ t3code's Effect layers become classes and async functions. The differentiator is
8
+ what t3code refuses: switching provider mid-chat
9
+ ([`ProviderCommandReactor`](../../../t3code/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts):
10
+ "is bound to driver X and cannot switch to Y"). Loom's Brain makes that switch.
11
+
12
+ ## Decisions
13
+
14
+ - **Port, not fork.** Loom's daemon, clients and features stay; the provider layer
15
+ and turn lifecycle are replaced with t3code's design.
16
+ - **Warm sessions.** One live provider session per chat, reused across turns
17
+ (app-server process, Agent SDK streaming query), with an idle reaper. Brain's
18
+ "turn owns a process group" rule becomes turn-level settlement: a turn is settled
19
+ when the harness reports it finished and no commands it started are running.
20
+ - **Normalized events at the adapter boundary.** Adapters emit one canonical runtime
21
+ event stream; nothing above them branches on provider.
22
+
23
+ ## What t3code has that Loom lacks
24
+
25
+ | Area | t3code | Loom today |
26
+ | --- | --- | --- |
27
+ | Adapter contract | `startSession`, `sendTurn`, `interruptTurn`, `respondToRequest`, `respondToUserInput`, `readThread`, `rollbackThread`, `compaction`, `stopSession`, capabilities | `send`, `interrupt`, `available` |
28
+ | Runtime events | ~50 normalized types: session/turn/item lifecycle, `content.delta` streaming, requests, user input, plans, diffs, tasks, hooks, account, MCP | ~10 coarse kinds, completed messages only |
29
+ | Sessions | warm, directory + reaper, per instance | one process per turn |
30
+ | Questions | structured user input, blocking and async (Codex) | `needs_input` heuristic on a trailing `?` |
31
+ | Plans | plan items, proposed plan, plan-mode exit | plan-mode briefing text |
32
+ | Revert | hidden-ref checkpoints + conversation rollback, refused when the provider can't roll back | checkpoints restore files only |
33
+ | Models | catalog per provider (`model/list`, Claude manifest), effort/thinking | free-text model override |
34
+ | Compaction | automatic + manual start | automatic only (reported) |
35
+ | Providers | instances (several accounts per driver), auth status, install/update ownership | one agent per config entry |
36
+
37
+ ## Phases
38
+
39
+ Each phase ends with fakes-only tests passing and one authorized live check per
40
+ harness.
41
+
42
+ **1. Provider contract and service.** `src/providers/` in t3code's shape: a
43
+ `ProviderAdapter` interface with capabilities, the canonical `ProviderRuntimeEvent`
44
+ union (the subset Loom uses first, extended as phases need it), a `ProviderService`
45
+ that routes by instance and owns a session directory and reaper, and an ingestion
46
+ layer that projects runtime events into Loom's event log. Existing adapters are
47
+ wrapped, so nothing user-facing changes yet.
48
+
49
+ **2. Warm sessions for Codex and Claude.** Codex: one `app-server` per chat, thread
50
+ kept open, turns started and interrupted over the same connection. Claude: one
51
+ streaming-input `query()` per chat, turns pushed as user messages, `setModel` for
52
+ in-provider model switches. Turn-level settlement replaces process-group settlement
53
+ in Brain. Token streaming via `content.delta`, throttled on the websocket.
54
+
55
+ **3. Interaction parity.** Tool items with start/progress/complete and streamed
56
+ output; approvals keeping native option ids; structured user input (Claude
57
+ `AskUserQuestion`, Codex `requestUserInput`, Codex async questions); plan items and
58
+ plan-mode exit; per-turn diffs; manual compaction; model catalogs with effort and
59
+ thinking settings.
60
+
61
+ **4. Checkpoints and revert.** Hidden-ref workspace checkpoints per turn; revert
62
+ coordinated with native rollback (Codex thread rollback, Claude resume-at);
63
+ refused before touching files when the provider can't roll back.
64
+
65
+ **5. Cross-provider switching (the differentiator).** Switching provider in a chat
66
+ parks the current warm session and starts or resumes the target's, with Brain
67
+ building what the target lacks. Budget by the target's context window; offer a
68
+ switch when a usage limit is reached; revert across a provider boundary rolls back
69
+ each side it touched. Brain continuity becomes the default path, not opt-in.
70
+
71
+ **6. Provider management.** Instances (several accounts per driver), auth status,
72
+ install/update detection by owning installer, importing native session history.
73
+
74
+ **7. UI overhaul.** Built on the settled event model.
75
+
76
+ ## Not ported
77
+
78
+ Relay/T3 Connect, mobile app, desktop shell, devices, voice, analytics and
79
+ marketing: Loom has its own equivalents or doesn't need them now. Other providers
80
+ (Cursor, Grok, OpenCode, Antigravity) move to the new contract after Codex and
81
+ Claude.
@@ -0,0 +1,95 @@
1
+ # T3 Code reference for Loom
2
+
3
+ Inspected 2026-09-27. Read-only checkout: `/Volumes/Programming Vault/t3code`.
4
+ Branch: `main`. Commit: `de251fc2971a884cb5b1305ba4daf309dc8cccb0`
5
+ (`fix(web): continue onboarding after incomplete history imports (#13935)`).
6
+ Read contributor and agent instructions. No dependencies installed, processes
7
+ started, benchmarks run, or T3 source changed. This is a targeted architecture
8
+ review, not an audit of the entire repository.
9
+
10
+ ## Findings and implications
11
+
12
+ ### Native sessions still have provider boundaries
13
+
14
+ The [command reactor](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts#L688)
15
+ rejects an existing thread switching to another driver. Even instances of the
16
+ same driver must have matching `continuationIdentity.continuationKey` values.
17
+ Model selection and native session compatibility are separate concerns.
18
+
19
+ **Loom:** keep the app conversation independent of native sessions. Validate
20
+ resume compatibility per instance. Cross-harness switching needs a fresh or
21
+ compatible target session and our own source-backed handoff. This checkout does
22
+ not solve shared context for us. PR #3799 was inspected separately; do not
23
+ describe its unmerged code as behavior present here.
24
+
25
+ ### Cheap helper calls through harnesses are concrete
26
+
27
+ [Model defaults](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/packages/contracts/src/model.ts#L164)
28
+ select `gpt-6-luna` for Codex text generation and `claude-haiku-4-5` for Claude.
29
+ The [TextGeneration interface](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/TextGeneration.ts#L87)
30
+ provides commit messages, PR content, branch names and thread titles.
31
+
32
+ - [Codex](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/CodexTextGeneration.ts#L197)
33
+ uses `exec --ephemeral`, a read-only sandbox and an output schema.
34
+ - [Claude](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/textGeneration/ClaudeTextGeneration.ts#L199)
35
+ requests structured JSON, disables tools and slash commands, and specifies
36
+ strict MCP configuration. Thread title calls use a temporary working directory.
37
+
38
+ **Loom:** reuse the architectural pattern for a small `ContextHelper` interface.
39
+ Summary extraction and source validation are new responsibilities. Discover
40
+ available models, bound usage, isolate helper sessions and preserve deterministic
41
+ fallbacks. A read-only sandbox alone does not mean a helper has no tools or no
42
+ access to unrelated readable files. These defaults do not prove account access,
43
+ subscription savings or identical restrictions across harnesses.
44
+
45
+ ### Streaming efficiency is an explicit design concern
46
+
47
+ The [WebSocket server](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/ws.ts)
48
+ batches shell/sidebar projection events, coalesces updates by aggregate and keeps
49
+ survivors ordered by sequence. Synchronization markers cannot overtake pending
50
+ events. [Client shell state](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/packages/client-runtime/src/state/shell.ts)
51
+ applies a batch with a single state write. Chat rendering uses a virtualized list.
52
+
53
+ **Loom:** persist canonical events independently of UI update frequency. Coalesce
54
+ replaceable projections only; preserve messages, decisions, tool outcomes and
55
+ delivery acknowledgements. Test ordering and reconnect boundaries. These are
56
+ useful performance mechanisms, not measured proof that every screen is fast.
57
+
58
+ ### Electron supervises a backend process
59
+
60
+ [DesktopBackendManager](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/desktop/src/backend/DesktopBackendManager.ts)
61
+ spawns backend processes, tracks lifecycle/readiness and schedules recovery after
62
+ unexpected exits. Desktop, server and web are separate applications in the repo.
63
+
64
+ **Loom:** keep harness execution, SQLite, indexing and helper scheduling outside
65
+ the renderer. Specify startup, cancellation, shutdown and crash recovery before
66
+ moving the UI to Electron. Electron packaging alone does not provide performance.
67
+ Adopting T3's full framework stack is not required to adopt these boundaries.
68
+
69
+ ### SQLite and native compaction have distinct roles
70
+
71
+ The [SQLite layer](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/persistence/Layers/Sqlite.ts)
72
+ enables foreign keys, WAL, a busy timeout and migrations. Its journal-size setting
73
+ controls retained WAL size after reset, not a hard cap on all in-flight WAL growth.
74
+
75
+ The [Claude adapter](https://github.com/pingdotgg/t3code/blob/de251fc2971a884cb5b1305ba4daf309dc8cccb0/apps/server/src/provider/Layers/ClaudeAdapter.ts#L3628)
76
+ observes native compaction boundaries and updates usage/thread state. Observing a
77
+ native compact event does not create portable cross-provider memory.
78
+
79
+ **Loom:** SQLite remains the canonical app-owned event and continuity store;
80
+ JSONL is an export format. Preserve originals across native compaction and track
81
+ what was actually delivered to each session separately from helper summaries.
82
+
83
+ ## Next work, when implementation starts
84
+
85
+ - [x] Inspect session compatibility, helper isolation, persistence and desktop boundaries.
86
+ - [x] Feed verified constraints into the [continuity plan](brain-session-continuity.md).
87
+ - [ ] Verify installed harness capabilities and helper model availability.
88
+ - [ ] Prototype sequential switching with exact user history and delivery receipts.
89
+ - [ ] Test corrections, small decisions, return-to-old-session deltas and interruption.
90
+ - [ ] Measure token overhead and continuation quality before adding vector retrieval.
91
+ - [ ] Benchmark UI streaming and backend recovery before choosing optimizations.
92
+
93
+ Pin any future T3 comparison to its commit. Read the local MIT license before
94
+ copying source and retain required attribution if code is reused. No source was
95
+ copied as part of this review.
@@ -0,0 +1,88 @@
1
+ # Agent Teams implementation and Windows audit
2
+
3
+ User scope confirmed on 2026-10-15: finish Windows reliability, then implement
4
+ Agent Teams P2–P5 in separate reviewable PRs. Humans merge the PRs. Hosted
5
+ acceptance and trusted signing issues remain open when external access is missing.
6
+ The feature contract is [agent-teams.md](../proposals/agent-teams.md).
7
+
8
+ ## Windows foundation — PR #218
9
+
10
+ Native Job Object containment, OpenCode 1.19 protocol parity, contained spec runs
11
+ and dev servers, IPv6 localhost readiness, and source installation checks are
12
+ implemented. Real Codex/OpenCode sequential native resume across an OS daemon
13
+ restart, parallel Orchestra, and the sequential Ship crew passed on Windows.
14
+
15
+ The audit found a native race in node-pty 1.1.0 during simultaneous terminal
16
+ exits. The dependency is pinned to 1.2.0-beta.15, containing upstream #922. The
17
+ DLL backend also leaves its output worker alive after public `onExit` (#887);
18
+ Loom now drains that connection with a compatibility bridge for the pinned
19
+ version, awaits shutdown, and ignores stale terminal callbacks after id reuse.
20
+ 45 ConPTY checks and 42 pipe checks passed; a standalone terminal process exits
21
+ normally; production staging verifies Job Objects and ConPTY execution/shutdown.
22
+ All ten CI jobs passed on Windows PR head bd64d26.
23
+
24
+ Automatic approval review rejected launching the packaged desktop UI. Do not
25
+ retry that launch. The packaged daemon has CLI acceptance evidence. Installers
26
+ are unsigned, and current desktop UI acceptance remains incomplete.
27
+
28
+ ## P2 — persistent teammates
29
+
30
+ Branch: `feat/crew-persistent-teammates`, stacked on the Windows PR.
31
+
32
+ - [x] Native binding per seat, delta on the second card.
33
+ - [x] Stable checkout across goals, distinct goal branches.
34
+ - [x] Graceful mid-goal restart resumes the binding; uncertain actions require
35
+ explicit receipt reconciliation before replay.
36
+ - [x] Explicit teammate refresh starts a new epoch.
37
+ - [x] Crew memory scope, retrieval isolation and human promotion to project memory.
38
+ - [x] Native fake acceptance, HTTP route checks, regression/DOM checks and CI (all ten jobs on 2cb501b).
39
+
40
+ Local validation: build/typecheck passed; native restart/delta/recovery tests
41
+ passed (3), crew/memory HTTP and the Crew DOM acceptance passed, and the existing
42
+ crew/brain regressions passed. Full CI remains a separate release gate.
43
+
44
+ ## P3 — parallel and safe
45
+
46
+ - [x] Builder worktrees and in-crew leases, with overlap holds and resolution.
47
+ - [x] Race and Fan-out plays reuse Orchestra/worktree mechanisms.
48
+ - [x] Merge-tree prediction before integration; conflicts return to the owner.
49
+ - [x] Explicit reviewer/tester results; absent protocol output cannot approve.
50
+ - [x] Stop and test timeout quiesce all tool descendants on Windows.
51
+ - [x] Overlap, conflict, stop, race and fan-out integration tests.
52
+
53
+ Local validation: build/typecheck passed. Nine parallel-flow checks and the
54
+ existing crew/HTTP suites passed (24 checks). Orchestra, native continuity and
55
+ Crew DOM acceptance passed (30 more checks). Native fan-out holds two distinct
56
+ workspace receipts and integrates both results. All ten CI jobs passed on P3 head 7e1b326; the corrected POSIX fixture retains detached-child coverage on Windows.
57
+
58
+ ## P4 — several people
59
+
60
+ - [x] Crew/teammate metadata in presence and Fleet, without transcript sharing.
61
+ - [x] Cross-member requests with owner acceptance/decline.
62
+ - [x] Runner-hosted crews, policy limits and role permission ceilings.
63
+ - [x] Per-crew/member/goal budget accounting and visible budget holds.
64
+ - [x] Two-member overlapping work acceptance using the existing hub harness.
65
+ - [x] No hosted migration or landing/merge-policy changes without owner approval.
66
+
67
+ ## P5 — usable from desktop and phone
68
+
69
+ - [x] Templates, parallel seat activity, native epochs, per-seat/goal/daily spend, and crew metadata on the shared board.
70
+ - [x] Phone Crew view: start/approve/watch, pause/resume/stop, race selection, refresh, budget and team/runner controls.
71
+ - [x] Crew deep links and notifications for budget/lease holds, race choices and incoming owner requests; docs.
72
+ - [x] Build/typecheck, HTTP, four Crew DOM flows and 76 phone model checks.
73
+ - [ ] Complete exact-head CI and physical native phone acceptance. Browser mobile layout inspected at 390x844; it does not establish native-device acceptance.
74
+
75
+ P5 local evidence: 96 existing board/shell/team regressions and 24 cost/crew/parallel checks passed. Four Crew
76
+ DOM flows cover planning/approval/apply, Stop/Resume, Race/pick/play/pause, and
77
+ parallel-seat/owner-request/runner-control UI. Both app and daemon compile.
78
+ Mechanical UI scan is clear; desktop and phone browser layouts inspected.
79
+
80
+ ## Separate open issues
81
+
82
+ - #200: PR #224 aligns phone GitHub sign-in and validates PKCE callbacks.
83
+ Hosted redirect allow-list and physical phone acceptance still need
84
+ hosted/admin and device access. The issue stays open.
85
+ - #199: public read-only links require dedicated authorization, viewer,
86
+ expiry/revocation and hosted acceptance; paired encrypted relay is not public sharing.
87
+ - #70: trusted signing certificates and installed release-to-release acceptance.
88
+ - #215 stays open until every phase's acceptance criteria are met.
@@ -0,0 +1,120 @@
1
+ # Brain-ready module boundaries
2
+
3
+ ## Native continuity implementation
4
+
5
+ The prerequisite refactor below is complete. The opt-in native path now lives in
6
+ `src/core/continuity/` and is integrated through RuntimeTurns. See
7
+ [current architecture](../../ARCHITECTURE.md), [native continuity](../brain-continuity.md)
8
+ and [remaining gates](BRAIN-TODO.md). SQLite mutations stay on EventLog's existing
9
+ connection. Packet assembly and dispatch do not create another database writer;
10
+ client diagnostics remain downstream of persistence. Legacy behavior is available
11
+ when continuity is disabled.
12
+
13
+ ## Objective
14
+
15
+ Prepare Loom for the Brain continuity rewrite without changing its framework,
16
+ client protocols, persisted history, or native harness behavior. This is the
17
+ prerequisite work in `docs/proposals/brain-session-continuity.md`, not the new
18
+ continuity implementation. Work stays on `dev/Harsha`.
19
+
20
+ ## Work checklist
21
+
22
+ - [x] Read contributor instructions and trace current ownership.
23
+ - [x] Separate event contracts from SQLite/JSONL implementations; retain the
24
+ public EventLog entrypoint and test both backends.
25
+ - [x] Give conversation metadata its own storage module; preserve implicit Main,
26
+ chat bindings, deleted-chat history and existing state.json compatibility.
27
+ - [x] Isolate native adapter state behind per-instance storage; keep native IDs
28
+ separate from app conversation IDs and preserve existing resume data.
29
+ - [x] Give adapter subscriptions/startup/retirement explicit lifecycle ownership;
30
+ reject events from replaced instances and prevent duplicate startup.
31
+ - [x] Isolate Brain helper dependencies and handoff preparation from execution;
32
+ prevent background extraction from writing after shutdown.
33
+ - [x] Centralize client delivery and scope filtering; a failed client must not
34
+ break persistence or delivery to another client.
35
+ - [x] Add meaningful lifecycle/compatibility regressions, run focused tests,
36
+ typecheck, build and broader tests; record results and remaining limitations.
37
+
38
+ ## Invariants
39
+
40
+ - Persist original events before notifying consumers. UI delivery is an observer.
41
+ - Brain depends on an event interface, not a storage implementation or UI.
42
+ - Native adapters translate harness behavior; they do not manage conversations.
43
+ - Runtime coordinates execution, permissions, baton and working-tree ownership.
44
+ - Shutdown/retirement invalidates subscriptions and late helper results.
45
+ - No paid verification, framework migration, new summarizer or vector model.
46
+ - Existing direct-model and bridge features remain compatible; removing them is
47
+ a separate product migration, not a prerequisite for these seams.
48
+
49
+ ## Findings
50
+
51
+ - The previous extraction left chat storage and handoff preparation in runtime.
52
+ - Five harness adapters duplicate state.json reads/writes for native sessions.
53
+ - Replaced adapters retain callbacks and model replacement retains started state.
54
+ - Brain extraction and semantic startup can outlive the project log.
55
+ - WebSocket fanout repeats scope logic and allows one send failure to escape.
56
+
57
+ ## Verification
58
+
59
+ - Initial focused run was blocked by sandbox loopback restrictions. Re-ran with
60
+ local socket access: 112 tests passed; subsequent expanded run: 129 passed.
61
+ - `npm run build`: passed, including browser assets and TypeScript compilation.
62
+ - Full `npm test`: backend passed 1,357 tests, 17 skipped; all 125 DOM tests
63
+ passed. Total: **1,482 passed, 17 skipped**, with no failed suites.
64
+ - Final `npm run typecheck`, `git diff --check` and whitespace checks on new
65
+ files: passed. No paid provider checks or Electron GUI runs were performed.
66
+ - Temporary logs: `/tmp/loom-boundary-focused.log`,
67
+ `/tmp/loom-boundary-build.log`, `/tmp/loom-boundary-full.log`.
68
+
69
+ Completed on 2026-09-27. The prerequisite checklist above is complete; the next
70
+ work is the sequential Brain continuity flow described in the proposal.
71
+
72
+ ## Resulting ownership
73
+
74
+ | Responsibility | Owner | Callers depend on |
75
+ | --- | --- | --- |
76
+ | Canonical event persistence | `core/eventlog.ts`, `core/events/*` | EventJournal/EventReader; existing EventLog facade remains public |
77
+ | App conversation metadata | `core/conversations.ts` | Chat operations; runtime validates bindings |
78
+ | Native resume/process metadata | `core/agent-state.ts` | Per-instance read/patch via AdapterBase |
79
+ | Configured live adapter instances | `daemon/runtime/agents.ts` | Install/start/retire/close; read-only roster |
80
+ | Context selection and preparation | `daemon/runtime/briefings.ts` | Prepared memory/briefing and injected helper implementations |
81
+ | Execution and workspace policy | ProjectRuntime and RuntimeTurns | Existing runtime commands |
82
+ | Client frame delivery | `daemon/delivery.ts` | Project/log/admin audiences and transport connections |
83
+
84
+ ## Correctness fixes included
85
+
86
+ - A failed event observer cannot make a durable append appear to fail or stop
87
+ later observers. Caller/subscriber mutations cannot alter canonical history;
88
+ SQLite and JSONL both return detached data. Closing is idempotent.
89
+ - Retired instances are unsubscribed immediately. A replacement waits for the
90
+ predecessor's startup/stop and has independent startup state. Concurrent starts
91
+ share one attempt; failed attempts can retry.
92
+ - Turn preparation counts as active work for replacement and hot reload. A
93
+ startup/send failure releases the reservation and records its error in the
94
+ originating chat. Dispatch refuses an instance retired during asynchronous work.
95
+ - Brain extraction discards cancelled results before applying memory operations.
96
+ Semantic load completion cannot re-enable a disabled or closed channel.
97
+ - OpenCode's asynchronous orphan check updates only its own latest state slot;
98
+ it no longer writes an old snapshot over intervening chat/baton changes.
99
+ - Socket send failures are isolated for project, terminal, log and team frames.
100
+
101
+ ## Deliberately retained / next phase
102
+
103
+ - State.json remains the metadata format; SQLite/JSONL event history is unchanged.
104
+ A migration to the proposed Brain SQLite schema needs its own migration tests.
105
+ - Native sessions are still scoped as before (configured instance + working
106
+ directory). Mapping multiple native sessions to one app chat, provider resume
107
+ compatibility, handoff receipts and coverage are next-phase work.
108
+ - Context selection still uses the legacy windows/extraction policy. These
109
+ changes establish ownership, not a promise that switching preserves every detail.
110
+ - Helper cancellation discards results; it does not kill the existing helper
111
+ process. Its configured timeout still applies. Already running native work
112
+ depends on each adapter's stop implementation; no universal hard-kill policy
113
+ has been introduced.
114
+ - No Electron migration, UI batching/virtualization change, model download,
115
+ benchmark, paid agent verification, or removal of existing integrations.
116
+ - The T3 Code checkout is unchanged. No source was copied from it.
117
+ - The boundary work is now committed at
118
+ `584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a`. The next Brain plan is in
119
+ [brain-continuity-implementation.md](../proposals/brain-continuity-implementation.md);
120
+ implementation awaits user review. Planning work does not publish changes.
@@ -0,0 +1,176 @@
1
+ # Brain cleanup and plan audit — 2026-09-28
2
+
3
+ Baseline: `584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a` plus the uncommitted
4
+ implementation. Scope: native Brain, event storage, adapters, foreground turns,
5
+ queues, runtime entrypoints, HTTP and browser controls. No commit/push or paid
6
+ provider call was performed. Applied `code-review` (independent standards/spec
7
+ reviews) and `codebase-design` (keep ownership behind the existing interfaces).
8
+
9
+ ## Standards review
10
+
11
+ Five initial correctness findings were fixed: cancellation during submission,
12
+ queue whitespace/idempotency, incomplete mode-change guards, late orchestra
13
+ rejection, and adapter preparation outside cleanup ownership. Follow-up fixes
14
+ cover inherited-pipe cleanup at parent exit, uncertain process-group errors and
15
+ reassembly overflow. Each has a focused regression or is exercised by the native
16
+ lifecycle fixtures. Heuristic duplication between legacy and native dispatch remains
17
+ an intentional compatibility seam; neither uses the other's briefing/extractor.
18
+
19
+ Additional cleanup removes four unused runtime forwarding methods, native legacy
20
+ agent-decision mining/text accumulation, duplicated semantic startup on mode changes,
21
+ and legacy extractor/embedding/projection controls while native mode is enabled.
22
+ Legacy SDK/team-memory interfaces remain supported when native continuity is off;
23
+ deleting those before protocol/route/OpenCode parity would break existing users.
24
+
25
+ ## Spec review
26
+
27
+ Six initial gaps were corrected or bounded explicitly: current-request budget,
28
+ checkpoint revision coverage, new user evidence invalidating unsent snapshots,
29
+ atomic/addressable reconciliation, optional delta holes, and inherited descendant
30
+ containment. Follow-up review caught mixed packet/receipt links, repeat reconciliation,
31
+ failed Git observation treated as stable state, and evidence-count bounds; these were
32
+ fixed. Review did not certify the remaining release gates below.
33
+
34
+ Other fixes: distinguish agent-generated legacy decisions from user authority;
35
+ prevent tentative/helper supersession; fence uncertain writers against rewind/handoff;
36
+ wait for app-owned diff/commit writes before the next native turn; publish artifacts
37
+ without overwriting existing hashes, read without following final symlinks, verify
38
+ reference size/hash/path, and remove failed temporary artifacts. Native JSONL records
39
+ are bounded before readline can accumulate unlimited tool output. Configuration changes validate before activation and roll back ownership on failed
40
+ atomic config replacement; unresolved native leases also fence legacy journal writes.
41
+ FTS has update/delete
42
+ maintenance plus explicit transactional rebuild. Packet validation uses sets to avoid
43
+ quadratic mandatory-coverage scans; event attribution avoids loading a whole packet
44
+ for each native event.
45
+
46
+ Native queue action edits and autonomous routes now reject before execution until
47
+ durable revisions and root-task continuity are implemented. Queued target/model/text
48
+ remain frozen; timing changes/reordering are supported. Removing an unsent queue item
49
+ prevents dispatch but retains its original user evidence. This is not data erasure.
50
+
51
+ ## Edge-case traceability
52
+
53
+ **Covered** means an implementation plus focused local fixtures, not live-provider or
54
+ all-platform certification. **Partial** records a working safeguard plus missing
55
+ requirements. **Gated** means explicitly unsupported/disabled or unimplemented.
56
+ Tests are in `test/continuity.test.ts`, `test/continuity-storage.test.ts`,
57
+ `test/continuity-http.test.ts`, native adapter and existing runtime/browser suites.
58
+ The original research matrix remains authoritative; this table reports implementation.
59
+
60
+ | Case | Status | Evidence / remaining requirement |
61
+ | --- | --- | --- |
62
+ | E01 | Covered | Buried user source fixture and 10,001-event benchmark; mandatory intent bypasses ranking. |
63
+ | E02 | Covered | Exact tentative discussion, explicit item status; no automatic acceptance. |
64
+ | E03 | Covered | Accepted user supersession, scoped revision checks; helper/tentative supersession rejected. |
65
+ | E04 | Partial | Chat/source scope and originals preserved; explicit task-level scopes not implemented. |
66
+ | E05 | Partial | Conflicting original statements remain; conflict classification/clarification is not automated. |
67
+ | E06 | Partial | Topic/deferred/rejected statuses retained; no native comprehension evaluation. |
68
+ | E07 | Gated | Message deletion/revision dependencies absent; native queue action edits explicitly rejected. |
69
+ | E08 | Covered | New governing user evidence invalidates unsent packets; queued/unsent requests are neither history nor invalidation (validation follow-up fix). |
70
+ | E09 | Covered | Same instance, distinct chat bindings; explicit native IDs. |
71
+ | E10 | Covered | Provider-specific bindings; Claude → Codex → Claude fixture. |
72
+ | E11 | Partial | Model/options/protocol/workspace fingerprint; external auth/entitlement discovery unverified. |
73
+ | E12 | Partial | Missing native acknowledgement stays unknown; manual reconciliation resets epoch. No automatic expiry recovery. |
74
+ | E13 | Covered | Both harnesses report compaction (Claude `compact_boundary`, Codex app-server `contextCompaction`); the binding is marked compacted and the next packet rebuilds state into the resumed session. |
75
+ | E14 | Partial | Retention unknown; protected user evidence repeated. Native reconstruction triggers pending. |
76
+ | E15 | Partial | Ordinary turn-input fixture avoids append-system prompt; live continuation quality unverified. |
77
+ | E16 | Partial | Canonical checkout, HEAD/dirty content and instruction fingerprints; non-Git file applicability and moved-store migration pending. |
78
+ | E17 | Covered | Picker changes only local selection; dispatch freezes target later. |
79
+ | E18 | Covered | Queued captured target/model stays unchanged after picker changes. |
80
+ | E19 | Covered | Foreground reservation, queueing and process-group interruption. |
81
+ | E20 | Partial | Inherited tool group and output-pipe fixture; escaped/detached descendants and Windows containment remain gates. |
82
+ | E21 | Partial | Failed lifecycle stop blocks successors; uncertain termination retains lease. Real approval dialogs unverified. |
83
+ | E22 | Partial | Run/binding/epoch correlation and original chat lookup; broader reordered/late-provider fixtures pending. |
84
+ | E23 | Covered | Request idempotency, one foreground writer across pinned chats/queue; unsent retries re-run instead of silently no-oping. |
85
+ | E24 | Partial | Orchestra/subagents/bridges/routes gated before mutation; full worktree/team parity pending. |
86
+ | E25 | Covered | Immutable prepared packet/receipt; revalidation before any native call. |
87
+ | E26 | Covered | Restart submitting intent becomes unknown with lease retained. |
88
+ | E27 | Covered | No automatic replay; explicit reconciliation. Native message discovery unavailable. |
89
+ | E28 | Covered | Spawn/init separate from acceptance; proven no-launch rejection releases safely. |
90
+ | E29 | Covered | Acceptance and execution separate; quiescence uncertainty retains lease. |
91
+ | E30 | Partial | Stable client request IDs; stale run correlation. No universal native event-ID deduplication. |
92
+ | E31 | Partial | Active/unknown lease retained across restart; genuine orphan OS fault matrix pending. |
93
+ | E32 | Partial | Live owner/host/PID fence and conservative takeover; no heartbeat/remote-filesystem certification. |
94
+ | E33 | Covered | Strict bounded Zod contracts, unknown versions, extra fields, nesting and boolean fixtures. |
95
+ | E34 | Covered | Project/chat/hash and UTF-8 source checks; helpers disabled. |
96
+ | E35 | Partial | Originals retained; removing checkpoint sources restores mandatory evidence; user must review summary fidelity. |
97
+ | E36 | Covered | Exact whitespace/Unicode capture, byte-boundary checks, quoted rendering; heuristic labelled. |
98
+ | E37 | Partial | Codex final shell exit and full large-output artifact; Claude final tool-result normalization pending. |
99
+ | E38 | Partial | Missing completion/failed streams are not success; complete partial-message/tool lifecycle schema pending. |
100
+ | E39 | Gated | Current snapshot checked; per-verification historical workspace applicability not implemented. |
101
+ | E40 | Covered | Immutable packet/receipt links, source/outcome/coverage checks, epoch/state/workspace revalidation. |
102
+ | E41 | Covered | Current request included in heuristic budget; durable overflow/reassembly and explicit resume. Native capacity unknown. |
103
+ | E42 | Covered | Deltas cover every observation since the basis packet plus prior omissions; user sources a session lacks are resent exact or referenced. |
104
+ | E43 | Partial | FTS backfill/update/delete/rebuild and lexical fallback; actual index/DB corruption fault matrix pending. |
105
+ | E44 | Partial | Escaped bounded FTS, scoped reads; aliases/entity expansion and broad paginated search pending. |
106
+ | E45 | Covered | Mandatory text inline, verified local artifact reference, attachments/capabilities fail explicitly. |
107
+ | E46 | Gated | Helpers disabled; no automatic expensive substitution. |
108
+ | E47 | Gated | No helper jobs; helper result invalidation must precede enablement. |
109
+ | E48 | Gated | No helper scheduling; account/global concurrency gate remains. |
110
+ | E49 | Partial | Transaction/foreign-key/busy and reconciliation rollback fixtures; real disk-full/OS permission matrix pending. |
111
+ | E50 | Partial | Busy timeout and bounded indexed work; long-reader/WAL/backpressure corpora pending. |
112
+ | E51 | Partial | SQLite required, unknown protocol/platform explicit; network filesystem detection/certification pending. |
113
+ | E52 | Partial | Flush/exclusive artifact publication before reference; temporary cleanup; orphan GC/grace period pending. |
114
+ | E53 | Partial | Hash/path/size/no-follow checks and corruption fixtures; media/binary decoding unsupported. |
115
+ | E54 | Partial | Consistent activation backup and transactional import; post-cutover downgrade/export pending. |
116
+ | E55 | Covered | Torn records/ID collisions/distinct histories rejected; originals/backups retained; idempotent import. |
117
+ | E56 | Covered | Legacy native cursor never adopted into a chat binding. |
118
+ | E57 | Partial | Chat/project source scope before search/read/artifact export; team/private parity remains gated. |
119
+ | E58 | Partial | Origin-labelled JSON-quoted data; no application replay. Model resistance to adversarial evidence unmeasured. |
120
+ | E59 | Covered | Instruction fingerprint, no user-file overwrite, legacy imported memory not injected in native mode. |
121
+ | E60 | Gated | Complete deletion/derived artifact/backup/native-copy policy absent; hiding is not deletion. |
122
+ | E61 | Partial | No fallback execution; pending capture preserved. Live offline/auth/quota/account matrix pending. |
123
+ | E62 | Covered | Unsupported attachment representations explicitly rejected; no visual-understanding claim. |
124
+ | E63 | Partial | Canonical stable request IDs and bounded packet summaries; request-ID persistence across browser reload pending. |
125
+ | E64 | Partial | Bounded contract diagnostics and project-authenticated routes; sensitive native output redaction/export policy pending. |
126
+
127
+ ## Verification receipt
128
+
129
+ No live harness/account, Windows Job Object, escaped-child or network-filesystem
130
+ certification is implied by local fixtures. Native mode remains opt-in.
131
+
132
+ Verified after cleanup:
133
+
134
+ - `npm run build` and `npm run typecheck`: passed.
135
+ - Final focused core/native group: 87 passed across five suites.
136
+ - `npm test`: 1,408 non-DOM tests and all 125 browser tests passed; 17 existing skips.
137
+ The full suite ran outside the filesystem/network sandbox because localhost
138
+ listeners are required. No paid provider calls were made.
139
+ - `git diff --check` and documentation links: passed; all 64 unique matrix IDs have audit rows.
140
+ - Packaging dry run with already-built output: new compiled modules, audit and
141
+ benchmark artifacts included. No package published.
142
+ - [Audit benchmark](brain-benchmark-audit-2026-09-28.json): same M4/Node24.3 corpus,
143
+ all 20 buried user points retained; preparation p95 13.85 ms, retrieval p95
144
+ 0.224 ms, event-loop p95 18.12 ms; 3,047 heuristic turn-input tokens including
145
+ the current request. Native token usage and understanding remain unmeasured.
146
+
147
+ Standards: eight initial/follow-up correctness findings addressed; the original
148
+ worst issue was Stop racing with launch. Spec: ten initial/follow-up findings
149
+ addressed in the supported path; full descendant/platform containment remains
150
+ partial. Neither verdict is release certification for every matrix row.
151
+
152
+ ## Validation follow-up — 2026-09-28
153
+
154
+ A later review reproduced four defects (delta coverage window, unsent requests
155
+ rendered as history, capture before harness preflight with a silent retry no-op,
156
+ and superseded checkpoints hiding originals). All are fixed with regressions; see
157
+ [BRAIN-TODO](BRAIN-TODO.md#validation-follow-up--2026-09-28). The version allow-list was
158
+ replaced by a 20 s reachability monitor, and assembly now sends a resumed native
159
+ session only what it lacks. Full suite after the fixes: 1,419 non-DOM and 125
160
+ browser tests passed; 17 existing skips.
161
+
162
+ ## Transport change (app-server / Agent SDK)
163
+
164
+ Codex moved from `codex exec --json` to `codex app-server` JSON-RPC and Claude Code
165
+ from `claude -p` to the Claude Agent SDK, following t3code. Brain-relevant effects:
166
+
167
+ - Acceptance evidence is explicit on both: Codex's `turn/start` response or
168
+ `turn/started`; Claude's `requesting` status or first output.
169
+ - A lost native session is reported before any turn starts (`NativeSessionMissing`);
170
+ `settled()` fails the receipt and moves the binding to a new epoch, so the next
171
+ packet reconstructs instead of sending a delta to an empty session.
172
+ - Prompts travel on stdin, which removes the Linux argv limit.
173
+ - A stream failure (an oversized record) now stops RPC parsing before anything else
174
+ is imported, and the failure's own message is kept.
175
+ - Codex `run_complete` no longer adds cached input to input (cached is a subset).
176
+