@loompad/cli 0.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (688) hide show
  1. package/ARCHITECTURE.md +96 -11
  2. package/CHANGELOG.md +1054 -0
  3. package/README.md +1473 -44
  4. package/THIRD_PARTY_NOTICES.md +275 -0
  5. package/dist/adapters/antigravity-cli.d.ts +62 -0
  6. package/dist/adapters/antigravity-cli.js +258 -0
  7. package/dist/adapters/antigravity-cli.js.map +1 -0
  8. package/dist/adapters/base.d.ts +61 -9
  9. package/dist/adapters/base.js +266 -15
  10. package/dist/adapters/base.js.map +1 -1
  11. package/dist/adapters/bridges/antigravity.d.ts +9 -12
  12. package/dist/adapters/bridges/antigravity.js +9 -12
  13. package/dist/adapters/bridges/antigravity.js.map +1 -1
  14. package/dist/adapters/echo.d.ts +1 -0
  15. package/dist/adapters/echo.js +59 -3
  16. package/dist/adapters/echo.js.map +1 -1
  17. package/dist/adapters/grok.d.ts +7 -0
  18. package/dist/adapters/grok.js +20 -10
  19. package/dist/adapters/grok.js.map +1 -1
  20. package/dist/adapters/index.d.ts +5 -1
  21. package/dist/adapters/index.js +53 -7
  22. package/dist/adapters/index.js.map +1 -1
  23. package/dist/adapters/model.d.ts +137 -0
  24. package/dist/adapters/model.js +527 -0
  25. package/dist/adapters/model.js.map +1 -0
  26. package/dist/adapters/opencode.d.ts +101 -1
  27. package/dist/adapters/opencode.js +874 -98
  28. package/dist/adapters/opencode.js.map +1 -1
  29. package/dist/cli/doctor.d.ts +32 -0
  30. package/dist/cli/doctor.js +89 -4
  31. package/dist/cli/doctor.js.map +1 -1
  32. package/dist/cli/index.js +2651 -87
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/tui-model.js +3 -1
  35. package/dist/cli/tui-model.js.map +1 -1
  36. package/dist/cli/tui.js +44 -1
  37. package/dist/cli/tui.js.map +1 -1
  38. package/dist/cli/ui.d.ts +2 -0
  39. package/dist/cli/ui.js +13 -0
  40. package/dist/cli/ui.js.map +1 -1
  41. package/dist/core/ades.d.ts +32 -16
  42. package/dist/core/ades.js +57 -20
  43. package/dist/core/ades.js.map +1 -1
  44. package/dist/core/agent-state.d.ts +14 -0
  45. package/dist/core/agent-state.js +32 -0
  46. package/dist/core/agent-state.js.map +1 -0
  47. package/dist/core/approvals.d.ts +33 -0
  48. package/dist/core/approvals.js +29 -0
  49. package/dist/core/approvals.js.map +1 -0
  50. package/dist/core/backup.d.ts +19 -0
  51. package/dist/core/backup.js +86 -0
  52. package/dist/core/backup.js.map +1 -0
  53. package/dist/core/baton.d.ts +2 -2
  54. package/dist/core/baton.js.map +1 -1
  55. package/dist/core/brain-extract.d.ts +17 -0
  56. package/dist/core/brain-extract.js +28 -2
  57. package/dist/core/brain-extract.js.map +1 -1
  58. package/dist/core/brain-index.d.ts +71 -0
  59. package/dist/core/brain-index.js +204 -5
  60. package/dist/core/brain-index.js.map +1 -1
  61. package/dist/core/brain.d.ts +58 -2
  62. package/dist/core/brain.js +79 -1
  63. package/dist/core/brain.js.map +1 -1
  64. package/dist/core/chat-import.d.ts +71 -0
  65. package/dist/core/chat-import.js +419 -0
  66. package/dist/core/chat-import.js.map +1 -0
  67. package/dist/core/checkpoint.d.ts +107 -0
  68. package/dist/core/checkpoint.js +259 -0
  69. package/dist/core/checkpoint.js.map +1 -0
  70. package/dist/core/claude-cli.js +1 -1
  71. package/dist/core/claude-cli.js.map +1 -1
  72. package/dist/core/continuity/artifacts.d.ts +14 -0
  73. package/dist/core/continuity/artifacts.js +118 -0
  74. package/dist/core/continuity/artifacts.js.map +1 -0
  75. package/dist/core/continuity/capabilities.d.ts +65 -0
  76. package/dist/core/continuity/capabilities.js +129 -0
  77. package/dist/core/continuity/capabilities.js.map +1 -0
  78. package/dist/core/continuity/contracts.d.ts +352 -0
  79. package/dist/core/continuity/contracts.js +117 -0
  80. package/dist/core/continuity/contracts.js.map +1 -0
  81. package/dist/core/continuity/engine.d.ts +55 -0
  82. package/dist/core/continuity/engine.js +504 -0
  83. package/dist/core/continuity/engine.js.map +1 -0
  84. package/dist/core/continuity/store.d.ts +73 -0
  85. package/dist/core/continuity/store.js +438 -0
  86. package/dist/core/continuity/store.js.map +1 -0
  87. package/dist/core/conversations.d.ts +19 -0
  88. package/dist/core/conversations.js +87 -0
  89. package/dist/core/conversations.js.map +1 -0
  90. package/dist/core/crew-coordination.d.ts +6 -0
  91. package/dist/core/crew-coordination.js +24 -0
  92. package/dist/core/crew-coordination.js.map +1 -0
  93. package/dist/core/crew-policy.d.ts +18 -0
  94. package/dist/core/crew-policy.js +40 -0
  95. package/dist/core/crew-policy.js.map +1 -0
  96. package/dist/core/crew-protocol.d.ts +64 -0
  97. package/dist/core/crew-protocol.js +146 -0
  98. package/dist/core/crew-protocol.js.map +1 -0
  99. package/dist/core/crew-requests.d.ts +14 -0
  100. package/dist/core/crew-requests.js +22 -0
  101. package/dist/core/crew-requests.js.map +1 -0
  102. package/dist/core/crew.d.ts +395 -0
  103. package/dist/core/crew.js +1857 -0
  104. package/dist/core/crew.js.map +1 -0
  105. package/dist/core/digest.d.ts +40 -0
  106. package/dist/core/digest.js +94 -0
  107. package/dist/core/digest.js.map +1 -0
  108. package/dist/core/distill.js +3 -5
  109. package/dist/core/distill.js.map +1 -1
  110. package/dist/core/eventlog.d.ts +27 -25
  111. package/dist/core/eventlog.js +97 -150
  112. package/dist/core/eventlog.js.map +1 -1
  113. package/dist/core/events/contracts.d.ts +51 -0
  114. package/dist/core/events/contracts.js +2 -0
  115. package/dist/core/events/contracts.js.map +1 -0
  116. package/dist/core/events/jsonl-store.d.ts +23 -0
  117. package/dist/core/events/jsonl-store.js +90 -0
  118. package/dist/core/events/jsonl-store.js.map +1 -0
  119. package/dist/core/events/sqlite-store.d.ts +37 -0
  120. package/dist/core/events/sqlite-store.js +215 -0
  121. package/dist/core/events/sqlite-store.js.map +1 -0
  122. package/dist/core/forecast.d.ts +44 -0
  123. package/dist/core/forecast.js +46 -0
  124. package/dist/core/forecast.js.map +1 -0
  125. package/dist/core/free-pool.d.ts +65 -0
  126. package/dist/core/free-pool.js +171 -0
  127. package/dist/core/free-pool.js.map +1 -0
  128. package/dist/core/git.d.ts +30 -0
  129. package/dist/core/git.js +50 -2
  130. package/dist/core/git.js.map +1 -1
  131. package/dist/core/github-events.d.ts +53 -0
  132. package/dist/core/github-events.js +227 -0
  133. package/dist/core/github-events.js.map +1 -0
  134. package/dist/core/goal-lanes.d.ts +53 -0
  135. package/dist/core/goal-lanes.js +99 -0
  136. package/dist/core/goal-lanes.js.map +1 -0
  137. package/dist/core/hosted.d.ts +27 -0
  138. package/dist/core/hosted.js +50 -0
  139. package/dist/core/hosted.js.map +1 -0
  140. package/dist/core/http-server.d.ts +5 -0
  141. package/dist/core/http-server.js +8 -0
  142. package/dist/core/http-server.js.map +1 -0
  143. package/dist/core/invite-link.d.ts +31 -0
  144. package/dist/core/invite-link.js +45 -0
  145. package/dist/core/invite-link.js.map +1 -0
  146. package/dist/core/loops.d.ts +37 -0
  147. package/dist/core/loops.js +81 -0
  148. package/dist/core/loops.js.map +1 -0
  149. package/dist/core/mcp-catalog.d.ts +182 -0
  150. package/dist/core/mcp-catalog.js +431 -0
  151. package/dist/core/mcp-catalog.js.map +1 -0
  152. package/dist/core/mcp.d.ts +87 -0
  153. package/dist/core/mcp.js +181 -0
  154. package/dist/core/mcp.js.map +1 -0
  155. package/dist/core/memory.d.ts +1 -0
  156. package/dist/core/memory.js +5 -2
  157. package/dist/core/memory.js.map +1 -1
  158. package/dist/core/model-tools.d.ts +97 -0
  159. package/dist/core/model-tools.js +388 -0
  160. package/dist/core/model-tools.js.map +1 -0
  161. package/dist/core/notify.js +19 -1
  162. package/dist/core/notify.js.map +1 -1
  163. package/dist/core/orchestra.d.ts +635 -0
  164. package/dist/core/orchestra.js +2120 -0
  165. package/dist/core/orchestra.js.map +1 -0
  166. package/dist/core/permissions.d.ts +56 -0
  167. package/dist/core/permissions.js +122 -0
  168. package/dist/core/permissions.js.map +1 -0
  169. package/dist/core/preview-proxy.d.ts +70 -0
  170. package/dist/core/preview-proxy.js +563 -0
  171. package/dist/core/preview-proxy.js.map +1 -0
  172. package/dist/core/preview-shot.d.ts +46 -0
  173. package/dist/core/preview-shot.js +109 -0
  174. package/dist/core/preview-shot.js.map +1 -0
  175. package/dist/core/process.d.ts +36 -0
  176. package/dist/core/process.js +168 -0
  177. package/dist/core/process.js.map +1 -0
  178. package/dist/core/prompt-queue.d.ts +136 -0
  179. package/dist/core/prompt-queue.js +269 -0
  180. package/dist/core/prompt-queue.js.map +1 -0
  181. package/dist/core/prompts.d.ts +53 -0
  182. package/dist/core/prompts.js +127 -0
  183. package/dist/core/prompts.js.map +1 -0
  184. package/dist/core/proof.d.ts +82 -0
  185. package/dist/core/proof.js +216 -0
  186. package/dist/core/proof.js.map +1 -0
  187. package/dist/core/provider-text.d.ts +23 -0
  188. package/dist/core/provider-text.js +66 -0
  189. package/dist/core/provider-text.js.map +1 -0
  190. package/dist/core/providers.d.ts +152 -0
  191. package/dist/core/providers.js +343 -0
  192. package/dist/core/providers.js.map +1 -0
  193. package/dist/core/quota.d.ts +33 -0
  194. package/dist/core/quota.js +74 -0
  195. package/dist/core/quota.js.map +1 -0
  196. package/dist/core/recipes.d.ts +50 -0
  197. package/dist/core/recipes.js +99 -0
  198. package/dist/core/recipes.js.map +1 -0
  199. package/dist/core/registry.d.ts +54 -0
  200. package/dist/core/registry.js +62 -5
  201. package/dist/core/registry.js.map +1 -1
  202. package/dist/core/relay-client.d.ts +67 -0
  203. package/dist/core/relay-client.js +184 -0
  204. package/dist/core/relay-client.js.map +1 -0
  205. package/dist/core/relay-protocol.d.ts +140 -0
  206. package/dist/core/relay-protocol.js +189 -0
  207. package/dist/core/relay-protocol.js.map +1 -0
  208. package/dist/core/replay.d.ts +18 -0
  209. package/dist/core/replay.js +191 -0
  210. package/dist/core/replay.js.map +1 -0
  211. package/dist/core/review-triage.d.ts +41 -0
  212. package/dist/core/review-triage.js +124 -0
  213. package/dist/core/review-triage.js.map +1 -0
  214. package/dist/core/router.js +2 -2
  215. package/dist/core/router.js.map +1 -1
  216. package/dist/core/routes.d.ts +39 -3
  217. package/dist/core/routes.js +137 -4
  218. package/dist/core/routes.js.map +1 -1
  219. package/dist/core/run-command.d.ts +14 -0
  220. package/dist/core/run-command.js +45 -0
  221. package/dist/core/run-command.js.map +1 -0
  222. package/dist/core/runner-setup.d.ts +36 -0
  223. package/dist/core/runner-setup.js +114 -0
  224. package/dist/core/runner-setup.js.map +1 -0
  225. package/dist/core/search.js +0 -0
  226. package/dist/core/search.js.map +1 -1
  227. package/dist/core/semantic.d.ts +92 -0
  228. package/dist/core/semantic.js +227 -0
  229. package/dist/core/semantic.js.map +1 -0
  230. package/dist/core/servers.d.ts +115 -0
  231. package/dist/core/servers.js +305 -0
  232. package/dist/core/servers.js.map +1 -0
  233. package/dist/core/setup.js +64 -6
  234. package/dist/core/setup.js.map +1 -1
  235. package/dist/core/shield.d.ts +17 -0
  236. package/dist/core/shield.js +81 -0
  237. package/dist/core/shield.js.map +1 -0
  238. package/dist/core/shift.d.ts +69 -0
  239. package/dist/core/shift.js +120 -0
  240. package/dist/core/shift.js.map +1 -0
  241. package/dist/core/skill-install.d.ts +125 -0
  242. package/dist/core/skill-install.js +328 -0
  243. package/dist/core/skill-install.js.map +1 -0
  244. package/dist/core/skills.d.ts +116 -0
  245. package/dist/core/skills.js +223 -0
  246. package/dist/core/skills.js.map +1 -0
  247. package/dist/core/step-conditions.d.ts +65 -0
  248. package/dist/core/step-conditions.js +102 -0
  249. package/dist/core/step-conditions.js.map +1 -0
  250. package/dist/core/subagents.d.ts +45 -0
  251. package/dist/core/subagents.js +90 -0
  252. package/dist/core/subagents.js.map +1 -0
  253. package/dist/core/team-canon.d.ts +42 -0
  254. package/dist/core/team-canon.js +121 -0
  255. package/dist/core/team-canon.js.map +1 -0
  256. package/dist/core/team-crypto.d.ts +97 -0
  257. package/dist/core/team-crypto.js +175 -0
  258. package/dist/core/team-crypto.js.map +1 -0
  259. package/dist/core/team-hub.d.ts +514 -0
  260. package/dist/core/team-hub.js +964 -0
  261. package/dist/core/team-hub.js.map +1 -0
  262. package/dist/core/team-landing.d.ts +239 -0
  263. package/dist/core/team-landing.js +504 -0
  264. package/dist/core/team-landing.js.map +1 -0
  265. package/dist/core/team-leases.d.ts +44 -0
  266. package/dist/core/team-leases.js +145 -0
  267. package/dist/core/team-leases.js.map +1 -0
  268. package/dist/core/team-memory.d.ts +42 -0
  269. package/dist/core/team-memory.js +84 -0
  270. package/dist/core/team-memory.js.map +1 -0
  271. package/dist/core/team-policy.d.ts +85 -0
  272. package/dist/core/team-policy.js +191 -0
  273. package/dist/core/team-policy.js.map +1 -0
  274. package/dist/core/thread-md.d.ts +6 -0
  275. package/dist/core/thread-md.js +42 -0
  276. package/dist/core/thread-md.js.map +1 -0
  277. package/dist/core/turn-stats.d.ts +61 -0
  278. package/dist/core/turn-stats.js +124 -0
  279. package/dist/core/turn-stats.js.map +1 -0
  280. package/dist/core/updater.d.ts +73 -0
  281. package/dist/core/updater.js +153 -0
  282. package/dist/core/updater.js.map +1 -0
  283. package/dist/core/usage.d.ts +75 -0
  284. package/dist/core/usage.js +163 -0
  285. package/dist/core/usage.js.map +1 -0
  286. package/dist/core/windows-jobs.d.ts +15 -0
  287. package/dist/core/windows-jobs.js +170 -0
  288. package/dist/core/windows-jobs.js.map +1 -0
  289. package/dist/core/worktree-merge.d.ts +57 -0
  290. package/dist/core/worktree-merge.js +123 -0
  291. package/dist/core/worktree-merge.js.map +1 -0
  292. package/dist/core/worktree.d.ts +5 -0
  293. package/dist/core/worktree.js +45 -5
  294. package/dist/core/worktree.js.map +1 -1
  295. package/dist/core/worktrees.d.ts +6 -0
  296. package/dist/core/worktrees.js +21 -0
  297. package/dist/core/worktrees.js.map +1 -0
  298. package/dist/daemon/app-page.d.ts +0 -17
  299. package/dist/daemon/app-page.js +10 -6346
  300. package/dist/daemon/app-page.js.map +1 -1
  301. package/dist/daemon/auth.d.ts +24 -3
  302. package/dist/daemon/auth.js +66 -7
  303. package/dist/daemon/auth.js.map +1 -1
  304. package/dist/daemon/board.d.ts +7 -0
  305. package/dist/daemon/board.js +12 -1
  306. package/dist/daemon/board.js.map +1 -1
  307. package/dist/daemon/brand-icons.d.ts +6 -1
  308. package/dist/daemon/brand-icons.js +11 -3
  309. package/dist/daemon/brand-icons.js.map +1 -1
  310. package/dist/daemon/client.d.ts +665 -1
  311. package/dist/daemon/client.js +381 -3
  312. package/dist/daemon/client.js.map +1 -1
  313. package/dist/daemon/delivery.d.ts +34 -0
  314. package/dist/daemon/delivery.js +63 -0
  315. package/dist/daemon/delivery.js.map +1 -0
  316. package/dist/daemon/deploys.d.ts +62 -0
  317. package/dist/daemon/deploys.js +159 -0
  318. package/dist/daemon/deploys.js.map +1 -0
  319. package/dist/daemon/landing.d.ts +192 -0
  320. package/dist/daemon/landing.js +992 -0
  321. package/dist/daemon/landing.js.map +1 -0
  322. package/dist/daemon/onboard.d.ts +150 -0
  323. package/dist/daemon/onboard.js +390 -0
  324. package/dist/daemon/onboard.js.map +1 -0
  325. package/dist/daemon/proof.d.ts +70 -0
  326. package/dist/daemon/proof.js +172 -0
  327. package/dist/daemon/proof.js.map +1 -0
  328. package/dist/daemon/push.d.ts +19 -1
  329. package/dist/daemon/push.js +90 -3
  330. package/dist/daemon/push.js.map +1 -1
  331. package/dist/daemon/relay.d.ts +82 -0
  332. package/dist/daemon/relay.js +351 -0
  333. package/dist/daemon/relay.js.map +1 -0
  334. package/dist/daemon/routes/agent-discovery.d.ts +4 -0
  335. package/dist/daemon/routes/agent-discovery.js +29 -0
  336. package/dist/daemon/routes/agent-discovery.js.map +1 -0
  337. package/dist/daemon/routes/agent-settings.d.ts +4 -0
  338. package/dist/daemon/routes/agent-settings.js +94 -0
  339. package/dist/daemon/routes/agent-settings.js.map +1 -0
  340. package/dist/daemon/routes/agents.d.ts +4 -0
  341. package/dist/daemon/routes/agents.js +105 -0
  342. package/dist/daemon/routes/agents.js.map +1 -0
  343. package/dist/daemon/routes/alerts.d.ts +4 -0
  344. package/dist/daemon/routes/alerts.js +137 -0
  345. package/dist/daemon/routes/alerts.js.map +1 -0
  346. package/dist/daemon/routes/approvals.d.ts +4 -0
  347. package/dist/daemon/routes/approvals.js +40 -0
  348. package/dist/daemon/routes/approvals.js.map +1 -0
  349. package/dist/daemon/routes/assets.d.ts +3 -0
  350. package/dist/daemon/routes/assets.js +64 -0
  351. package/dist/daemon/routes/assets.js.map +1 -0
  352. package/dist/daemon/routes/board.d.ts +4 -0
  353. package/dist/daemon/routes/board.js +147 -0
  354. package/dist/daemon/routes/board.js.map +1 -0
  355. package/dist/daemon/routes/brain.d.ts +4 -0
  356. package/dist/daemon/routes/brain.js +270 -0
  357. package/dist/daemon/routes/brain.js.map +1 -0
  358. package/dist/daemon/routes/chats.d.ts +4 -0
  359. package/dist/daemon/routes/chats.js +249 -0
  360. package/dist/daemon/routes/chats.js.map +1 -0
  361. package/dist/daemon/routes/clients.d.ts +4 -0
  362. package/dist/daemon/routes/clients.js +49 -0
  363. package/dist/daemon/routes/clients.js.map +1 -0
  364. package/dist/daemon/routes/cloud.d.ts +4 -0
  365. package/dist/daemon/routes/cloud.js +46 -0
  366. package/dist/daemon/routes/cloud.js.map +1 -0
  367. package/dist/daemon/routes/config.d.ts +4 -0
  368. package/dist/daemon/routes/config.js +35 -0
  369. package/dist/daemon/routes/config.js.map +1 -0
  370. package/dist/daemon/routes/context.d.ts +51 -0
  371. package/dist/daemon/routes/context.js +2 -0
  372. package/dist/daemon/routes/context.js.map +1 -0
  373. package/dist/daemon/routes/crews.d.ts +4 -0
  374. package/dist/daemon/routes/crews.js +149 -0
  375. package/dist/daemon/routes/crews.js.map +1 -0
  376. package/dist/daemon/routes/files.d.ts +3 -0
  377. package/dist/daemon/routes/files.js +253 -0
  378. package/dist/daemon/routes/files.js.map +1 -0
  379. package/dist/daemon/routes/git.d.ts +4 -0
  380. package/dist/daemon/routes/git.js +96 -0
  381. package/dist/daemon/routes/git.js.map +1 -0
  382. package/dist/daemon/routes/history.d.ts +4 -0
  383. package/dist/daemon/routes/history.js +101 -0
  384. package/dist/daemon/routes/history.js.map +1 -0
  385. package/dist/daemon/routes/integrations-project.d.ts +3 -0
  386. package/dist/daemon/routes/integrations-project.js +103 -0
  387. package/dist/daemon/routes/integrations-project.js.map +1 -0
  388. package/dist/daemon/routes/integrations.d.ts +3 -0
  389. package/dist/daemon/routes/integrations.js +111 -0
  390. package/dist/daemon/routes/integrations.js.map +1 -0
  391. package/dist/daemon/routes/logs.d.ts +3 -0
  392. package/dist/daemon/routes/logs.js +40 -0
  393. package/dist/daemon/routes/logs.js.map +1 -0
  394. package/dist/daemon/routes/messages.d.ts +4 -0
  395. package/dist/daemon/routes/messages.js +60 -0
  396. package/dist/daemon/routes/messages.js.map +1 -0
  397. package/dist/daemon/routes/observability.d.ts +4 -0
  398. package/dist/daemon/routes/observability.js +247 -0
  399. package/dist/daemon/routes/observability.js.map +1 -0
  400. package/dist/daemon/routes/onboard.d.ts +12 -0
  401. package/dist/daemon/routes/onboard.js +67 -0
  402. package/dist/daemon/routes/onboard.js.map +1 -0
  403. package/dist/daemon/routes/orchestra.d.ts +4 -0
  404. package/dist/daemon/routes/orchestra.js +110 -0
  405. package/dist/daemon/routes/orchestra.js.map +1 -0
  406. package/dist/daemon/routes/pairing.d.ts +4 -0
  407. package/dist/daemon/routes/pairing.js +155 -0
  408. package/dist/daemon/routes/pairing.js.map +1 -0
  409. package/dist/daemon/routes/preview.d.ts +24 -0
  410. package/dist/daemon/routes/preview.js +122 -0
  411. package/dist/daemon/routes/preview.js.map +1 -0
  412. package/dist/daemon/routes/project-actions.d.ts +4 -0
  413. package/dist/daemon/routes/project-actions.js +53 -0
  414. package/dist/daemon/routes/project-actions.js.map +1 -0
  415. package/dist/daemon/routes/project-team.d.ts +4 -0
  416. package/dist/daemon/routes/project-team.js +201 -0
  417. package/dist/daemon/routes/project-team.js.map +1 -0
  418. package/dist/daemon/routes/projects.d.ts +14 -0
  419. package/dist/daemon/routes/projects.js +138 -0
  420. package/dist/daemon/routes/projects.js.map +1 -0
  421. package/dist/daemon/routes/prompts.d.ts +4 -0
  422. package/dist/daemon/routes/prompts.js +44 -0
  423. package/dist/daemon/routes/prompts.js.map +1 -0
  424. package/dist/daemon/routes/proof.d.ts +4 -0
  425. package/dist/daemon/routes/proof.js +22 -0
  426. package/dist/daemon/routes/proof.js.map +1 -0
  427. package/dist/daemon/routes/providers.d.ts +3 -0
  428. package/dist/daemon/routes/providers.js +60 -0
  429. package/dist/daemon/routes/providers.js.map +1 -0
  430. package/dist/daemon/routes/public.d.ts +4 -0
  431. package/dist/daemon/routes/public.js +64 -0
  432. package/dist/daemon/routes/public.js.map +1 -0
  433. package/dist/daemon/routes/queue.d.ts +4 -0
  434. package/dist/daemon/routes/queue.js +140 -0
  435. package/dist/daemon/routes/queue.js.map +1 -0
  436. package/dist/daemon/routes/routing.d.ts +4 -0
  437. package/dist/daemon/routes/routing.js +61 -0
  438. package/dist/daemon/routes/routing.js.map +1 -0
  439. package/dist/daemon/routes/runtime-handler.d.ts +2 -0
  440. package/dist/daemon/routes/runtime-handler.js +63 -0
  441. package/dist/daemon/routes/runtime-handler.js.map +1 -0
  442. package/dist/daemon/routes/search.d.ts +4 -0
  443. package/dist/daemon/routes/search.js +17 -0
  444. package/dist/daemon/routes/search.js.map +1 -0
  445. package/dist/daemon/routes/servers.d.ts +4 -0
  446. package/dist/daemon/routes/servers.js +133 -0
  447. package/dist/daemon/routes/servers.js.map +1 -0
  448. package/dist/daemon/routes/setup.d.ts +3 -0
  449. package/dist/daemon/routes/setup.js +50 -0
  450. package/dist/daemon/routes/setup.js.map +1 -0
  451. package/dist/daemon/routes/shift.d.ts +4 -0
  452. package/dist/daemon/routes/shift.js +30 -0
  453. package/dist/daemon/routes/shift.js.map +1 -0
  454. package/dist/daemon/routes/specs.d.ts +4 -0
  455. package/dist/daemon/routes/specs.js +57 -0
  456. package/dist/daemon/routes/specs.js.map +1 -0
  457. package/dist/daemon/routes/task-delivery.d.ts +4 -0
  458. package/dist/daemon/routes/task-delivery.js +38 -0
  459. package/dist/daemon/routes/task-delivery.js.map +1 -0
  460. package/dist/daemon/routes/team.d.ts +4 -0
  461. package/dist/daemon/routes/team.js +193 -0
  462. package/dist/daemon/routes/team.js.map +1 -0
  463. package/dist/daemon/routes/terminals.d.ts +4 -0
  464. package/dist/daemon/routes/terminals.js +87 -0
  465. package/dist/daemon/routes/terminals.js.map +1 -0
  466. package/dist/daemon/routes/tools.d.ts +4 -0
  467. package/dist/daemon/routes/tools.js +180 -0
  468. package/dist/daemon/routes/tools.js.map +1 -0
  469. package/dist/daemon/routes/updates.d.ts +4 -0
  470. package/dist/daemon/routes/updates.js +89 -0
  471. package/dist/daemon/routes/updates.js.map +1 -0
  472. package/dist/daemon/routes/voice.d.ts +4 -0
  473. package/dist/daemon/routes/voice.js +53 -0
  474. package/dist/daemon/routes/voice.js.map +1 -0
  475. package/dist/daemon/runner.d.ts +186 -0
  476. package/dist/daemon/runner.js +612 -0
  477. package/dist/daemon/runner.js.map +1 -0
  478. package/dist/daemon/runtime/accounting.d.ts +130 -0
  479. package/dist/daemon/runtime/accounting.js +303 -0
  480. package/dist/daemon/runtime/accounting.js.map +1 -0
  481. package/dist/daemon/runtime/agents.d.ts +16 -0
  482. package/dist/daemon/runtime/agents.js +71 -0
  483. package/dist/daemon/runtime/agents.js.map +1 -0
  484. package/dist/daemon/runtime/briefings.d.ts +134 -0
  485. package/dist/daemon/runtime/briefings.js +329 -0
  486. package/dist/daemon/runtime/briefings.js.map +1 -0
  487. package/dist/daemon/runtime/native-usage.d.ts +21 -0
  488. package/dist/daemon/runtime/native-usage.js +71 -0
  489. package/dist/daemon/runtime/native-usage.js.map +1 -0
  490. package/dist/daemon/runtime/queue.d.ts +94 -0
  491. package/dist/daemon/runtime/queue.js +222 -0
  492. package/dist/daemon/runtime/queue.js.map +1 -0
  493. package/dist/daemon/runtime/relay.d.ts +93 -0
  494. package/dist/daemon/runtime/relay.js +240 -0
  495. package/dist/daemon/runtime/relay.js.map +1 -0
  496. package/dist/daemon/runtime/turns.d.ts +202 -0
  497. package/dist/daemon/runtime/turns.js +663 -0
  498. package/dist/daemon/runtime/turns.js.map +1 -0
  499. package/dist/daemon/runtime-support.d.ts +76 -0
  500. package/dist/daemon/runtime-support.js +134 -0
  501. package/dist/daemon/runtime-support.js.map +1 -0
  502. package/dist/daemon/runtime.d.ts +739 -70
  503. package/dist/daemon/runtime.js +2751 -470
  504. package/dist/daemon/runtime.js.map +1 -1
  505. package/dist/daemon/server.d.ts +82 -55
  506. package/dist/daemon/server.js +674 -1435
  507. package/dist/daemon/server.js.map +1 -1
  508. package/dist/daemon/shift.d.ts +70 -0
  509. package/dist/daemon/shift.js +170 -0
  510. package/dist/daemon/shift.js.map +1 -0
  511. package/dist/daemon/specs.d.ts +92 -0
  512. package/dist/daemon/specs.js +285 -0
  513. package/dist/daemon/specs.js.map +1 -0
  514. package/dist/daemon/system.d.ts +208 -0
  515. package/dist/daemon/system.js +557 -0
  516. package/dist/daemon/system.js.map +1 -0
  517. package/dist/daemon/tasks.js +1 -1
  518. package/dist/daemon/team-brain.d.ts +136 -0
  519. package/dist/daemon/team-brain.js +659 -0
  520. package/dist/daemon/team-brain.js.map +1 -0
  521. package/dist/daemon/team-coordinator.d.ts +78 -0
  522. package/dist/daemon/team-coordinator.js +408 -0
  523. package/dist/daemon/team-coordinator.js.map +1 -0
  524. package/dist/daemon/team.d.ts +339 -0
  525. package/dist/daemon/team.js +1433 -0
  526. package/dist/daemon/team.js.map +1 -0
  527. package/dist/daemon/terminals.d.ts +22 -3
  528. package/dist/daemon/terminals.js +236 -16
  529. package/dist/daemon/terminals.js.map +1 -1
  530. package/dist/hub/client.d.ts +120 -0
  531. package/dist/hub/client.js +228 -0
  532. package/dist/hub/client.js.map +1 -0
  533. package/dist/hub/server.d.ts +32 -0
  534. package/dist/hub/server.js +180 -0
  535. package/dist/hub/server.js.map +1 -0
  536. package/dist/hub/supabase-client.d.ts +220 -0
  537. package/dist/hub/supabase-client.js +843 -0
  538. package/dist/hub/supabase-client.js.map +1 -0
  539. package/dist/observability/ask.d.ts +91 -0
  540. package/dist/observability/ask.js +179 -0
  541. package/dist/observability/ask.js.map +1 -0
  542. package/dist/observability/clickhouse.d.ts +33 -0
  543. package/dist/observability/clickhouse.js +48 -0
  544. package/dist/observability/clickhouse.js.map +1 -0
  545. package/dist/observability/decisions.d.ts +176 -0
  546. package/dist/observability/decisions.js +377 -0
  547. package/dist/observability/decisions.js.map +1 -0
  548. package/dist/observability/index.d.ts +89 -0
  549. package/dist/observability/index.js +348 -0
  550. package/dist/observability/index.js.map +1 -0
  551. package/dist/observability/insights.d.ts +151 -0
  552. package/dist/observability/insights.js +319 -0
  553. package/dist/observability/insights.js.map +1 -0
  554. package/dist/observability/logs-query.d.ts +82 -0
  555. package/dist/observability/logs-query.js +102 -0
  556. package/dist/observability/logs-query.js.map +1 -0
  557. package/dist/observability/logs.d.ts +72 -0
  558. package/dist/observability/logs.js +295 -0
  559. package/dist/observability/logs.js.map +1 -0
  560. package/dist/observability/metrics.d.ts +86 -0
  561. package/dist/observability/metrics.js +303 -0
  562. package/dist/observability/metrics.js.map +1 -0
  563. package/dist/observability/otlp.d.ts +127 -0
  564. package/dist/observability/otlp.js +242 -0
  565. package/dist/observability/otlp.js.map +1 -0
  566. package/dist/observability/snapshots.d.ts +43 -0
  567. package/dist/observability/snapshots.js +129 -0
  568. package/dist/observability/snapshots.js.map +1 -0
  569. package/dist/observability/triage.d.ts +49 -0
  570. package/dist/observability/triage.js +284 -0
  571. package/dist/observability/triage.js.map +1 -0
  572. package/dist/providers/adapter.d.ts +50 -0
  573. package/dist/providers/adapter.js +38 -0
  574. package/dist/providers/adapter.js.map +1 -0
  575. package/dist/providers/agent.d.ts +110 -0
  576. package/dist/providers/agent.js +487 -0
  577. package/dist/providers/agent.js.map +1 -0
  578. package/dist/providers/approvals.d.ts +24 -0
  579. package/dist/providers/approvals.js +78 -0
  580. package/dist/providers/approvals.js.map +1 -0
  581. package/dist/providers/attachments.d.ts +20 -0
  582. package/dist/providers/attachments.js +51 -0
  583. package/dist/providers/attachments.js.map +1 -0
  584. package/dist/providers/claude/adapter.d.ts +99 -0
  585. package/dist/providers/claude/adapter.js +790 -0
  586. package/dist/providers/claude/adapter.js.map +1 -0
  587. package/dist/providers/codex/adapter.d.ts +113 -0
  588. package/dist/providers/codex/adapter.js +881 -0
  589. package/dist/providers/codex/adapter.js.map +1 -0
  590. package/dist/providers/codex/instructions.d.ts +11 -0
  591. package/dist/providers/codex/instructions.js +154 -0
  592. package/dist/providers/codex/instructions.js.map +1 -0
  593. package/dist/providers/codex/rpc.d.ts +36 -0
  594. package/dist/providers/codex/rpc.js +104 -0
  595. package/dist/providers/codex/rpc.js.map +1 -0
  596. package/dist/providers/contracts.d.ts +339 -0
  597. package/dist/providers/contracts.js +19 -0
  598. package/dist/providers/contracts.js.map +1 -0
  599. package/dist/providers/directory.d.ts +70 -0
  600. package/dist/providers/directory.js +95 -0
  601. package/dist/providers/directory.js.map +1 -0
  602. package/dist/providers/errors.d.ts +47 -0
  603. package/dist/providers/errors.js +24 -0
  604. package/dist/providers/errors.js.map +1 -0
  605. package/dist/providers/index.d.ts +18 -0
  606. package/dist/providers/index.js +19 -0
  607. package/dist/providers/index.js.map +1 -0
  608. package/dist/providers/ingestion.d.ts +80 -0
  609. package/dist/providers/ingestion.js +330 -0
  610. package/dist/providers/ingestion.js.map +1 -0
  611. package/dist/providers/live.d.ts +22 -0
  612. package/dist/providers/live.js +56 -0
  613. package/dist/providers/live.js.map +1 -0
  614. package/dist/providers/process.d.ts +29 -0
  615. package/dist/providers/process.js +71 -0
  616. package/dist/providers/process.js.map +1 -0
  617. package/dist/providers/reaper.d.ts +33 -0
  618. package/dist/providers/reaper.js +65 -0
  619. package/dist/providers/reaper.js.map +1 -0
  620. package/dist/providers/service.d.ts +87 -0
  621. package/dist/providers/service.js +256 -0
  622. package/dist/providers/service.js.map +1 -0
  623. package/dist/sdk.d.ts +1 -1
  624. package/dist/sdk.js +1 -1
  625. package/dist/sdk.js.map +1 -1
  626. package/dist/types.d.ts +385 -6
  627. package/dist/types.js +1 -0
  628. package/dist/types.js.map +1 -1
  629. package/dist/version.d.ts +7 -0
  630. package/dist/version.js +16 -0
  631. package/dist/version.js.map +1 -0
  632. package/dist/web/app.css +4646 -0
  633. package/dist/web/app.js +22640 -0
  634. package/dist/web/app.js.map +7 -0
  635. package/dist/web/shell.html +39 -0
  636. package/docs/README.md +21 -0
  637. package/docs/SETUP.md +10 -0
  638. package/docs/adapters.md +21 -8
  639. package/docs/brain-continuity.md +186 -0
  640. package/docs/cloud.md +108 -0
  641. package/docs/crews.md +62 -0
  642. package/docs/design-system.md +31 -2
  643. package/docs/integration-notes.md +128 -20
  644. package/docs/loompad.md +105 -0
  645. package/docs/observability.md +220 -0
  646. package/docs/play-store.md +123 -0
  647. package/docs/proposals/agent-teams.md +249 -0
  648. package/docs/proposals/brain-continuity-implementation.md +468 -0
  649. package/docs/proposals/brain-session-continuity.md +623 -0
  650. package/docs/proposals/t3code-port.md +81 -0
  651. package/docs/proposals/t3code-reference.md +95 -0
  652. package/docs/refactoring/AGENT-TEAMS-PROGRESS.md +88 -0
  653. package/docs/refactoring/BOUNDARIES.md +120 -0
  654. package/docs/refactoring/BRAIN-AUDIT.md +176 -0
  655. package/docs/refactoring/BRAIN-NOTES.md +390 -0
  656. package/docs/refactoring/BRAIN-TODO.md +214 -0
  657. package/docs/refactoring/NOTES.md +129 -0
  658. package/docs/refactoring/T3-PORT-NOTES.md +165 -0
  659. package/docs/refactoring/T3-PORT-TODO.md +123 -0
  660. package/docs/refactoring/TODO.md +46 -0
  661. package/docs/refactoring/brain-benchmark-2026-09-28.json +48 -0
  662. package/docs/refactoring/brain-benchmark-audit-2026-09-28.json +48 -0
  663. package/docs/release-notes/v0.2.0.md +35 -0
  664. package/docs/release-notes/v0.2.1.md +59 -0
  665. package/docs/release-notes/v0.2.3.md +77 -0
  666. package/docs/release-notes/v0.2.4.md +128 -0
  667. package/docs/release-notes/v0.2.5.md +153 -0
  668. package/docs/release-notes/v0.2.6.md +62 -0
  669. package/docs/release-notes/v1.0.0.md +120 -0
  670. package/docs/release-notes/v1.0.1.md +77 -0
  671. package/docs/release-notes/v1.1.0.md +71 -0
  672. package/docs/release-notes/v1.1.1.md +38 -0
  673. package/docs/release-notes/v1.1.2.md +21 -0
  674. package/docs/teams-architecture.md +697 -0
  675. package/docs/teams.md +171 -0
  676. package/docs/windows.md +85 -0
  677. package/package.json +22 -9
  678. package/dist/adapters/claude-code.d.ts +0 -26
  679. package/dist/adapters/claude-code.js +0 -209
  680. package/dist/adapters/claude-code.js.map +0 -1
  681. package/dist/adapters/codex.d.ts +0 -51
  682. package/dist/adapters/codex.js +0 -291
  683. package/dist/adapters/codex.js.map +0 -1
  684. package/docs/img/board-linear.png +0 -0
  685. package/docs/img/board-projects.png +0 -0
  686. package/docs/img/brain.png +0 -0
  687. package/docs/img/settings.png +0 -0
  688. package/docs/img/workspace.png +0 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Deploys and release notes (Loom Teams, Phase 5; D72) — read-only.
