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,366 @@
1
+ # Resiliency Features Test Plan
2
+
3
+ **Date:** 2026-01-01
4
+ **Features:** P0-P5 Leader Coordination and Failover
5
+ **Branch:** `claude/add-continuous-claude-logic-kba3r`
6
+
7
+ ---
8
+
9
+ ## Prerequisites
10
+
11
+ 1. Build the project: `npm run build`
12
+ 2. Have at least 2-3 terminal windows ready
13
+ 3. Ensure `.beads/` directory exists with `issues.jsonl`
14
+
15
+ ---
16
+
17
+ ## P0: Stateless Lead Pattern
18
+
19
+ ### Test 1: Lead reads tasks from Beads
20
+
21
+ **Setup:**
22
+ ```bash
23
+ # Add a test task to Beads
24
+ echo '{"id":"test-001","title":"Test task for P0","status":"open","priority":1,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}' >> .beads/issues.jsonl
25
+ ```
26
+
27
+ **Test:**
28
+ ```typescript
29
+ import { createStatelessLead } from './src/resiliency';
30
+
31
+ const lead = createStatelessLead('.beads', 'TestLead', 'lead-001', {
32
+ sendRelay: async (to, msg) => console.log(`[RELAY] To ${to}: ${msg}`),
33
+ getAvailableWorkers: async () => ['Worker1', 'Worker2'],
34
+ });
35
+
36
+ await lead.start();
37
+ // Wait 5 seconds for poll
38
+ // Expected: Console shows "Assigned test-001 to Worker1"
39
+ ```
40
+
41
+ **Verify:**
42
+ ```bash
43
+ # Check task was assigned in Beads
44
+ grep "test-001" .beads/issues.jsonl
45
+ # Should show: "status":"in_progress","assignee":"Worker1"
46
+ ```
47
+
48
+ **Pass criteria:**
49
+ - [ ] Task status changed to `in_progress`
50
+ - [ ] Task has `assignee` field set
51
+ - [ ] Task has `leaseExpires` timestamp
52
+
53
+ ---
54
+
55
+ ## P1: Task Lease Timeouts
56
+
57
+ ### Test 2: Lease expiration returns task to queue
58
+
59
+ **Setup:**
60
+ ```typescript
61
+ // Create lead with short lease (10 seconds for testing)
62
+ const lead = new StatelessLeadCoordinator({
63
+ beadsDir: '.beads',
64
+ agentName: 'TestLead',
65
+ agentId: 'lead-001',
66
+ pollIntervalMs: 2000,
67
+ heartbeatIntervalMs: 5000,
68
+ leaseDurationMs: 10000, // 10 second lease
69
+ sendRelay: async (to, msg) => console.log(`[RELAY] To ${to}: ${msg}`),
70
+ getAvailableWorkers: async () => ['Worker1'],
71
+ });
72
+ ```
73
+
74
+ **Test:**
75
+ 1. Start lead - task gets assigned
76
+ 2. Wait 15 seconds (lease expires)
77
+ 3. Add new worker to available list
78
+ 4. Wait for next poll
79
+
80
+ **Verify:**
81
+ ```bash
82
+ # Task should be reassigned after lease expires
83
+ grep "test-001" .beads/issues.jsonl
84
+ ```
85
+
86
+ **Pass criteria:**
87
+ - [ ] Task returned to queue after lease expired
88
+ - [ ] Task reassigned to new worker on next poll
89
+
90
+ ### Test 3: Lease renewal
91
+
92
+ **Test:**
93
+ ```typescript
94
+ // Worker renews lease before expiration
95
+ await lead.renewLease('test-001', 'Worker1');
96
+ ```
97
+
98
+ **Pass criteria:**
99
+ - [ ] `leaseExpires` timestamp updated
100
+ - [ ] Console shows "Renewed lease for test-001"
101
+
102
+ ---
103
+
104
+ ## P2: Leader Heartbeat File
105
+
106
+ ### Test 4: Heartbeat file created and updated
107
+
108
+ **Test:**
109
+ ```typescript
110
+ const lead = createStatelessLead('.beads', 'TestLead', 'lead-001', {
111
+ sendRelay: async () => {},
112
+ getAvailableWorkers: async () => [],
113
+ });
114
+
115
+ await lead.start();
116
+ // Wait 15 seconds
117
+ ```
118
+
119
+ **Verify:**
120
+ ```bash
121
+ cat .beads/leader-heartbeat.json
122
+ ```
123
+
124
+ **Expected output:**
125
+ ```json
126
+ {
127
+ "leadName": "TestLead",
128
+ "leadId": "lead-001",
129
+ "timestamp": 1735689600000,
130
+ "activeTaskCount": 0,
131
+ "assignedAgents": []
132
+ }
133
+ ```
134
+
135
+ **Pass criteria:**
136
+ - [ ] File exists at `.beads/leader-heartbeat.json`
137
+ - [ ] `timestamp` updates every 10 seconds
138
+ - [ ] `activeTaskCount` reflects assigned tasks
139
+
140
+ ---
141
+
142
+ ## P3: Watchdog in AgentSupervisor
143
+
144
+ ### Test 5: Watchdog detects stale leader
145
+
146
+ **Terminal 1 - Start leader:**
147
+ ```typescript
148
+ import { createStatelessLead } from './src/resiliency';
149
+
150
+ const lead = createStatelessLead('.beads', 'Leader1', 'lead-001', {
151
+ sendRelay: async () => {},
152
+ getAvailableWorkers: async () => [],
153
+ });
154
+ await lead.start();
155
+ console.log('Leader1 started');
156
+ ```
157
+
158
+ **Terminal 2 - Start watchdog:**
159
+ ```typescript
160
+ import { createLeaderWatchdog } from './src/resiliency';
161
+
162
+ const watchdog = createLeaderWatchdog('.beads', 'Watchdog1', 'watch-001', {
163
+ onBecomeLeader: async () => console.log('I AM NOW LEADER!'),
164
+ getHealthyAgents: async () => [
165
+ { name: 'Watchdog1', id: 'watch-001', spawnedAt: new Date() }
166
+ ],
167
+ });
168
+
169
+ watchdog.on('leaderDetected', (h) => console.log('Leader detected:', h.leadName));
170
+ watchdog.on('leaderStale', (d) => console.log('Leader stale!', d));
171
+ watchdog.on('becameLeader', () => console.log('Became leader'));
172
+
173
+ watchdog.start();
174
+ ```
175
+
176
+ **Test:**
177
+ 1. Both running - watchdog should detect Leader1
178
+ 2. Kill Terminal 1 (Ctrl+C)
179
+ 3. Wait 35 seconds (stale threshold + check interval)
180
+
181
+ **Pass criteria:**
182
+ - [ ] Watchdog logs "Leader detected: Leader1"
183
+ - [ ] After leader killed, watchdog logs "Leader stale!"
184
+ - [ ] Watchdog logs "I AM NOW LEADER!"
185
+ - [ ] New heartbeat file shows Watchdog1 as leader
186
+
187
+ ---
188
+
189
+ ## P4: Gossip-Based Health Broadcast
190
+
191
+ ### Test 6: Peer discovery via heartbeats
192
+
193
+ **Terminal 1 - Agent A:**
194
+ ```typescript
195
+ import { createGossipHealth } from './src/resiliency';
196
+
197
+ const messages: string[] = [];
198
+ const gossipA = createGossipHealth('AgentA', 'a-001', async (msg) => {
199
+ messages.push(msg);
200
+ console.log('[A broadcast]', msg);
201
+ });
202
+
203
+ gossipA.on('peerDiscovered', (p) => console.log('Discovered peer:', p.name));
204
+ gossipA.start();
205
+
206
+ // Simulate receiving B's heartbeat
207
+ setTimeout(() => {
208
+ const heartbeat = {
209
+ type: 'HEARTBEAT',
210
+ agent: 'AgentB',
211
+ agentId: 'b-001',
212
+ timestamp: Date.now(),
213
+ load: 0.5,
214
+ healthy: true,
215
+ isLeader: false,
216
+ taskCount: 2,
217
+ };
218
+ gossipA.processHeartbeat(heartbeat);
219
+ }, 5000);
220
+ ```
221
+
222
+ **Pass criteria:**
223
+ - [ ] AgentA broadcasts HEARTBEAT messages
224
+ - [ ] "Discovered peer: AgentB" logged
225
+ - [ ] `gossipA.getPeers()` returns AgentB
226
+
227
+ ### Test 7: Stale peer detection
228
+
229
+ **Test:**
230
+ ```typescript
231
+ // Process old heartbeat
232
+ const staleHeartbeat = {
233
+ type: 'HEARTBEAT',
234
+ agent: 'AgentC',
235
+ agentId: 'c-001',
236
+ timestamp: Date.now() - 60000, // 1 minute old
237
+ load: 0,
238
+ healthy: true,
239
+ isLeader: false,
240
+ taskCount: 0,
241
+ };
242
+
243
+ gossipA.on('peerStale', (d) => console.log('Peer stale:', d.peer.name));
244
+ gossipA.processHeartbeat(staleHeartbeat);
245
+
246
+ // Wait for check interval (5 seconds)
247
+ ```
248
+
249
+ **Pass criteria:**
250
+ - [ ] "Peer stale: AgentC" logged within 10 seconds
251
+ - [ ] `gossipA.getPeer('AgentC').healthy` is `false`
252
+
253
+ ---
254
+
255
+ ## P5: Full Leader Election
256
+
257
+ ### Test 8: Oldest agent wins election
258
+
259
+ **Setup:** Start 3 agents at different times
260
+
261
+ **Terminal 1 (start first):**
262
+ ```typescript
263
+ import { getSupervisor } from './src/resiliency';
264
+
265
+ const supervisor = getSupervisor();
266
+ supervisor.start();
267
+
268
+ supervisor.on('electionStarted', (d) => console.log('Election started:', d));
269
+ supervisor.on('electionComplete', (d) => console.log('Election result:', d));
270
+ supervisor.on('becameLeader', () => console.log('*** I AM LEADER ***'));
271
+
272
+ supervisor.enableLeaderCoordination('.beads', async (to, msg) => {
273
+ console.log(`Send to ${to}: ${msg}`);
274
+ });
275
+
276
+ console.log('Supervisor started at', new Date().toISOString());
277
+ ```
278
+
279
+ **Verify:**
280
+ ```bash
281
+ cat .beads/leader-heartbeat.json
282
+ # Should show first supervisor as leader
283
+ ```
284
+
285
+ **Pass criteria:**
286
+ - [ ] First started supervisor becomes leader
287
+ - [ ] `leader-heartbeat.json` shows correct leader
288
+ - [ ] Election uses "oldest" method
289
+
290
+ ### Test 9: Failover on leader death
291
+
292
+ **Test:**
293
+ 1. Start Supervisor A (becomes leader)
294
+ 2. Start Supervisor B (detects A as leader)
295
+ 3. Kill Supervisor A
296
+ 4. Wait 35 seconds
297
+
298
+ **Pass criteria:**
299
+ - [ ] Supervisor B logs "Leader stale"
300
+ - [ ] Supervisor B logs "*** I AM LEADER ***"
301
+ - [ ] Heartbeat file updates to show B as leader
302
+
303
+ ---
304
+
305
+ ## Integration Test: Full Workflow
306
+
307
+ ### Test 10: End-to-end task assignment and failover
308
+
309
+ **Setup:**
310
+ ```bash
311
+ # Clear test data
312
+ rm -f .beads/leader-heartbeat.json
313
+ # Add test tasks
314
+ cat >> .beads/issues.jsonl << 'EOF'
315
+ {"id":"e2e-001","title":"E2E Test Task 1","status":"open","priority":1,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}
316
+ {"id":"e2e-002","title":"E2E Test Task 2","status":"open","priority":2,"created_at":"2026-01-01T00:00:00Z","updated_at":"2026-01-01T00:00:00Z"}
317
+ EOF
318
+ ```
319
+
320
+ **Workflow:**
321
+ 1. Start Lead agent
322
+ 2. Start 2 Worker agents
323
+ 3. Verify tasks assigned
324
+ 4. Kill Lead agent
325
+ 5. Verify new leader elected
326
+ 6. Verify tasks continue processing
327
+
328
+ **Pass criteria:**
329
+ - [ ] Tasks assigned to workers
330
+ - [ ] Leader failover completes in <35 seconds
331
+ - [ ] No task duplication
332
+ - [ ] Orphaned tasks return to queue
333
+
334
+ ---
335
+
336
+ ## Cleanup
337
+
338
+ ```bash
339
+ # Remove test data
340
+ grep -v "test-001\|e2e-00" .beads/issues.jsonl > .beads/issues.jsonl.tmp
341
+ mv .beads/issues.jsonl.tmp .beads/issues.jsonl
342
+ rm -f .beads/leader-heartbeat.json
343
+ ```
344
+
345
+ ---
346
+
347
+ ## Summary Checklist
348
+
349
+ | Feature | Test | Status |
350
+ |---------|------|--------|
351
+ | P0: Stateless Lead | Test 1: Lead reads from Beads | โ˜ |
352
+ | P1: Lease Timeouts | Test 2: Lease expiration | โ˜ |
353
+ | P1: Lease Timeouts | Test 3: Lease renewal | โ˜ |
354
+ | P2: Heartbeat File | Test 4: File created/updated | โ˜ |
355
+ | P3: Watchdog | Test 5: Stale leader detection | โ˜ |
356
+ | P4: Gossip Health | Test 6: Peer discovery | โ˜ |
357
+ | P4: Gossip Health | Test 7: Stale peer detection | โ˜ |
358
+ | P5: Leader Election | Test 8: Oldest wins | โ˜ |
359
+ | P5: Leader Election | Test 9: Failover | โ˜ |
360
+ | Integration | Test 10: Full workflow | โ˜ |
361
+
362
+ ---
363
+
364
+ **Tester:** ____________________
365
+ **Date Completed:** ____________________
366
+ **Notes:**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-relay",
3
- "version": "1.0.22",
3
+ "version": "1.2.0",
4
4
  "description": "Real-time agent-to-agent communication system",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -25,7 +25,12 @@
