@loompad/cli 0.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/ARCHITECTURE.md +96 -11
  2. package/CHANGELOG.md +1042 -0
  3. package/README.md +1473 -44
  4. package/THIRD_PARTY_NOTICES.md +275 -0
  5. package/dist/adapters/antigravity-cli.d.ts +62 -0
  6. package/dist/adapters/antigravity-cli.js +258 -0
  7. package/dist/adapters/antigravity-cli.js.map +1 -0
  8. package/dist/adapters/base.d.ts +61 -9
  9. package/dist/adapters/base.js +266 -15
  10. package/dist/adapters/base.js.map +1 -1
  11. package/dist/adapters/bridges/antigravity.d.ts +9 -12
  12. package/dist/adapters/bridges/antigravity.js +9 -12
  13. package/dist/adapters/bridges/antigravity.js.map +1 -1
  14. package/dist/adapters/echo.d.ts +1 -0
  15. package/dist/adapters/echo.js +59 -3
  16. package/dist/adapters/echo.js.map +1 -1
  17. package/dist/adapters/grok.d.ts +7 -0
  18. package/dist/adapters/grok.js +20 -10
  19. package/dist/adapters/grok.js.map +1 -1
  20. package/dist/adapters/index.d.ts +5 -1
  21. package/dist/adapters/index.js +53 -7
  22. package/dist/adapters/index.js.map +1 -1
  23. package/dist/adapters/model.d.ts +137 -0
  24. package/dist/adapters/model.js +527 -0
  25. package/dist/adapters/model.js.map +1 -0
  26. package/dist/adapters/opencode.d.ts +101 -1
  27. package/dist/adapters/opencode.js +874 -98
  28. package/dist/adapters/opencode.js.map +1 -1
  29. package/dist/cli/doctor.d.ts +32 -0
  30. package/dist/cli/doctor.js +89 -4
  31. package/dist/cli/doctor.js.map +1 -1
  32. package/dist/cli/index.js +2651 -87
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/tui-model.js +3 -1
  35. package/dist/cli/tui-model.js.map +1 -1
  36. package/dist/cli/tui.js +44 -1
  37. package/dist/cli/tui.js.map +1 -1
  38. package/dist/cli/ui.d.ts +2 -0
  39. package/dist/cli/ui.js +13 -0
  40. package/dist/cli/ui.js.map +1 -1
  41. package/dist/core/ades.d.ts +32 -16
  42. package/dist/core/ades.js +57 -20
  43. package/dist/core/ades.js.map +1 -1
  44. package/dist/core/agent-state.d.ts +14 -0
  45. package/dist/core/agent-state.js +32 -0
  46. package/dist/core/agent-state.js.map +1 -0
  47. package/dist/core/approvals.d.ts +33 -0
  48. package/dist/core/approvals.js +29 -0
  49. package/dist/core/approvals.js.map +1 -0
  50. package/dist/core/backup.d.ts +19 -0
  51. package/dist/core/backup.js +86 -0
  52. package/dist/core/backup.js.map +1 -0
  53. package/dist/core/baton.d.ts +2 -2
  54. package/dist/core/baton.js.map +1 -1
  55. package/dist/core/brain-extract.d.ts +17 -0
  56. package/dist/core/brain-extract.js +28 -2
  57. package/dist/core/brain-extract.js.map +1 -1
  58. package/dist/core/brain-index.d.ts +71 -0
  59. package/dist/core/brain-index.js +204 -5
  60. package/dist/core/brain-index.js.map +1 -1
  61. package/dist/core/brain.d.ts +58 -2
  62. package/dist/core/brain.js +79 -1
  63. package/dist/core/brain.js.map +1 -1
  64. package/dist/core/chat-import.d.ts +71 -0
  65. package/dist/core/chat-import.js +419 -0
  66. package/dist/core/chat-import.js.map +1 -0
  67. package/dist/core/checkpoint.d.ts +107 -0
  68. package/dist/core/checkpoint.js +259 -0
  69. package/dist/core/checkpoint.js.map +1 -0
  70. package/dist/core/claude-cli.js +1 -1
  71. package/dist/core/claude-cli.js.map +1 -1
  72. package/dist/core/continuity/artifacts.d.ts +14 -0
  73. package/dist/core/continuity/artifacts.js +118 -0
  74. package/dist/core/continuity/artifacts.js.map +1 -0
  75. package/dist/core/continuity/capabilities.d.ts +65 -0
  76. package/dist/core/continuity/capabilities.js +129 -0
  77. package/dist/core/continuity/capabilities.js.map +1 -0
  78. package/dist/core/continuity/contracts.d.ts +352 -0
  79. package/dist/core/continuity/contracts.js +117 -0
  80. package/dist/core/continuity/contracts.js.map +1 -0
  81. package/dist/core/continuity/engine.d.ts +55 -0
  82. package/dist/core/continuity/engine.js +504 -0
  83. package/dist/core/continuity/engine.js.map +1 -0
  84. package/dist/core/continuity/store.d.ts +73 -0
  85. package/dist/core/continuity/store.js +438 -0
  86. package/dist/core/continuity/store.js.map +1 -0
  87. package/dist/core/conversations.d.ts +19 -0
  88. package/dist/core/conversations.js +87 -0
  89. package/dist/core/conversations.js.map +1 -0
  90. package/dist/core/crew-coordination.d.ts +6 -0
  91. package/dist/core/crew-coordination.js +24 -0
  92. package/dist/core/crew-coordination.js.map +1 -0
  93. package/dist/core/crew-policy.d.ts +18 -0
  94. package/dist/core/crew-policy.js +40 -0
  95. package/dist/core/crew-policy.js.map +1 -0
  96. package/dist/core/crew-protocol.d.ts +64 -0
  97. package/dist/core/crew-protocol.js +146 -0
  98. package/dist/core/crew-protocol.js.map +1 -0
  99. package/dist/core/crew-requests.d.ts +14 -0
  100. package/dist/core/crew-requests.js +22 -0
  101. package/dist/core/crew-requests.js.map +1 -0
  102. package/dist/core/crew.d.ts +395 -0
  103. package/dist/core/crew.js +1857 -0
  104. package/dist/core/crew.js.map +1 -0
  105. package/dist/core/digest.d.ts +40 -0
  106. package/dist/core/digest.js +94 -0
  107. package/dist/core/digest.js.map +1 -0
  108. package/dist/core/distill.js +3 -5
  109. package/dist/core/distill.js.map +1 -1
  110. package/dist/core/eventlog.d.ts +27 -25
  111. package/dist/core/eventlog.js +97 -150
  112. package/dist/core/eventlog.js.map +1 -1
  113. package/dist/core/events/contracts.d.ts +51 -0
  114. package/dist/core/events/contracts.js +2 -0
  115. package/dist/core/events/contracts.js.map +1 -0
  116. package/dist/core/events/jsonl-store.d.ts +23 -0
  117. package/dist/core/events/jsonl-store.js +90 -0
  118. package/dist/core/events/jsonl-store.js.map +1 -0
  119. package/dist/core/events/sqlite-store.d.ts +37 -0
  120. package/dist/core/events/sqlite-store.js +215 -0
  121. package/dist/core/events/sqlite-store.js.map +1 -0
  122. package/dist/core/forecast.d.ts +44 -0
  123. package/dist/core/forecast.js +46 -0
  124. package/dist/core/forecast.js.map +1 -0
  125. package/dist/core/free-pool.d.ts +65 -0
  126. package/dist/core/free-pool.js +171 -0
  127. package/dist/core/free-pool.js.map +1 -0
  128. package/dist/core/git.d.ts +30 -0
  129. package/dist/core/git.js +50 -2
  130. package/dist/core/git.js.map +1 -1
  131. package/dist/core/github-events.d.ts +53 -0
  132. package/dist/core/github-events.js +227 -0
  133. package/dist/core/github-events.js.map +1 -0
  134. package/dist/core/goal-lanes.d.ts +53 -0
  135. package/dist/core/goal-lanes.js +99 -0
  136. package/dist/core/goal-lanes.js.map +1 -0
  137. package/dist/core/hosted.d.ts +27 -0
  138. package/dist/core/hosted.js +50 -0
  139. package/dist/core/hosted.js.map +1 -0
  140. package/dist/core/http-server.d.ts +5 -0
  141. package/dist/core/http-server.js +8 -0
  142. package/dist/core/http-server.js.map +1 -0
  143. package/dist/core/invite-link.d.ts +31 -0
  144. package/dist/core/invite-link.js +45 -0
  145. package/dist/core/invite-link.js.map +1 -0
  146. package/dist/core/loops.d.ts +37 -0
  147. package/dist/core/loops.js +81 -0
  148. package/dist/core/loops.js.map +1 -0
  149. package/dist/core/mcp-catalog.d.ts +182 -0
  150. package/dist/core/mcp-catalog.js +431 -0
  151. package/dist/core/mcp-catalog.js.map +1 -0
  152. package/dist/core/mcp.d.ts +87 -0
  153. package/dist/core/mcp.js +181 -0
  154. package/dist/core/mcp.js.map +1 -0
  155. package/dist/core/memory.d.ts +1 -0
  156. package/dist/core/memory.js +5 -2
  157. package/dist/core/memory.js.map +1 -1
  158. package/dist/core/model-tools.d.ts +97 -0
  159. package/dist/core/model-tools.js +388 -0
  160. package/dist/core/model-tools.js.map +1 -0
  161. package/dist/core/notify.js +19 -1
  162. package/dist/core/notify.js.map +1 -1
  163. package/dist/core/orchestra.d.ts +635 -0
  164. package/dist/core/orchestra.js +2120 -0
  165. package/dist/core/orchestra.js.map +1 -0
  166. package/dist/core/permissions.d.ts +56 -0
  167. package/dist/core/permissions.js +122 -0
  168. package/dist/core/permissions.js.map +1 -0
  169. package/dist/core/preview-proxy.d.ts +70 -0
  170. package/dist/core/preview-proxy.js +563 -0
  171. package/dist/core/preview-proxy.js.map +1 -0
  172. package/dist/core/preview-shot.d.ts +46 -0
  173. package/dist/core/preview-shot.js +109 -0
  174. package/dist/core/preview-shot.js.map +1 -0
  175. package/dist/core/process.d.ts +36 -0
  176. package/dist/core/process.js +168 -0
  177. package/dist/core/process.js.map +1 -0
  178. package/dist/core/prompt-queue.d.ts +136 -0
  179. package/dist/core/prompt-queue.js +269 -0
  180. package/dist/core/prompt-queue.js.map +1 -0
  181. package/dist/core/prompts.d.ts +53 -0
  182. package/dist/core/prompts.js +127 -0
  183. package/dist/core/prompts.js.map +1 -0
  184. package/dist/core/proof.d.ts +82 -0
  185. package/dist/core/proof.js +216 -0
  186. package/dist/core/proof.js.map +1 -0
  187. package/dist/core/provider-text.d.ts +23 -0
  188. package/dist/core/provider-text.js +66 -0
  189. package/dist/core/provider-text.js.map +1 -0
  190. package/dist/core/providers.d.ts +152 -0
  191. package/dist/core/providers.js +343 -0
  192. package/dist/core/providers.js.map +1 -0
  193. package/dist/core/quota.d.ts +33 -0
  194. package/dist/core/quota.js +74 -0
  195. package/dist/core/quota.js.map +1 -0
  196. package/dist/core/recipes.d.ts +50 -0
  197. package/dist/core/recipes.js +99 -0
  198. package/dist/core/recipes.js.map +1 -0
  199. package/dist/core/registry.d.ts +54 -0
  200. package/dist/core/registry.js +62 -5
  201. package/dist/core/registry.js.map +1 -1
  202. package/dist/core/relay-client.d.ts +67 -0
  203. package/dist/core/relay-client.js +184 -0
  204. package/dist/core/relay-client.js.map +1 -0
  205. package/dist/core/relay-protocol.d.ts +140 -0
  206. package/dist/core/relay-protocol.js +189 -0
  207. package/dist/core/relay-protocol.js.map +1 -0
  208. package/dist/core/replay.d.ts +18 -0
  209. package/dist/core/replay.js +191 -0
  210. package/dist/core/replay.js.map +1 -0
  211. package/dist/core/review-triage.d.ts +41 -0
  212. package/dist/core/review-triage.js +124 -0
  213. package/dist/core/review-triage.js.map +1 -0
  214. package/dist/core/router.js +2 -2
  215. package/dist/core/router.js.map +1 -1
  216. package/dist/core/routes.d.ts +39 -3
  217. package/dist/core/routes.js +137 -4
  218. package/dist/core/routes.js.map +1 -1
  219. package/dist/core/run-command.d.ts +14 -0
  220. package/dist/core/run-command.js +45 -0
  221. package/dist/core/run-command.js.map +1 -0
  222. package/dist/core/runner-setup.d.ts +36 -0
  223. package/dist/core/runner-setup.js +114 -0
  224. package/dist/core/runner-setup.js.map +1 -0
  225. package/dist/core/search.js +0 -0
  226. package/dist/core/search.js.map +1 -1
  227. package/dist/core/semantic.d.ts +92 -0
  228. package/dist/core/semantic.js +227 -0
  229. package/dist/core/semantic.js.map +1 -0
  230. package/dist/core/servers.d.ts +115 -0
  231. package/dist/core/servers.js +305 -0
  232. package/dist/core/servers.js.map +1 -0
  233. package/dist/core/setup.js +64 -6
  234. package/dist/core/setup.js.map +1 -1
  235. package/dist/core/shield.d.ts +17 -0
  236. package/dist/core/shield.js +81 -0
  237. package/dist/core/shield.js.map +1 -0
  238. package/dist/core/shift.d.ts +69 -0
  239. package/dist/core/shift.js +120 -0
  240. package/dist/core/shift.js.map +1 -0
  241. package/dist/core/skill-install.d.ts +125 -0
  242. package/dist/core/skill-install.js +328 -0
  243. package/dist/core/skill-install.js.map +1 -0
  244. package/dist/core/skills.d.ts +116 -0
  245. package/dist/core/skills.js +223 -0
  246. package/dist/core/skills.js.map +1 -0
  247. package/dist/core/step-conditions.d.ts +65 -0
  248. package/dist/core/step-conditions.js +102 -0
  249. package/dist/core/step-conditions.js.map +1 -0
  250. package/dist/core/subagents.d.ts +45 -0
  251. package/dist/core/subagents.js +90 -0
  252. package/dist/core/subagents.js.map +1 -0
  253. package/dist/core/team-canon.d.ts +42 -0
  254. package/dist/core/team-canon.js +121 -0
  255. package/dist/core/team-canon.js.map +1 -0
  256. package/dist/core/team-crypto.d.ts +97 -0
  257. package/dist/core/team-crypto.js +175 -0
  258. package/dist/core/team-crypto.js.map +1 -0
  259. package/dist/core/team-hub.d.ts +514 -0
  260. package/dist/core/team-hub.js +964 -0
  261. package/dist/core/team-hub.js.map +1 -0
  262. package/dist/core/team-landing.d.ts +239 -0
  263. package/dist/core/team-landing.js +504 -0
  264. package/dist/core/team-landing.js.map +1 -0
  265. package/dist/core/team-leases.d.ts +44 -0
  266. package/dist/core/team-leases.js +145 -0
  267. package/dist/core/team-leases.js.map +1 -0
  268. package/dist/core/team-memory.d.ts +42 -0
  269. package/dist/core/team-memory.js +84 -0
  270. package/dist/core/team-memory.js.map +1 -0
  271. package/dist/core/team-policy.d.ts +85 -0
  272. package/dist/core/team-policy.js +191 -0
  273. package/dist/core/team-policy.js.map +1 -0
  274. package/dist/core/thread-md.d.ts +6 -0
  275. package/dist/core/thread-md.js +42 -0
  276. package/dist/core/thread-md.js.map +1 -0
  277. package/dist/core/turn-stats.d.ts +61 -0
  278. package/dist/core/turn-stats.js +124 -0
  279. package/dist/core/turn-stats.js.map +1 -0
  280. package/dist/core/updater.d.ts +73 -0
  281. package/dist/core/updater.js +153 -0
  282. package/dist/core/updater.js.map +1 -0
  283. package/dist/core/usage.d.ts +75 -0
  284. package/dist/core/usage.js +163 -0
  285. package/dist/core/usage.js.map +1 -0
  286. package/dist/core/windows-jobs.d.ts +15 -0
  287. package/dist/core/windows-jobs.js +170 -0
  288. package/dist/core/windows-jobs.js.map +1 -0
  289. package/dist/core/worktree-merge.d.ts +57 -0
  290. package/dist/core/worktree-merge.js +123 -0
  291. package/dist/core/worktree-merge.js.map +1 -0
  292. package/dist/core/worktree.d.ts +5 -0
  293. package/dist/core/worktree.js +45 -5
  294. package/dist/core/worktree.js.map +1 -1
  295. package/dist/core/worktrees.d.ts +6 -0
  296. package/dist/core/worktrees.js +21 -0
  297. package/dist/core/worktrees.js.map +1 -0
  298. package/dist/daemon/app-page.d.ts +0 -17
  299. package/dist/daemon/app-page.js +10 -6346
  300. package/dist/daemon/app-page.js.map +1 -1
  301. package/dist/daemon/auth.d.ts +24 -3
  302. package/dist/daemon/auth.js +66 -7
  303. package/dist/daemon/auth.js.map +1 -1
  304. package/dist/daemon/board.d.ts +7 -0
  305. package/dist/daemon/board.js +12 -1
  306. package/dist/daemon/board.js.map +1 -1
  307. package/dist/daemon/brand-icons.d.ts +6 -1
  308. package/dist/daemon/brand-icons.js +11 -3
  309. package/dist/daemon/brand-icons.js.map +1 -1
  310. package/dist/daemon/client.d.ts +665 -1
  311. package/dist/daemon/client.js +381 -3
  312. package/dist/daemon/client.js.map +1 -1
  313. package/dist/daemon/delivery.d.ts +34 -0
  314. package/dist/daemon/delivery.js +63 -0
  315. package/dist/daemon/delivery.js.map +1 -0
  316. package/dist/daemon/deploys.d.ts +62 -0
  317. package/dist/daemon/deploys.js +159 -0
  318. package/dist/daemon/deploys.js.map +1 -0
  319. package/dist/daemon/landing.d.ts +192 -0
  320. package/dist/daemon/landing.js +992 -0
  321. package/dist/daemon/landing.js.map +1 -0
  322. package/dist/daemon/onboard.d.ts +150 -0
  323. package/dist/daemon/onboard.js +390 -0
  324. package/dist/daemon/onboard.js.map +1 -0
  325. package/dist/daemon/proof.d.ts +70 -0
  326. package/dist/daemon/proof.js +172 -0
  327. package/dist/daemon/proof.js.map +1 -0
  328. package/dist/daemon/push.d.ts +19 -1
  329. package/dist/daemon/push.js +90 -3
  330. package/dist/daemon/push.js.map +1 -1
  331. package/dist/daemon/relay.d.ts +82 -0
  332. package/dist/daemon/relay.js +351 -0
  333. package/dist/daemon/relay.js.map +1 -0
  334. package/dist/daemon/routes/agent-discovery.d.ts +4 -0
  335. package/dist/daemon/routes/agent-discovery.js +29 -0
  336. package/dist/daemon/routes/agent-discovery.js.map +1 -0
  337. package/dist/daemon/routes/agent-settings.d.ts +4 -0
  338. package/dist/daemon/routes/agent-settings.js +94 -0
  339. package/dist/daemon/routes/agent-settings.js.map +1 -0
  340. package/dist/daemon/routes/agents.d.ts +4 -0
  341. package/dist/daemon/routes/agents.js +105 -0
  342. package/dist/daemon/routes/agents.js.map +1 -0
  343. package/dist/daemon/routes/alerts.d.ts +4 -0
  344. package/dist/daemon/routes/alerts.js +137 -0
  345. package/dist/daemon/routes/alerts.js.map +1 -0
  346. package/dist/daemon/routes/approvals.d.ts +4 -0
  347. package/dist/daemon/routes/approvals.js +40 -0
  348. package/dist/daemon/routes/approvals.js.map +1 -0
  349. package/dist/daemon/routes/assets.d.ts +3 -0
  350. package/dist/daemon/routes/assets.js +64 -0
  351. package/dist/daemon/routes/assets.js.map +1 -0
  352. package/dist/daemon/routes/board.d.ts +4 -0
  353. package/dist/daemon/routes/board.js +147 -0
  354. package/dist/daemon/routes/board.js.map +1 -0
  355. package/dist/daemon/routes/brain.d.ts +4 -0
  356. package/dist/daemon/routes/brain.js +270 -0
  357. package/dist/daemon/routes/brain.js.map +1 -0
  358. package/dist/daemon/routes/chats.d.ts +4 -0
  359. package/dist/daemon/routes/chats.js +249 -0
  360. package/dist/daemon/routes/chats.js.map +1 -0
  361. package/dist/daemon/routes/clients.d.ts +4 -0
  362. package/dist/daemon/routes/clients.js +49 -0
  363. package/dist/daemon/routes/clients.js.map +1 -0
  364. package/dist/daemon/routes/cloud.d.ts +4 -0
  365. package/dist/daemon/routes/cloud.js +46 -0
  366. package/dist/daemon/routes/cloud.js.map +1 -0
  367. package/dist/daemon/routes/config.d.ts +4 -0
  368. package/dist/daemon/routes/config.js +35 -0
  369. package/dist/daemon/routes/config.js.map +1 -0
  370. package/dist/daemon/routes/context.d.ts +51 -0
  371. package/dist/daemon/routes/context.js +2 -0
  372. package/dist/daemon/routes/context.js.map +1 -0
  373. package/dist/daemon/routes/crews.d.ts +4 -0
  374. package/dist/daemon/routes/crews.js +149 -0
  375. package/dist/daemon/routes/crews.js.map +1 -0
  376. package/dist/daemon/routes/files.d.ts +3 -0
  377. package/dist/daemon/routes/files.js +253 -0
  378. package/dist/daemon/routes/files.js.map +1 -0
  379. package/dist/daemon/routes/git.d.ts +4 -0
  380. package/dist/daemon/routes/git.js +96 -0
  381. package/dist/daemon/routes/git.js.map +1 -0
  382. package/dist/daemon/routes/history.d.ts +4 -0
  383. package/dist/daemon/routes/history.js +101 -0
  384. package/dist/daemon/routes/history.js.map +1 -0
  385. package/dist/daemon/routes/integrations-project.d.ts +3 -0
  386. package/dist/daemon/routes/integrations-project.js +103 -0
  387. package/dist/daemon/routes/integrations-project.js.map +1 -0
  388. package/dist/daemon/routes/integrations.d.ts +3 -0
  389. package/dist/daemon/routes/integrations.js +111 -0
  390. package/dist/daemon/routes/integrations.js.map +1 -0
  391. package/dist/daemon/routes/logs.d.ts +3 -0
  392. package/dist/daemon/routes/logs.js +40 -0
  393. package/dist/daemon/routes/logs.js.map +1 -0
  394. package/dist/daemon/routes/messages.d.ts +4 -0
  395. package/dist/daemon/routes/messages.js +60 -0
  396. package/dist/daemon/routes/messages.js.map +1 -0
  397. package/dist/daemon/routes/observability.d.ts +4 -0
  398. package/dist/daemon/routes/observability.js +247 -0
  399. package/dist/daemon/routes/observability.js.map +1 -0
  400. package/dist/daemon/routes/onboard.d.ts +12 -0
  401. package/dist/daemon/routes/onboard.js +67 -0
  402. package/dist/daemon/routes/onboard.js.map +1 -0
  403. package/dist/daemon/routes/orchestra.d.ts +4 -0
  404. package/dist/daemon/routes/orchestra.js +110 -0
  405. package/dist/daemon/routes/orchestra.js.map +1 -0
  406. package/dist/daemon/routes/pairing.d.ts +4 -0
  407. package/dist/daemon/routes/pairing.js +155 -0
  408. package/dist/daemon/routes/pairing.js.map +1 -0
  409. package/dist/daemon/routes/preview.d.ts +24 -0
  410. package/dist/daemon/routes/preview.js +122 -0
  411. package/dist/daemon/routes/preview.js.map +1 -0
  412. package/dist/daemon/routes/project-actions.d.ts +4 -0
  413. package/dist/daemon/routes/project-actions.js +53 -0
  414. package/dist/daemon/routes/project-actions.js.map +1 -0
  415. package/dist/daemon/routes/project-team.d.ts +4 -0
  416. package/dist/daemon/routes/project-team.js +201 -0
  417. package/dist/daemon/routes/project-team.js.map +1 -0
  418. package/dist/daemon/routes/projects.d.ts +14 -0
  419. package/dist/daemon/routes/projects.js +138 -0
  420. package/dist/daemon/routes/projects.js.map +1 -0
  421. package/dist/daemon/routes/prompts.d.ts +4 -0
  422. package/dist/daemon/routes/prompts.js +44 -0
  423. package/dist/daemon/routes/prompts.js.map +1 -0
  424. package/dist/daemon/routes/proof.d.ts +4 -0
  425. package/dist/daemon/routes/proof.js +22 -0
  426. package/dist/daemon/routes/proof.js.map +1 -0
  427. package/dist/daemon/routes/providers.d.ts +3 -0
  428. package/dist/daemon/routes/providers.js +60 -0
  429. package/dist/daemon/routes/providers.js.map +1 -0
  430. package/dist/daemon/routes/public.d.ts +4 -0
  431. package/dist/daemon/routes/public.js +64 -0
  432. package/dist/daemon/routes/public.js.map +1 -0
  433. package/dist/daemon/routes/queue.d.ts +4 -0
  434. package/dist/daemon/routes/queue.js +140 -0
  435. package/dist/daemon/routes/queue.js.map +1 -0
  436. package/dist/daemon/routes/routing.d.ts +4 -0
  437. package/dist/daemon/routes/routing.js +61 -0
  438. package/dist/daemon/routes/routing.js.map +1 -0
  439. package/dist/daemon/routes/runtime-handler.d.ts +2 -0
  440. package/dist/daemon/routes/runtime-handler.js +63 -0
  441. package/dist/daemon/routes/runtime-handler.js.map +1 -0
  442. package/dist/daemon/routes/search.d.ts +4 -0
  443. package/dist/daemon/routes/search.js +17 -0
  444. package/dist/daemon/routes/search.js.map +1 -0
  445. package/dist/daemon/routes/servers.d.ts +4 -0
  446. package/dist/daemon/routes/servers.js +133 -0
  447. package/dist/daemon/routes/servers.js.map +1 -0
  448. package/dist/daemon/routes/setup.d.ts +3 -0
  449. package/dist/daemon/routes/setup.js +50 -0
  450. package/dist/daemon/routes/setup.js.map +1 -0
  451. package/dist/daemon/routes/shift.d.ts +4 -0
  452. package/dist/daemon/routes/shift.js +30 -0
  453. package/dist/daemon/routes/shift.js.map +1 -0
  454. package/dist/daemon/routes/specs.d.ts +4 -0
  455. package/dist/daemon/routes/specs.js +57 -0
  456. package/dist/daemon/routes/specs.js.map +1 -0
  457. package/dist/daemon/routes/task-delivery.d.ts +4 -0
  458. package/dist/daemon/routes/task-delivery.js +38 -0
  459. package/dist/daemon/routes/task-delivery.js.map +1 -0
  460. package/dist/daemon/routes/team.d.ts +4 -0
  461. package/dist/daemon/routes/team.js +193 -0
  462. package/dist/daemon/routes/team.js.map +1 -0
  463. package/dist/daemon/routes/terminals.d.ts +4 -0
  464. package/dist/daemon/routes/terminals.js +87 -0
  465. package/dist/daemon/routes/terminals.js.map +1 -0
  466. package/dist/daemon/routes/tools.d.ts +4 -0
  467. package/dist/daemon/routes/tools.js +180 -0
  468. package/dist/daemon/routes/tools.js.map +1 -0
  469. package/dist/daemon/routes/updates.d.ts +4 -0
  470. package/dist/daemon/routes/updates.js +89 -0
  471. package/dist/daemon/routes/updates.js.map +1 -0
  472. package/dist/daemon/routes/voice.d.ts +4 -0
  473. package/dist/daemon/routes/voice.js +53 -0
  474. package/dist/daemon/routes/voice.js.map +1 -0
  475. package/dist/daemon/runner.d.ts +186 -0
  476. package/dist/daemon/runner.js +612 -0
  477. package/dist/daemon/runner.js.map +1 -0
  478. package/dist/daemon/runtime/accounting.d.ts +130 -0
  479. package/dist/daemon/runtime/accounting.js +303 -0
  480. package/dist/daemon/runtime/accounting.js.map +1 -0
  481. package/dist/daemon/runtime/agents.d.ts +16 -0
  482. package/dist/daemon/runtime/agents.js +71 -0
  483. package/dist/daemon/runtime/agents.js.map +1 -0
  484. package/dist/daemon/runtime/briefings.d.ts +134 -0
  485. package/dist/daemon/runtime/briefings.js +329 -0
  486. package/dist/daemon/runtime/briefings.js.map +1 -0
  487. package/dist/daemon/runtime/native-usage.d.ts +21 -0
  488. package/dist/daemon/runtime/native-usage.js +71 -0
  489. package/dist/daemon/runtime/native-usage.js.map +1 -0
  490. package/dist/daemon/runtime/queue.d.ts +94 -0
  491. package/dist/daemon/runtime/queue.js +222 -0
  492. package/dist/daemon/runtime/queue.js.map +1 -0
  493. package/dist/daemon/runtime/relay.d.ts +93 -0
  494. package/dist/daemon/runtime/relay.js +240 -0
  495. package/dist/daemon/runtime/relay.js.map +1 -0
  496. package/dist/daemon/runtime/turns.d.ts +202 -0
  497. package/dist/daemon/runtime/turns.js +663 -0
  498. package/dist/daemon/runtime/turns.js.map +1 -0
  499. package/dist/daemon/runtime-support.d.ts +76 -0
  500. package/dist/daemon/runtime-support.js +134 -0
  501. package/dist/daemon/runtime-support.js.map +1 -0
  502. package/dist/daemon/runtime.d.ts +739 -70
  503. package/dist/daemon/runtime.js +2751 -470
  504. package/dist/daemon/runtime.js.map +1 -1
  505. package/dist/daemon/server.d.ts +82 -55
  506. package/dist/daemon/server.js +674 -1435
  507. package/dist/daemon/server.js.map +1 -1
  508. package/dist/daemon/shift.d.ts +70 -0
  509. package/dist/daemon/shift.js +170 -0
  510. package/dist/daemon/shift.js.map +1 -0
  511. package/dist/daemon/specs.d.ts +92 -0
  512. package/dist/daemon/specs.js +285 -0
  513. package/dist/daemon/specs.js.map +1 -0
  514. package/dist/daemon/system.d.ts +208 -0
  515. package/dist/daemon/system.js +557 -0
  516. package/dist/daemon/system.js.map +1 -0
  517. package/dist/daemon/tasks.js +1 -1
  518. package/dist/daemon/team-brain.d.ts +136 -0
  519. package/dist/daemon/team-brain.js +659 -0
  520. package/dist/daemon/team-brain.js.map +1 -0
  521. package/dist/daemon/team-coordinator.d.ts +78 -0
  522. package/dist/daemon/team-coordinator.js +408 -0
  523. package/dist/daemon/team-coordinator.js.map +1 -0
  524. package/dist/daemon/team.d.ts +339 -0
  525. package/dist/daemon/team.js +1433 -0
  526. package/dist/daemon/team.js.map +1 -0
  527. package/dist/daemon/terminals.d.ts +22 -3
  528. package/dist/daemon/terminals.js +236 -16
  529. package/dist/daemon/terminals.js.map +1 -1
  530. package/dist/hub/client.d.ts +120 -0
  531. package/dist/hub/client.js +228 -0
  532. package/dist/hub/client.js.map +1 -0
  533. package/dist/hub/server.d.ts +32 -0
  534. package/dist/hub/server.js +180 -0
  535. package/dist/hub/server.js.map +1 -0
  536. package/dist/hub/supabase-client.d.ts +220 -0
  537. package/dist/hub/supabase-client.js +843 -0
  538. package/dist/hub/supabase-client.js.map +1 -0
  539. package/dist/observability/ask.d.ts +91 -0
  540. package/dist/observability/ask.js +179 -0
  541. package/dist/observability/ask.js.map +1 -0
  542. package/dist/observability/clickhouse.d.ts +33 -0
  543. package/dist/observability/clickhouse.js +48 -0
  544. package/dist/observability/clickhouse.js.map +1 -0
  545. package/dist/observability/decisions.d.ts +176 -0
  546. package/dist/observability/decisions.js +377 -0
  547. package/dist/observability/decisions.js.map +1 -0
  548. package/dist/observability/index.d.ts +89 -0
  549. package/dist/observability/index.js +348 -0
  550. package/dist/observability/index.js.map +1 -0
  551. package/dist/observability/insights.d.ts +151 -0
  552. package/dist/observability/insights.js +319 -0
  553. package/dist/observability/insights.js.map +1 -0
  554. package/dist/observability/logs-query.d.ts +82 -0
  555. package/dist/observability/logs-query.js +102 -0
  556. package/dist/observability/logs-query.js.map +1 -0
  557. package/dist/observability/logs.d.ts +72 -0
  558. package/dist/observability/logs.js +295 -0
  559. package/dist/observability/logs.js.map +1 -0
  560. package/dist/observability/metrics.d.ts +86 -0
  561. package/dist/observability/metrics.js +303 -0
  562. package/dist/observability/metrics.js.map +1 -0
  563. package/dist/observability/otlp.d.ts +127 -0
  564. package/dist/observability/otlp.js +242 -0
  565. package/dist/observability/otlp.js.map +1 -0
  566. package/dist/observability/snapshots.d.ts +43 -0
  567. package/dist/observability/snapshots.js +129 -0
  568. package/dist/observability/snapshots.js.map +1 -0
  569. package/dist/observability/triage.d.ts +49 -0
  570. package/dist/observability/triage.js +284 -0
  571. package/dist/observability/triage.js.map +1 -0
  572. package/dist/providers/adapter.d.ts +50 -0
  573. package/dist/providers/adapter.js +38 -0
  574. package/dist/providers/adapter.js.map +1 -0
  575. package/dist/providers/agent.d.ts +110 -0
  576. package/dist/providers/agent.js +487 -0
  577. package/dist/providers/agent.js.map +1 -0
  578. package/dist/providers/approvals.d.ts +24 -0
  579. package/dist/providers/approvals.js +78 -0
  580. package/dist/providers/approvals.js.map +1 -0
  581. package/dist/providers/attachments.d.ts +20 -0
  582. package/dist/providers/attachments.js +51 -0
  583. package/dist/providers/attachments.js.map +1 -0
  584. package/dist/providers/claude/adapter.d.ts +99 -0
  585. package/dist/providers/claude/adapter.js +790 -0
  586. package/dist/providers/claude/adapter.js.map +1 -0
  587. package/dist/providers/codex/adapter.d.ts +113 -0
  588. package/dist/providers/codex/adapter.js +881 -0
  589. package/dist/providers/codex/adapter.js.map +1 -0
  590. package/dist/providers/codex/instructions.d.ts +11 -0
  591. package/dist/providers/codex/instructions.js +154 -0
  592. package/dist/providers/codex/instructions.js.map +1 -0
  593. package/dist/providers/codex/rpc.d.ts +36 -0
  594. package/dist/providers/codex/rpc.js +104 -0
  595. package/dist/providers/codex/rpc.js.map +1 -0
  596. package/dist/providers/contracts.d.ts +339 -0
  597. package/dist/providers/contracts.js +19 -0
  598. package/dist/providers/contracts.js.map +1 -0
  599. package/dist/providers/directory.d.ts +70 -0
  600. package/dist/providers/directory.js +95 -0
  601. package/dist/providers/directory.js.map +1 -0
  602. package/dist/providers/errors.d.ts +47 -0
  603. package/dist/providers/errors.js +24 -0
  604. package/dist/providers/errors.js.map +1 -0
  605. package/dist/providers/index.d.ts +18 -0
  606. package/dist/providers/index.js +19 -0
  607. package/dist/providers/index.js.map +1 -0
  608. package/dist/providers/ingestion.d.ts +80 -0
  609. package/dist/providers/ingestion.js +330 -0
  610. package/dist/providers/ingestion.js.map +1 -0
  611. package/dist/providers/live.d.ts +22 -0
  612. package/dist/providers/live.js +56 -0
  613. package/dist/providers/live.js.map +1 -0
  614. package/dist/providers/process.d.ts +29 -0
  615. package/dist/providers/process.js +71 -0
  616. package/dist/providers/process.js.map +1 -0
  617. package/dist/providers/reaper.d.ts +33 -0
  618. package/dist/providers/reaper.js +65 -0
  619. package/dist/providers/reaper.js.map +1 -0
  620. package/dist/providers/service.d.ts +87 -0
  621. package/dist/providers/service.js +256 -0
  622. package/dist/providers/service.js.map +1 -0
  623. package/dist/sdk.d.ts +1 -1
  624. package/dist/sdk.js +1 -1
  625. package/dist/sdk.js.map +1 -1
  626. package/dist/types.d.ts +385 -6
  627. package/dist/types.js +1 -0
  628. package/dist/types.js.map +1 -1
  629. package/dist/version.d.ts +7 -0
  630. package/dist/version.js +16 -0
  631. package/dist/version.js.map +1 -0
  632. package/dist/web/app.css +4643 -0
  633. package/dist/web/app.js +22640 -0
  634. package/dist/web/app.js.map +7 -0
  635. package/dist/web/shell.html +39 -0
  636. package/docs/README.md +21 -0
  637. package/docs/SETUP.md +10 -0
  638. package/docs/adapters.md +21 -8
  639. package/docs/brain-continuity.md +186 -0
  640. package/docs/cloud.md +108 -0
  641. package/docs/crews.md +62 -0
  642. package/docs/design-system.md +31 -2
  643. package/docs/integration-notes.md +128 -20
  644. package/docs/loompad.md +105 -0
  645. package/docs/observability.md +220 -0
  646. package/docs/play-store.md +123 -0
  647. package/docs/proposals/agent-teams.md +249 -0
  648. package/docs/proposals/brain-continuity-implementation.md +468 -0
  649. package/docs/proposals/brain-session-continuity.md +623 -0
  650. package/docs/proposals/t3code-port.md +81 -0
  651. package/docs/proposals/t3code-reference.md +95 -0
  652. package/docs/refactoring/AGENT-TEAMS-PROGRESS.md +88 -0
  653. package/docs/refactoring/BOUNDARIES.md +120 -0
  654. package/docs/refactoring/BRAIN-AUDIT.md +176 -0
  655. package/docs/refactoring/BRAIN-NOTES.md +390 -0
  656. package/docs/refactoring/BRAIN-TODO.md +214 -0
  657. package/docs/refactoring/NOTES.md +129 -0
  658. package/docs/refactoring/T3-PORT-NOTES.md +165 -0
  659. package/docs/refactoring/T3-PORT-TODO.md +123 -0
  660. package/docs/refactoring/TODO.md +46 -0
  661. package/docs/refactoring/brain-benchmark-2026-09-28.json +48 -0
  662. package/docs/refactoring/brain-benchmark-audit-2026-09-28.json +48 -0
  663. package/docs/release-notes/v0.2.0.md +35 -0
  664. package/docs/release-notes/v0.2.1.md +59 -0
  665. package/docs/release-notes/v0.2.3.md +77 -0
  666. package/docs/release-notes/v0.2.4.md +128 -0
  667. package/docs/release-notes/v0.2.5.md +153 -0
  668. package/docs/release-notes/v0.2.6.md +62 -0
  669. package/docs/release-notes/v1.0.0.md +120 -0
  670. package/docs/release-notes/v1.0.1.md +77 -0
  671. package/docs/release-notes/v1.1.0.md +71 -0
  672. package/docs/release-notes/v1.1.1.md +38 -0
  673. package/docs/teams-architecture.md +697 -0
  674. package/docs/teams.md +171 -0
  675. package/docs/windows.md +85 -0
  676. package/package.json +22 -9
  677. package/dist/adapters/claude-code.d.ts +0 -26
  678. package/dist/adapters/claude-code.js +0 -209
  679. package/dist/adapters/claude-code.js.map +0 -1
  680. package/dist/adapters/codex.d.ts +0 -51
  681. package/dist/adapters/codex.js +0 -291
  682. package/dist/adapters/codex.js.map +0 -1
  683. package/docs/img/board-linear.png +0 -0
  684. package/docs/img/board-projects.png +0 -0
  685. package/docs/img/brain.png +0 -0
  686. package/docs/img/settings.png +0 -0
  687. package/docs/img/workspace.png +0 -0