3
+ *
4
+ * GitHub Environments stay the deploy gate; Loom never deploys. It watches a
5
+ * shared repo's deployments and posts their outcome to the team feed, alerts a
6
+ * member whose merged goal is in a deploy that failed, and writes release notes
7
+ * from the goals merged since a tag.
8
+ */
9
+ import type { FeedIn } from "../core/team-hub.js";
10
+ import type { Exec } from "./landing.js";
11
+ import type { ProjectRuntime } from "./runtime.js";
12
+ export interface Deployment {
13
+ id: number;
14
+ environment: string;
15
+ sha: string;
16
+ ref: string;
17
+ creator: string | null;
18
+ state: string;
19
+ url: string | null;
20
+ at: number;
21
+ }
22
+ /** The feed event a deployment's latest status is, if any (D72). */
23
+ export declare function deployEvent(d: Deployment): FeedIn["type"] | null;
24
+ export interface ReleaseEntry {
25
+ pr: number;
26
+ title: string;
27
+ author: string;
28
+ url: string;
29
+ mergedAt: string | null;
30
+ /** The goal's summary (the first paragraph of a Loom goal PR's body). */
31
+ summary?: string;
32
+ loom: boolean;
33
+ }
34
+ /** Release notes, grouped by member, Loom goals marked (D72). */
35
+ export declare function renderReleaseNotes(since: string, until: string, entries: ReleaseEntry[]): string;
36
+ /** PR numbers from first-parent commit subjects: merge commits and squash "(#123)" suffixes. */
37
+ export declare function prNumbersFromLog(log: string): number[];
38
+ export interface DeployDeps {
39
+ share(rt: ProjectRuntime): Promise<{
40
+ teamId: string;
41
+ repo: string;
42
+ } | null>;
43
+ post(rt: ProjectRuntime, e: FeedIn): Promise<void>;
44
+ exec?: Exec;
45
+ }
46
+ export declare const DEPLOY_POLL_MS: number;
47
+ export declare class Deploys {
48
+ private rt;
49
+ private deps;
50
+ private alerted;
51
+ constructor(rt: ProjectRuntime, deps: DeployDeps);
52
+ private exec;
53
+ private ghJson;
54
+ /** The repo's recent deployments with their latest status. */
55
+ list(): Promise<Deployment[]>;
56
+ /** Post each deployment's latest status to the feed (idempotent), and alert on failed deploys of our goals. */
57
+ poll(): Promise<number>;
58
+ /** D25/D72: a failed deploy that contains one of our merged goals buzzes our phone. */
59
+ private alertIfOurs;
60
+ /** Release notes from the PRs merged into the default branch since `since` (a tag or commit). */
61
+ releaseNotes(since: string): Promise<string>;
62
+ }
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Deploys and release notes (Loom Teams, Phase 5; D72) — read-only.
3
+ *
4
+ * GitHub Environments stay the deploy gate; Loom never deploys. It watches a
5
+ * shared repo's deployments and posts their outcome to the team feed, alerts a
6
+ * member whose merged goal is in a deploy that failed, and writes release notes
7
+ * from the goals merged since a tag.
8
+ */
9
+ import { execFile } from "../core/process.js";
10
+ import { logbook } from "../core/logbook.js";
11
+ import { notify } from "../core/notify.js";
12
+ import { deployEventType, ghKey } from "../core/github-events.js";
13
+ /** The feed event a deployment's latest status is, if any (D72). */
14
+ export function deployEvent(d) {
15
+ return deployEventType(d.state);
16
+ }
17
+ /** Release notes, grouped by member, Loom goals marked (D72). */
18
+ export function renderReleaseNotes(since, until, entries) {
19
+ if (!entries.length)
20
+ return `## Changes since ${since}\n\nNothing merged since ${since}.\n`;
21
+ const byAuthor = new Map();
22
+ for (const e of entries)
23
+ byAuthor.set(e.author, [...(byAuthor.get(e.author) ?? []), e]);
24
+ const lines = [`## Changes since ${since}`, "", `${entries.length} pull request${entries.length === 1 ? "" : "s"} merged into ${until}.`];
25
+ for (const [author, es] of [...byAuthor.entries()].sort((a, b) => b[1].length - a[1].length || a[0].localeCompare(b[0]))) {
26
+ lines.push("", `### @${author}`);
27
+ for (const e of es) {
28
+ lines.push(`- ${e.title} ([#${e.pr}](${e.url}))${e.loom ? " · _Loom goal_" : ""}`);
29
+ if (e.summary)
30
+ lines.push(` ${e.summary.replace(/\s+/g, " ").slice(0, 300)}`);
31
+ }
32
+ }
33
+ return lines.join("\n") + "\n";
34
+ }
35
+ /** PR numbers from first-parent commit subjects: merge commits and squash "(#123)" suffixes. */
36
+ export function prNumbersFromLog(log) {
37
+ const out = [];
38
+ for (const line of log.split("\n")) {
39
+ const m = /Merge pull request #(\d+)/.exec(line) ?? /\(#(\d+)\)\s*$/.exec(line);
40
+ if (m)
41
+ out.push(Number(m[1]));
42
+ }
43
+ return [...new Set(out)];
44
+ }
45
+ const realExec = (cmd, args, cwd, opts = {}) => new Promise((resolve) => {
46
+ execFile(cmd, args, { cwd, timeout: opts.timeoutMs ?? 60_000, maxBuffer: 16 * 1024 * 1024 }, (err, out, errOut) => resolve({ code: err ? 1 : 0, out: String(out), err: String(errOut) }));
47
+ });
48
+ export const DEPLOY_POLL_MS = 2 * 60_000;
49
+ export class Deploys {
50
+ rt;
51
+ deps;
52
+ alerted = new Set();
53
+ constructor(rt, deps) {
54
+ this.rt = rt;
55
+ this.deps = deps;
56
+ }
57
+ exec(cmd, args) {
58
+ return (this.deps.exec ?? realExec)(cmd, args, this.rt.info.dir);
59
+ }
60
+ async ghJson(args) {
61
+ const r = await this.exec("gh", args);
62
+ if (r.code !== 0)
63
+ return null;
64
+ try {
65
+ return JSON.parse(r.out);
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /** The repo's recent deployments with their latest status. */
72
+ async list() {
73
+ const share = await this.deps.share(this.rt);
74
+ if (!share)
75
+ return [];
76
+ const deps = (await this.ghJson(["api", `repos/${share.repo}/deployments?per_page=20`])) ?? [];
77
+ const out = [];
78
+ for (const d of deps) {
79
+ const id = Number(d.id);
80
+ const statuses = (await this.ghJson(["api", `repos/${share.repo}/deployments/${id}/statuses?per_page=1`])) ?? [];
81
+ const st = statuses[0];
82
+ out.push({
83
+ id,
84
+ environment: String(d.environment ?? ""),
85
+ sha: String(d.sha ?? ""),
86
+ ref: String(d.ref ?? ""),
87
+ creator: (d.creator?.login ?? null),
88
+ state: String(st?.state ?? "pending"),
89
+ url: st?.log_url || st?.environment_url || null,
90
+ at: Date.parse(String(st?.created_at ?? d.created_at ?? "")) || Date.now(),
91
+ });
92
+ }
93
+ return out;
94
+ }
95
+ /** Post each deployment's latest status to the feed (idempotent), and alert on failed deploys of our goals. */
96
+ async poll() {
97
+ let posted = 0;
98
+ const share = await this.deps.share(this.rt);
99
+ if (!share)
100
+ return 0;
101
+ for (const d of await this.list()) {
102
+ const type = deployEvent(d);
103
+ if (!type)
104
+ continue;
105
+ await this.deps.post(this.rt, {
106
+ repo: share.repo,
107
+ type,
108
+ meta: { id: d.id, environment: d.environment, sha: d.sha, ref: d.ref, state: d.state, url: d.url, creator: d.creator },
109
+ // the same key a deployment_status webhook produces (D84)
110
+ dedupeKey: ghKey.deploy(share.repo, d.id, type),
111
+ });
112
+ posted++;
113
+ if (type === "deploy_failed")
114
+ await this.alertIfOurs(d).catch(() => { });
115
+ }
116
+ return posted;
117
+ }
118
+ /** D25/D72: a failed deploy that contains one of our merged goals buzzes our phone. */
119
+ async alertIfOurs(d) {
120
+ const key = `${d.id}`;
121
+ if (this.alerted.has(key))
122
+ return;
123
+ await this.exec("git", ["fetch", "-q", "origin", d.sha]).catch(() => { });
124
+ for (const run of this.rt.orchestra.list()) {
125
+ const sha = run.landing?.mergeSha;
126
+ if (run.landing?.state !== "merged" || !sha)
127
+ continue;
128
+ const inIt = await this.exec("git", ["merge-base", "--is-ancestor", sha, d.sha]);
129
+ if (inIt.code !== 0)
130
+ continue;
131
+ this.alerted.add(key);
132
+ const text = `Deploy to ${d.environment} failed, and it includes your goal "${run.goal.split("\n")[0].slice(0, 80)}" (PR #${run.landing.pr})`;
133
+ this.rt.log.append({ kind: "orchestra", chat: run.chat, payload: { phase: "alert", runId: run.id, text } });
134
+ notify({ title: `Loom · ${this.rt.info.name}`, body: text });
135
+ return;
136
+ }
137
+ }
138
+ /** Release notes from the PRs merged into the default branch since `since` (a tag or commit). */
139
+ async releaseNotes(since) {
140
+ const head = (await this.exec("git", ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"])).out.trim() || "origin/main";
141
+ await this.exec("git", ["fetch", "-q", "--tags", "origin"]);
142
+ const log = await this.exec("git", ["log", "--first-parent", "--format=%s", `${since}..${head}`]);
143
+ if (log.code !== 0)
144
+ throw new Error(`can't read history since ${since}: ${log.err.trim().slice(0, 200)}`);
145
+ const entries = [];
146
+ for (const n of prNumbersFromLog(log.out)) {
147
+ const pr = await this.ghJson(["pr", "view", String(n), "--json", "title,author,url,mergedAt,body,headRefName"]);
148
+ if (!pr) {
149
+ logbook.warn("team", `release notes: couldn't read PR #${n}`);
150
+ continue;
151
+ }
152
+ const loom = pr.headRefName.startsWith("loom/orchestra/");
153
+ const summary = loom ? pr.body.split(/\n\s*\n/)[0]?.trim() : undefined;
154
+ entries.push({ pr: n, title: pr.title, author: pr.author.login, url: pr.url, mergedAt: pr.mergedAt, loom, ...(summary ? { summary } : {}) });
155
+ }
156
+ return renderReleaseNotes(since, head.replace(/^origin\//, ""), entries);
157
+ }
158
+ }
159
+ //# sourceMappingURL=deploys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploys.js","sourceRoot":"","sources":["../../src/daemon/deploys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Landing — one project's goal PRs on their way to main (Loom Teams, Phase 4,
3
+ * "land safely"; docs/teams-architecture.md D52–D64).
4
+ *
5
+ * The owner's daemon watches its own goal PRs (D52) and, per PR:
6
+ * - reruns a failing required check once; a pass on rerun is a flake (D53)
7
+ * - hands a real failure's log tail to the goal's orchestrator, which reopens
8
+ * the goal and routes a fix; at most `autoFixAttempts` (D54, D55)
9
+ * - runs a cross-vendor review on open and after each fix, at most 3 times,
10
+ * posting a COMMENT review and the `loom/review` status (D60, D61)
11
+ * - when the owner clicks Land: fresh main in, fast tests, push, auto-merge
12
+ * (D56–D58); stacks land bottom-up (D59)
13
+ * - says when a goal needs someone, adopts a teammate's goal on request, and
14
+ * hands it back when green (D63)
15
+ * - Phase 6, on a repo with no merge queue: the landing train (D20, D79–D82).
16
+ * Land queues the goal in its lanes (path scopes from `landing.lanes`); the
17
+ * slot is a hub lease on `.loom/landing/<lane>`, a hard zone, so one goal per
18
+ * lane holds it. The holder brings fresh base in, runs the fast tests,
19
+ * pushes, waits for green on that head, and merges; a red check gives the
20
+ * slot back and the goal requeues itself once it's green again.
21
+ * - Phase 6: a feed event about one of its PRs (a webhook's check result, a
22
+ * merge) polls that goal now, not at the next 30s tick (D84)
23
+ *
24
+ * Everything outside git and the hub goes through `gh`, injectable for tests.
25
+ */
26
+ import { type LandingState, type OrchestraRun } from "../core/orchestra.js";
27
+ import { type TeamKey } from "../core/team-crypto.js";
28
+ import type { FeedEvent, HubClient, Presence } from "../core/team-hub.js";
29
+ import { type DoctorFinding } from "../core/team-landing.js";
30
+ import type { TeamPolicy } from "../core/team-policy.js";
31
+ import type { ProjectRuntime } from "./runtime.js";
32
+ export interface Exec {
33
+ (cmd: string, args: string[], cwd: string, opts?: {
34
+ timeoutMs?: number;
35
+ input?: string;
36
+ }): Promise<{
37
+ code: number;
38
+ out: string;
39
+ err: string;
40
+ }>;
41
+ }
42
+ export interface LandingDeps {
43
+ hub(): HubClient | null;
44
+ deviceId(): string | null;
45
+ github(): string | null;
46
+ share(rt: ProjectRuntime): Promise<{
47
+ teamId: string;
48
+ repo: string;
49
+ } | null>;
50
+ keys(teamId: string): TeamKey[];
51
+ feed(teamId: string): FeedEvent[];
52
+ presence(teamId: string): Presence[];
53
+ policy(): Promise<TeamPolicy | null>;
54
+ exec?: Exec;
55
+ /** Tests shorten the rerun settle window. */
56
+ rerunSettleMs?: number;
57
+ /** How long a freshly pushed turn with no checks reported yet waits before "no CI" (tests: 0). */
58
+ trainSettleMs?: number;
59
+ }
60
+ export declare const POLL_MS = 30000;
61
+ /** D63: a teammate offline this long with a goal that needs someone can be adopted. */
62
+ export declare const ADOPT_AFTER_MS: number;
63
+ /** How long after asking for a rerun a still-failing check is taken as the old result. */
64
+ export declare const RERUN_SETTLE_MS = 90000;
65
+ /** A turn's fresh push with no checks reported after this long has no CI to wait for. */
66
+ export declare const TRAIN_SETTLE_MS: number;
67
+ /** How long a repo's branch rules (merge queue or not) are trusted (D80). */
68
+ export declare const RULES_TTL_MS: number;
69
+ export declare const defaultExec: Exec;
70
+ export declare class Landing {
71
+ private rt;
72
+ private deps;
73
+ private busy;
74
+ private timer;
75
+ private alerted;
76
+ private rerunAt;
77
+ private rules;
78
+ private inflight;
79
+ constructor(rt: ProjectRuntime, deps: LandingDeps);
80
+ start(): void;
81
+ stop(): void;
82
+ private exec;
83
+ private gh;
84
+ private git;
85
+ /** Goals with a PR this daemon is responsible for right now. */
86
+ goals(): OrchestraRun[];
87
+ private set;
88
+ tick(): Promise<void>;
89
+ /**
90
+ * Poll one goal now, at most one poll per goal at a time: a poll asked for
91
+ * while one runs makes that one go round again (a webhook's check result
92
+ * mid-poll isn't lost), and both callers get its answer.
93
+ */
94
+ pollNow(run: OrchestraRun, policy?: TeamPolicy | null): Promise<LandingState>;
95
+ /** One look at one goal PR, and whatever it calls for. */
96
+ poll(run: OrchestraRun, policy?: TeamPolicy | null): Promise<LandingState>;
97
+ /** Required checks (D54), or every check when the repo requires none. */
98
+ private checks;
99
+ private fix;
100
+ private flaky;
101
+ private needsHuman;
102
+ /** D25: the owner's phone (and desktop) hears about what needs them. */
103
+ private alert;
104
+ private merged;
105
+ /** Actions minutes the goal's branch used (§10: CI cost per goal, no App needed). */
106
+ ciMinutes(run: OrchestraRun): Promise<number | null>;
107
+ review(run: OrchestraRun, sha: string, maxFix?: number): Promise<void>;
108
+ /** The owner overrides a blocking review, with a reason on record (D61). */
109
+ overrideReview(runId: string, reason: string): Promise<LandingState>;
110
+ private postStatus;
111
+ /**
112
+ * The owner clicked Land. Bring fresh main in (one agent attempt at a
113
+ * conflict), run the fast tests, push, and ask GitHub to merge when the
114
+ * rules pass. It keeps going on later polls until the PR merges.
115
+ */
116
+ land(runId: string): Promise<LandingState>;
117
+ /**
118
+ * Pushrebase-lite (D56–D58): fresh base merged into the goal (one agent
119
+ * attempt at a conflict), the fast tests, push. False when it went to a fix
120
+ * or a human instead of pushing.
121
+ */
122
+ private pushrebase;
123
+ /** Merge queue, train or auto-merge, for this goal (D80). Branch rules are cached per repo for 10 minutes. */
124
+ route(run: OrchestraRun): Promise<"queue" | "train" | "auto">;
125
+ /** The lanes this goal's PR needs: path scopes matched against its diff (D81). */
126
+ private lanesOf;
127
+ /**
128
+ * One step of a goal in the train: claim its lanes (or queue behind their
129
+ * holder), bring fresh base in and push on a new turn, wait for green on
130
+ * that head, merge.
131
+ */
132
+ private trainTurn;
133
+ /**
134
+ * Take every lane the goal needs, in order, or none: a lane held by someone
135
+ * else queues the goal behind them. The hub decides atomically — a lane's
136
+ * slot is a hard zone (D31), so a second claimer is refused.
137
+ */
138
+ private claimSlot;
139
+ /** Give the goal's lanes back (and only them: its task leases stay until it lands, D36). */
140
+ private releaseSlot;
141
+ /** Still the holder of every lane? A slot that went stale (a long sleep) may be someone else's now. */
142
+ private stillHolding;
143
+ /** Its turn, green: merge now (not --auto — the train is the queue), then hand the lanes on. */
144
+ private mergeNow;
145
+ private autoMerge;
146
+ private conflict;
147
+ private pollStack;
148
+ /**
149
+ * Close the stack's unmerged lower PRs and point the top one at the base
150
+ * branch: one PR again, carrying everything, that the fix loop can fix.
151
+ */
152
+ collapseStack(run: OrchestraRun, stack: NonNullable<LandingState["stack"]>, why: string): Promise<LandingState>;
153
+ private landStack;
154
+ /**
155
+ * Teammates' goal PRs that need someone: the owner said so (out of fix
156
+ * attempts), or its checks fail and the owner has been offline 15+ minutes.
157
+ */
158
+ adoptable(): Promise<Array<{
159
+ pr: number;
160
+ url: string;
161
+ branch: string;
162
+ owner: string;
163
+ ownerRunId?: string;
164
+ reason: string;
165
+ }>>;
166
+ /** Take a teammate's goal: a small run on this machine that makes its PR green. */
167
+ adopt(pr: number, opts?: {
168
+ orchestrator?: string;
169
+ workers?: string[];
170
+ }): Promise<OrchestraRun>;
171
+ /** The adopted PR is green (or merged): give the goal back (D63). */
172
+ private handBack;
173
+ /** The owner's side: a teammate took (or returned) one of our goals. */
174
+ onTeamEvent(e: FeedEvent): void;
175
+ private wakePr;
176
+ doctor(): Promise<{
177
+ repo: string | null;
178
+ branch: string;
179
+ findings: DoctorFinding[];
180
+ fixable: string[];
181
+ }>;
182
+ private workflows;
183
+ /** Open the PR adding `merge_group:` to every pull-request workflow missing it. Never touches settings. */
184
+ doctorFix(): Promise<{
185
+ prUrl: string | null;
186
+ files: string[];
187
+ }>;
188
+ private mustGoal;
189
+ private repo;
190
+ private post;
191
+ status(): Array<Record<string, unknown>>;
192
+ }