25
25
  "build": "npm run clean && tsc && npm run build:dashboard",
26
26
  "build:dashboard": "cd src/dashboard && npm run build",
27
27
  "postbuild": "chmod +x dist/cli/index.js && mkdir -p dist/dashboard && cp -r src/dashboard/out dist/dashboard/",
28
- "dev": "tsc -w",
28
+ "dev:watch": "tsc -w",
29
+ "predev": "npm run clean && tsc && chmod +x dist/cli/index.js",
30
+ "dev": "concurrently -n daemon,next -c blue,magenta \"npm run dev:daemon\" \"npm run dev:next\"",
31
+ "dev:daemon": "node dist/cli/index.js up --port 3889",
32
+ "dev:next": "cd src/dashboard && npm run dev",
33
+ "dev:simple": "node dist/cli/index.js up --port 3888",
29
34
  "dev:local": "npm run build && npm link && echo 'โœ“ agent-relay linked globally'",
30
35
  "dev:unlink": "npm unlink -g agent-relay && echo 'โœ“ agent-relay unlinked'",
31
36
  "dev:rebuild": "npm run build && echo 'โœ“ Rebuilt (linked version updated)'",
@@ -34,11 +39,26 @@
34
39
  "dashboard": "node dist/dashboard-server/start.js",