@@ -0,0 +1,339 @@
1
+ /**
2
+ * The provider contract: what a harness session is, what a turn takes, and the
3
+ * one canonical runtime event stream every adapter emits.
4
+ *
5
+ * Ported from t3code (MIT, © T3 Tools Inc.):
6
+ * packages/contracts/src/provider.ts, providerRuntime.ts, orchestration.ts
7
+ * as plain TypeScript, reduced to what Codex and Claude Code need. Names and
8
+ * shapes follow t3code so later phases can keep porting without remapping.
9
+ *
10
+ * Vocabulary (see docs/refactoring/T3-PORT-NOTES.md): a t3code *thread* is a
11
+ * Loom chat, and a provider *instance* is a Loom agent config entry. Loom keys
12
+ * a session by (thread, instance), because a chat can switch provider.
13
+ */
14
+ export type ProviderKind = "codex" | "claude-code";
15
+ export declare const PROVIDER_KINDS: readonly ProviderKind[];
16
+ export declare const isProviderKind: (value: string) => value is ProviderKind;
17
+ /** A Loom chat id. */
18
+ export type ThreadId = string;
19
+ /** A Loom agent id: one configured instance of a provider. */
20
+ export type InstanceId = string;
21
+ export type TurnId = string;
22
+ export type ItemId = string;
23
+ export type RequestId = string;
24
+ /** How much the agent may do unasked. Loom's permission modes, in t3code's words. */
25
+ export type RuntimeMode = "approval-required" | "auto-accept-edits" | "full-access";
26
+ export type InteractionMode = "default" | "plan";
27
+ export type ProviderSessionStatus = "connecting" | "ready" | "running" | "error" | "closed";
28
+ export interface ModelSelection {
29
+ model?: string;
30
+ /** Reasoning effort, in the provider's own vocabulary (e.g. "high"). */
31
+ effort?: string;
32
+ }
33
+ export interface ProviderSession {
34
+ provider: ProviderKind;
35
+ instanceId: InstanceId;
36
+ threadId: ThreadId;
37
+ status: ProviderSessionStatus;
38
+ runtimeMode: RuntimeMode;
39
+ cwd: string;
40
+ model?: string;
41
+ /** What resumes this session after the process is gone: the native thread/session id. */
42
+ resumeCursor?: unknown;
43
+ activeTurnId?: TurnId;
44
+ createdAt: number;
45
+ updatedAt: number;
46
+ lastError?: string;
47
+ }
48
+ export interface SessionStartInput {
49
+ threadId: ThreadId;
50
+ instanceId: InstanceId;
51
+ cwd: string;
52
+ runtimeMode: RuntimeMode;
53
+ modelSelection?: ModelSelection;
54
+ /** Resume this native session instead of starting a new one. */
55
+ resumeCursor?: unknown;
56
+ }
57
+ export interface SendTurnInput {
58
+ threadId: ThreadId;
59
+ instanceId: InstanceId;
60
+ input: string;
61
+ modelSelection?: ModelSelection;
62
+ interactionMode?: InteractionMode;
63
+ /** Correlates the turn with the caller (Brain run id, client message id). */
64
+ clientTurnId?: string;
65
+ }
66
+ export interface TurnStartResult {
67
+ threadId: ThreadId;
68
+ turnId: TurnId;
69
+ resumeCursor?: unknown;
70
+ }
71
+ export type ApprovalDecision = "accept" | "acceptForSession" | "decline" | "cancel";
72
+ export type UserInputAnswers = Record<string, unknown>;
73
+ export interface AdapterCapabilities {
74
+ /** Whether an existing session can change model without restarting. */
75
+ sessionModelSwitch: "in-session" | "restart" | "unsupported";
76
+ /** False when native conversation history cannot be rewound. */
77
+ supportsConversationRollback: boolean;
78
+ /** Whether the adapter can start a compaction on request. */
79
+ manualCompaction: boolean;
80
+ }
81
+ export interface ThreadSnapshot {
82
+ threadId: ThreadId;
83
+ turns: Array<{
84
+ id: TurnId;
85
+ items: unknown[];
86
+ }>;
87
+ }
88
+ export type RuntimeSessionState = "starting" | "ready" | "running" | "waiting" | "stopped" | "error";
89
+ export type RuntimeThreadState = "active" | "idle" | "closed" | "compacted" | "error";
90
+ export type RuntimeTurnState = "completed" | "failed" | "interrupted" | "cancelled";
91
+ export type RuntimeItemStatus = "inProgress" | "completed" | "failed" | "declined";
92
+ export type ContentStreamKind = "assistant_text" | "reasoning_text" | "reasoning_summary_text" | "plan_text" | "command_output" | "file_change_output" | "unknown";
93
+ export type CanonicalItemType = "user_message" | "assistant_message" | "reasoning" | "plan" | "command_execution" | "file_change" | "mcp_tool_call" | "dynamic_tool_call" | "collab_agent_tool_call" | "web_search" | "image_view" | "context_compaction" | "error" | "unknown";
94
+ export type CanonicalRequestType = "command_execution_approval" | "file_read_approval" | "file_change_approval" | "apply_patch_approval" | "exec_command_approval" | "mcp_elicitation_approval" | "permission_approval" | "tool_user_input" | "unknown";
95
+ export interface ThreadTokenUsage {
96
+ /** Tokens in the model's context now. */
97
+ usedTokens: number;
98
+ maxTokens?: number;
99
+ totalProcessedTokens?: number;
100
+ inputTokens?: number;
101
+ cachedInputTokens?: number;
102
+ outputTokens?: number;
103
+ reasoningOutputTokens?: number;
104
+ compactsAutomatically?: boolean;
105
+ }
106
+ /** One turn's main-agent usage. Input includes cache reads and writes; output includes reasoning. */
107
+ export interface TurnTokenUsage {
108
+ usageStatus: "complete" | "partial" | "unavailable";
109
+ inputTokens?: number;
110
+ outputTokens?: number;
111
+ cachedInputTokens?: number;
112
+ cacheCreationTokens?: number;
113
+ reasoningTokens?: number;
114
+ }
115
+ export interface RateLimitWindow {
116
+ id: string;
117
+ usedPercent: number;
118
+ windowMinutes?: number;
119
+ /** Epoch ms. */
120
+ resetsAt?: number;
121
+ }
122
+ export interface UserInputQuestion {
123
+ id: string;
124
+ header: string;
125
+ question: string;
126
+ options: Array<{
127
+ label: string;
128
+ description: string;
129
+ value?: string;
130
+ }>;
131
+ allowCustomAnswer?: boolean;
132
+ multiSelect?: boolean;
133
+ /** A password-like answer: typed hidden, never kept in the thread. */
134
+ secret?: boolean;
135
+ }
136
+ export interface ItemLifecyclePayload {
137
+ itemType: CanonicalItemType;
138
+ status?: RuntimeItemStatus;
139
+ title?: string;
140
+ detail?: string;
141
+ data?: unknown;
142
+ /** Set when the item ran inside a sub-agent. */
143
+ parentToolUseId?: string;
144
+ }
145
+ /**
146
+ * Normalized `data` for tool items, so nothing above the adapter parses a
147
+ * provider's native item. An adapter fills the one matching its `itemType`.
148
+ * Assistant and reasoning text arrive as `content.delta`; the completed item's
149
+ * `detail` is the whole text, used only when nothing was streamed.
150
+ */
151
+ export interface CommandItemData {
152
+ command: string;
153
+ cwd?: string;
154
+ exitCode?: number | null;
155
+ output?: string;
156
+ }
157
+ export interface FileChangeItemData {
158
+ changes: Array<{
159
+ path: string;
160
+ kind: string;
161
+ diff?: string;
162
+ }>;
163
+ }
164
+ /**
165
+ * An image a tool returned. `data` is base64 straight from the provider; ingestion
166
+ * writes it under .loom/attachments and logs only the `path`. A `path` alone is a
167
+ * file the tool looked at (Codex's view_image).
168
+ */
169
+ export interface ToolImage {
170
+ data?: string;
171
+ path?: string;
172
+ mime?: string;
173
+ }
174
+ export interface ToolItemData {
175
+ tool: string;
176
+ input?: Record<string, unknown>;
177
+ output?: string;
178
+ error?: string;
179
+ server?: string;
180
+ images?: ToolImage[];
181
+ }
182
+ /** Payload by event type. */
183
+ export interface RuntimeEventPayloads {
184
+ "session.started": {
185
+ resume?: unknown;
186
+ };
187
+ "session.state.changed": {
188
+ state: RuntimeSessionState;
189
+ reason?: string;
190
+ };
191
+ "session.exited": {
192
+ reason?: string;
193
+ recoverable?: boolean;
194
+ exitKind?: "graceful" | "error";
195
+ };
196
+ "thread.started": {
197
+ providerThreadId?: string;
198
+ };
199
+ "thread.state.changed": {
200
+ state: RuntimeThreadState;
201
+ beforeTokens?: number;
202
+ afterTokens?: number;
203
+ trigger?: "auto" | "manual";
204
+ };
205
+ "thread.token-usage.updated": {
206
+ usage: ThreadTokenUsage;
207
+ };
208
+ "turn.started": {
209
+ model?: string;
210
+ effort?: string;
211
+ };
212
+ "turn.completed": {
213
+ state: RuntimeTurnState;
214
+ stopReason?: string | null;
215
+ errorMessage?: string;
216
+ totalCostUsd?: number;
217
+ tokenUsage?: TurnTokenUsage;
218
+ model?: string;
219
+ };
220
+ "turn.aborted": {
221
+ reason: string;
222
+ detail?: {
223
+ stderr?: string;
224
+ };
225
+ };
226
+ "turn.plan.updated": {
227
+ explanation?: string | null;
228
+ plan: Array<{
229
+ step: string;
230
+ status: "pending" | "inProgress" | "completed";
231
+ }>;
232
+ };
233
+ "turn.proposed.delta": {
234
+ delta: string;
235
+ };
236
+ "turn.proposed.completed": {
237
+ planMarkdown: string;
238
+ };
239
+ "turn.diff.updated": {
240
+ unifiedDiff: string;
241
+ };
242
+ "item.started": ItemLifecyclePayload;
243
+ "item.updated": ItemLifecyclePayload;
244
+ "item.completed": ItemLifecyclePayload;
245
+ "content.delta": {
246
+ streamKind: ContentStreamKind;
247
+ delta: string;
248
+ contentIndex?: number;
249
+ };
250
+ "request.opened": {
251
+ requestType: CanonicalRequestType;
252
+ detail?: string;
253
+ args?: unknown;
254
+ options?: Array<{
255
+ decision: ApprovalDecision;
256
+ label: string;
257
+ }>;
258
+ };
259
+ "request.resolved": {
260
+ requestType: CanonicalRequestType;
261
+ decision?: string;
262
+ };
263
+ /**
264
+ * Questions for the person. "tool" (default): the turn waits and the answer
265
+ * goes back through respondToUserInput. "message": the turn has ended and the
266
+ * person answers with their next message (Codex async questions).
267
+ */
268
+ "user-input.requested": {
269
+ questions: UserInputQuestion[];
270
+ responseMode?: "tool" | "message";
271
+ };
272
+ "user-input.resolved": {
273
+ answers: UserInputAnswers;
274
+ };
275
+ "account.rate-limits.updated": {
276
+ windows: RateLimitWindow[];
277
+ reached?: string | null;
278
+ };
279
+ "model.rerouted": {
280
+ fromModel: string;
281
+ toModel: string;
282
+ reason?: string;
283
+ };
284
+ "config.warning": {
285
+ summary: string;
286
+ details?: string;
287
+ };
288
+ "runtime.warning": {
289
+ message: string;
290
+ detail?: unknown;
291
+ retrying?: boolean;
292
+ };
293
+ "runtime.error": {
294
+ message: string;
295
+ class?: "provider_error" | "transport_error" | "permission_error" | "validation_error" | "unknown";
296
+ detail?: unknown;
297
+ };
298
+ }
299
+ export type RuntimeEventType = keyof RuntimeEventPayloads;
300
+ interface RuntimeEventBase {
301
+ eventId: string;
302
+ provider: ProviderKind;
303
+ instanceId: InstanceId;
304
+ threadId: ThreadId;
305
+ /** Epoch ms. */
306
+ createdAt: number;
307
+ turnId?: TurnId;
308
+ itemId?: ItemId;
309
+ requestId?: RequestId;
310
+ /** Native ids, for correlation and debugging. */
311
+ providerRefs?: {
312
+ providerTurnId?: string;
313
+ providerItemId?: string;
314
+ providerRequestId?: string;
315
+ };
316
+ /** The native message, when kept for debugging. Never interpreted above the adapter. */
317
+ raw?: {
318
+ source: string;
319
+ method?: string;
320
+ payload: unknown;
321
+ };
322
+ }
323
+ export type ProviderRuntimeEvent = {
324
+ [K in RuntimeEventType]: RuntimeEventBase & {
325
+ type: K;
326
+ payload: RuntimeEventPayloads[K];
327
+ };
328
+ }[RuntimeEventType];
329
+ export type RuntimeEventOf<K extends RuntimeEventType> = Extract<ProviderRuntimeEvent, {
330
+ type: K;
331
+ }>;
332
+ /** Loom's permission mode (core/permissions.ts) as a runtime mode, and back. */
333
+ export declare const RUNTIME_MODE_BY_PERMISSION: {
334
+ readonly bypass: "full-access";
335
+ readonly auto: "auto-accept-edits";
336
+ readonly ask: "approval-required";
337
+ };
338
+ export declare const runtimeModeFor: (permission: "bypass" | "auto" | "ask") => RuntimeMode;
339
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The provider contract: what a harness session is, what a turn takes, and the
3
+ * one canonical runtime event stream every adapter emits.
4
+ *
5
+ * Ported from t3code (MIT, © T3 Tools Inc.):
6
+ * packages/contracts/src/provider.ts, providerRuntime.ts, orchestration.ts
7
+ * as plain TypeScript, reduced to what Codex and Claude Code need. Names and
8
+ * shapes follow t3code so later phases can keep porting without remapping.
9
+ *
10
+ * Vocabulary (see docs/refactoring/T3-PORT-NOTES.md): a t3code *thread* is a
11
+ * Loom chat, and a provider *instance* is a Loom agent config entry. Loom keys
12
+ * a session by (thread, instance), because a chat can switch provider.
13
+ */
14
+ export const PROVIDER_KINDS = ["codex", "claude-code"];
15
+ export const isProviderKind = (value) => PROVIDER_KINDS.includes(value);
16
+ /** Loom's permission mode (core/permissions.ts) as a runtime mode, and back. */
17
+ export const RUNTIME_MODE_BY_PERMISSION = { bypass: "full-access", auto: "auto-accept-edits", ask: "approval-required" };
18
+ export const runtimeModeFor = (permission) => RUNTIME_MODE_BY_PERMISSION[permission];
19
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/providers/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAyB,EAAE,CACpE,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAoOxD,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,EAAW,CAAC;AAClI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAqC,EAAe,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The provider session directory: which native session a (chat, agent) pair is
3
+ * bound to, and what resumes it once its process is gone.
4
+ *
5
+ * Ported from t3code's provider/Services/ProviderSessionDirectory.ts (MIT,
6
+ * © T3 Tools Inc.). Differences: keyed by (thread, instance) instead of thread
7
+ * alone (Loom switches provider within a chat), and stored as one JSON file
8
+ * under `.loom/providers/` rather than a SQLite table, because Loom's event log
9
+ * has a JSONL fallback and this must work with either. Stopped bindings are
10
+ * kept: their resume cursor is how a reaped or restarted session comes back.
11
+ */
12
+ import type { InstanceId, ProviderKind, RuntimeMode, ThreadId } from "./contracts.js";
13
+ export type BindingStatus = "starting" | "running" | "stopped" | "error";
14
+ export interface ProviderBinding {
15
+ threadId: ThreadId;
16
+ instanceId: InstanceId;
17
+ provider: ProviderKind;
18
+ status: BindingStatus;
19
+ /** The native thread/session id. */
20
+ resumeCursor: unknown | null;
21
+ /** What the session was started with, to restart it the same way. */
22
+ runtimePayload: {
23
+ cwd?: string;
24
+ model?: string;
25
+ } | null;
26
+ runtimeMode: RuntimeMode;
27
+ /** Epoch ms of the last start, turn or activity. */
28
+ lastSeenAt: number;
29
+ }
30
+ export interface SessionDirectory {
31
+ get(threadId: ThreadId, instanceId: InstanceId): ProviderBinding | undefined;
32
+ /** Insert or merge; `lastSeenAt` defaults to now. */
33
+ upsert(binding: Omit<ProviderBinding, "lastSeenAt"> & {
34
+ lastSeenAt?: number;
35
+ }): ProviderBinding;
36
+ /** Mark activity without changing anything else. */
37
+ touch(threadId: ThreadId, instanceId: InstanceId, at?: number): void;
38
+ list(options?: {
39
+ excludeStopped?: boolean;
40
+ threadId?: ThreadId;
41
+ }): ProviderBinding[];
42
+ remove(threadId: ThreadId, instanceId: InstanceId): void;
43
+ }
44
+ export declare class MemorySessionDirectory implements SessionDirectory {
45
+ protected readonly rows: Map<string, ProviderBinding>;
46
+ get(threadId: ThreadId, instanceId: InstanceId): ProviderBinding | undefined;
47
+ upsert(binding: Omit<ProviderBinding, "lastSeenAt"> & {
48
+ lastSeenAt?: number;
49
+ }): ProviderBinding;
50
+ touch(threadId: ThreadId, instanceId: InstanceId, at?: number): void;
51
+ list(options?: {
52
+ excludeStopped?: boolean;
53
+ threadId?: ThreadId;
54
+ }): ProviderBinding[];
55
+ remove(threadId: ThreadId, instanceId: InstanceId): void;
56
+ protected changed(): void;
57
+ }
58
+ /**
59
+ * The directory persisted to `<loomDir>/providers/sessions.json`, written
60
+ * atomically (temp file + rename) on every change. A file that can't be read
61
+ * is moved aside, never overwritten, and the directory starts empty: losing
62
+ * resume cursors means a fresh native session, not a broken project.
63
+ */
64
+ export declare class FileSessionDirectory extends MemorySessionDirectory {
65
+ private readonly warn;
66
+ readonly file: string;
67
+ constructor(loomDir: string, warn?: (message: string) => void);
68
+ private load;
69
+ protected changed(): void;
70
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * The provider session directory: which native session a (chat, agent) pair is
3
+ * bound to, and what resumes it once its process is gone.
4
+ *
5
+ * Ported from t3code's provider/Services/ProviderSessionDirectory.ts (MIT,
6
+ * © T3 Tools Inc.). Differences: keyed by (thread, instance) instead of thread
7
+ * alone (Loom switches provider within a chat), and stored as one JSON file
8
+ * under `.loom/providers/` rather than a SQLite table, because Loom's event log
9
+ * has a JSONL fallback and this must work with either. Stopped bindings are
10
+ * kept: their resume cursor is how a reaped or restarted session comes back.
11
+ */
12
+ import fs from "node:fs";
13
+ import path from "node:path";
14
+ import { randomUUID } from "node:crypto";
15
+ import { z } from "zod";
16
+ const key = (threadId, instanceId) => `${threadId}\u0000${instanceId}`;
17
+ export class MemorySessionDirectory {
18
+ rows = new Map();
19
+ get(threadId, instanceId) {
20
+ const row = this.rows.get(key(threadId, instanceId));
21
+ return row ? { ...row } : undefined;
22
+ }
23
+ upsert(binding) {
24
+ const row = { ...binding, lastSeenAt: binding.lastSeenAt ?? Date.now() };
25
+ this.rows.set(key(row.threadId, row.instanceId), row);
26
+ this.changed();
27
+ return { ...row };
28
+ }
29
+ touch(threadId, instanceId, at = Date.now()) {
30
+ const row = this.rows.get(key(threadId, instanceId));
31
+ if (!row)
32
+ return;
33
+ row.lastSeenAt = Math.max(row.lastSeenAt, at);
34
+ this.changed();
35
+ }
36
+ list(options = {}) {
37
+ return [...this.rows.values()]
38
+ .filter(r => (!options.excludeStopped || r.status !== "stopped") && (options.threadId === undefined || r.threadId === options.threadId))
39
+ .map(r => ({ ...r }));
40
+ }
41
+ remove(threadId, instanceId) {
42
+ if (this.rows.delete(key(threadId, instanceId)))
43
+ this.changed();
44
+ }
45
+ changed() { }
46
+ }
47
+ const BindingFile = z.object({
48
+ version: z.literal(1),
49
+ bindings: z.array(z.object({
50
+ threadId: z.string().min(1), instanceId: z.string().min(1), provider: z.enum(["codex", "claude-code"]),
51
+ status: z.enum(["starting", "running", "stopped", "error"]), resumeCursor: z.unknown().nullable(),
52
+ runtimePayload: z.object({ cwd: z.string().optional(), model: z.string().optional() }).nullable(),
53
+ runtimeMode: z.enum(["approval-required", "auto-accept-edits", "full-access"]), lastSeenAt: z.number(),
54
+ })),
55
+ });
56
+ /**
57
+ * The directory persisted to `<loomDir>/providers/sessions.json`, written
58
+ * atomically (temp file + rename) on every change. A file that can't be read
59
+ * is moved aside, never overwritten, and the directory starts empty: losing
60
+ * resume cursors means a fresh native session, not a broken project.
61
+ */
62
+ export class FileSessionDirectory extends MemorySessionDirectory {
63
+ warn;
64
+ file;
65
+ constructor(loomDir, warn = () => { }) {
66
+ super();
67
+ this.warn = warn;
68
+ this.file = path.join(loomDir, "providers", "sessions.json");
69
+ this.load();
70
+ }
71
+ load() {
72
+ if (!fs.existsSync(this.file))
73
+ return;
74
+ try {
75
+ const parsed = BindingFile.parse(JSON.parse(fs.readFileSync(this.file, "utf8")));
76
+ for (const b of parsed.bindings)
77
+ this.rows.set(key(b.threadId, b.instanceId), b);
78
+ }
79
+ catch (error) {
80
+ const aside = `${this.file}.unreadable.${randomUUID()}`;
81
+ try {
82
+ fs.renameSync(this.file, aside);
83
+ }
84
+ catch { /* reported below either way */ }
85
+ this.warn(`provider session directory was unreadable and was moved to ${path.basename(aside)}: ${error.message}`);
86
+ }
87
+ }
88
+ changed() {
89
+ fs.mkdirSync(path.dirname(this.file), { recursive: true });
90
+ const tmp = `${this.file}.${process.pid}.${randomUUID()}.tmp`;
91
+ fs.writeFileSync(tmp, JSON.stringify({ version: 1, bindings: [...this.rows.values()] }, null, 1), { mode: 0o600 });
92
+ fs.renameSync(tmp, this.file);
93
+ }
94
+ }
95
+ //# sourceMappingURL=directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/providers/directory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Provider errors. Each says which operation failed and whether a native turn
3
+ * could have started, which is what the caller (Brain above all) needs to know.
4
+ *
5
+ * Shaped after t3code's provider/Errors.ts (MIT, © T3 Tools Inc.).
6
+ */
7
+ import type { InstanceId, ProviderKind, ThreadId } from "./contracts.js";
8
+ export type ProviderErrorCode =
9
+ /** The input was wrong; nothing was sent. */
10
+ "validation"
11
+ /** No instance, adapter or session to route to; nothing was sent. */
12
+ | "not_found"
13
+ /** The native session to resume is gone; nothing was sent. */
14
+ | "session_missing"
15
+ /** The adapter doesn't support this operation. */
16
+ | "unsupported"
17
+ /** The provider refused or failed the request. `mayHaveStarted` says whether a turn could exist. */
18
+ | "request"
19
+ /** The process or connection failed. */
20
+ | "transport";
21
+ export declare class ProviderError extends Error {
22
+ readonly code: ProviderErrorCode;
23
+ readonly operation: string;
24
+ readonly details: {
25
+ provider?: ProviderKind;
26
+ instanceId?: InstanceId;
27
+ threadId?: ThreadId;
28
+ /** True when a native turn may exist despite the error (outcome unknown). */
29
+ mayHaveStarted?: boolean;
30
+ cause?: unknown;
31
+ /** The harness's recent stderr, when it explains the failure. */
32
+ stderr?: string;
33
+ };
34
+ constructor(code: ProviderErrorCode, operation: string, message: string, details?: {
35
+ provider?: ProviderKind;
36
+ instanceId?: InstanceId;
37
+ threadId?: ThreadId;
38
+ /** True when a native turn may exist despite the error (outcome unknown). */
39
+ mayHaveStarted?: boolean;
40
+ cause?: unknown;
41
+ /** The harness's recent stderr, when it explains the failure. */
42
+ stderr?: string;
43
+ });
44
+ /** Nothing reached the provider as a turn: safe to retry or rebuild. */
45
+ get notSubmitted(): boolean;
46
+ }
47
+ export declare const isProviderError: (error: unknown, code?: ProviderErrorCode) => error is ProviderError;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Provider errors. Each says which operation failed and whether a native turn
3
+ * could have started, which is what the caller (Brain above all) needs to know.
4
+ *
5
+ * Shaped after t3code's provider/Errors.ts (MIT, © T3 Tools Inc.).
6
+ */
7
+ export class ProviderError extends Error {
8
+ code;
9
+ operation;
10
+ details;
11
+ constructor(code, operation, message, details = {}) {
12
+ super(message);
13
+ this.code = code;
14
+ this.operation = operation;
15
+ this.details = details;
16
+ this.name = "ProviderError";
17
+ }
18
+ /** Nothing reached the provider as a turn: safe to retry or rebuild. */
19
+ get notSubmitted() {
20
+ return this.code !== "request" && this.code !== "transport" ? true : this.details.mayHaveStarted === false;
21
+ }
22
+ }
23
+ export const isProviderError = (error, code) => error instanceof ProviderError && (code === undefined || error.code === code);
24
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/providers/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE3B;IACA;IAEA;IAJX,YACW,IAAuB,EACvB,SAAiB,EAC1B,OAAe,EACN,UAIa,EAAE;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QATN,SAAI,GAAJ,IAAI,CAAmB;QACvB,cAAS,GAAT,SAAS,CAAQ;QAEjB,YAAO,GAAP,OAAO,CAIQ;QAGxB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;IAED,wEAAwE;IACxE,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC;IAC7G,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,IAAwB,EAA0B,EAAE,CAClG,KAAK,YAAY,aAAa,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Provider layer: the adapter contract, the service that routes (chat, agent)
3
+ * to live sessions, the session directory and reaper, and ingestion into
4
+ * Loom's log. Ported from t3code's provider core; see
5
+ * docs/proposals/t3code-port.md and docs/refactoring/T3-PORT-NOTES.md.
6
+ */
7
+ export * from "./contracts.js";
8
+ export * from "./errors.js";
9
+ export { EventHub, type ProviderAdapter, type RuntimeEventListener } from "./adapter.js";
10
+ export { FileSessionDirectory, MemorySessionDirectory, type ProviderBinding, type SessionDirectory } from "./directory.js";
11
+ export { ProviderService, type EnsureSessionInput, type EnsuredSession } from "./service.js";
12
+ export { SessionReaper, DEFAULT_INACTIVITY_MS, DEFAULT_SWEEP_MS } from "./reaper.js";
13
+ export { RuntimeIngestion, type IngestedEvent, type LiveDelta, type TurnTags } from "./ingestion.js";
14
+ export { ApprovalBridge } from "./approvals.js";
15
+ export * from "./live.js";
16
+ export { ProviderAgent, stopAllProviderSessions } from "./agent.js";
17
+ export { CodexProviderAdapter, codexBin } from "./codex/adapter.js";
18
+ export { ClaudeProviderAdapter, claudeBin } from "./claude/adapter.js";
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Provider layer: the adapter contract, the service that routes (chat, agent)
3
+ * to live sessions, the session directory and reaper, and ingestion into
4
+ * Loom's log. Ported from t3code's provider core; see
5
+ * docs/proposals/t3code-port.md and docs/refactoring/T3-PORT-NOTES.md.
6
+ */
7
+ export * from "./contracts.js";
8
+ export * from "./errors.js";
9
+ export { EventHub } from "./adapter.js";
10
+ export { FileSessionDirectory, MemorySessionDirectory } from "./directory.js";
11
+ export { ProviderService } from "./service.js";
12
+ export { SessionReaper, DEFAULT_INACTIVITY_MS, DEFAULT_SWEEP_MS } from "./reaper.js";
13
+ export { RuntimeIngestion } from "./ingestion.js";
14
+ export { ApprovalBridge } from "./approvals.js";
15
+ export * from "./live.js";
16
+ export { ProviderAgent, stopAllProviderSessions } from "./agent.js";
17
+ export { CodexProviderAdapter, codexBin } from "./codex/adapter.js";
18
+ export { ClaudeProviderAdapter, claudeBin } from "./claude/adapter.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAmD,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAA+C,MAAM,gBAAgB,CAAC;AAC3H,OAAO,EAAE,eAAe,EAAgD,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAqD,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC"}