@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,129 @@
1
+ # Modularization notes
2
+
3
+ ## Constraints
4
+ - No framework migration in this change; Next.js is a possible later choice.
5
+ - Preserve URLs, event payloads, persisted config/state, and the public SDK.
6
+ - Keep changes on `dev/Harsha`; no publishing or deployment is requested.
7
+ - Ordinary tests use fake agents and isolated LOOM_HOME. Do not run paid
8
+ `verify-*` scripts as regression tests.
9
+
10
+ ## Baseline observations
11
+ - `app-page.ts`: 15,434 lines, HTML/CSS/browser JS inside a TS template literal.
12
+ - `server.ts`: 5,148 lines, route registration plus daemon lifecycle.
13
+ - `runtime.ts`: 3,815 lines, project coordination plus multiple state owners.
14
+ - Root dependencies were absent; Node 24.3.0 and npm 11.14.1 are installed.
15
+ - `npm test` omits app-page-console-dom, app-queue-dom, app-servers-dom and
16
+ app-update-dom after excluding them from the parallel pass. Include all DOM
17
+ suites in final verification.
18
+ - Historical design documents are not authoritative for current behavior.
19
+
20
+ ## Progress and decisions
21
+ - Browser: ordinary ES modules in `src/web`, feature factories for per-project
22
+ closures, ordered CSS layers, and a document shell. esbuild packages the JS;
23
+ assets remain inline in the served page. No framework decision is required.
24
+ - API: ordered feature registrars in `src/daemon/routes`, each receiving a typed
25
+ subset of daemon capabilities. Middleware and WebSocket lifecycle stay in
26
+ `server.ts`. Shared system helpers preserve their old exports.
27
+ - Runtime: accounting, briefings, queue and turns own their state under
28
+ `src/daemon/runtime`. ProjectRuntime remains the public coordinator.
29
+ - Build and desktop staging include generated web assets; daemon fingerprints
30
+ include CSS and HTML so desktop detects style-only changes.
31
+ - Explicit dependency analysis exposed pre-existing out-of-scope browser calls:
32
+ preview attachments, notification replies, and explorer refresh. These now
33
+ use explicit mounted-project callbacks. Late screenshots are discarded if
34
+ their composer has been replaced by navigation.
35
+
36
+ ## Verification history
37
+ - Initial build passed. The initial full test run in the sandbox hit EPERM
38
+ opening local sockets: 57 failed files, 69 passed, 1 skipped. This is not a
39
+ usable green baseline. Subsequent integration runs use allowed local sockets.
40
+ - Browser extraction: 88 DOM checks passed; 45 static page checks passed.
41
+ - Route extraction: 8 suites / 110 tests passed (auth, daemon, scoped clients,
42
+ workspace, relay, tasks, skills MCP, providers).
43
+ - Runtime extraction: 124 tests passed, two test fixtures referenced a private
44
+ map that moved. Fixtures now access its owning turn module; the full rerun passes.
45
+ - Full suite found a real source-mode regression: type-only re-exports worked
46
+ under tsc/Vitest but failed in the CLI's tsx process. Marked those exports
47
+ `type`; all 126 non-DOM suites now pass (1,342 tests, 17 skipped).
48
+ - Browser unresolved-name analysis: zero unresolved names after extraction.
49
+ - npm pack dry-run includes all four `dist/web` artifacts. Docker runner now
50
+ copies the browser build script; desktop staging verifies the new assets.
51
+ - Build/typecheck/diff checks pass. Default DOM suites pass; pipe validation
52
+ exposed a timing-sensitive target-selector test in the previously omitted
53
+ queue suite. It now pauses the queue during selection instead of depending
54
+ on a two-second agent sleep; all six queue DOM tests pass in both modes.
55
+
56
+ ## Current module map
57
+
58
+ | Previous hotspot | Current coordinator | Extracted responsibilities |
59
+ | --- | --- | --- |
60
+ | `app-page.ts` (15,434 lines) | 30 lines | `src/web/`: entry, feature modules, project factories, CSS layers and shell |
61
+ | `server.ts` (5,148 lines) | 863 lines | `routes/`: typed feature registrars; `system.ts`: shared process helpers |
62
+ | `runtime.ts` (3,815 lines) | 2,633 lines | `runtime/`: accounting, briefings, queue and turns; shared contracts in `runtime-support.ts` |
63
+
64
+ All 217 literal HTTP registrations retain their original method/path order.
65
+ The emitted CSS and non-script HTML match the original served page byte for byte.
66
+ Feature factory exports were pruned to callbacks the coordinator actually uses;
67
+ state setters are exposed only where the feature writes that binding.
68
+
69
+ ## Validation scope and follow-up boundaries
70
+
71
+ - The default backend passed 1,342 non-DOM tests and all 125 DOM tests (the new
72
+ screenshot navigation test was corrected and passed in a focused rerun).
73
+ - The source-mode CLI regression is fixed; compiled and source entrypoints are
74
+ both covered. Source-mode BUILD_REV retains the original `dev` marker.
75
+ - Phone protocol copies match; all 41 phone pure-logic tests pass.
76
+ - Docker image, Electron GUI and native phone builds were not run. Runner
77
+ build inputs and packaged asset paths were checked; desktop behavior has
78
+ automated coverage. Phone dependencies are not installed in this checkout.
79
+ - No paid agent verification, deployment or framework migration.
80
+ - This is an extraction with stable contracts. Browser shared session state and
81
+ per-project view coordination remain explicit; runtime agent event handling,
82
+ handoffs and orchestra lifecycle still live in ProjectRuntime. Future work
83
+ can change these boundaries incrementally once the framework is chosen.
84
+ - Browser edits require rebuilding assets; there is no watch pipeline yet.
85
+
86
+
87
+ ## Final verification
88
+
89
+ Completed on Node 24.3.0 / macOS. Full runs plus focused reruns after corrections:
90
+
91
+ | Configuration | Passing tests | Skipped tests |
92
+ | --- | --- | --- |
93
+ | Default: non-DOM + DOM | 1,342 + 125 = 1,467 | 17 |
94
+ | Forced pipe: non-DOM + DOM | 1,339 + 125 = 1,464 | 20 |
95
+ | Phone pure logic | 41 | 0 |
96
+
97
+ The full default attempt needed a focused rerun of the new screenshot test
98
+ fixture; the full pipe attempt needed a focused rerun of the queue target test
99
+ fixture. Both corrected suites pass. The final queue test also passes under
100
+ the default backend. No unresolved test failures remain; a final monolithic
101
+ `npm test` was not repeated after those focused reruns.
102
+
103
+ Additional checks passed: `npm run build`, `npm run typecheck`, phone relay-copy
104
+ consistency, npm package dry-run asset inclusion, browser unresolved-name
105
+ analysis, exact CSS/non-script HTML comparison, endpoint registration order,
106
+ and whitespace checks for both tracked and new files.
107
+
108
+ Local test logs (temporary, not committed): `/tmp/loom-final-tests.log`,
109
+ `/tmp/loom-pipe-tests.log`, `/tmp/loom-screenshot-tests.log`,
110
+ `/tmp/loom-default-queue-tests.log`, `/tmp/loom-pipe-queue-tests.log`, and
111
+ `/tmp/loom-phone-tests.log`.
112
+
113
+ Branch is `dev/Harsha`, based on main at `838f994`. Publication target is
114
+ `igharsha7/loom` (`origin`); the original repository is retained as `upstream`.
115
+ TODO.md has no remaining work within the requested three steps.
116
+
117
+ ## Brain prerequisite follow-up
118
+
119
+ The next phase separates event storage, conversation metadata, native adapter
120
+ state/lifecycle, Brain preparation and client delivery. See
121
+ [BOUNDARIES.md](BOUNDARIES.md) for ownership, fixes and remaining Brain work.
122
+ Verification: build/typecheck passed; full test suite passed 1,482 tests with
123
+ 17 skipped, including all 125 browser DOM tests. It is now committed at
124
+ `584a3b6a86bfa9af2a0a8ecbeac57e6aa4578e7a`. Brain continuity implementation remains
125
+ pending review of [the plan](../proposals/brain-continuity-implementation.md).
126
+
127
+ Brain cleanup and final validation are recorded in [BRAIN-AUDIT](BRAIN-AUDIT.md)
128
+ and [BRAIN-NOTES](BRAIN-NOTES.md). Native execution no longer uses legacy decision
129
+ mining/injection/extraction; supported compatibility workflows remain available.
@@ -0,0 +1,165 @@
1
+ # t3code port — notes
2
+
3
+ Working notes for the port: what t3code does, where, and how Loom maps it. Paths
4
+ under `t3code/` refer to the local clone at `/Volumes/Programming Vault/t3code`
5
+ (MIT, © T3 Tools Inc.). Ported files carry an attribution header.
6
+
7
+ ## Vocabulary mapping
8
+
9
+ | t3code | Loom | Note |
10
+ | --- | --- | --- |
11
+ | thread | chat (conversation) | Loom's `MAIN_CHAT` and named chats. |
12
+ | provider instance | agent config entry (`agents[].id`) | Kind plus options (bin, model, permissions). |
13
+ | driver kind | agent kind (`codex`, `claude-code`) | |
14
+ | session | one live provider session per **(chat, agent)** | t3code keys by thread alone because a thread never changes driver. Loom switches provider within a chat, so a chat can hold a parked session per agent. |
15
+ | runtime mode | permission mode | full-access ↔ bypass, auto-accept-edits ↔ auto, approval-required ↔ ask. |
16
+ | resume cursor | native session id (Codex thread id, Claude session id) | Persisted in the session directory. |
17
+
18
+ ## Sources read
19
+
20
+ - Adapter contract: `t3code/apps/server/src/provider/Services/ProviderAdapter.ts`
21
+ (capabilities: `sessionModelSwitch`, `supportsConversationRollback`,
22
+ `promptlessTurnContinuation`; operations: start/send/interrupt/respond/
23
+ respondToUserInput/stop/list/has/readThread/rollbackThread/compaction/stopAll;
24
+ one `streamEvents` stream).
25
+ - Runtime events: `t3code/packages/contracts/src/providerRuntime.ts` — envelope
26
+ `{eventId, provider, providerInstanceId, threadId, createdAt, turnId?, itemId?,
27
+ requestId?, providerRefs?, raw?, type, payload}`; ~50 types.
28
+ - Session inputs: `t3code/packages/contracts/src/provider.ts`
29
+ (`ProviderSession`, `ProviderSessionStartInput`, `ProviderSendTurnInput`,
30
+ `ProviderTurnStartResult`).
31
+ - Service: `t3code/apps/server/src/provider/Layers/ProviderService.ts` — routes
32
+ by the persisted binding; recovers a missing live session by adopting an
33
+ existing one or restarting from the resume cursor; refuses a cross-driver
34
+ switch (`ProviderCommandReactor.ts:690`).
35
+ - Directory: `t3code/apps/server/src/provider/Services/ProviderSessionDirectory.ts`
36
+ — binding `{threadId, provider, providerInstanceId, status, resumeCursor,
37
+ runtimePayload, runtimeMode, lastSeenAt}`; stopped rows kept for their cursors.
38
+ - Reaper: `t3code/apps/server/src/provider/Layers/ProviderSessionReaper.ts` — 30 min
39
+ inactivity, 5 min sweep; skips active turns and background work.
40
+
41
+ ## Decisions
42
+
43
+ - **2026-09-28.** Port, not fork; plain TypeScript, no Effect. Warm sessions.
44
+ Codex and Claude Code only for now.
45
+ - **2026-09-28, Phase 1.** Build the foundation (contract, service, directory,
46
+ reaper, ingestion) against a fake adapter and do not wire it into dispatch yet.
47
+ Phase 2's warm adapters change the turn lifecycle, so a temporary bridge around
48
+ the per-turn adapters would be thrown away.
49
+ - **2026-09-28, Phase 1.** Session directory is a JSON file under
50
+ `.loom/providers/`, not a SQLite table: the event log has a JSONL fallback, and
51
+ the directory must work with both.
52
+ - **2026-09-28.** Loom keeps other agents' sessions in a chat alive (parked) when
53
+ the chat switches agent, instead of t3code's `stopStaleSessionsForThread`. The
54
+ reaper bounds how long they stay warm.
55
+ - **2026-09-28, Phase 1.** Ingestion emits a tool's `tool_call` when the item
56
+ **completes** (with its outcome), not when it starts. The old Claude adapter
57
+ reported tools as they started. Phase 3 adds item start/progress to the log and
58
+ UI; until then a long tool shows when it finishes.
59
+ - **2026-09-28, Phase 1.** A turn the provider reports as `failed` becomes an
60
+ `error` with no `run_complete`, as t3code treats it. The old Claude adapter still
61
+ emitted `run_complete` after an error result outside Brain; Phase 2's adapter
62
+ follows the new rule.
63
+ - **2026-09-28, Phase 1.** Approvals keep Loom's existing cards: `ApprovalBridge`
64
+ turns `request.opened` into a card through the daemon broker and answers with
65
+ `respondToRequest`. t3code's native approval options (accept for session,
66
+ accept always) arrive with Phase 3.
67
+ - **2026-09-28, Phase 1.** `ensureSession` registers a start synchronously before
68
+ its first await, so concurrent callers always share it. A turn can finish before
69
+ `sendTurn` returns; the service remembers each session's last finished turn so
70
+ it never re-marks it active.
71
+
72
+ ## Sources read (Phase 1, continued)
73
+
74
+ - Ingestion: `t3code/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.ts`
75
+ — assistant and reasoning text are the streamed deltas; the completed item's
76
+ `detail` is a whole-block snapshot used only when nothing streamed (lines
77
+ ~1960–2260).
78
+
79
+
80
+ ## Sources read (Phase 2)
81
+
82
+ - Codex runtime: `t3code/apps/server/src/provider/Layers/CodexSessionRuntime.ts` —
83
+ `openCodexThread` (resume with `excludeTurns`, recoverable resume errors),
84
+ `buildTurnStartParams`, server-request handlers (approvals park on a deferred,
85
+ `acceptForSession` → session scope, permissions granted or an empty grant),
86
+ `interruptTurn` (settle open approvals *before* `turn/interrupt`), `close`.
87
+ - Codex mapping: `t3code/apps/server/src/provider/Layers/CodexAdapter.ts` —
88
+ `mapToRuntimeEvents` (lines ~1307–2010), `toCanonicalItemType`,
89
+ `normalizeCodexTokenUsage` (`last.totalTokens` is the context in use).
90
+ - Claude: `t3code/apps/server/src/provider/Layers/ClaudeAdapter.ts` — `startSession`
91
+ (~4382: prompt queue, `sessionId` chosen up front or `resume`,
92
+ `includePartialMessages`, `canUseTool`), `sendTurn` (~5127: `setModel`, user
93
+ message `uuid` = turn id), `interruptTurn` (~5276: closes the session),
94
+ `handleStreamEvent` (~2849), `handleResultMessage`, `stopSessionInternal`.
95
+ - Verified live (2026-09-28, claude 2.1.x): resuming an unknown session id makes
96
+ `initializationResult()` reject with "No conversation found with session ID"
97
+ within ~2 s, before any prompt is read; a fresh session initializes in ~1 s
98
+ without a model call.
99
+
100
+ ## Decisions (Phase 2)
101
+
102
+ - **2026-09-28 (superseded in Phase 3).** Phase 2 first kept process-group
103
+ settlement for continuity turns by ending the session after each one. That
104
+ contradicted the decided strategy: warm sessions everywhere, with turn-level
105
+ settlement replacing the process-group rule.
106
+ - **2026-09-28, Phase 3.** Turn-level settlement for every turn: settled when the
107
+ harness reports the turn done and no command it started (a `command_execution`
108
+ item) is still running. The session stays warm, Brain turns included. A command
109
+ still running after 60 s leaves a Brain turn's quiescence unknown; an ordinary
110
+ turn moves on after 5 s (a harness can end a turn with an abandoned item). A
111
+ background process a tool detaches is outside what the harness reports, so it is
112
+ outside this guarantee.
113
+ - **2026-09-28.** Loom's "auto" keeps `approvalPolicy: never` for Codex (t3code's
114
+ auto-accept-edits uses `on-request`): Loom promises auto never stops to ask.
115
+ - **2026-09-28.** A handoff briefing now rides in front of the prompt for Claude
116
+ too (framed, as Codex always had it): a warm session's system prompt is fixed
117
+ when it starts.
118
+ - **2026-09-28.** A failed turn outside continuity is not re-thrown by `send()`:
119
+ ingestion already logged the error, and the error event ends the turn. Continuity
120
+ turns still throw so Brain records the failure.
121
+ - **2026-09-28.** Claude `Bash` is reported as the canonical `shell` tool (command
122
+ execution), like Codex. Nothing in Loom keyed on the name `Bash`.
123
+ - **2026-09-28.** Codex `item/tool/requestUserInput` is still answered empty and
124
+ MCP elicitations declined; structured questions are Phase 3.
125
+ - **2026-09-28.** One `ProviderService` per agent working directory (not per
126
+ project): native state already lives in the agent's directory (a worktree agent
127
+ has its own `.loom`), and the session directory file must have one writer.
128
+
129
+ ## Sources read (Phase 3)
130
+
131
+ - `t3code/apps/server/src/provider/CodexDeveloperInstructions.ts` — plan/default
132
+ collaboration-mode prompts (ported verbatim, minus T3's browser/device blocks).
133
+ - `CodexSessionRuntime.ts` — `buildCodexCollaborationMode` (~595: mode, model,
134
+ reasoning_effort default "medium", developer_instructions), request_user_input
135
+ handler (~2347) and `toCodexUserInputAnswer` (~1145), permissions approval
136
+ (`scope: "session"` on acceptForSession).
137
+ - `CodexAdapter.ts` — `toUserInputQuestions` (~883), async questions on
138
+ `agentMessage` with `delivery: "async"` (~1694, `responseMode: "message"`), plan
139
+ item → `turn.proposed.completed`.
140
+ - `ClaudeAdapter.ts` — `handleAskUserQuestion` (~4441: question id = question text,
141
+ answers returned as `updatedInput.answers`), `canUseTool` (~4651: ExitPlanMode
142
+ captured and denied, full-access allows, otherwise asks),
143
+ `toSessionPermissionUpdates` (~311), `sendTurn` plan mode via
144
+ `setPermissionMode` (~5179), `compaction: { type: "slash-command", command:
145
+ "/compact" }` (~5561).
146
+ - Verified live: Claude Code's plan mode writes its plan to
147
+ `~/.claude/plans/<slug>.md` before calling ExitPlanMode.
148
+
149
+ ## Decisions (Phase 3)
150
+
151
+ - **2026-09-28.** Claude's `canUseTool` is registered in every mode (as t3code) so
152
+ questions and plans reach Loom. Other tools: full access allows; approval-required
153
+ asks a person; auto denies without asking (Loom's auto never stops to ask — a tool
154
+ runs there only if Claude's settings pre-allow it, as before).
155
+ - **2026-09-28.** Tool progress is live-only (websocket `item` frames), not new log
156
+ events: the log keeps one `tool_call` per finished tool, which is what Brain's
157
+ evidence and the transcript read.
158
+ - **2026-09-28.** Codex plan mode is sent only when a turn is a plan turn, and the
159
+ default mode once afterwards to leave it — not on every turn as t3code does — so
160
+ a user who never plans gets Codex's own prompt unchanged.
161
+ - **2026-09-28.** A plan turn on a provider agent uses native plan mode (which
162
+ changes nothing) instead of Loom's "write plans/…md" briefing; Loom writes the
163
+ proposed plan to `plans/` itself, so the artifact stays.
164
+ - **2026-09-28.** A Claude write outside the session directory (plan mode's own
165
+ plan file) is a tool call, not a project file edit.
@@ -0,0 +1,123 @@
1
+ # t3code port — TODO
2
+
3
+ Plan: [t3code-port.md](../proposals/t3code-port.md). Notes and sources:
4
+ [T3-PORT-NOTES.md](T3-PORT-NOTES.md). Scope for now: **Codex and Claude Code only**;
5
+ relay, mobile and other providers are out of scope.
6
+
7
+ Rules: phase by phase, fakes-only tests at every step, one authorized live check per
8
+ harness per phase, and never modify a provider's own config (`~/.codex/config.toml`,
9
+ Claude settings); override per session through the protocol instead.
10
+
11
+ ## Phase 1 — Provider contract and service ✅ (2026-09-28)
12
+
13
+ - [x] `src/providers/contracts.ts`: provider kinds, runtime modes, session and turn
14
+ inputs, capabilities, normalized item data, and the canonical runtime event union
15
+ (26 types), ported from t3code `packages/contracts/src/provider*.ts`.
16
+ - [x] `src/providers/adapter.ts`: the `ProviderAdapter` interface and `EventHub`.
17
+ - [x] `src/providers/errors.ts`: `ProviderError` (validation, not_found,
18
+ session_missing, unsupported, request, transport) with `notSubmitted`.
19
+ - [x] `src/providers/directory.ts`: session directory keyed by (chat, agent), in
20
+ memory and as an atomic JSON file; unreadable files moved aside.
21
+ - [x] `src/providers/service.ts`: `ProviderService` — register/unregister,
22
+ ensureSession (live / resumed / fresh, shared concurrent start, lost session →
23
+ `session_missing` or fresh on request), sendTurn, interrupt, respond, compact,
24
+ rollback, stop, stopAll, event fan-in keeping the directory and active turns.
25
+ - [x] `src/providers/reaper.ts`: idle reaper (30 min / 5 min; skips running turns
26
+ and caller-reported background work).
27
+ - [x] `src/providers/ingestion.ts`: canonical events → Loom log events; streamed
28
+ text assembled per item with completed-item fallback; live delta channel; Brain
29
+ tags per turn; large command output to artifacts.
30
+ - [x] `src/providers/approvals.ts`: `request.opened` → Loom approval cards → answer
31
+ through the service; cards close when the turn or session ends.
32
+ - [x] Fake adapter and tests (`test/providers/`, 45 tests). Full suite green.
33
+ - [x] Docs: ARCHITECTURE owner rows; notes.
34
+ - [ ] Live check: none this phase — nothing is wired to a real harness yet.
35
+
36
+ ## Phase 2 — Warm sessions for Codex and Claude ✅ (2026-09-28)
37
+
38
+ - [x] Codex adapter on the contract (`src/providers/codex/`): one `app-server` per
39
+ chat session in its own process group, thread kept open, turns and interrupts on
40
+ one connection; notifications, deltas and server requests mapped to canonical
41
+ events (t3code's `mapToRuntimeEvents`, `toCanonicalItemType`,
42
+ `normalizeCodexTokenUsage`); approvals wait for `respondToRequest`; manual
43
+ compaction (`thread/compact/start`).
44
+ - [x] Claude adapter on the contract (`src/providers/claude/`): one streaming-input
45
+ `query()` per chat session, session id chosen up front, `initializationResult()`
46
+ proves the session (a lost resume fails here, before any prompt), turns pushed as
47
+ user messages, `setModel` in-session, `canUseTool` → `request.opened`, partial
48
+ messages → deltas, interrupt closes the session (t3code's hard boundary).
49
+ - [x] Runtime dispatch: `ProviderAgent` (`src/providers/agent.ts`) is the runtime's
50
+ Adapter for `codex` and `claude-code`; one `ProviderService` per working
51
+ directory with the file directory, reaper and approval bridge. `SendInput.chat`
52
+ added; sessions keyed by (chat, agent). Old per-turn adapters deleted
53
+ (`adapters/codex.ts`, `adapters/claude-code.ts`); `codex-rpc.ts` moved to
54
+ `providers/codex/rpc.ts`. The pre-warm per-agent session id migrates to the main
55
+ chat's binding. A rebuilt agent (model/permission change) takes over its
56
+ predecessor's sessions. MCP server changes restart and resume the session.
57
+ - [x] Brain: turn-level settlement — a turn is settled when the harness reports it
58
+ done and no command it started is still running; the session stays warm.
59
+ (Phase 2 first shipped "a continuity turn ends its session"; corrected in Phase 3
60
+ to the decided turn-level rule. See notes.)
61
+ - [x] Token streaming: `content.delta` → `LiveDeltaThrottle` (50 ms) → `delta`
62
+ websocket frames; a minimal streaming bubble in the web thread, replaced by the
63
+ finished message.
64
+ - [x] Tests: `test/providers/warm.test.ts` (16), throttle test; fakes serve many
65
+ turns per process (`scripts`, `turnsOf`); existing Codex/Claude/MCP/continuity
66
+ tests run against the warm agent. Full suite green.
67
+ - [x] Live check per harness (read-only mode, scratch project): Codex
68
+ (`gpt-6-astra` override; `~/.codex/config.toml` untouched) and Claude each ran one
69
+ turn; session stayed warm after the turn, the reply streamed as a delta, the
70
+ process group was gone after stop.
71
+
72
+ ## Phase 3 — Interaction parity ✅ (2026-09-28)
73
+
74
+ - [x] Tool progress: `item.started/updated/completed` → live `item` websocket frames
75
+ (a "running" row in the thread), command output as live deltas; the finished tool
76
+ is still one `tool_call` in the log.
77
+ - [x] Approvals with native options: `request.opened.options` (Allow / Allow for this
78
+ session / Deny); Loom cards gain "Allow for session" when offered; Codex gets
79
+ `acceptForSession`, Claude gets its own permission suggestions scoped to the session.
80
+ - [x] Structured user input: Codex `item/tool/requestUserInput` (answers
81
+ `{id: {answers: []}}`), Codex async questions (answer with the next message),
82
+ Claude `AskUserQuestion` via `canUseTool` (answers keyed by question text).
83
+ `needs_input` carries `questions`, `requestId`, `responseMode`; answered via
84
+ `POST /api/projects/:id/agents/:agent/answers`; question cards in the thread.
85
+ - [x] Plan mode: Codex collaboration mode (t3code's developer instructions, ported
86
+ in `providers/codex/instructions.ts`), left on the next default turn; Claude
87
+ `setPermissionMode("plan")` and `ExitPlanMode` captured as the proposed plan.
88
+ Loom's plan turns on provider agents use native plan mode; the runtime saves the
89
+ proposed plan to `plans/<day>-<slug>.md` (`status: plan_saved`).
90
+ - [x] Manual compaction: Codex `thread/compact/start`; Claude `/compact` as a turn
91
+ (t3code's slash-command compaction). `POST /api/projects/:id/agents/:agent/compact`.
92
+ - [x] Reasoning effort: agent option `effort` → Codex `turn/start.effort`, Claude
93
+ query `effort` at session start.
94
+ - [x] Turn-level settlement (correction of Phase 2), bounded: 60 s for Brain turns
95
+ (then quiescence unknown), 5 s for ordinary turns.
96
+ - [x] Tests: `test/providers/interaction.test.ts` (13),
97
+ `test/providers/runtime-interaction.test.ts` (2). Full suite green.
98
+ - [x] Live check (read-only, scratch project): a plan-mode turn on each harness.
99
+ Codex explored with one command and proposed a plan (captured). Claude wrote its
100
+ plan to its own `~/.claude/plans/` file and called ExitPlanMode (captured); the
101
+ project was untouched. Found and fixed: that plan file was logged as a project
102
+ edit.
103
+ - Moved: model catalogs (`model/list`, `supportedModels()`) to Phase 6 (provider
104
+ management). Per-turn diffs: Loom's own `turn_diff` (git, per turn) already covers
105
+ both providers; Codex's `turn.diff.updated` is mapped but not yet shown.
106
+
107
+ ## Phase 4 — Checkpoints and revert
108
+
109
+ - [ ] Hidden-ref checkpoints per turn; revert coordinated with native rollback;
110
+ refuse before touching files when rollback is unsupported.
111
+
112
+ ## Phase 5 — Cross-provider switching
113
+
114
+ - [ ] Park/resume sessions across providers within a chat; Brain packet sized by the
115
+ target's context window; switch offered at a usage limit; revert across a provider
116
+ boundary; continuity on by default.
117
+
118
+ ## Phase 6 — Provider management
119
+
120
+ - [ ] Instances (several accounts per driver), auth status, install/update
121
+ detection, native session history import.
122
+
123
+ ## Phase 7 — UI overhaul
@@ -0,0 +1,46 @@
1
+ # Modularization work
2
+
3
+ Branch: `dev/Harsha`, based on local `main` at `838f994`.
4
+
5
+ Scope: preserve existing behavior and public contracts while separating the web
6
+ client, HTTP routes, and project runtime. Framework selection is deferred.
7
+
8
+ ## 0. Baseline
9
+ - [x] Create the requested branch from main; confirm a clean checkout.
10
+ - [x] Read contribution instructions and map the three large modules.
11
+ - [x] Install dependencies and build; baseline test run was blocked by sandbox socket restrictions (see notes).
12
+
13
+ ## 1. Web client
14
+ - [x] Extract browser JavaScript, styles, and document shell.
15
+ - [x] Split browser behavior into feature modules with explicit dependencies.
16
+ - [x] Preserve startup order, pairing, asset packaging, and desktop/phone behavior.
17
+ - [x] Run script parsing, DOM, packaging, and daemon tests.
18
+
19
+ ## 2. HTTP routes
20
+ - [x] Separate route registration by feature with typed dependencies.
21
+ - [x] Preserve middleware order, authentication, response shapes, and streaming.
22
+ - [x] Run API, auth, WebSocket, and affected integration tests.
23
+
24
+ ## 3. Project runtime
25
+ - [x] Extract accounting and budget ownership.
26
+ - [x] Extract briefing and memory coordination.
27
+ - [x] Extract queue coordination and turn execution.
28
+ - [x] Preserve lifecycle, interruption, retries, chat routing, and cleanup.
29
+ - [x] Run runtime, adapter, queue, memory, route, and orchestra regressions.
30
+
31
+ ## 4. Finish
32
+ - [x] Update source maps and contributor instructions.
33
+ - [x] Build, typecheck, run the full suite including omitted DOM suites.
34
+ - [x] Verify packaging and `git diff --check`.
35
+ - [x] Record limitations and final verification in NOTES.md.
36
+
37
+ Completed: all three requested extractions. Framework selection remains deferred.
38
+ See NOTES.md for verification results and deliberately retained boundaries.
39
+
40
+ The next authorized phase is tracked in [BOUNDARIES.md](BOUNDARIES.md): separating
41
+ storage, native adapters, Brain preparation and client delivery before building
42
+ Brain continuity. The completed checklist above describes the earlier extraction.
43
+
44
+ Brain continuity implementation is tracked separately in [BRAIN-TODO.md](BRAIN-TODO.md),
45
+ with source research and edge-case IDs in [BRAIN-NOTES.md](BRAIN-NOTES.md).
46
+ The plan is awaiting user review; the checklist does not authorize implementation.
@@ -0,0 +1,48 @@
1
+ {
2
+ "measuredAt": "2026-09-28T08:24:36.883Z",
3
+ "node": "v24.3.0",
4
+ "hardware": {
5
+ "platform": "darwin",
6
+ "arch": "arm64",
7
+ "cpu": "Apple M4",
8
+ "memoryBytes": 17179869184
9
+ },
10
+ "corpus": {
11
+ "events": 10001,
12
+ "buriedUserPoints": 20,
13
+ "attempts": 30,
14
+ "paidCalls": 0,
15
+ "git": false
16
+ },
17
+ "preparationMs": {
18
+ "p50": 19.03137499999866,
19
+ "p95": 25.583166000000347
20
+ },
21
+ "retrievalMs": {
22
+ "p50": 0.29900000000088767,
23
+ "p95": 0.7585829999989073
24
+ },
25
+ "daemonLoopMs": {
26
+ "p95": 19.464191,
27
+ "max": 25.772031
28
+ },
29
+ "appAddedTokens": {
30
+ "minimum": 3034,
31
+ "maximum": 3034,
32
+ "estimation": "UTF-8 bytes / 3 heuristic"
33
+ },
34
+ "exactReplayEstimatedTokens": 258978,
35
+ "allBuriedUserPointsIncluded": true,
36
+ "legacyRecent400ContainsFirstPoint": false,
37
+ "processMemory": {
38
+ "rss": 119554048,
39
+ "heapTotal": 48218112,
40
+ "heapUsed": 22705600,
41
+ "external": 2129463,
42
+ "arrayBuffers": 25235
43
+ },
44
+ "diskBytes": 4829184,
45
+ "nativeTokens": null,
46
+ "helperTokens": 0,
47
+ "continuationQuality": "native understanding not measured; exact source inclusion checked"
48
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "measuredAt": "2026-09-28T09:18:19.345Z",
3
+ "node": "v24.3.0",
4
+ "hardware": {
5
+ "platform": "darwin",
6
+ "arch": "arm64",
7
+ "cpu": "Apple M4",
8
+ "memoryBytes": 17179869184
9
+ },
10
+ "corpus": {
11
+ "events": 10001,
12
+ "buriedUserPoints": 20,
13
+ "attempts": 30,
14
+ "paidCalls": 0,
15
+ "git": false
16
+ },
17
+ "preparationMs": {
18
+ "p50": 13.088791999999557,
19
+ "p95": 13.847000000000662
20
+ },
21
+ "retrievalMs": {
22
+ "p50": 0.2079169999997248,
23
+ "p95": 0.22337500000003274
24
+ },
25
+ "daemonLoopMs": {
26
+ "p95": 18.120703,
27
+ "max": 19.021823
28
+ },
29
+ "turnInputEstimatedTokens": {
30
+ "minimum": 3047,
31
+ "maximum": 3047,
32
+ "estimation": "UTF-8 bytes / 3 heuristic"
33
+ },
34
+ "exactReplayEstimatedTokens": 258978,
35
+ "allBuriedUserPointsIncluded": true,
36
+ "legacyRecent400ContainsFirstPoint": false,
37
+ "processMemory": {
38
+ "rss": 123125760,
39
+ "heapTotal": 47955968,
40
+ "heapUsed": 22995376,
41
+ "external": 2129449,
42
+ "arrayBuffers": 25221
43
+ },
44
+ "diskBytes": 4829184,
45
+ "nativeTokens": null,
46
+ "helperTokens": 0,
47
+ "continuationQuality": "native understanding not measured; exact source inclusion checked"
48
+ }
@@ -0,0 +1,35 @@
1
+ ## Loom 0.2.0 — Loom Teams
2
+
3
+ Several people, each with their own agents, on one GitHub repo — without
4
+ stepping on each other. Built in five phases (78 design decisions, in
5
+ [docs/teams-architecture.md](https://github.com/nickthelegend/loom/blob/main/docs/teams-architecture.md)):
6
+
7
+ 1. **See each other.** Teammates' live agents, goals and the files they touch;
8
+ a team feed of goals, PRs and CI. End-to-end encrypted: the hub can't read
9
+ your goals.
10
+ 2. **Stop colliding.** Tasks declare the files they touch; overlaps need a
11
+ decision; hard zones take one goal at a time; merge conflicts are predicted
12
+ before anyone opens a PR; `loom.team.json` is the team's policy.
13
+ 3. **One brain.** What one agent learns, every agent knows — labelled by how
14
+ sure to be. Canon lives in `AGENTS.md`, reviewed like code.
15
+ 4. **Land safely.** Failing checks are rerun, then fixed on the same PR; an
16
+ agent from another vendor reviews; one click lands through GitHub's rules;
17
+ stacks, Adopt, budgets, a merge-queue doctor.
18
+ 5. **Runners.** Your own always-on Loom takes your goals while your laptop
19
+ sleeps; move a running goal there and bring it back. Deploy status and
20
+ release notes.
21
+
22
+ **Get started:** [docs/teams.md](https://github.com/nickthelegend/loom/blob/main/docs/teams.md).
23
+
24
+ ### Downloads
25
+
26
+ - **macOS**: `Loom-Desktop-0.2.0-arm64.dmg` (Apple Silicon) or `-x64.dmg` (Intel)
27
+ - **Windows**: the `.exe` installer
28
+ - **Linux**: `.AppImage` or `.deb`
29
+ - **Android**: `loompad-0.2.0-android.apk`
30
+ - **CLI**: `npm install -g github:nickthelegend/loom`
31
+
32
+ The installers are unsigned. On macOS, right-click → Open the first time; on
33
+ Windows, "More info → Run anyway". Checksums are in `SHA256SUMS.txt`.
34
+
35
+ Full list of changes: [CHANGELOG.md](https://github.com/nickthelegend/loom/blob/main/CHANGELOG.md).
@@ -0,0 +1,59 @@
1
+ ## Loom 0.2.1 — the prompt queue, and a real Android build
2
+
3
+ ### Line up the next ones
4
+
5
+ Type while an agent is mid-turn, or while a goal is still running, and the
6
+ prompt waits above the composer instead of being refused or quietly swallowed.
7
+
8
+ - **Queue as many as you like.** They run strictly one at a time, in order.
9
+ - **Each prompt says who takes it:** one agent by name, the **orchestrator**
10
+ (a whole new goal, started when the running one finishes), or **Auto** to let
11
+ the router pick. Change a waiting prompt's target and the baton goes with it.
12
+ - **Edit, reorder, drop.** Click a queued prompt to rewrite it (⌘⏎ saves, Esc
13
+ cancels), move it up or down, or remove it — all before it runs.
14
+ - **Pause and resume.** **Stop** pauses too: stopping a turn never silently
15
+ discards what you lined up behind it.
16
+ - **A question holds the queue.** If the agent stops to ask you something, the
17
+ next queued prompt would answer a question you never read — so the queue waits
18
+ and says who asked. Your reply goes out at once and lifts the hold.
19
+ - **A prompt enters the conversation when it is sent**, not when it is queued,
20
+ so the thread stays an honest record of what each agent was asked.
21
+
22
+ It survives a daemon restart (reloaded paused, so an hour-old queue doesn't
23
+ start itself) and it is the same queue everywhere: the web app, the desktop app,
24
+ the phone, and `loom queue` in the terminal — `add`, `edit`, `to`, `move`, `rm`,
25
+ `clear`, `pause`, `resume`.
26
+
27
+ ### Fixed
28
+
29
+ - **The v0.2.0 apk had no JavaScript bundle** and would only open against a
30
+ running dev server. This one is a release build with the bundle in it, signed
31
+ with the project's release key — check it with
32
+ `apksigner verify --print-certs`.
33
+ - **The macOS app is now a valid signed bundle** (ad-hoc). `codesign --verify
34
+ --deep --strict` passes; v0.2.0 carried only the linker's signature.
35
+ - **An overridden `loom/review` stays overridden.** A review that came back
36
+ after the owner had overridden it used to write `failure` over their decision
37
+ — and, once that was fixed, to leave its own "reviewing…" status pending for
38
+ ever on a repo that requires the check. Both are gone.
39
+ - **Agent turns are no longer blamed for Loom's own `.loom/` files** in a
40
+ project that doesn't gitignore them.
41
+ - **grok-code and agy** are detected from their own auth files instead of being
42
+ reported signed-out, and the status bar says **live**, not offline, before a
43
+ project is open.
44
+ - **A reply that lands after its window closed** no longer throws from a redraw.
45
+
46
+ ### Downloads
47
+
48
+ - **macOS**: `Loom-Desktop-0.2.1-arm64.dmg` (Apple Silicon) or `-x64.dmg` (Intel)
49
+ - **Windows**: the `.exe` installer
50
+ - **Linux**: `.AppImage` or `.deb`
51
+ - **Android**: `loompad-0.2.1-android.apk`
52
+ - **CLI**: `npm install -g github:nickthelegend/loom`
53
+
54
+ The Android apk is signed with the project's release key. The desktop
55
+ installers are not signed by a certificate authority: on macOS the app is
56
+ ad-hoc signed, so right-click → Open the first time; on Windows, "More info →
57
+ Run anyway". Checksums are in `SHA256SUMS.txt`.
58
+
59
+ Full list of changes: [CHANGELOG.md](https://github.com/nickthelegend/loom/blob/main/CHANGELOG.md).