35
40
  "pretest": "npm run build",
36
41
  "test": "vitest run",
42
+ "test:integration": "vitest run test/cloud/*.integration.test.ts",
43
+ "test:qa": "./scripts/run-cloud-qa.sh",
44
+ "qa": "./scripts/manual-qa.sh",
45
+ "qa:stop": "./scripts/manual-qa.sh --stop",
37
46
  "pretest:coverage": "npm run build",
38
47
  "test:coverage": "vitest run --coverage",
39
48
  "test:watch": "vitest",
40
49
  "lint": "eslint src --ext .ts",
41
- "clean": "rm -rf dist"
50
+ "clean": "rm -rf dist",
51
+ "db:generate": "drizzle-kit generate",
52
+ "db:migrate": "drizzle-kit migrate",
53
+ "db:push": "drizzle-kit push",
54
+ "db:studio": "drizzle-kit studio",
55
+ "services:up": "docker compose -f docker-compose.dev.yml up -d postgres redis && echo 'โœ“ Postgres and Redis running'",
56
+ "services:down": "docker compose -f docker-compose.dev.yml down",
57
+ "services:logs": "docker compose -f docker-compose.dev.yml logs -f postgres redis",
58
+ "cloud:setup": "./scripts/cloud-setup.sh",
59
+ "cloud:api": "WORKSPACE_IMAGE=relay-workspace:local WORKSPACE_DEV_MOUNT=true node -r dotenv/config dist/cloud/index.js",
60
+ "precloud": "./scripts/cloud-setup.sh --skip-data",
61
+ "cloud": "concurrently -n api,daemon,dashboard -c cyan,blue,magenta \"npm run cloud:api\" \"npm run dev:daemon\" \"npm run dev:next\""
42
62
  },
