agent-relay 1.0.22 → 1.2.0

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 (613) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge/shadow-cli.d.ts +17 -0
  3. package/dist/bridge/shadow-cli.d.ts.map +1 -0
  4. package/dist/bridge/shadow-cli.js +75 -0
  5. package/dist/bridge/shadow-cli.js.map +1 -0
  6. package/dist/bridge/shadow-config.d.ts +87 -0
  7. package/dist/bridge/shadow-config.d.ts.map +1 -0
  8. package/dist/bridge/shadow-config.js +134 -0
  9. package/dist/bridge/shadow-config.js.map +1 -0
  10. package/dist/bridge/spawner.d.ts +68 -1
  11. package/dist/bridge/spawner.d.ts.map +1 -1
  12. package/dist/bridge/spawner.js +360 -16
  13. package/dist/bridge/spawner.js.map +1 -1
  14. package/dist/bridge/types.d.ts +67 -0
  15. package/dist/bridge/types.d.ts.map +1 -1
  16. package/dist/cli/index.js +1196 -15
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cloud/api/auth.d.ts +20 -0
  19. package/dist/cloud/api/auth.d.ts.map +1 -0
  20. package/dist/cloud/api/auth.js +128 -0
  21. package/dist/cloud/api/auth.js.map +1 -0
  22. package/dist/cloud/api/billing.d.ts +17 -0
  23. package/dist/cloud/api/billing.d.ts.map +1 -0
  24. package/dist/cloud/api/billing.js +353 -0
  25. package/dist/cloud/api/billing.js.map +1 -0
  26. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  27. package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
  28. package/dist/cloud/api/cli-pty-runner.js +119 -0
  29. package/dist/cloud/api/cli-pty-runner.js.map +1 -0
  30. package/dist/cloud/api/coordinators.d.ts +8 -0
  31. package/dist/cloud/api/coordinators.d.ts.map +1 -0
  32. package/dist/cloud/api/coordinators.js +347 -0
  33. package/dist/cloud/api/coordinators.js.map +1 -0
  34. package/dist/cloud/api/daemons.d.ts +12 -0
  35. package/dist/cloud/api/daemons.d.ts.map +1 -0
  36. package/dist/cloud/api/daemons.js +320 -0
  37. package/dist/cloud/api/daemons.js.map +1 -0
  38. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  39. package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
  40. package/dist/cloud/api/generic-webhooks.js +129 -0
  41. package/dist/cloud/api/generic-webhooks.js.map +1 -0
  42. package/dist/cloud/api/git.d.ts +8 -0
  43. package/dist/cloud/api/git.d.ts.map +1 -0
  44. package/dist/cloud/api/git.js +131 -0
  45. package/dist/cloud/api/git.js.map +1 -0
  46. package/dist/cloud/api/github-app.d.ts +11 -0
  47. package/dist/cloud/api/github-app.d.ts.map +1 -0
  48. package/dist/cloud/api/github-app.js +189 -0
  49. package/dist/cloud/api/github-app.js.map +1 -0
  50. package/dist/cloud/api/middleware/planLimits.d.ts +43 -0
  51. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
  52. package/dist/cloud/api/middleware/planLimits.js +202 -0
  53. package/dist/cloud/api/middleware/planLimits.js.map +1 -0
  54. package/dist/cloud/api/monitoring.d.ts +11 -0
  55. package/dist/cloud/api/monitoring.d.ts.map +1 -0
  56. package/dist/cloud/api/monitoring.js +578 -0
  57. package/dist/cloud/api/monitoring.js.map +1 -0
  58. package/dist/cloud/api/nango-auth.d.ts +9 -0
  59. package/dist/cloud/api/nango-auth.d.ts.map +1 -0
  60. package/dist/cloud/api/nango-auth.js +377 -0
  61. package/dist/cloud/api/nango-auth.js.map +1 -0
  62. package/dist/cloud/api/onboarding.d.ts +15 -0
  63. package/dist/cloud/api/onboarding.d.ts.map +1 -0
  64. package/dist/cloud/api/onboarding.js +588 -0
  65. package/dist/cloud/api/onboarding.js.map +1 -0
  66. package/dist/cloud/api/policy.d.ts +8 -0
  67. package/dist/cloud/api/policy.d.ts.map +1 -0
  68. package/dist/cloud/api/policy.js +229 -0
  69. package/dist/cloud/api/policy.js.map +1 -0
  70. package/dist/cloud/api/providers.d.ts +7 -0
  71. package/dist/cloud/api/providers.d.ts.map +1 -0
  72. package/dist/cloud/api/providers.js +507 -0
  73. package/dist/cloud/api/providers.js.map +1 -0
  74. package/dist/cloud/api/repos.d.ts +7 -0
  75. package/dist/cloud/api/repos.d.ts.map +1 -0
  76. package/dist/cloud/api/repos.js +314 -0
  77. package/dist/cloud/api/repos.js.map +1 -0
  78. package/dist/cloud/api/teams.d.ts +7 -0
  79. package/dist/cloud/api/teams.d.ts.map +1 -0
  80. package/dist/cloud/api/teams.js +279 -0
  81. package/dist/cloud/api/teams.js.map +1 -0
  82. package/dist/cloud/api/test-helpers.d.ts +10 -0
  83. package/dist/cloud/api/test-helpers.d.ts.map +1 -0
  84. package/dist/cloud/api/test-helpers.js +575 -0
  85. package/dist/cloud/api/test-helpers.js.map +1 -0
  86. package/dist/cloud/api/usage.d.ts +7 -0
  87. package/dist/cloud/api/usage.d.ts.map +1 -0
  88. package/dist/cloud/api/usage.js +98 -0
  89. package/dist/cloud/api/usage.js.map +1 -0
  90. package/dist/cloud/api/webhooks.d.ts +7 -0
  91. package/dist/cloud/api/webhooks.d.ts.map +1 -0
  92. package/dist/cloud/api/webhooks.js +496 -0
  93. package/dist/cloud/api/webhooks.js.map +1 -0
  94. package/dist/cloud/api/workspaces.d.ts +7 -0
  95. package/dist/cloud/api/workspaces.d.ts.map +1 -0
  96. package/dist/cloud/api/workspaces.js +727 -0
  97. package/dist/cloud/api/workspaces.js.map +1 -0
  98. package/dist/cloud/billing/index.d.ts +9 -0
  99. package/dist/cloud/billing/index.d.ts.map +1 -0
  100. package/dist/cloud/billing/index.js +9 -0
  101. package/dist/cloud/billing/index.js.map +1 -0
  102. package/dist/cloud/billing/plans.d.ts +39 -0
  103. package/dist/cloud/billing/plans.d.ts.map +1 -0
  104. package/dist/cloud/billing/plans.js +245 -0
  105. package/dist/cloud/billing/plans.js.map +1 -0
  106. package/dist/cloud/billing/service.d.ts +80 -0
  107. package/dist/cloud/billing/service.d.ts.map +1 -0
  108. package/dist/cloud/billing/service.js +388 -0
  109. package/dist/cloud/billing/service.js.map +1 -0
  110. package/dist/cloud/billing/types.d.ts +141 -0
  111. package/dist/cloud/billing/types.d.ts.map +1 -0
  112. package/dist/cloud/billing/types.js +7 -0
  113. package/dist/cloud/billing/types.js.map +1 -0
  114. package/dist/cloud/config.d.ts +66 -0
  115. package/dist/cloud/config.d.ts.map +1 -0
  116. package/dist/cloud/config.js +92 -0
  117. package/dist/cloud/config.js.map +1 -0
  118. package/dist/cloud/db/drizzle.d.ts +215 -0
  119. package/dist/cloud/db/drizzle.d.ts.map +1 -0
  120. package/dist/cloud/db/drizzle.js +1083 -0
  121. package/dist/cloud/db/drizzle.js.map +1 -0
  122. package/dist/cloud/db/index.d.ts +35 -0
  123. package/dist/cloud/db/index.d.ts.map +1 -0
  124. package/dist/cloud/db/index.js +52 -0
  125. package/dist/cloud/db/index.js.map +1 -0
  126. package/dist/cloud/db/schema.d.ts +4519 -0
  127. package/dist/cloud/db/schema.d.ts.map +1 -0
  128. package/dist/cloud/db/schema.js +547 -0
  129. package/dist/cloud/db/schema.js.map +1 -0
  130. package/dist/cloud/index.d.ts +12 -0
  131. package/dist/cloud/index.d.ts.map +1 -0
  132. package/dist/cloud/index.js +39 -0
  133. package/dist/cloud/index.js.map +1 -0
  134. package/dist/cloud/provisioner/index.d.ts +75 -0
  135. package/dist/cloud/provisioner/index.d.ts.map +1 -0
  136. package/dist/cloud/provisioner/index.js +977 -0
  137. package/dist/cloud/provisioner/index.js.map +1 -0
  138. package/dist/cloud/server.d.ts +17 -0
  139. package/dist/cloud/server.d.ts.map +1 -0
  140. package/dist/cloud/server.js +534 -0
  141. package/dist/cloud/server.js.map +1 -0
  142. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  143. package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
  144. package/dist/cloud/services/auto-scaler.js +439 -0
  145. package/dist/cloud/services/auto-scaler.js.map +1 -0
  146. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  147. package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
  148. package/dist/cloud/services/capacity-manager.js +449 -0
  149. package/dist/cloud/services/capacity-manager.js.map +1 -0
  150. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  151. package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
  152. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  153. package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
  154. package/dist/cloud/services/coordinator.d.ts +62 -0
  155. package/dist/cloud/services/coordinator.d.ts.map +1 -0
  156. package/dist/cloud/services/coordinator.js +389 -0
  157. package/dist/cloud/services/coordinator.js.map +1 -0
  158. package/dist/cloud/services/index.d.ts +12 -0
  159. package/dist/cloud/services/index.d.ts.map +1 -0
  160. package/dist/cloud/services/index.js +15 -0
  161. package/dist/cloud/services/index.js.map +1 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.d.ts.map +1 -0
  164. package/dist/cloud/services/mention-handler.js +405 -0
  165. package/dist/cloud/services/mention-handler.js.map +1 -0
  166. package/dist/cloud/services/nango.d.ts +126 -0
  167. package/dist/cloud/services/nango.d.ts.map +1 -0
  168. package/dist/cloud/services/nango.js +191 -0
  169. package/dist/cloud/services/nango.js.map +1 -0
  170. package/dist/cloud/services/persistence.d.ts +131 -0
  171. package/dist/cloud/services/persistence.d.ts.map +1 -0
  172. package/dist/cloud/services/persistence.js +200 -0
  173. package/dist/cloud/services/persistence.js.map +1 -0
  174. package/dist/cloud/services/planLimits.d.ts +125 -0
  175. package/dist/cloud/services/planLimits.d.ts.map +1 -0
  176. package/dist/cloud/services/planLimits.js +282 -0
  177. package/dist/cloud/services/planLimits.js.map +1 -0
  178. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  179. package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
  180. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  181. package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
  182. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  183. package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
  184. package/dist/cloud/services/scaling-policy.js +415 -0
  185. package/dist/cloud/services/scaling-policy.js.map +1 -0
  186. package/dist/cloud/vault/index.d.ts +76 -0
  187. package/dist/cloud/vault/index.d.ts.map +1 -0
  188. package/dist/cloud/vault/index.js +219 -0
  189. package/dist/cloud/vault/index.js.map +1 -0
  190. package/dist/cloud/webhooks/index.d.ts +24 -0
  191. package/dist/cloud/webhooks/index.d.ts.map +1 -0
  192. package/dist/cloud/webhooks/index.js +29 -0
  193. package/dist/cloud/webhooks/index.js.map +1 -0
  194. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  195. package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
  196. package/dist/cloud/webhooks/parsers/github.js +234 -0
  197. package/dist/cloud/webhooks/parsers/github.js.map +1 -0
  198. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  199. package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
  200. package/dist/cloud/webhooks/parsers/index.js +30 -0
  201. package/dist/cloud/webhooks/parsers/index.js.map +1 -0
  202. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  203. package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
  204. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  205. package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
  206. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  207. package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
  208. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  209. package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
  210. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  211. package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
  212. package/dist/cloud/webhooks/responders/github.js +73 -0
  213. package/dist/cloud/webhooks/responders/github.js.map +1 -0
  214. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  215. package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
  216. package/dist/cloud/webhooks/responders/index.js +30 -0
  217. package/dist/cloud/webhooks/responders/index.js.map +1 -0
  218. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  219. package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
  220. package/dist/cloud/webhooks/responders/linear.js +149 -0
  221. package/dist/cloud/webhooks/responders/linear.js.map +1 -0
  222. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  223. package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
  224. package/dist/cloud/webhooks/responders/slack.js +178 -0
  225. package/dist/cloud/webhooks/responders/slack.js.map +1 -0
  226. package/dist/cloud/webhooks/router.d.ts +25 -0
  227. package/dist/cloud/webhooks/router.d.ts.map +1 -0
  228. package/dist/cloud/webhooks/router.js +504 -0
  229. package/dist/cloud/webhooks/router.js.map +1 -0
  230. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  231. package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
  232. package/dist/cloud/webhooks/rules-engine.js +287 -0
  233. package/dist/cloud/webhooks/rules-engine.js.map +1 -0
  234. package/dist/cloud/webhooks/types.d.ts +186 -0
  235. package/dist/cloud/webhooks/types.d.ts.map +1 -0
  236. package/dist/cloud/webhooks/types.js +8 -0
  237. package/dist/cloud/webhooks/types.js.map +1 -0
  238. package/dist/continuity/formatter.d.ts +51 -0
  239. package/dist/continuity/formatter.d.ts.map +1 -0
  240. package/dist/continuity/formatter.js +313 -0
  241. package/dist/continuity/formatter.js.map +1 -0
  242. package/dist/continuity/handoff-store.d.ts +67 -0
  243. package/dist/continuity/handoff-store.d.ts.map +1 -0
  244. package/dist/continuity/handoff-store.js +472 -0
  245. package/dist/continuity/handoff-store.js.map +1 -0
  246. package/dist/continuity/index.d.ts +45 -0
  247. package/dist/continuity/index.d.ts.map +1 -0
  248. package/dist/continuity/index.js +48 -0
  249. package/dist/continuity/index.js.map +1 -0
  250. package/dist/continuity/ledger-store.d.ts +110 -0
  251. package/dist/continuity/ledger-store.d.ts.map +1 -0
  252. package/dist/continuity/ledger-store.js +500 -0
  253. package/dist/continuity/ledger-store.js.map +1 -0
  254. package/dist/continuity/manager.d.ts +178 -0
  255. package/dist/continuity/manager.d.ts.map +1 -0
  256. package/dist/continuity/manager.js +562 -0
  257. package/dist/continuity/manager.js.map +1 -0
  258. package/dist/continuity/parser.d.ts +76 -0
  259. package/dist/continuity/parser.d.ts.map +1 -0
  260. package/dist/continuity/parser.js +579 -0
  261. package/dist/continuity/parser.js.map +1 -0
  262. package/dist/continuity/types.d.ts +180 -0
  263. package/dist/continuity/types.d.ts.map +1 -0
  264. package/dist/continuity/types.js +9 -0
  265. package/dist/continuity/types.js.map +1 -0
  266. package/dist/daemon/agent-manager.d.ts +114 -0
  267. package/dist/daemon/agent-manager.d.ts.map +1 -0
  268. package/dist/daemon/agent-manager.js +513 -0
  269. package/dist/daemon/agent-manager.js.map +1 -0
  270. package/dist/daemon/agent-registry.d.ts +34 -0
  271. package/dist/daemon/agent-registry.d.ts.map +1 -1
  272. package/dist/daemon/agent-registry.js +45 -2
  273. package/dist/daemon/agent-registry.js.map +1 -1
  274. package/dist/daemon/api.d.ts +81 -0
  275. package/dist/daemon/api.d.ts.map +1 -0
  276. package/dist/daemon/api.js +554 -0
  277. package/dist/daemon/api.js.map +1 -0
  278. package/dist/daemon/cli-auth.d.ts +67 -0
  279. package/dist/daemon/cli-auth.d.ts.map +1 -0
  280. package/dist/daemon/cli-auth.js +537 -0
  281. package/dist/daemon/cli-auth.js.map +1 -0
  282. package/dist/daemon/cloud-sync.d.ts +101 -0
  283. package/dist/daemon/cloud-sync.d.ts.map +1 -0
  284. package/dist/daemon/cloud-sync.js +263 -0
  285. package/dist/daemon/cloud-sync.js.map +1 -0
  286. package/dist/daemon/index.d.ts +4 -0
  287. package/dist/daemon/index.d.ts.map +1 -1
  288. package/dist/daemon/index.js +6 -0
  289. package/dist/daemon/index.js.map +1 -1
  290. package/dist/daemon/orchestrator.d.ts +155 -0
  291. package/dist/daemon/orchestrator.d.ts.map +1 -0
  292. package/dist/daemon/orchestrator.js +766 -0
  293. package/dist/daemon/orchestrator.js.map +1 -0
  294. package/dist/daemon/router.d.ts +29 -0
  295. package/dist/daemon/router.d.ts.map +1 -1
  296. package/dist/daemon/router.js +143 -21
  297. package/dist/daemon/router.js.map +1 -1
  298. package/dist/daemon/server.d.ts +42 -0
  299. package/dist/daemon/server.d.ts.map +1 -1
  300. package/dist/daemon/server.js +199 -16
  301. package/dist/daemon/server.js.map +1 -1
  302. package/dist/daemon/services/browser-testing.d.ts +88 -0
  303. package/dist/daemon/services/browser-testing.d.ts.map +1 -0
  304. package/dist/daemon/services/browser-testing.js +244 -0
  305. package/dist/daemon/services/browser-testing.js.map +1 -0
  306. package/dist/daemon/services/container-spawner.d.ts +135 -0
  307. package/dist/daemon/services/container-spawner.d.ts.map +1 -0
  308. package/dist/daemon/services/container-spawner.js +313 -0
  309. package/dist/daemon/services/container-spawner.js.map +1 -0
  310. package/dist/daemon/types.d.ts +131 -0
  311. package/dist/daemon/types.d.ts.map +1 -0
  312. package/dist/daemon/types.js +6 -0
  313. package/dist/daemon/types.js.map +1 -0
  314. package/dist/daemon/workspace-manager.d.ts +75 -0
  315. package/dist/daemon/workspace-manager.d.ts.map +1 -0
  316. package/dist/daemon/workspace-manager.js +289 -0
  317. package/dist/daemon/workspace-manager.js.map +1 -0
  318. package/dist/dashboard/out/404.html +1 -1
  319. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  320. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  321. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
  322. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
  323. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
  324. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
  325. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
  326. package/dist/dashboard/out/_next/static/chunks/app/history/page-56a8b4616a90dc43.js +1 -0
  327. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
  328. package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
  329. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
  330. package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
  331. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +1 -0
  332. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
  333. package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
  334. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  335. package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-97850e03d723ea8c.js} +1 -1
  336. package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
  337. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  338. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  339. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
  340. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  341. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  342. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  343. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  344. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  345. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
  346. package/dist/dashboard/out/alt-logos/logo.svg +38 -0
  347. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  348. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  349. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  350. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  351. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  352. package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
  353. package/dist/dashboard/out/app.html +1 -0
  354. package/dist/dashboard/out/app.txt +7 -0
  355. package/dist/dashboard/out/connect-repos.html +1 -0
  356. package/dist/dashboard/out/connect-repos.txt +7 -0
  357. package/dist/dashboard/out/history.html +1 -0
  358. package/dist/dashboard/out/history.txt +7 -0
  359. package/dist/dashboard/out/index.html +1 -1
  360. package/dist/dashboard/out/index.txt +2 -2
  361. package/dist/dashboard/out/login.html +6 -0
  362. package/dist/dashboard/out/login.txt +7 -0
  363. package/dist/dashboard/out/metrics.html +1 -515
  364. package/dist/dashboard/out/metrics.txt +2 -2
  365. package/dist/dashboard/out/pricing.html +13 -0
  366. package/dist/dashboard/out/pricing.txt +7 -0
  367. package/dist/dashboard/out/providers.html +1 -0
  368. package/dist/dashboard/out/providers.txt +7 -0
  369. package/dist/dashboard/out/signup.html +6 -0
  370. package/dist/dashboard/out/signup.txt +7 -0
  371. package/dist/dashboard-server/metrics.d.ts.map +1 -1
  372. package/dist/dashboard-server/metrics.js +3 -2
  373. package/dist/dashboard-server/metrics.js.map +1 -1
  374. package/dist/dashboard-server/server.d.ts.map +1 -1
  375. package/dist/dashboard-server/server.js +2653 -130
  376. package/dist/dashboard-server/server.js.map +1 -1
  377. package/dist/hooks/emitter.d.ts +40 -0
  378. package/dist/hooks/emitter.d.ts.map +1 -0
  379. package/dist/hooks/emitter.js +63 -0
  380. package/dist/hooks/emitter.js.map +1 -0
  381. package/dist/hooks/index.d.ts +3 -0
  382. package/dist/hooks/index.d.ts.map +1 -1
  383. package/dist/hooks/index.js +3 -0
  384. package/dist/hooks/index.js.map +1 -1
  385. package/dist/hooks/registry.d.ts +173 -0
  386. package/dist/hooks/registry.d.ts.map +1 -0
  387. package/dist/hooks/registry.js +476 -0
  388. package/dist/hooks/registry.js.map +1 -0
  389. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  390. package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
  391. package/dist/hooks/trajectory-hooks.js +183 -0
  392. package/dist/hooks/trajectory-hooks.js.map +1 -0
  393. package/dist/hooks/types.d.ts +141 -0
  394. package/dist/hooks/types.d.ts.map +1 -1
  395. package/dist/index.d.ts +2 -0
  396. package/dist/index.d.ts.map +1 -1
  397. package/dist/index.js +3 -0
  398. package/dist/index.js.map +1 -1
  399. package/dist/memory/adapters/index.d.ts +8 -0
  400. package/dist/memory/adapters/index.d.ts.map +1 -0
  401. package/dist/memory/adapters/index.js +8 -0
  402. package/dist/memory/adapters/index.js.map +1 -0
  403. package/dist/memory/adapters/inmemory.d.ts +59 -0
  404. package/dist/memory/adapters/inmemory.d.ts.map +1 -0
  405. package/dist/memory/adapters/inmemory.js +195 -0
  406. package/dist/memory/adapters/inmemory.js.map +1 -0
  407. package/dist/memory/adapters/supermemory.d.ts +71 -0
  408. package/dist/memory/adapters/supermemory.d.ts.map +1 -0
  409. package/dist/memory/adapters/supermemory.js +338 -0
  410. package/dist/memory/adapters/supermemory.js.map +1 -0
  411. package/dist/memory/factory.d.ts +48 -0
  412. package/dist/memory/factory.d.ts.map +1 -0
  413. package/dist/memory/factory.js +143 -0
  414. package/dist/memory/factory.js.map +1 -0
  415. package/dist/memory/index.d.ts +32 -0
  416. package/dist/memory/index.d.ts.map +1 -0
  417. package/dist/memory/index.js +32 -0
  418. package/dist/memory/index.js.map +1 -0
  419. package/dist/memory/memory-hooks.d.ts +60 -0
  420. package/dist/memory/memory-hooks.d.ts.map +1 -0
  421. package/dist/memory/memory-hooks.js +313 -0
  422. package/dist/memory/memory-hooks.js.map +1 -0
  423. package/dist/memory/service.d.ts +49 -0
  424. package/dist/memory/service.d.ts.map +1 -0
  425. package/dist/memory/service.js +146 -0
  426. package/dist/memory/service.js.map +1 -0
  427. package/dist/memory/types.d.ts +195 -0
  428. package/dist/memory/types.d.ts.map +1 -0
  429. package/dist/memory/types.js +8 -0
  430. package/dist/memory/types.js.map +1 -0
  431. package/dist/policy/agent-policy.d.ts +225 -0
  432. package/dist/policy/agent-policy.d.ts.map +1 -0
  433. package/dist/policy/agent-policy.js +665 -0
  434. package/dist/policy/agent-policy.js.map +1 -0
  435. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  436. package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
  437. package/dist/policy/cloud-policy-fetcher.js +64 -0
  438. package/dist/policy/cloud-policy-fetcher.js.map +1 -0
  439. package/dist/protocol/types.d.ts +10 -1
  440. package/dist/protocol/types.d.ts.map +1 -1
  441. package/dist/resiliency/context-persistence.d.ts +140 -0
  442. package/dist/resiliency/context-persistence.d.ts.map +1 -0
  443. package/dist/resiliency/context-persistence.js +397 -0
  444. package/dist/resiliency/context-persistence.js.map +1 -0
  445. package/dist/resiliency/crash-insights.d.ts +156 -0
  446. package/dist/resiliency/crash-insights.d.ts.map +1 -0
  447. package/dist/resiliency/crash-insights.js +492 -0
  448. package/dist/resiliency/crash-insights.js.map +1 -0
  449. package/dist/resiliency/gossip-health.d.ts +137 -0
  450. package/dist/resiliency/gossip-health.d.ts.map +1 -0
  451. package/dist/resiliency/gossip-health.js +241 -0
  452. package/dist/resiliency/gossip-health.js.map +1 -0
  453. package/dist/resiliency/health-monitor.d.ts +97 -0
  454. package/dist/resiliency/health-monitor.d.ts.map +1 -0
  455. package/dist/resiliency/health-monitor.js +291 -0
  456. package/dist/resiliency/health-monitor.js.map +1 -0
  457. package/dist/resiliency/index.d.ts +68 -0
  458. package/dist/resiliency/index.d.ts.map +1 -0
  459. package/dist/resiliency/index.js +68 -0
  460. package/dist/resiliency/index.js.map +1 -0
  461. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  462. package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
  463. package/dist/resiliency/leader-watchdog.js +189 -0
  464. package/dist/resiliency/leader-watchdog.js.map +1 -0
  465. package/dist/resiliency/logger.d.ts +114 -0
  466. package/dist/resiliency/logger.d.ts.map +1 -0
  467. package/dist/resiliency/logger.js +250 -0
  468. package/dist/resiliency/logger.js.map +1 -0
  469. package/dist/resiliency/memory-monitor.d.ts +172 -0
  470. package/dist/resiliency/memory-monitor.d.ts.map +1 -0
  471. package/dist/resiliency/memory-monitor.js +593 -0
  472. package/dist/resiliency/memory-monitor.js.map +1 -0
  473. package/dist/resiliency/metrics.d.ts +115 -0
  474. package/dist/resiliency/metrics.d.ts.map +1 -0
  475. package/dist/resiliency/metrics.js +239 -0
  476. package/dist/resiliency/metrics.js.map +1 -0
  477. package/dist/resiliency/provider-context.d.ts +100 -0
  478. package/dist/resiliency/provider-context.d.ts.map +1 -0
  479. package/dist/resiliency/provider-context.js +360 -0
  480. package/dist/resiliency/provider-context.js.map +1 -0
  481. package/dist/resiliency/stateless-lead.d.ts +149 -0
  482. package/dist/resiliency/stateless-lead.d.ts.map +1 -0
  483. package/dist/resiliency/stateless-lead.js +308 -0
  484. package/dist/resiliency/stateless-lead.js.map +1 -0
  485. package/dist/resiliency/supervisor.d.ts +147 -0
  486. package/dist/resiliency/supervisor.d.ts.map +1 -0
  487. package/dist/resiliency/supervisor.js +459 -0
  488. package/dist/resiliency/supervisor.js.map +1 -0
  489. package/dist/shared/cli-auth-config.d.ts +91 -0
  490. package/dist/shared/cli-auth-config.d.ts.map +1 -0
  491. package/dist/shared/cli-auth-config.js +264 -0
  492. package/dist/shared/cli-auth-config.js.map +1 -0
  493. package/dist/storage/adapter.d.ts +3 -1
  494. package/dist/storage/adapter.d.ts.map +1 -1
  495. package/dist/storage/adapter.js +12 -2
  496. package/dist/storage/adapter.js.map +1 -1
  497. package/dist/storage/sqlite-adapter.d.ts.map +1 -1
  498. package/dist/storage/sqlite-adapter.js +18 -14
  499. package/dist/storage/sqlite-adapter.js.map +1 -1
  500. package/dist/trajectory/config.d.ts +84 -0
  501. package/dist/trajectory/config.d.ts.map +1 -0
  502. package/dist/trajectory/config.js +163 -0
  503. package/dist/trajectory/config.js.map +1 -0
  504. package/dist/trajectory/index.d.ts +8 -0
  505. package/dist/trajectory/index.d.ts.map +1 -0
  506. package/dist/trajectory/index.js +8 -0
  507. package/dist/trajectory/index.js.map +1 -0
  508. package/dist/trajectory/integration.d.ts +292 -0
  509. package/dist/trajectory/integration.d.ts.map +1 -0
  510. package/dist/trajectory/integration.js +834 -0
  511. package/dist/trajectory/integration.js.map +1 -0
  512. package/dist/utils/index.d.ts +1 -0
  513. package/dist/utils/index.d.ts.map +1 -1
  514. package/dist/utils/index.js +1 -0
  515. package/dist/utils/index.js.map +1 -1
  516. package/dist/utils/logger.d.ts +40 -0
  517. package/dist/utils/logger.d.ts.map +1 -0
  518. package/dist/utils/logger.js +84 -0
  519. package/dist/utils/logger.js.map +1 -0
  520. package/dist/utils/project-namespace.d.ts +24 -0
  521. package/dist/utils/project-namespace.d.ts.map +1 -1
  522. package/dist/utils/project-namespace.js +84 -0
  523. package/dist/utils/project-namespace.js.map +1 -1
  524. package/dist/wrapper/client.d.ts +16 -1
  525. package/dist/wrapper/client.d.ts.map +1 -1
  526. package/dist/wrapper/client.js +32 -1
  527. package/dist/wrapper/client.js.map +1 -1
  528. package/dist/wrapper/parser.d.ts +13 -0
  529. package/dist/wrapper/parser.d.ts.map +1 -1
  530. package/dist/wrapper/parser.js +217 -47
  531. package/dist/wrapper/parser.js.map +1 -1
  532. package/dist/wrapper/pty-wrapper.d.ts +219 -17
  533. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  534. package/dist/wrapper/pty-wrapper.js +1050 -104
  535. package/dist/wrapper/pty-wrapper.js.map +1 -1
  536. package/dist/wrapper/shared.d.ts +165 -0
  537. package/dist/wrapper/shared.d.ts.map +1 -0
  538. package/dist/wrapper/shared.js +270 -0
  539. package/dist/wrapper/shared.js.map +1 -0
  540. package/dist/wrapper/tmux-wrapper.d.ts +78 -11
  541. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  542. package/dist/wrapper/tmux-wrapper.js +567 -106
  543. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  544. package/docs/CLOUD-ARCHITECTURE.md +804 -0
  545. package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
  546. package/docs/HOOKS_API.md +394 -0
  547. package/docs/WRAPPER_EVENTS.md +358 -0
  548. package/docs/agent-policy-snippet.md +40 -0
  549. package/docs/agent-relay-protocol.md +238 -0
  550. package/docs/agent-relay-snippet.md +115 -6
  551. package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
  552. package/docs/archive/ROADMAP.md +329 -0
  553. package/docs/archive/TESTING_PRESENCE_FEATURES.md +327 -0
  554. package/docs/competitive/GASTOWN.md +451 -0
  555. package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
  556. package/docs/competitive/README.md +34 -0
  557. package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
  558. package/docs/dashboard.png +0 -0
  559. package/docs/design/ci-failure-webhooks.md +812 -0
  560. package/docs/design/comprehensive-integrations.md +238 -0
  561. package/docs/design/e2b-sandbox-integration.md +504 -0
  562. package/docs/design/github-app-permissions.md +264 -0
  563. package/docs/guides/CLOUD.md +236 -0
  564. package/docs/guides/LOCAL.md +535 -0
  565. package/docs/guides/SELF-HOSTED.md +494 -0
  566. package/docs/local-testing.md +428 -0
  567. package/docs/proposals/continuous-claude-integration.md +622 -0
  568. package/docs/proposals/custom-commands.md +368 -0
  569. package/docs/proposals/shadow-as-subagent.md +765 -0
  570. package/docs/proposals/slack-bot-integration.md +1457 -0
  571. package/docs/tasks/global-skills-system.tasks.md +230 -0
  572. package/docs/tasks/webhook-integrations.tasks.md +184 -0
  573. package/docs/tasks/workspace-capabilities.tasks.md +121 -0
  574. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
  575. package/package.json +45 -7
  576. package/scripts/cloud-setup.sh +96 -0
  577. package/scripts/manual-qa.sh +293 -0
  578. package/scripts/postinstall.js +60 -0
  579. package/scripts/run-cloud-qa.sh +220 -0
  580. package/scripts/test-cli-auth/Dockerfile +44 -0
  581. package/scripts/test-cli-auth/Dockerfile.real +79 -0
  582. package/scripts/test-cli-auth/README.md +286 -0
  583. package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
  584. package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
  585. package/scripts/test-cli-auth/mock-cli.sh +147 -0
  586. package/scripts/test-cli-auth/package.json +14 -0
  587. package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
  588. package/scripts/test-pty-input-auto.js +222 -0
  589. package/scripts/test-pty-input.js +150 -0
  590. package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
  591. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
  592. package/dist/dashboard/out/_next/static/chunks/app/page-4498be09a5157759.js +0 -1
  593. package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
  594. package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +0 -1
  595. package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
  596. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
  597. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
  598. /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b100311aff8d5c61.js} +0 -0
  599. /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-a13d3c2b1be45466.js} +0 -0
  600. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-a4973f3e3c82fb67.js} +0 -0
  601. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
  602. /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
  603. /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
  604. /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
  605. /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
  606. /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
  607. /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
  608. /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
  609. /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
  610. /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
  611. /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
  612. /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
  613. /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
