@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
package/docs/teams.md ADDED
@@ -0,0 +1,171 @@
1
+ # Loom Teams: a user's guide
2
+
3
+ Several people, each with their own agents, on one GitHub repo. This guide is
4
+ the how-to; [teams-architecture.md](teams-architecture.md) has the why.
5
+
6
+ ## 0. One link (the easy way)
7
+
8
+ In a project, click **Invite** or run `loom invite`. You get one https link.
9
+ Your teammate opens it and Loom does the rest:
10
+
11
+ 1. signs them in with GitHub
12
+ 2. joins the team
13
+ 3. clones the repo (for a private repo, your Loom grants them access when they join)
14
+ 4. opens it with the agents installed on their machine
15
+ 5. shares it with the team
16
+ 6. sets up your crews
17
+
18
+ Without Loom, the page shows one command that installs it and joins. From a
19
+ terminal, `loom join '<link>'` does the same.
20
+
21
+ `loom invite` creates the team (named after the project) and shares the repo if
22
+ you haven't yet. The link is single-use, expires in 24 hours and carries the
23
+ team key, so send it to one person, privately. Repo access is granted with your
24
+ `gh` and needs admin rights on the repo. Without them, Loom says so and you add
25
+ the teammate on GitHub yourself.
26
+
27
+ The links point at `https://nickthelegend.github.io/loom/join/` (`site/join/`).
28
+ Set `LOOM_JOIN_URL` to host the page somewhere else. It is static: the invite
29
+ lives in the URL's `#fragment`, which browsers never send to a server.
30
+
31
+ ## 1. Set up a team
32
+
33
+ ```bash
34
+ loom team signin # the hosted hub, with your GitHub account
35
+ # or a self-hosted hub: loom hub --host 0.0.0.0 --secret <s> (on one machine)
36
+ # loom team signin http://<host>:7430 --secret <s>
37
+ loom team create "Acme"
38
+ loom team invite # a one-time link — it carries the team key; send it like a password
39
+ loom team join '<link>' # on a teammate's machine
40
+ loom team share # in a project: its GitHub repo is now shared with the team
41
+ ```
42
+
43
+ No browser on the machine? `loom team signin --paste` prints a link to open
44
+ anywhere and asks for the address you land on.
45
+
46
+ ## 2. See each other (Phase 1)
47
+
48
+ `loom team` shows who is running what, right now: agents, goals, branches and
49
+ the files each task declared, plus a feed of goals, plans, PRs and CI. You see
50
+ your teammates' intent (goal and task titles), never their prompts or
51
+ transcripts. Content is encrypted to the team; the hub can't read it.
52
+
53
+ ## 3. Don't collide (Phase 2)
54
+
55
+ On a shared project every orchestra task declares the files it will `touch`.
56
+ When a teammate's goal already holds some of them, the orchestrator must decide
57
+ before the task starts: wait for their PR, narrow, or proceed with a reason the
58
+ team sees. `loom.team.json` on your default branch holds the team's rules:
59
+
60
+ ```jsonc
61
+ {
62
+ "hardZones": ["db/migrations/**", "package-lock.json"], // one goal at a time
63
+ "permissions": { "ceiling": "auto", "bypassRequiresPlan": true },
64
+ "agents": { "allow": ["claude-code", "codex"] },
65
+ "delivery": { "protected": ["main"], "stack": "auto" },
66
+ "orchestra": { "maxParallelPerMember": 6, "teamMaxConcurrentAgents": 20 },
67
+ "landing": { "fastTest": "npm test -- --changed", "timeoutMin": 10, "autoFixAttempts": 2 },
68
+ "review": { "enabled": true, "maxRuns": 3 },
69
+ "budgets": { "perGoalUsd": 15, "perMemberDailyUsd": 60 },
70
+ "runners": { "shared": true, "permissions": "bypass" }
71
+ }
72
+ ```
73
+
74
+ Changing it takes a reviewed PR; a local copy can only make it stricter.
75
+
76
+ ## 4. One brain (Phase 3)
77
+
78
+ What one member's agents learn reaches everyone's briefings, labelled by how
79
+ sure to be: team canon, confirmed by 2+, your own, a teammate's proposal.
80
+ `loom team brain` shows the team's memories and an inbox of contradictions,
81
+ duplicates and corrections. `loom team brain promote <id>` proposes a memory as
82
+ canon: it goes into `AGENTS.md` on one rolling `loom/canon` PR, reviewed like
83
+ code, and then every agent reads it, Loom or not.
84
+
85
+ ## 5. Land safely (Phase 4)
86
+
87
+ Deliver goals as PRs (`git.delivery: "pr"`). Your daemon then watches them:
88
+
89
+ - a failing required check is rerun once; a pass on rerun is labelled flaky;
90
+ - a real failure goes back to the goal's agents, who fix it on the same PR
91
+ (twice at most, then your phone buzzes);
92
+ - an agent from a different vendor reviews the PR and posts `loom/review`;
93
+ - `loom land` (or the Land button) merges fresh main in, runs the fast tests,
94
+ pushes, and asks GitHub to merge when approvals and checks pass.
95
+
96
+ `loom team doctor` checks the repo for merge-queue traps and offers a fix PR.
97
+ `loom team landing` lists goal PRs, and teammates' goals that need someone:
98
+ `loom team adopt <pr>` takes one over and hands it back when it's green.
99
+
100
+ ### Phase 6: landing in turn, and hearing GitHub at once
101
+
102
+ **No merge queue? Land still lands one at a time.** On a repo without GitHub's
103
+ merge queue, Land joins Loom's landing train. Each goal waits for its lane,
104
+ then takes its turn: fresh main merged in, the fast tests, a push, green checks
105
+ on that exact commit, then Loom merges it (`gh pr merge --squash`). The next goal
106
+ in the lane goes after that, on top of it. A goal in the queue shows **queued**
107
+ ("waiting behind bob's goal in lane api"). If a check fails on its turn, the lane
108
+ moves on to the next goal, and yours rejoins by itself once it's green again.
109
+
110
+ Lanes are path scopes. Goals in different lanes land at the same time; a goal
111
+ that touches two lanes waits for both. With no lanes, everything shares `main`.
112
+
113
+ ```jsonc
114
+ // loom.team.json
115
+ { "landing": { "fastTest": "npm test -- --changed",
116
+ "lanes": { "web": ["web/**"], "api": ["api/**", "db/**"] } } }
117
+ ```
118
+
119
+ With a merge queue on the branch, Land works as in Phase 4: GitHub's queue does
120
+ this job.
121
+
122
+ **Webhooks: CI results the moment they happen.** Without them, Loom learns
123
+ about PRs and checks by polling `gh` (every 30–60 s). A repo webhook pushes them
124
+ to the hub instead, and your daemon reacts to a failed check or a merge right
125
+ away. Team owners set it up once per repo:
126
+
127
+ ```bash
128
+ loom team webhook # prints the payload URL and the secret
129
+ loom team webhook --install # or creates the webhook with gh (needs repo admin)
130
+ loom team webhook --rotate # new secret; update the repo's webhook after
131
+ ```
132
+
133
+ A self-hosted hub must be reachable from GitHub for this (a public host or a
134
+ tunnel). The hosted hub receives webhooks through a Supabase Edge Function.
135
+ Polling keeps running either way, and nothing shows up twice.
136
+
137
+ ## 6. Runners (Phase 5)
138
+
139
+ A runner is your own always-on Loom (a VPS, a home server, a container) that
140
+ takes your goals while your laptop sleeps.
141
+
142
+ ```bash
143
+ loom runner pair # on your laptop: a one-time link (it carries your team keys)
144
+ loom runner join '<link>' # on the box — then keep it up: loom runner install
145
+ loom runner token github_pat_… # a fine-grained token: contents + pull requests on the shared repos
146
+ loom runner doctor # checks the token isn't broader than that
147
+ loom runner goal "Add rate limiting" # start a goal there
148
+ loom runner move <runId> # move a running goal; `loom runner back <runId>` brings it home
149
+ loom runner jobs # runners and what they're doing
150
+ ```
151
+
152
+ Or run it in Docker: `docker build -f Dockerfile.runner -t loom-runner .`
153
+
154
+ On Windows use `loom.cmd runner install`. It adds **Loom Runner.vbs** to your
155
+ account's Startup folder and starts the daemon immediately, without elevation.
156
+ The script uses your installed Node and preserves `LOOM_HOME`. Remove that
157
+ file from `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup` to disable
158
+ login startup. If Windows Script Host is disabled by your organization, run
159
+ `loom.cmd up` manually. Windows login startup does not restart a daemon after
160
+ a crash; run `loom.cmd up` again in that case.
161
+
162
+ Each goal gets a fresh clone (a fresh container when Docker runs), and agents
163
+ get a scrubbed environment with only their logins and the token. If a goal of
164
+ yours needs a CI fix and you've been offline 15 minutes, your runner takes it.
165
+
166
+ ## 7. Deploys and release notes
167
+
168
+ `loom team deploys` lists deployments; results show in the team feed, and a
169
+ failed deploy containing your goal alerts your phone. `loom team
170
+ release-notes v1.2.0` writes notes for everything merged since that tag,
171
+ grouped by member. GitHub Environments stay the deploy gate: Loom never deploys.
@@ -0,0 +1,85 @@
1
+ # Windows setup and validation
2
+
3
+ Use native Windows Node.js 22.5 or newer and Git for Windows. WSL is optional.
4
+
5
+ ```powershell
6
+ git clone https://github.com/nickthelegend/loom.git
7
+ cd loom
8
+ npm.cmd ci
9
+ npm.cmd link
10
+ loom.cmd --version
11
+ ```
12
+
13
+ `scripts/install.ps1` performs a managed source installation. `LOOM_SRC`
14
+ chooses the checkout folder; `LOOM_REPO` chooses the repository. Use `loom.cmd`
15
+ when PowerShell's script policy prevents npm's `loom.ps1` shim from running.
16
+
17
+ In a project, run `loom.cmd init`, then `loom.cmd up`. Install and sign in to
18
+ the agents you want to use. npm-installed agents and native `.exe` agents are
19
+ supported; prompts are passed as literal arguments, including quotes,
20
+ newlines, spaces and shell characters. Commands you configure for tests and
21
+ transcription use `cmd.exe` on Windows, so write them in Windows shell syntax.
22
+
23
+ For OpenCode's current native Windows release:
24
+
25
+ ```powershell
26
+ npm.cmd install -g opencode-ai@1.19.0
27
+ opencode.cmd --version
28
+ ```
29
+
30
+ Native continuity supports Codex, Claude Code and OpenCode on Windows. Enable
31
+ `brain.continuity` for sequential native chats. Loom probes Job Object assignment
32
+ on this host before admitting a native turn; a failed probe leaves it unavailable.
33
+ The native binding and delta context survive a daemon restart. Ship crews also
34
+ use native continuity when this mode is enabled; each teammate must use Codex,
35
+ Claude Code or OpenCode. Each seat keeps its own binding and a stable crew
36
+ checkout across goals. Native crew Fan-out admits parallel builders only in
37
+ separate workspaces. Parallel Orchestra still uses ordinary project mode.
38
+
39
+ Loom uses Koffi's packaged native binding; no local C++ toolchain is required on
40
+ supported Windows architectures. A Node bootstrap joins a kill-on-close Job Object
41
+ before it can launch the harness. Only the daemon retains a job handle. Shutdown
42
+ waits for Windows to report zero job members, including detached tool children;
43
+ a failed verification retains the continuity writer lease. Daemon crashes close
44
+ the handle and terminate contained processes. Shared pre-existing console hosts
45
+ are outside the job.
46
+
47
+ Antigravity's Windows installer and default `%LOCALAPPDATA%\agy\bin` location
48
+ follow its [official installation guide](https://www.antigravity.google/docs/cli/install/).
49
+
50
+ The terminal uses ConPTY when node-pty loads, with a pipe fallback otherwise.
51
+ The dependency is pinned to `node-pty` 1.2.0-beta.15, which includes Microsoft's
52
+ [fix for simultaneous Windows terminal exits](https://github.com/microsoft/node-pty/pull/922).
53
+ The stable 1.1.0 release still contains that native race. Terminal shutdown waits
54
+ for shell exit, and late callbacks from an old shell cannot close its replacement.
55
+ Both paths are exercised in CI. The pipe terminal preserves its shell session
56
+ when interrupting a foreground process. Windows console hosts are excluded
57
+ from ordinary process-tree shutdown.
58
+
59
+ `loom.cmd runner install` uses your Windows Startup folder. See
60
+ [runner setup](teams.md#6-runners-phase-5) for its lifecycle and removal command.
61
+
62
+ ## Verified workflows
63
+
64
+ - A live Codex conductor ran parallel workers in separate Git worktrees,
65
+ reviewed and integrated their changes, ran a follow-up verification task,
66
+ and applied the result. All four resulting Node tests passed.
67
+ - Scripted crew tests cover planning, claims, review, test, apply, questions,
68
+ stop and restart. They use fake agents so CI never spends agent tokens.
69
+ - Real Windows terminal checks cover TTY detection, resize, interrupt and
70
+ scrollback. The UI tests exercise an Orchestra turn finishing before the
71
+ WebSocket subscribes, so the thread recovers its missing history.
72
+ - Clean phone dependency installation, type checking and 73 phone tests pass
73
+ on Windows. This does not substitute for running the app on a phone.
74
+ - The Electron desktop builds as an unpacked app and an NSIS installer. A
75
+ cold packaged launch starts the daemon and opens the web workspace.
76
+ - CI runs the full backend and DOM suites on Windows and Ubuntu, on Node 22
77
+ and 24, with both ConPTY/PTY and pipe terminal modes.
78
+
79
+ ## Support limits
80
+
81
+ Desktop installers are currently unsigned. Trusted signing and an installed
82
+ release-to-release update check are still required for issue #70. Hosted
83
+ Supabase authentication and cloud sharing need their own deployment and
84
+ acceptance checks; local Windows tests do not establish that those hosted
85
+ features work.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loompad/cli",
3
- "version": "0.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Loom — local-first control plane for coding agents: one CLI, shared memory, baton handoffs and routes across Claude Code, OpenCode, and friends.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,9 +27,11 @@
27
27
  ],
28
28
  "files": [
29
29
  "dist",
30
- "docs",
30
+ "docs/**/*.md",
31
+ "docs/refactoring/brain-benchmark*.json",
31
32
  "CHANGELOG.md",
32
- "ARCHITECTURE.md"
33
+ "ARCHITECTURE.md",
34
+ "THIRD_PARTY_NOTICES.md"
33
35
  ],
34
36
  "engines": {
35
37
  "node": ">=22.5.0"
@@ -45,26 +47,36 @@
45
47
  "./sdk": "./dist/sdk.js"
46
48
  },
47
49
  "scripts": {
48
- "build": "tsc",
49
- "prepare": "tsc",
50
+ "build": "npm run build:web && tsc && node scripts/prune-dist.mjs",
51
+ "prepare": "npm run build",
50
52
  "dev": "tsx src/cli/index.ts",
51
53
  "typecheck": "tsc --noEmit",
52
- "test": "vitest run",
54
+ "test": "node scripts/test.mjs",
53
55
  "test:watch": "vitest",
54
- "verify:adapters": "node scripts/verify-adapters.mjs"
56
+ "test:all-parallel": "vitest run",
57
+ "verify:adapters": "node scripts/verify-adapters.mjs",
58
+ "build:web": "node scripts/build-web.mjs",
59
+ "predev": "npm run build:web"
55
60
  },
56
61
  "dependencies": {
62
+ "@anthropic-ai/claude-agent-sdk": "0.3.283",
63
+ "@noble/ciphers": "^2.4.0",
64
+ "@noble/curves": "^2.4.0",
65
+ "@noble/hashes": "^2.4.0",
66
+ "@supabase/supabase-js": "^2.116.0",
57
67
  "@xterm/addon-fit": "^0.11.0",
58
68
  "@xterm/addon-web-links": "^0.12.0",
59
69
  "@xterm/xterm": "^6.0.0",
60
70
  "commander": "^15.0.0",
61
71
  "express": "^5.2.1",
62
72
  "ink": "^7.1.0",
73
+ "koffi": "3.3.3",
63
74
  "picocolors": "^1.1.1",
64
75
  "qrcode": "^1.5.4",
65
76
  "qrcode-terminal": "^0.12.0",
66
77
  "react": "^19.2.7",
67
- "ws": "^8.21.1"
78
+ "ws": "^8.21.1",
79
+ "zod": "4.6.5"
68
80
  },
69
81
  "devDependencies": {
70
82
  "@types/express": "^5.0.6",
@@ -73,12 +85,13 @@
73
85
  "@types/qrcode-terminal": "^0.12.2",
74
86
  "@types/react": "^19.2.17",
75
87
  "@types/ws": "^8.18.1",
88
+ "esbuild": "0.28.1",
76
89
  "jsdom": "^29.1.1",
77
90
  "tsx": "^4.23.1",
78
91
  "typescript": "~5.9.0",
79
92
  "vitest": "^4.1.10"
80
93
  },
81
94
  "optionalDependencies": {
82
- "node-pty": "^1.1.0"
95
+ "node-pty": "1.2.0-beta.15"
83
96
  }
84
97
  }
@@ -1,26 +0,0 @@
1
- /**
2
- * Claude Code adapter — drives the `claude` CLI headless, one process per
3
- * turn, resuming the same session id across turns.
4
- *
5
- * claude -p "<text>" --output-format stream-json --verbose
6
- * [--resume <sessionId>] [--append-system-prompt <briefing>]
7
- * --permission-mode <mode>
8
- *
9
- * Surface verified against claude 2.1.83 — see docs/integration-notes.md.
10
- */
11
- import type { SendInput } from "../types.js";
12
- import { AdapterBase } from "./base.js";
13
- export declare class ClaudeCodeAdapter extends AdapterBase {
14
- private child;
15
- private options;
16
- constructor(id: string, projectDir: string, options?: Record<string, unknown>);
17
- private get sessionId();
18
- private set sessionId(value);
19
- private get bin();
20
- available(): Promise<boolean>;
21
- start(): Promise<void>;
22
- stop(): Promise<void>;
23
- send(input: SendInput): Promise<void>;
24
- private handleStreamEvent;
25
- interrupt(): Promise<void>;
26
- }
@@ -1,209 +0,0 @@
1
- /**
2
- * Claude Code adapter — drives the `claude` CLI headless, one process per
3
- * turn, resuming the same session id across turns.
4
- *
5
- * claude -p "<text>" --output-format stream-json --verbose
6
- * [--resume <sessionId>] [--append-system-prompt <briefing>]
7
- * --permission-mode <mode>
8
- *
9
- * Surface verified against claude 2.1.83 — see docs/integration-notes.md.
10
- */
11
- import { spawn } from "node:child_process";
12
- import readline from "node:readline";
13
- import { readProjectState, writeProjectState } from "../core/registry.js";
14
- import { AdapterBase, agentEnv, cliAvailable } from "./base.js";
15
- export class ClaudeCodeAdapter extends AdapterBase {
16
- child = null;
17
- options;
18
- constructor(id, projectDir, options = {}) {
19
- super(id, "claude-code", projectDir);
20
- this.options = options;
21
- }
22
- get sessionId() {
23
- const state = readProjectState(this.projectDir);
24
- return state.agents[this.id]?.sessionId;
25
- }
26
- set sessionId(value) {
27
- const state = readProjectState(this.projectDir);
28
- state.agents[this.id] = { ...state.agents[this.id], sessionId: value };
29
- writeProjectState(this.projectDir, state);
30
- }
31
- get bin() {
32
- return this.options.bin ?? "claude";
33
- }
34
- async available() {
35
- return cliAvailable(this.bin);
36
- }
37
- async start() {
38
- this.emit({ kind: "status", payload: { state: "ready", session: this.sessionId ?? null } });
39
- }
40
- async stop() {
41
- await this.interrupt();
42
- }
43
- async send(input) {
44
- if (this._busy)
45
- throw new Error(`claude-code agent "${this.id}" is busy`);
46
- this._busy = true;
47
- const started = Date.now();
48
- const args = [
49
- "-p",
50
- input.text,
51
- "--output-format",
52
- "stream-json",
53
- "--verbose",
54
- "--permission-mode",
55
- this.options.permissionMode ?? "acceptEdits",
56
- ];
57
- if (this.sessionId)
58
- args.push("--resume", this.sessionId);
59
- if (input.briefing)
60
- args.push("--append-system-prompt", input.briefing);
61
- if (this.options.model)
62
- args.push("--model", this.options.model);
63
- if (this.options.extraArgs)
64
- args.push(...this.options.extraArgs);
65
- try {
66
- await new Promise((resolve, reject) => {
67
- const child = spawn(this.bin, args, {
68
- cwd: this.projectDir,
69
- stdio: ["ignore", "pipe", "pipe"],
70
- env: agentEnv(),
71
- });
72
- this.child = child;
73
- let lastAssistantText = "";
74
- let sawResult = false;
75
- let stderrTail = "";
76
- const rl = readline.createInterface({ input: child.stdout });
77
- rl.on("line", (line) => {
78
- const trimmed = line.trim();
79
- if (!trimmed.startsWith("{"))
80
- return;
81
- let evt;
82
- try {
83
- evt = JSON.parse(trimmed);
84
- }
85
- catch {
86
- return;
87
- }
88
- this.handleStreamEvent(evt, (t) => (lastAssistantText = t));
89
- if (evt.type === "result")
90
- sawResult = true;
91
- });
92
- child.stderr.on("data", (d) => {
93
- stderrTail = (stderrTail + d.toString()).slice(-2000);
94
- });
95
- child.on("error", (err) => reject(err));
96
- child.on("close", (code, signal) => {
97
- this.child = null;
98
- if (signal) {
99
- this.emit({ kind: "status", payload: { state: "interrupted", signal } });
100
- resolve();
101
- return;
102
- }
103
- if (code !== 0 && !sawResult) {
104
- this.emit({
105
- kind: "error",
106
- payload: { message: `${this.bin} exited ${code}`, stderr: stderrTail },
107
- });
108
- reject(new Error(`${this.bin} exited ${code}: ${stderrTail.slice(0, 200)}`));
109
- return;
110
- }
111
- // Blocked-on-human heuristic: the turn ended on a question.
112
- if (/\?\s*$/.test(lastAssistantText.trim())) {
113
- this.emit({
114
- kind: "needs_input",
115
- payload: { question: lastAssistantText.slice(-500) },
116
- });
117
- }
118
- this.emit({
119
- kind: "run_complete",
120
- payload: { durationMs: Date.now() - started },
121
- });
122
- resolve();
123
- });
124
- });
125
- }
126
- finally {
127
- this._busy = false;
128
- this.child = null;
129
- }
130
- }
131
- handleStreamEvent(evt, setLastText) {
132
- const type = evt.type;
133
- if (type === "system" && evt.subtype === "init") {
134
- const sid = evt.session_id;
135
- if (sid)
136
- this.sessionId = sid;
137
- this.emit({ kind: "status", payload: { state: "turn_started", session: sid ?? null } });
138
- return;
139
- }
140
- if (type === "assistant") {
141
- const message = evt.message;
142
- for (const block of message?.content ?? []) {
143
- if (block.type === "text" && typeof block.text === "string" && block.text.trim()) {
144
- setLastText(block.text);
145
- this.emit({ kind: "message", payload: { text: block.text } });
146
- }
147
- else if (block.type === "thinking" && typeof block.thinking === "string" && block.thinking.trim()) {
148
- // Extended thinking. Emitted as a reasoning-tagged message so the UI
149
- // can fold it into its "thinking" block, the same shape codex and
150
- // grok use. It never becomes lastAssistantText (that's the reply).
151
- this.emit({ kind: "message", payload: { text: block.thinking, reasoning: true } });
152
- }
153
- else if (block.type === "tool_use") {
154
- const name = String(block.name ?? "tool");
155
- const input = (block.input ?? {});
156
- this.emit({
157
- kind: "tool_call",
158
- payload: { tool: name, summary: summarizeToolInput(name, input) },
159
- });
160
- const path = input.file_path ?? input.notebook_path;
161
- if (["Edit", "Write", "NotebookEdit", "MultiEdit"].includes(name) && path) {
162
- this.emit({ kind: "file_edit", payload: { path: String(path), tool: name } });
163
- }
164
- }
165
- }
166
- return;
167
- }
168
- if (type === "result") {
169
- const cost = evt.total_cost_usd;
170
- const isError = Boolean(evt.is_error);
171
- if (isError) {
172
- this.emit({
173
- kind: "error",
174
- payload: { message: String(evt.result ?? evt.subtype ?? "unknown error") },
175
- });
176
- }
177
- if (cost !== undefined) {
178
- this.emit({ kind: "status", payload: { state: "turn_cost", costUsd: cost } });
179
- }
180
- }
181
- }
182
- async interrupt() {
183
- const child = this.child;
184
- if (!child)
185
- return;
186
- child.kill("SIGINT");
187
- await new Promise((resolve) => {
188
- const t = setTimeout(() => {
189
- try {
190
- child.kill("SIGKILL");
191
- }
192
- catch {
193
- // already gone
194
- }
195
- resolve();
196
- }, 3000);
197
- child.on("close", () => {
198
- clearTimeout(t);
199
- resolve();
200
- });
201
- });
202
- }
203
- }
204
- function summarizeToolInput(name, input) {
205
- const interesting = input.file_path ?? input.command ?? input.pattern ?? input.url ?? input.prompt ?? "";
206
- const text = String(interesting).replace(/\s+/g, " ");
207
- return `${name}: ${text.slice(0, 160)}`;
208
- }
209
- //# sourceMappingURL=claude-code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Codex adapter — drives the `codex` CLI headless, one process per turn,
3
- * resuming the same thread across turns.
4
- *
5
- * codex exec --json --skip-git-repo-check -C <dir> -s <sandbox> "<text>"
6
- * codex exec resume <threadId> --json … "<text>"
7
- *
8
- * The CLI ships inside the desktop app as well as on PATH, so `available()`
9
- * looks in both places — a Mac with Codex.app installed and nothing on PATH is
10
- * the common case, and refusing to find it there would be wrong.
11
- *
12
- * Event surface verified against codex-cli 0.142.4 by running it and reading
13
- * what came out, not by guessing:
14
- *
15
- * {"type":"thread.started","thread_id":"019f…"}
16
- * {"type":"turn.started"}
17
- * {"type":"item.started","item":{"id":"item_1","type":"command_execution",…}}
18
- * {"type":"item.completed","item":{"id":"item_1","type":"command_execution",
19
- * "command":"/bin/zsh -lc 'echo hi'","aggregated_output":"hi\n","exit_code":0}}
20
- * {"type":"item.completed","item":{"id":"item_2","type":"agent_message","text":"…"}}
21
- * {"type":"item.completed","item":{"id":"item_3","type":"file_change",
22
- * "changes":[{"path":"/abs/note.txt","kind":"add"}]}}
23
- * {"type":"turn.completed","usage":{"input_tokens":52831,"output_tokens":120,…}}
24
- *
25
- * Note what is NOT in there: money. Codex reports tokens, never a dollar
26
- * figure, so this adapter reports tokens and no cost. Inventing a USD number
27
- * from a price table we'd have to keep current is how you end up with a fake
28
- * $0.001 in the UI presented as fact.
29
- */
30
- import type { SendInput } from "../types.js";
31
- import { AdapterBase } from "./base.js";
32
- /**
33
- * Where the codex CLI is on this machine: an explicit override, then PATH,
34
- * then inside the app bundle.
35
- */
36
- export declare function codexBin(override?: string): string | null;
37
- export declare class CodexAdapter extends AdapterBase {
38
- private child;
39
- private options;
40
- constructor(id: string, projectDir: string, options?: Record<string, unknown>);
41
- /** Codex calls it a thread; loom stores it in the same slot as any session. */
42
- private get threadId();
43
- private set threadId(value);
44
- available(): Promise<boolean>;
45
- start(): Promise<void>;
46
- stop(): Promise<void>;
47
- send(input: SendInput): Promise<void>;
48
- private handleEvent;
49
- private handleItem;
50
- interrupt(): Promise<void>;
51
- }