43
63
  "keywords": [
44
64
  "agent",
@@ -54,33 +74,51 @@
54
74
  "license": "MIT",
55
75
  "repository": {
56
76
  "type": "git",
57
- "url": "git+https://github.com/khaliqgant/agent-relay.git"
77
+ "url": "git+https://github.com/AgentWorkforce/relay.git"
58
78
  },
59
79
  "bugs": {
60
- "url": "https://github.com/khaliqgant/agent-relay/issues"
80
+ "url": "https://github.com/AgentWorkforce/relay/issues"
61
81
  },
62
- "homepage": "https://github.com/khaliqgant/agent-relay#readme",
82
+ "homepage": "https://github.com/AgentWorkforce/relay#readme",
63
83
  "dependencies": {
84
+ "@nangohq/node": "^0.69.20",
85
+ "@types/jsonwebtoken": "^9.0.10",
86
+ "agent-trajectories": "^0.1.1",
64
87
  "better-sqlite3": "^9.4.3",
65
88
  "chokidar": "^5.0.0",
66
89
  "commander": "^12.1.0",
67
90
  "compare-versions": "^6.1.1",
91
+ "connect-redis": "^9.0.0",
92
+ "cors": "^2.8.5",
68
93
  "dotenv": "^17.2.3",
94
+ "drizzle-orm": "^0.45.1",
69
95
  "express": "^5.2.1",
96
+ "express-session": "^1.18.2",
97
+ "helmet": "^8.1.0",
70
98
  "http-proxy-middleware": "^3.0.5",
99
+ "jsonwebtoken": "^9.0.3",
71
100
  "node-pty": "1.0.0",
101
+ "pg": "^8.16.3",
102
+ "redis": "^5.10.0",
103
+ "stripe": "^20.1.0",
72
104
  "uuid": "^10.0.0",
73
105
  "ws": "^8.18.3"
74
106
  },
75
107
  "devDependencies": {
76
108
  "@types/better-sqlite3": "^7.6.13",
109
+ "@types/cors": "^2.8.19",
77
110
  "@types/express": "^5.0.6",
78
- "@types/node": "^22.10.2",
111
+ "@types/express-session": "^1.18.2",
112
+ "@types/helmet": "^0.0.48",
113
+ "@types/node": "^22.19.3",
114
+ "@types/pg": "^8.16.0",
79
115
  "@types/uuid": "^10.0.0",
80
116
  "@types/ws": "^8.18.1",
81
117
  "@typescript-eslint/eslint-plugin": "^8.18.2",
82
118
  "@typescript-eslint/parser": "^8.18.2",
83
119
  "@vitest/coverage-v8": "^2.1.8",
120
+ "concurrently": "^9.2.1",
121
+ "drizzle-kit": "^0.31.8",
84
122
  "esbuild": "^0.24.0",
85
123
  "eslint": "^8.57.1",
86
124
  "jsdom": "^25.0.1",
@@ -0,0 +1,96 @@
1
+ #!/bin/bash
2
+ # Cloud local development setup script
3
+ # Usage: ./scripts/cloud-setup.sh [--skip-docker] [--skip-migrate] [--skip-data]
4
+
5
+ set -e
6
+
7
+ SKIP_DOCKER=false
8
+ SKIP_MIGRATE=false
9
+ SKIP_DATA=false
10
+
11
+ # Parse arguments
12
+ for arg in "$@"; do
13
+ case $arg in
14
+ --skip-docker) SKIP_DOCKER=true ;;
15
+ --skip-migrate) SKIP_MIGRATE=true ;;
16
+ --skip-data) SKIP_DATA=true ;;
17
+ esac
18
+ done
19
+
20
+ echo "๐Ÿš€ Setting up Agent Relay Cloud (local dev)"
21
+ echo ""
22
+
23
+ # Step 1: Start Docker services
24
+ if [ "$SKIP_DOCKER" = false ]; then
25
+ echo "๐Ÿ“ฆ Starting Docker services (Postgres + Redis)..."
26
+ docker compose -f docker-compose.dev.yml up -d postgres redis
27
+
28
+ # Wait for Postgres to be ready
29
+ echo "โณ Waiting for Postgres to be ready..."
30
+ until docker compose -f docker-compose.dev.yml exec -T postgres pg_isready -U postgres > /dev/null 2>&1; do
31
+ sleep 1
32
+ done
33
+ echo "โœ“ Postgres is ready"
34
+ else
35
+ echo "โญ๏ธ Skipping Docker setup"
36
+ fi
37
+
38
+ # Step 2: Build TypeScript
39
+ echo ""
40
+ echo "๐Ÿ”จ Building TypeScript..."
41
+ npm run build > /dev/null 2>&1
42
+ echo "โœ“ Build complete"
43
+
44
+ # Step 3: Run migrations
45
+ if [ "$SKIP_MIGRATE" = false ]; then
46
+ echo ""
47
+ echo "๐Ÿ“Š Running database migrations..."
48
+ npm run db:migrate 2>&1 | grep -E "(Applied|already applied|Error)" || true
49
+ echo "โœ“ Migrations complete"
50
+ else
51
+ echo "โญ๏ธ Skipping migrations"
52
+ fi
53
+
54
+ # Step 4: Set up test data (only if server is running)
55
+ if [ "$SKIP_DATA" = false ]; then
56
+ echo ""
57
+ echo "๐Ÿงช Setting up test data..."
58
+
59
+ # Check if cloud server is running, if not start it temporarily
60
+ if ! curl -s http://localhost:4567/api/health > /dev/null 2>&1; then
61
+ echo " Starting cloud server temporarily for setup..."
62
+ node dist/cloud/index.js &
63
+ SERVER_PID=$!
64
+ sleep 3
65
+ STARTED_SERVER=true
66
+ fi
67
+
68
+ # Create test data
69
+ RESPONSE=$(curl -s -X POST http://localhost:4567/api/test/setup-local-cloud \
70
+ -H "Content-Type: application/json" \
71
+ -c /tmp/relay-cookies.txt \
72
+ -d '{"repoName": "test-org/test-repo", "workspaceName": "Local Dev"}' 2>&1 || echo '{"error": "Failed to connect"}')
73
+
74
+ if echo "$RESPONSE" | grep -q '"success":true'; then
75
+ echo "โœ“ Test data created"
76
+ echo " Cookie saved to /tmp/relay-cookies.txt"
77
+ else
78
+ echo "โš ๏ธ Could not create test data (server may need to be running)"
79
+ fi
80
+
81
+ # Stop temp server if we started it
82
+ if [ "$STARTED_SERVER" = true ]; then
83
+ kill $SERVER_PID 2>/dev/null || true
84
+ fi
85
+ else
86
+ echo "โญ๏ธ Skipping test data setup"
87
+ fi
88
+
89
+ echo ""
90
+ echo "โœ… Setup complete!"
91
+ echo ""
92
+ echo "To start the cloud server:"
93
+ echo " npm run cloud"
94
+ echo ""
95
+ echo "Then open: http://localhost:4567/app"
96
+ echo ""