@@ -0,0 +1,329 @@
1
+ # Agent Relay Roadmap
2
+
3
+ This roadmap tracks planned improvements, bug fixes, and new features for agent-relay. Issues are tracked in [Beads](https://github.com/steveyegge/beads).
4
+
5
+ **Last Updated:** 2025-12-20
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ | Category | Open | In Progress |
12
+ |----------|------|-------------|
13
+ | Bugs | 4 | 0 |
14
+ | Features | 7 | 1 |
15
+ | Tasks | 7 | 1 |
16
+ | **Total** | **18** | **2** |
17
+
18
+ ---
19
+
20
+ ## Bugs
21
+
22
+ ### `agent-relay-ahe` Session resume not implemented
23
+ **Status:** Open | **Priority:** P2
24
+
25
+ Session resume tokens are received but not persisted or validated. The server always responds with `RESUME_TOO_OLD`, breaking the resume capability advertised in the protocol.
26
+
27
+ **Location:** `src/daemon/connection.ts:140-143`
28
+
29
+ **Required Work:**
30
+ - Implement token persistence
31
+ - Add session state recovery
32
+ - Validate resume tokens on reconnect
33
+
34
+ ---
35
+
36
+ ### `agent-relay-5af` Hook doesn't integrate with daemon-based messaging
37
+ **Status:** Open | **Priority:** P2
38
+
39
+ The inbox-check hook reads from file-based inbox but the daemon uses SQLite. When using daemon mode, the hook won't see messages.
40
+
41
+ **Location:** `src/hooks/inbox-check/hook.ts`
42
+
43
+ **Required Work:**
44
+ - Query daemon storage from hook, OR
45
+ - Ensure inbox files are written in daemon mode too
46
+
47
+ ---
48
+
49
+ ### `agent-relay-6rz` Message injection timing can cause race conditions
50
+ **Status:** Open | **Priority:** P2
51
+
52
+ Injection waits for 'idle' (1.5s since last output) but this is fragile. If agent produces output during injection, messages could interleave.
53
+
54
+ **Location:** `src/wrapper/tmux-wrapper.ts:564-569`
55
+
56
+ **Required Work:**
57
+ - Input buffer detection
58
+ - Bracketed paste mode support
59
+ - Agent-specific injection strategies
60
+
61
+ ---
62
+
63
+ ### `agent-relay-8nx` SIGINT/SIGTERM handlers don't await cleanup
64
+ **Status:** Open | **Priority:** P2
65
+
66
+ SIGINT handlers call `stop()` but `process.exit(0)` runs immediately. The `stop()` is async but not awaited, potentially leaving socket files or incomplete shutdown.
67
+
68
+ **Location:** `src/cli/index.ts:74-77`
69
+
70
+ **Required Work:**
71
+ - Await async cleanup before exit
72
+ - Ensure socket files are removed
73
+ - Add timeout for cleanup operations
74
+
75
+ ---
76
+
77
+ ## Features
78
+
79
+ ### `agent-relay-ghy` Team config: auto-spawn agents from teams.json
80
+ **Status:** In Progress | **Priority:** P2
81
+
82
+ When a project has a `teams.json` config file, `agent-relay up` should either auto-spawn terminal sessions for each agent or validate names against the config.
83
+
84
+ **teams.json format:**
85
+ ```json
86
+ {
87
+ "team": "my-project",
88
+ "agents": [
89
+ {"name": "Coordinator", "cli": "claude", "role": "coordinator"},
90
+ {"name": "LeadDev", "cli": "claude", "role": "developer"}
91
+ ],
92
+ "autoSpawn": false
93
+ }
94
+ ```
95
+
96
+ **Commands:**
97
+ - `agent-relay up --spawn` - force spawn all agents
98
+ - `agent-relay up --no-spawn` - just start daemon, manual agent starts
99
+
100
+ ---
101
+
102
+ ### `agent-relay-2z1` ACK messages not used for reliability
103
+ **Status:** Open | **Priority:** P2
104
+
105
+ ACK messages are accepted but not processed. The protocol supports reliable delivery with ACK/NACK but it's not implemented.
106
+
107
+ **Location:** `src/daemon/connection.ts:114-116`
108
+
109
+ **Required Work:**
110
+ - Track unACKed messages
111
+ - Implement retry logic
112
+ - Add configurable TTL for messages
113
+
114
+ ---
115
+
116
+ ### `agent-relay-go9` PostgreSQL storage adapter
117
+ **Status:** Open | **Priority:** P2
118
+
119
+ PostgreSQL is listed as a storage option but throws "not yet implemented". For production multi-node deployments, SQLite won't scale.
120
+
121
+ **Location:** `src/storage/adapter.ts:152-162`
122
+
123
+ **Required Work:**
124
+ - Implement PostgreSQL adapter
125
+ - Add connection pooling
126
+ - Support distributed storage for multi-node setups
127
+
128
+ ---
129
+
130
+ ### `agent-relay-sio` Graceful degradation when daemon unavailable
131
+ **Status:** Open | **Priority:** P2
132
+
133
+ Daemon connection failures are silently caught with no recovery mechanism.
134
+
135
+ **Location:** `src/wrapper/tmux-wrapper.ts:195-197`
136
+
137
+ **Required Work:**
138
+ - Periodic reconnection attempts
139
+ - Queue messages for later delivery
140
+ - Visual indicator in terminal showing connection status
141
+
142
+ ---
143
+
144
+ ### `agent-relay-dyr` Authentication between agents
145
+ **Status:** Open | **Priority:** P2
146
+
147
+ Any process can connect to the daemon socket and impersonate any agent name. No authentication exists.
148
+
149
+ **Required Work:**
150
+ - Per-agent tokens/secrets
151
+ - Socket permission checks
152
+ - Optional TLS for non-localhost deployments
153
+
154
+ ---
155
+
156
+ ### `agent-relay-0bn` Dashboard real-time connection status
157
+ **Status:** Open | **Priority:** P2
158
+
159
+ Dashboard shows agent status from messages but doesn't show live connection status (connected/disconnected).
160
+
161
+ **Required Work:**
162
+ - Show online/offline indicators
163
+ - Display last-seen timestamps
164
+ - Real-time connection state from daemon
165
+
166
+ ---
167
+
168
+ ### `agent-relay-52d` Metrics/observability for daemon
169
+ **Status:** Open | **Priority:** P2
170
+
171
+ No way to monitor daemon health, message throughput, or agent activity.
172
+
173
+ **Required Work:**
174
+ - `/metrics` endpoint for Prometheus
175
+ - Message count/rate stats
176
+ - Connection lifecycle events
177
+ - Error rate tracking
178
+
179
+ ---
180
+
181
+ ### `agent-relay-8ff` Agent list command in CLI
182
+ **Status:** Open | **Priority:** P2
183
+
184
+ CLI has `up/down/status/read` but no way to list connected agents or see message history from command line.
185
+
186
+ **Required Work:**
187
+ - `agent-relay agents` - list connected agents
188
+ - `agent-relay history` - show recent messages
189
+ - `agent-relay send <agent> <msg>` - send from CLI
190
+
191
+ ---
192
+
193
+ ## Tasks
194
+
195
+ ### `agent-relay-8z1` Add CLI tests for new command structure
196
+ **Status:** In Progress | **Priority:** P2
197
+
198
+ Add comprehensive tests for CLI commands after command consolidation.
199
+
200
+ **Blocked by:** Command consolidation tasks (closed)
201
+
202
+ ---
203
+
204
+ ### `agent-relay-hks` Increase test coverage
205
+ **Status:** Open | **Priority:** P2
206
+
207
+ Current coverage is only **39% overall**. Key files with 0% coverage:
208
+ - `daemon/server.ts`
209
+ - `dashboard/server.ts`
210
+ - `cli/index.ts`
211
+ - `wrapper/client.ts`
212
+ - `wrapper/tmux-wrapper.ts`
213
+ - `utils/project-namespace.ts`
214
+
215
+ **Required Work:**
216
+ - Integration tests for daemon startup/shutdown lifecycle
217
+ - CLI command tests
218
+ - End-to-end message flow tests
219
+
220
+ ---
221
+
222
+ ### `agent-relay-v57` Message expiration/cleanup in SQLite
223
+ **Status:** Open | **Priority:** P2
224
+
225
+ SQLite adapter has no TTL or cleanup mechanism for old messages. Database will grow unbounded over time.
226
+
227
+ **Location:** `src/storage/sqlite-adapter.ts`
228
+
229
+ **Required Work:**
230
+ - Configurable message retention period
231
+ - Automatic cleanup job
232
+ - Leverage existing `ts` column index
233
+
234
+ ---
235
+
236
+ ### `agent-relay-kzw` Project namespace uses /tmp
237
+ **Status:** Open | **Priority:** P2
238
+
239
+ `BASE_DIR` is `/tmp/agent-relay`. On macOS/Linux, `/tmp` is cleared on reboot, losing all message history.
240
+
241
+ **Location:** `src/utils/project-namespace.ts:13`
242
+
243
+ **Required Work:**
244
+ - XDG_DATA_HOME fallback
245
+ - `~/.agent-relay` option
246
+ - Per-project `.agent-relay` folder
247
+
248
+ ---
249
+
250
+ ### `agent-relay-37i` Message deduplication memory limits
251
+ **Status:** Open | **Priority:** P2
252
+
253
+ `sentMessageHashes` is a Set that grows unbounded. For long-running sessions, this could cause memory issues.
254
+
255
+ **Location:** `src/wrapper/tmux-wrapper.ts:65`
256
+
257
+ **Required Work:**
258
+ - Max size with LRU eviction
259
+ - Time-based expiration
260
+ - Bloom filter alternative for memory efficiency
261
+
262
+ ---
263
+
264
+ ### `agent-relay-5g0` Heartbeat timeout configuration
265
+ **Status:** Open | **Priority:** P2
266
+
267
+ Heartbeat timeout is hardcoded as 2x `heartbeatMs`. Heartbeat failures immediately kill the connection.
268
+
269
+ **Location:** `src/daemon/connection.ts:196`
270
+
271
+ **Required Work:**
272
+ - Independent timeout configuration
273
+ - Exponential backoff for transient issues
274
+
275
+ ---
276
+
277
+ ### `agent-relay-7bp` Memory storage adapter limits
278
+ **Status:** Open | **Priority:** P2
279
+
280
+ MemoryStorageAdapter hard-codes 1000 message limit.
281
+
282
+ **Location:** `src/storage/adapter.ts:60-63`
283
+
284
+ **Required Work:**
285
+ - Configurable limit
286
+ - LRU eviction instead of slice
287
+
288
+ ---
289
+
290
+ ### `agent-relay-47z` Express 5 compatibility verification
291
+ **Status:** Open | **Priority:** P2
292
+
293
+ `package.json` uses `express@5.2.1` which has breaking changes from Express 4.
294
+
295
+ **Required Work:**
296
+ - Verify error handling middleware patterns
297
+ - Check router behavior
298
+ - Validate body parsing (express.json vs body-parser)
299
+
300
+ ---
301
+
302
+ ## Recently Completed
303
+
304
+ ### `agent-relay-ucw` Dashboard: multi-project navigation or dynamic port allocation
305
+ **Status:** Closed | **Completed:** 2025-12-20
306
+
307
+ Fixed dashboard to warn when requested port is busy and return the actual port. CLI now awaits and logs the real URL.
308
+
309
+ ---
310
+
311
+ ## Priority Legend
312
+
313
+ | Priority | Meaning |
314
+ |----------|---------|
315
+ | P0 | Critical - blocking users |
316
+ | P1 | High - significant impact |
317
+ | P2 | Medium - normal priority |
318
+ | P3 | Low - nice to have |
319
+
320
+ ---
321
+
322
+ ## Contributing
323
+
324
+ To work on an issue:
325
+ 1. Run `bd ready` to see available work
326
+ 2. Claim with `bd update <id> --status=in_progress`
327
+ 3. Complete work and close with `bd close <id>`
328
+
329
+ See [CLAUDE.md](./CLAUDE.md) for development workflow details.
@@ -0,0 +1,327 @@
1
+ # Manual Testing Guide: Presence & Cloud Features
2
+
3
+ This document provides step-by-step testing procedures for the presence indicators, typing indicators, and user profile features in cloud mode.
4
+
5
+ ## Prerequisites
6
+
7
+ 1. **Cloud Mode Setup**: You need access to the cloud-hosted dashboard with GitHub OAuth authentication.
8
+ 2. **Multiple Test Accounts**: Ideally 2-3 different GitHub accounts to test multi-user features.
9
+ 3. **Multiple Browser Windows**: Use different browsers or incognito windows for simultaneous sessions.
10
+
11
+ ---
12
+
13
+ ## Test 1: GitHub Avatar & Username Display
14
+
15
+ ### Objective
16
+ Verify that logged-in users see their GitHub avatar and username in messages.
17
+
18
+ ### Steps
19
+
20
+ 1. Log in to the cloud dashboard using GitHub OAuth
21
+ 2. Send a message to any agent (e.g., `@AgentName Hello`)
22
+ 3. Observe the message in the chat
23
+
24
+ ### Expected Results
25
+
26
+ - [ ] Your GitHub avatar appears next to your sent message
27
+ - [ ] Your GitHub username appears as the sender
28
+ - [ ] Messages display "You" or your username consistently
29
+
30
+ ---
31
+
32
+ ## Test 2: Presence Indicator - Single User
33
+
34
+ ### Objective
35
+ Verify presence tracking works for a single user.
36
+
37
+ ### Steps
38
+
39
+ 1. Log in to the cloud dashboard
40
+ 2. Look at the header area below the main header
41
+
42
+ ### Expected Results
43
+
44
+ - [ ] A green dot indicator appears showing online status
45
+ - [ ] Your avatar appears in the stacked avatar row
46
+ - [ ] "1 online" text displays next to the avatars
47
+ - [ ] Clicking the indicator shows a dropdown with your username
48
+
49
+ ---
50
+
51
+ ## Test 3: Presence Indicator - Multiple Users
52
+
53
+ ### Objective
54
+ Verify multiple users can see each other's presence.
55
+
56
+ ### Steps
57
+
58
+ 1. **User A**: Log in with first GitHub account in Browser 1
59
+ 2. **User B**: Log in with second GitHub account in Browser 2 (different browser or incognito)
60
+ 3. Both users observe the presence indicator
61
+
62
+ ### Expected Results
63
+
64
+ - [ ] Both users see "2 online" in the presence indicator
65
+ - [ ] Both avatars appear in the stacked row
66
+ - [ ] Clicking shows both usernames in the dropdown
67
+ - [ ] Each user can see the other's GitHub avatar
68
+
69
+ ---
70
+
71
+ ## Test 4: Presence Join/Leave Detection
72
+
73
+ ### Objective
74
+ Verify real-time updates when users join and leave.
75
+
76
+ ### Steps
77
+
78
+ 1. **User A**: Already logged in
79
+ 2. **User B**: Log in to dashboard
80
+ 3. Observe User A's screen when User B joins
81
+ 4. **User B**: Close the browser tab
82
+ 5. Observe User A's screen after User B leaves
83
+
84
+ ### Expected Results
85
+
86
+ - [ ] User A immediately sees count increase when User B joins
87
+ - [ ] User B's avatar appears in User A's presence list
88
+ - [ ] User A immediately sees count decrease when User B leaves
89
+ - [ ] User B's avatar disappears from User A's presence list
90
+
91
+ ---
92
+
93
+ ## Test 5: Multi-Tab Support
94
+
95
+ ### Objective
96
+ Verify a user stays "online" when they have multiple tabs open.
97
+
98
+ ### Steps
99
+
100
+ 1. **User A**: Log in to dashboard in Tab 1
101
+ 2. **User A**: Open a second tab to the same dashboard (Tab 2)
102
+ 3. **User B**: Log in from a different browser
103
+ 4. Observe presence count (should show 2 users, not 3)
104
+ 5. **User A**: Close Tab 1
105
+ 6. Observe presence (User A should still show as online)
106
+ 7. **User A**: Close Tab 2
107
+ 8. Observe presence (User A should now show as offline)
108
+
109
+ ### Expected Results
110
+
111
+ - [ ] Multiple tabs from same user don't inflate online count
112
+ - [ ] Closing one tab doesn't disconnect the user
113
+ - [ ] User only shows as offline when ALL tabs are closed
114
+
115
+ ---
116
+
117
+ ## Test 6: Typing Indicator - Single User
118
+
119
+ ### Objective
120
+ Verify typing indicators appear when another user is typing.
121
+
122
+ ### Steps
123
+
124
+ 1. **User A**: Log in in Browser 1
125
+ 2. **User B**: Log in in Browser 2
126
+ 3. **User B**: Start typing a message (don't send)
127
+ 4. Observe User A's screen
128
+
129
+ ### Expected Results
130
+
131
+ - [ ] User A sees "User B is typing..." indicator
132
+ - [ ] The indicator appears below the message list, above the composer
133
+ - [ ] User B's avatar appears in the typing indicator
134
+ - [ ] Animated dots appear next to the message
135
+
136
+ ---
137
+
138
+ ## Test 7: Typing Indicator - Stop Typing
139
+
140
+ ### Objective
141
+ Verify typing indicator disappears when user stops typing.
142
+
143
+ ### Steps
144
+
145
+ 1. Continue from Test 6
146
+ 2. **User B**: Delete all text from the input field
147
+ 3. Observe User A's screen
148
+
149
+ ### Expected Results
150
+
151
+ - [ ] Typing indicator disappears within 1 second
152
+ - [ ] No residual "typing" state shown
153
+
154
+ ---
155
+
156
+ ## Test 8: Typing Indicator - Auto-Clear
157
+
158
+ ### Objective
159
+ Verify typing indicator auto-clears after 3 seconds of inactivity.
160
+
161
+ ### Steps
162
+
163
+ 1. **User A**: Log in in Browser 1
164
+ 2. **User B**: Log in in Browser 2
165
+ 3. **User B**: Type something and then stop (don't clear input)
166
+ 4. Wait 3-4 seconds
167
+
168
+ ### Expected Results
169
+
170
+ - [ ] Typing indicator disappears after ~3 seconds of no typing activity
171
+ - [ ] This prevents stale "typing" states
172
+
173
+ ---
174
+
175
+ ## Test 9: User Profile Panel - Open
176
+
177
+ ### Objective
178
+ Verify the user profile panel opens when clicking on an online user.
179
+
180
+ ### Steps
181
+
182
+ 1. Have at least 2 users logged in
183
+ 2. Click on the online users indicator
184
+ 3. Click on another user's name/avatar in the dropdown
185
+
186
+ ### Expected Results
187
+
188
+ - [ ] A slide-out panel appears from the right
189
+ - [ ] Panel shows the user's large avatar
190
+ - [ ] Panel shows the user's GitHub username
191
+ - [ ] Panel shows "Online" status with green indicator
192
+ - [ ] Panel shows "Online Since" timestamp
193
+ - [ ] Panel shows "Last Active" timestamp
194
+ - [ ] Panel shows GitHub link
195
+
196
+ ---
197
+
198
+ ## Test 10: User Profile Panel - Actions
199
+
200
+ ### Objective
201
+ Verify profile panel action buttons work correctly.
202
+
203
+ ### Steps
204
+
205
+ 1. Open a user's profile panel (from Test 9)
206
+ 2. Click the "Mention @username" button
207
+ 3. Close the panel and open it again
208
+ 4. Click the "View on GitHub" button
209
+
210
+ ### Expected Results
211
+
212
+ - [ ] "Mention" button closes panel (TODO: should insert @username in composer)
213
+ - [ ] "View on GitHub" opens new tab to user's GitHub profile
214
+ - [ ] GitHub profile URL is correctly formatted
215
+
216
+ ---
217
+
218
+ ## Test 11: User Profile Panel - Close Methods
219
+
220
+ ### Objective
221
+ Verify all methods of closing the profile panel work.
222
+
223
+ ### Steps
224
+
225
+ 1. Open a user's profile panel
226
+ 2. Click the X button in the panel header
227
+ 3. Open the panel again
228
+ 4. Press the Escape key
229
+ 5. Open the panel again
230
+ 6. Click outside the panel (on the backdrop)
231
+
232
+ ### Expected Results
233
+
234
+ - [ ] X button closes the panel
235
+ - [ ] Escape key closes the panel
236
+ - [ ] Clicking backdrop closes the panel
237
+
238
+ ---
239
+
240
+ ## Test 12: Human User Autocomplete
241
+
242
+ ### Objective
243
+ Verify human users appear in @ mention autocomplete.
244
+
245
+ ### Steps
246
+
247
+ 1. Have User A and User B both logged in
248
+ 2. Have User A send at least one message
249
+ 3. **User B**: Start typing `@` in the message input
250
+ 4. Observe the autocomplete dropdown
251
+
252
+ ### Expected Results
253
+
254
+ - [ ] User A appears in the autocomplete list
255
+ - [ ] Human users show with purple color and person icon
256
+ - [ ] Human users are labeled as "Human user"
257
+ - [ ] Selecting a human user inserts @username in message
258
+
259
+ ---
260
+
261
+ ## Test 13: Input Validation - Invalid Username
262
+
263
+ ### Objective
264
+ Verify the server rejects invalid usernames (security feature).
265
+
266
+ ### Steps
267
+
268
+ This test requires developer tools or a custom client:
269
+
270
+ 1. Open browser developer tools
271
+ 2. Find the presence WebSocket connection
272
+ 3. Try to send a join message with an invalid username (e.g., containing special characters)
273
+
274
+ ### Expected Results
275
+
276
+ - [ ] Server rejects the invalid username
277
+ - [ ] No error is displayed to the user (silent rejection)
278
+ - [ ] Console logs show "Invalid username rejected"
279
+
280
+ ---
281
+
282
+ ## Test 14: Security - Cannot Remove Other Users
283
+
284
+ ### Objective
285
+ Verify users cannot forcibly remove others from online list.
286
+
287
+ ### Steps
288
+
289
+ This test requires developer tools:
290
+
291
+ 1. User A and User B both logged in
292
+ 2. Using developer tools, try to send a leave message with User B's username from User A's connection
293
+
294
+ ### Expected Results
295
+
296
+ - [ ] Server rejects the leave attempt
297
+ - [ ] User B remains in the online list
298
+ - [ ] Console logs show security warning
299
+
300
+ ---
301
+
302
+ ## Troubleshooting
303
+
304
+ ### Presence Not Updating
305
+
306
+ 1. Check browser console for WebSocket errors
307
+ 2. Verify `/ws/presence` WebSocket is connected
308
+ 3. Refresh the page to reconnect
309
+
310
+ ### Typing Indicator Stuck
311
+
312
+ 1. This may indicate a WebSocket issue
313
+ 2. Typing indicators auto-clear after 3 seconds
314
+ 3. Refresh to reset
315
+
316
+ ### Profile Panel Not Opening
317
+
318
+ 1. Ensure you're clicking on a user, not just the indicator
319
+ 2. Check for JavaScript errors in console
320
+
321
+ ---
322
+
323
+ ## Notes
324
+
325
+ - All presence features require cloud mode (GitHub OAuth login)
326
+ - Local mode does not support multi-user presence
327
+ - WebSocket connections may take a moment to establish on page load