agent-relay 1.1.0 → 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 (490) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge/spawner.d.ts +53 -0
  3. package/dist/bridge/spawner.d.ts.map +1 -1
  4. package/dist/bridge/spawner.js +203 -19
  5. package/dist/bridge/spawner.js.map +1 -1
  6. package/dist/bridge/types.d.ts +12 -0
  7. package/dist/bridge/types.d.ts.map +1 -1
  8. package/dist/cli/index.js +401 -5
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cloud/api/auth.d.ts +3 -2
  11. package/dist/cloud/api/auth.d.ts.map +1 -1
  12. package/dist/cloud/api/auth.js +10 -98
  13. package/dist/cloud/api/auth.js.map +1 -1
  14. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  15. package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
  16. package/dist/cloud/api/cli-pty-runner.js +119 -0
  17. package/dist/cloud/api/cli-pty-runner.js.map +1 -0
  18. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  19. package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
  20. package/dist/cloud/api/generic-webhooks.js +129 -0
  21. package/dist/cloud/api/generic-webhooks.js.map +1 -0
  22. package/dist/cloud/api/git.d.ts +8 -0
  23. package/dist/cloud/api/git.d.ts.map +1 -0
  24. package/dist/cloud/api/git.js +131 -0
  25. package/dist/cloud/api/git.js.map +1 -0
  26. package/dist/cloud/api/github-app.d.ts +11 -0
  27. package/dist/cloud/api/github-app.d.ts.map +1 -0
  28. package/dist/cloud/api/github-app.js +189 -0
  29. package/dist/cloud/api/github-app.js.map +1 -0
  30. package/dist/cloud/api/middleware/planLimits.d.ts +7 -0
  31. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -1
  32. package/dist/cloud/api/middleware/planLimits.js +39 -1
  33. package/dist/cloud/api/middleware/planLimits.js.map +1 -1
  34. package/dist/cloud/api/monitoring.d.ts +11 -0
  35. package/dist/cloud/api/monitoring.d.ts.map +1 -0
  36. package/dist/cloud/api/monitoring.js +578 -0
  37. package/dist/cloud/api/monitoring.js.map +1 -0
  38. package/dist/cloud/api/nango-auth.d.ts +9 -0
  39. package/dist/cloud/api/nango-auth.d.ts.map +1 -0
  40. package/dist/cloud/api/nango-auth.js +377 -0
  41. package/dist/cloud/api/nango-auth.js.map +1 -0
  42. package/dist/cloud/api/onboarding.d.ts +8 -1
  43. package/dist/cloud/api/onboarding.d.ts.map +1 -1
  44. package/dist/cloud/api/onboarding.js +300 -119
  45. package/dist/cloud/api/onboarding.js.map +1 -1
  46. package/dist/cloud/api/policy.d.ts +8 -0
  47. package/dist/cloud/api/policy.d.ts.map +1 -0
  48. package/dist/cloud/api/policy.js +229 -0
  49. package/dist/cloud/api/policy.js.map +1 -0
  50. package/dist/cloud/api/providers.js +114 -42
  51. package/dist/cloud/api/providers.js.map +1 -1
  52. package/dist/cloud/api/test-helpers.d.ts +10 -0
  53. package/dist/cloud/api/test-helpers.d.ts.map +1 -0
  54. package/dist/cloud/api/test-helpers.js +575 -0
  55. package/dist/cloud/api/test-helpers.js.map +1 -0
  56. package/dist/cloud/api/webhooks.d.ts +7 -0
  57. package/dist/cloud/api/webhooks.d.ts.map +1 -0
  58. package/dist/cloud/api/webhooks.js +496 -0
  59. package/dist/cloud/api/webhooks.js.map +1 -0
  60. package/dist/cloud/api/workspaces.js +225 -8
  61. package/dist/cloud/api/workspaces.js.map +1 -1
  62. package/dist/cloud/billing/plans.d.ts.map +1 -1
  63. package/dist/cloud/billing/plans.js +13 -0
  64. package/dist/cloud/billing/plans.js.map +1 -1
  65. package/dist/cloud/billing/types.d.ts +9 -3
  66. package/dist/cloud/billing/types.d.ts.map +1 -1
  67. package/dist/cloud/config.d.ts +9 -2
  68. package/dist/cloud/config.d.ts.map +1 -1
  69. package/dist/cloud/config.js +13 -4
  70. package/dist/cloud/config.js.map +1 -1
  71. package/dist/cloud/db/drizzle.d.ts +84 -1
  72. package/dist/cloud/db/drizzle.d.ts.map +1 -1
  73. package/dist/cloud/db/drizzle.js +470 -0
  74. package/dist/cloud/db/drizzle.js.map +1 -1
  75. package/dist/cloud/db/index.d.ts +9 -4
  76. package/dist/cloud/db/index.d.ts.map +1 -1
  77. package/dist/cloud/db/index.js +11 -3
  78. package/dist/cloud/db/index.js.map +1 -1
  79. package/dist/cloud/db/schema.d.ts +3283 -556
  80. package/dist/cloud/db/schema.d.ts.map +1 -1
  81. package/dist/cloud/db/schema.js +314 -1
  82. package/dist/cloud/db/schema.js.map +1 -1
  83. package/dist/cloud/index.d.ts +1 -0
  84. package/dist/cloud/index.d.ts.map +1 -1
  85. package/dist/cloud/index.js +2 -0
  86. package/dist/cloud/index.js.map +1 -1
  87. package/dist/cloud/provisioner/index.d.ts +24 -0
  88. package/dist/cloud/provisioner/index.d.ts.map +1 -1
  89. package/dist/cloud/provisioner/index.js +319 -18
  90. package/dist/cloud/provisioner/index.js.map +1 -1
  91. package/dist/cloud/server.d.ts +1 -0
  92. package/dist/cloud/server.d.ts.map +1 -1
  93. package/dist/cloud/server.js +357 -13
  94. package/dist/cloud/server.js.map +1 -1
  95. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  96. package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
  97. package/dist/cloud/services/auto-scaler.js +439 -0
  98. package/dist/cloud/services/auto-scaler.js.map +1 -0
  99. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  100. package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
  101. package/dist/cloud/services/capacity-manager.js +449 -0
  102. package/dist/cloud/services/capacity-manager.js.map +1 -0
  103. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  104. package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
  105. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  106. package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
  107. package/dist/cloud/services/index.d.ts +12 -0
  108. package/dist/cloud/services/index.d.ts.map +1 -0
  109. package/dist/cloud/services/index.js +15 -0
  110. package/dist/cloud/services/index.js.map +1 -0
  111. package/dist/cloud/services/mention-handler.d.ts +65 -0
  112. package/dist/cloud/services/mention-handler.d.ts.map +1 -0
  113. package/dist/cloud/services/mention-handler.js +405 -0
  114. package/dist/cloud/services/mention-handler.js.map +1 -0
  115. package/dist/cloud/services/nango.d.ts +126 -0
  116. package/dist/cloud/services/nango.d.ts.map +1 -0
  117. package/dist/cloud/services/nango.js +191 -0
  118. package/dist/cloud/services/nango.js.map +1 -0
  119. package/dist/cloud/services/persistence.d.ts +131 -0
  120. package/dist/cloud/services/persistence.d.ts.map +1 -0
  121. package/dist/cloud/services/persistence.js +200 -0
  122. package/dist/cloud/services/persistence.js.map +1 -0
  123. package/dist/cloud/services/planLimits.d.ts +15 -0
  124. package/dist/cloud/services/planLimits.d.ts.map +1 -1
  125. package/dist/cloud/services/planLimits.js +28 -0
  126. package/dist/cloud/services/planLimits.js.map +1 -1
  127. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  128. package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
  129. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  130. package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
  131. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  132. package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
  133. package/dist/cloud/services/scaling-policy.js +415 -0
  134. package/dist/cloud/services/scaling-policy.js.map +1 -0
  135. package/dist/cloud/vault/index.js +1 -1
  136. package/dist/cloud/vault/index.js.map +1 -1
  137. package/dist/cloud/webhooks/index.d.ts +24 -0
  138. package/dist/cloud/webhooks/index.d.ts.map +1 -0
  139. package/dist/cloud/webhooks/index.js +29 -0
  140. package/dist/cloud/webhooks/index.js.map +1 -0
  141. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  142. package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
  143. package/dist/cloud/webhooks/parsers/github.js +234 -0
  144. package/dist/cloud/webhooks/parsers/github.js.map +1 -0
  145. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  146. package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
  147. package/dist/cloud/webhooks/parsers/index.js +30 -0
  148. package/dist/cloud/webhooks/parsers/index.js.map +1 -0
  149. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  150. package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
  151. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  152. package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
  153. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  154. package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
  155. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  156. package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
  157. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  158. package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
  159. package/dist/cloud/webhooks/responders/github.js +73 -0
  160. package/dist/cloud/webhooks/responders/github.js.map +1 -0
  161. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  162. package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
  163. package/dist/cloud/webhooks/responders/index.js +30 -0
  164. package/dist/cloud/webhooks/responders/index.js.map +1 -0
  165. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  166. package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
  167. package/dist/cloud/webhooks/responders/linear.js +149 -0
  168. package/dist/cloud/webhooks/responders/linear.js.map +1 -0
  169. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  170. package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
  171. package/dist/cloud/webhooks/responders/slack.js +178 -0
  172. package/dist/cloud/webhooks/responders/slack.js.map +1 -0
  173. package/dist/cloud/webhooks/router.d.ts +25 -0
  174. package/dist/cloud/webhooks/router.d.ts.map +1 -0
  175. package/dist/cloud/webhooks/router.js +504 -0
  176. package/dist/cloud/webhooks/router.js.map +1 -0
  177. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  178. package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
  179. package/dist/cloud/webhooks/rules-engine.js +287 -0
  180. package/dist/cloud/webhooks/rules-engine.js.map +1 -0
  181. package/dist/cloud/webhooks/types.d.ts +186 -0
  182. package/dist/cloud/webhooks/types.d.ts.map +1 -0
  183. package/dist/cloud/webhooks/types.js +8 -0
  184. package/dist/cloud/webhooks/types.js.map +1 -0
  185. package/dist/continuity/formatter.d.ts +51 -0
  186. package/dist/continuity/formatter.d.ts.map +1 -0
  187. package/dist/continuity/formatter.js +313 -0
  188. package/dist/continuity/formatter.js.map +1 -0
  189. package/dist/continuity/handoff-store.d.ts +67 -0
  190. package/dist/continuity/handoff-store.d.ts.map +1 -0
  191. package/dist/continuity/handoff-store.js +472 -0
  192. package/dist/continuity/handoff-store.js.map +1 -0
  193. package/dist/continuity/index.d.ts +45 -0
  194. package/dist/continuity/index.d.ts.map +1 -0
  195. package/dist/continuity/index.js +48 -0
  196. package/dist/continuity/index.js.map +1 -0
  197. package/dist/continuity/ledger-store.d.ts +110 -0
  198. package/dist/continuity/ledger-store.d.ts.map +1 -0
  199. package/dist/continuity/ledger-store.js +500 -0
  200. package/dist/continuity/ledger-store.js.map +1 -0
  201. package/dist/continuity/manager.d.ts +178 -0
  202. package/dist/continuity/manager.d.ts.map +1 -0
  203. package/dist/continuity/manager.js +562 -0
  204. package/dist/continuity/manager.js.map +1 -0
  205. package/dist/continuity/parser.d.ts +76 -0
  206. package/dist/continuity/parser.d.ts.map +1 -0
  207. package/dist/continuity/parser.js +579 -0
  208. package/dist/continuity/parser.js.map +1 -0
  209. package/dist/continuity/types.d.ts +180 -0
  210. package/dist/continuity/types.d.ts.map +1 -0
  211. package/dist/continuity/types.js +9 -0
  212. package/dist/continuity/types.js.map +1 -0
  213. package/dist/daemon/agent-manager.d.ts +27 -0
  214. package/dist/daemon/agent-manager.d.ts.map +1 -1
  215. package/dist/daemon/agent-manager.js +107 -6
  216. package/dist/daemon/agent-manager.js.map +1 -1
  217. package/dist/daemon/agent-registry.d.ts +32 -0
  218. package/dist/daemon/agent-registry.d.ts.map +1 -1
  219. package/dist/daemon/agent-registry.js +42 -2
  220. package/dist/daemon/agent-registry.js.map +1 -1
  221. package/dist/daemon/api.d.ts +12 -0
  222. package/dist/daemon/api.d.ts.map +1 -1
  223. package/dist/daemon/api.js +131 -2
  224. package/dist/daemon/api.js.map +1 -1
  225. package/dist/daemon/cli-auth.d.ts +67 -0
  226. package/dist/daemon/cli-auth.d.ts.map +1 -0
  227. package/dist/daemon/cli-auth.js +537 -0
  228. package/dist/daemon/cli-auth.js.map +1 -0
  229. package/dist/daemon/cloud-sync.d.ts.map +1 -1
  230. package/dist/daemon/cloud-sync.js +9 -7
  231. package/dist/daemon/cloud-sync.js.map +1 -1
  232. package/dist/daemon/orchestrator.d.ts.map +1 -1
  233. package/dist/daemon/orchestrator.js +30 -0
  234. package/dist/daemon/orchestrator.js.map +1 -1
  235. package/dist/daemon/router.d.ts +5 -0
  236. package/dist/daemon/router.d.ts.map +1 -1
  237. package/dist/daemon/router.js +78 -26
  238. package/dist/daemon/router.js.map +1 -1
  239. package/dist/daemon/server.d.ts +5 -0
  240. package/dist/daemon/server.d.ts.map +1 -1
  241. package/dist/daemon/server.js +9 -1
  242. package/dist/daemon/server.js.map +1 -1
  243. package/dist/daemon/services/browser-testing.d.ts +88 -0
  244. package/dist/daemon/services/browser-testing.d.ts.map +1 -0
  245. package/dist/daemon/services/browser-testing.js +244 -0
  246. package/dist/daemon/services/browser-testing.js.map +1 -0
  247. package/dist/daemon/services/container-spawner.d.ts +135 -0
  248. package/dist/daemon/services/container-spawner.d.ts.map +1 -0
  249. package/dist/daemon/services/container-spawner.js +313 -0
  250. package/dist/daemon/services/container-spawner.js.map +1 -0
  251. package/dist/daemon/types.d.ts +5 -1
  252. package/dist/daemon/types.d.ts.map +1 -1
  253. package/dist/dashboard/out/404.html +1 -1
  254. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  255. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  256. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
  257. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
  258. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
  259. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
  260. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
  261. package/dist/dashboard/out/_next/static/chunks/app/history/{page-b6edd4dde8d08194.js → page-56a8b4616a90dc43.js} +1 -1
  262. package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
  263. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
  264. package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
  265. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
  266. package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
  267. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  268. package/dist/dashboard/out/_next/static/chunks/{main-c2f423b9c9f4591b.js → main-97850e03d723ea8c.js} +1 -1
  269. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  270. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  271. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
  272. package/dist/dashboard/out/app.html +1 -14
  273. package/dist/dashboard/out/app.txt +2 -2
  274. package/dist/dashboard/out/connect-repos.html +1 -0
  275. package/dist/dashboard/out/connect-repos.txt +7 -0
  276. package/dist/dashboard/out/history.html +1 -1
  277. package/dist/dashboard/out/history.txt +2 -2
  278. package/dist/dashboard/out/index.html +1 -1
  279. package/dist/dashboard/out/index.txt +2 -2
  280. package/dist/dashboard/out/login.html +6 -0
  281. package/dist/dashboard/out/login.txt +7 -0
  282. package/dist/dashboard/out/metrics.html +1 -1
  283. package/dist/dashboard/out/metrics.txt +2 -2
  284. package/dist/dashboard/out/pricing.html +2 -2
  285. package/dist/dashboard/out/pricing.txt +2 -2
  286. package/dist/dashboard/out/providers.html +1 -0
  287. package/dist/dashboard/out/providers.txt +7 -0
  288. package/dist/dashboard/out/signup.html +6 -0
  289. package/dist/dashboard/out/signup.txt +7 -0
  290. package/dist/dashboard-server/server.d.ts.map +1 -1
  291. package/dist/dashboard-server/server.js +1308 -8
  292. package/dist/dashboard-server/server.js.map +1 -1
  293. package/dist/hooks/emitter.d.ts +40 -0
  294. package/dist/hooks/emitter.d.ts.map +1 -0
  295. package/dist/hooks/emitter.js +63 -0
  296. package/dist/hooks/emitter.js.map +1 -0
  297. package/dist/hooks/index.d.ts +3 -0
  298. package/dist/hooks/index.d.ts.map +1 -1
  299. package/dist/hooks/index.js +3 -0
  300. package/dist/hooks/index.js.map +1 -1
  301. package/dist/hooks/registry.d.ts +173 -0
  302. package/dist/hooks/registry.d.ts.map +1 -0
  303. package/dist/hooks/registry.js +476 -0
  304. package/dist/hooks/registry.js.map +1 -0
  305. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  306. package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
  307. package/dist/hooks/trajectory-hooks.js +183 -0
  308. package/dist/hooks/trajectory-hooks.js.map +1 -0
  309. package/dist/hooks/types.d.ts +141 -0
  310. package/dist/hooks/types.d.ts.map +1 -1
  311. package/dist/index.d.ts +2 -0
  312. package/dist/index.d.ts.map +1 -1
  313. package/dist/index.js +3 -0
  314. package/dist/index.js.map +1 -1
  315. package/dist/memory/adapters/index.d.ts +8 -0
  316. package/dist/memory/adapters/index.d.ts.map +1 -0
  317. package/dist/memory/adapters/index.js +8 -0
  318. package/dist/memory/adapters/index.js.map +1 -0
  319. package/dist/memory/adapters/inmemory.d.ts +59 -0
  320. package/dist/memory/adapters/inmemory.d.ts.map +1 -0
  321. package/dist/memory/adapters/inmemory.js +195 -0
  322. package/dist/memory/adapters/inmemory.js.map +1 -0
  323. package/dist/memory/adapters/supermemory.d.ts +71 -0
  324. package/dist/memory/adapters/supermemory.d.ts.map +1 -0
  325. package/dist/memory/adapters/supermemory.js +338 -0
  326. package/dist/memory/adapters/supermemory.js.map +1 -0
  327. package/dist/memory/factory.d.ts +48 -0
  328. package/dist/memory/factory.d.ts.map +1 -0
  329. package/dist/memory/factory.js +143 -0
  330. package/dist/memory/factory.js.map +1 -0
  331. package/dist/memory/index.d.ts +32 -0
  332. package/dist/memory/index.d.ts.map +1 -0
  333. package/dist/memory/index.js +32 -0
  334. package/dist/memory/index.js.map +1 -0
  335. package/dist/memory/memory-hooks.d.ts +60 -0
  336. package/dist/memory/memory-hooks.d.ts.map +1 -0
  337. package/dist/memory/memory-hooks.js +313 -0
  338. package/dist/memory/memory-hooks.js.map +1 -0
  339. package/dist/memory/service.d.ts +49 -0
  340. package/dist/memory/service.d.ts.map +1 -0
  341. package/dist/memory/service.js +146 -0
  342. package/dist/memory/service.js.map +1 -0
  343. package/dist/memory/types.d.ts +195 -0
  344. package/dist/memory/types.d.ts.map +1 -0
  345. package/dist/memory/types.js +8 -0
  346. package/dist/memory/types.js.map +1 -0
  347. package/dist/policy/agent-policy.d.ts +225 -0
  348. package/dist/policy/agent-policy.d.ts.map +1 -0
  349. package/dist/policy/agent-policy.js +665 -0
  350. package/dist/policy/agent-policy.js.map +1 -0
  351. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  352. package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
  353. package/dist/policy/cloud-policy-fetcher.js +64 -0
  354. package/dist/policy/cloud-policy-fetcher.js.map +1 -0
  355. package/dist/resiliency/crash-insights.d.ts +156 -0
  356. package/dist/resiliency/crash-insights.d.ts.map +1 -0
  357. package/dist/resiliency/crash-insights.js +492 -0
  358. package/dist/resiliency/crash-insights.js.map +1 -0
  359. package/dist/resiliency/gossip-health.d.ts +137 -0
  360. package/dist/resiliency/gossip-health.d.ts.map +1 -0
  361. package/dist/resiliency/gossip-health.js +241 -0
  362. package/dist/resiliency/gossip-health.js.map +1 -0
  363. package/dist/resiliency/index.d.ts +5 -0
  364. package/dist/resiliency/index.d.ts.map +1 -1
  365. package/dist/resiliency/index.js +5 -0
  366. package/dist/resiliency/index.js.map +1 -1
  367. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  368. package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
  369. package/dist/resiliency/leader-watchdog.js +189 -0
  370. package/dist/resiliency/leader-watchdog.js.map +1 -0
  371. package/dist/resiliency/memory-monitor.d.ts +172 -0
  372. package/dist/resiliency/memory-monitor.d.ts.map +1 -0
  373. package/dist/resiliency/memory-monitor.js +593 -0
  374. package/dist/resiliency/memory-monitor.js.map +1 -0
  375. package/dist/resiliency/stateless-lead.d.ts +149 -0
  376. package/dist/resiliency/stateless-lead.d.ts.map +1 -0
  377. package/dist/resiliency/stateless-lead.js +308 -0
  378. package/dist/resiliency/stateless-lead.js.map +1 -0
  379. package/dist/resiliency/supervisor.d.ts +38 -0
  380. package/dist/resiliency/supervisor.d.ts.map +1 -1
  381. package/dist/resiliency/supervisor.js +122 -0
  382. package/dist/resiliency/supervisor.js.map +1 -1
  383. package/dist/shared/cli-auth-config.d.ts +91 -0
  384. package/dist/shared/cli-auth-config.d.ts.map +1 -0
  385. package/dist/shared/cli-auth-config.js +264 -0
  386. package/dist/shared/cli-auth-config.js.map +1 -0
  387. package/dist/storage/adapter.d.ts +1 -1
  388. package/dist/storage/adapter.d.ts.map +1 -1
  389. package/dist/trajectory/config.d.ts +84 -0
  390. package/dist/trajectory/config.d.ts.map +1 -0
  391. package/dist/trajectory/config.js +163 -0
  392. package/dist/trajectory/config.js.map +1 -0
  393. package/dist/trajectory/index.d.ts +8 -0
  394. package/dist/trajectory/index.d.ts.map +1 -0
  395. package/dist/trajectory/index.js +8 -0
  396. package/dist/trajectory/index.js.map +1 -0
  397. package/dist/trajectory/integration.d.ts +292 -0
  398. package/dist/trajectory/integration.d.ts.map +1 -0
  399. package/dist/trajectory/integration.js +834 -0
  400. package/dist/trajectory/integration.js.map +1 -0
  401. package/dist/utils/logger.js +1 -1
  402. package/dist/utils/logger.js.map +1 -1
  403. package/dist/utils/project-namespace.d.ts +24 -0
  404. package/dist/utils/project-namespace.d.ts.map +1 -1
  405. package/dist/utils/project-namespace.js +84 -0
  406. package/dist/utils/project-namespace.js.map +1 -1
  407. package/dist/wrapper/parser.d.ts +10 -0
  408. package/dist/wrapper/parser.d.ts.map +1 -1
  409. package/dist/wrapper/parser.js +100 -33
  410. package/dist/wrapper/parser.js.map +1 -1
  411. package/dist/wrapper/pty-wrapper.d.ts +197 -16
  412. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  413. package/dist/wrapper/pty-wrapper.js +943 -106
  414. package/dist/wrapper/pty-wrapper.js.map +1 -1
  415. package/dist/wrapper/shared.d.ts +165 -0
  416. package/dist/wrapper/shared.d.ts.map +1 -0
  417. package/dist/wrapper/shared.js +270 -0
  418. package/dist/wrapper/shared.js.map +1 -0
  419. package/dist/wrapper/tmux-wrapper.d.ts +73 -11
  420. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  421. package/dist/wrapper/tmux-wrapper.js +541 -120
  422. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  423. package/docs/CLOUD-ARCHITECTURE.md +152 -0
  424. package/docs/HOOKS_API.md +394 -0
  425. package/docs/WRAPPER_EVENTS.md +358 -0
  426. package/docs/agent-policy-snippet.md +40 -0
  427. package/docs/agent-relay-protocol.md +238 -0
  428. package/docs/agent-relay-snippet.md +53 -47
  429. package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
  430. package/docs/archive/ROADMAP.md +329 -0
  431. package/docs/competitive/GASTOWN.md +451 -0
  432. package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
  433. package/docs/competitive/README.md +34 -0
  434. package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
  435. package/docs/dashboard.png +0 -0
  436. package/docs/design/ci-failure-webhooks.md +812 -0
  437. package/docs/design/comprehensive-integrations.md +238 -0
  438. package/docs/design/e2b-sandbox-integration.md +504 -0
  439. package/docs/design/github-app-permissions.md +264 -0
  440. package/docs/local-testing.md +428 -0
  441. package/docs/proposals/continuous-claude-integration.md +622 -0
  442. package/docs/proposals/custom-commands.md +368 -0
  443. package/docs/tasks/global-skills-system.tasks.md +230 -0
  444. package/docs/tasks/webhook-integrations.tasks.md +184 -0
  445. package/docs/tasks/workspace-capabilities.tasks.md +121 -0
  446. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
  447. package/package.json +16 -7
  448. package/scripts/cloud-setup.sh +96 -0
  449. package/scripts/manual-qa.sh +293 -0
  450. package/scripts/postinstall.js +60 -0
  451. package/scripts/run-cloud-qa.sh +220 -0
  452. package/scripts/test-cli-auth/Dockerfile +44 -0
  453. package/scripts/test-cli-auth/Dockerfile.real +79 -0
  454. package/scripts/test-cli-auth/README.md +286 -0
  455. package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
  456. package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
  457. package/scripts/test-cli-auth/mock-cli.sh +147 -0
  458. package/scripts/test-cli-auth/package.json +14 -0
  459. package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
  460. package/scripts/test-pty-input-auto.js +222 -0
  461. package/scripts/test-pty-input.js +150 -0
  462. package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +0 -1
  463. package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +0 -1
  464. package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +0 -1
  465. package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +0 -1
  466. package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +0 -1
  467. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +0 -1
  468. package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +0 -1
  469. package/dist/dashboard/out/_next/static/chunks/webpack-a5acc2831d094776.js +0 -1
  470. package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +0 -1
  471. package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +0 -1
  472. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
  473. /package/dist/dashboard/out/_next/static/{6HHWb2ZmnJ4OSm0zUP7h4 → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
  474. /package/dist/dashboard/out/_next/static/chunks/{117-b2cd8d6485aacf2b.js → 117-b100311aff8d5c61.js} +0 -0
  475. /package/dist/dashboard/out/_next/static/chunks/{648-8f3f26864ce515e5.js → 648-a13d3c2b1be45466.js} +0 -0
  476. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-0b990dbb71d72a98.js → page-a4973f3e3c82fb67.js} +0 -0
  477. /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-d80e03a5297f95b6.js → page-4d72d5a5d8a9b618.js} +0 -0
  478. /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
  479. /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
  480. /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
  481. /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
  482. /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
  483. /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
  484. /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
  485. /package/docs/{TESTING_PRESENCE_FEATURES.md → archive/TESTING_PRESENCE_FEATURES.md} +0 -0
  486. /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
  487. /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
  488. /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
  489. /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
  490. /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-relay",
3
- "version": "1.1.0",
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",
@@ -39,6 +39,10 @@
39
39
  "dashboard": "node dist/dashboard-server/start.js",
40
40
  "pretest": "npm run build",
41
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",
42
46
  "pretest:coverage": "npm run build",
43
47
  "test:coverage": "vitest run --coverage",
44
48
  "test:watch": "vitest",
@@ -51,9 +55,10 @@
51
55
  "services:up": "docker compose -f docker-compose.dev.yml up -d postgres redis && echo '✓ Postgres and Redis running'",
52
56
  "services:down": "docker compose -f docker-compose.dev.yml down",
53
57
  "services:logs": "docker compose -f docker-compose.dev.yml logs -f postgres redis",
54
- "cloud:api": "node dist/cloud/index.js",
55
- "precloud": "npm run clean && tsc && chmod +x dist/cli/index.js && npm run services:up",
56
- "cloud": "concurrently -n api,daemon,dashboard -c cyan,blue,magenta \"npm run cloud:api\" \"npm run dev:daemon\" \"npm run dev:dashboard\""
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\""
57
62
  },
58
63
  "keywords": [
59
64
  "agent",
@@ -69,13 +74,16 @@
69
74
  "license": "MIT",
70
75
  "repository": {
71
76
  "type": "git",
72
- "url": "git+https://github.com/khaliqgant/agent-relay.git"
77
+ "url": "git+https://github.com/AgentWorkforce/relay.git"
73
78
  },
74
79
  "bugs": {
75
- "url": "https://github.com/khaliqgant/agent-relay/issues"
80
+ "url": "https://github.com/AgentWorkforce/relay/issues"
76
81
  },
77
- "homepage": "https://github.com/khaliqgant/agent-relay#readme",
82
+ "homepage": "https://github.com/AgentWorkforce/relay#readme",
78
83
  "dependencies": {
84
+ "@nangohq/node": "^0.69.20",
85
+ "@types/jsonwebtoken": "^9.0.10",
86
+ "agent-trajectories": "^0.1.1",
79
87
  "better-sqlite3": "^9.4.3",
80
88
  "chokidar": "^5.0.0",
81
89
  "commander": "^12.1.0",
@@ -88,6 +96,7 @@
88
96
  "express-session": "^1.18.2",
89
97
  "helmet": "^8.1.0",
90
98
  "http-proxy-middleware": "^3.0.5",
99
+ "jsonwebtoken": "^9.0.3",
91
100
  "node-pty": "1.0.0",
92
101
  "pg": "^8.16.3",
93
102
  "redis": "^5.10.0",
@@ -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 ""
@@ -0,0 +1,293 @@
1
+ #!/bin/bash
2
+ #
3
+ # Agent Relay Cloud - Manual QA Testing Setup
4
+ #
5
+ # This script sets up everything for manual browser-based QA testing:
6
+ # - PostgreSQL and Redis (via Docker)
7
+ # - Cloud API server (local, with test mode)
8
+ # - Daemon simulators generating test data
9
+ # - Creates test user for dashboard access
10
+ #
11
+ # Usage:
12
+ # ./scripts/manual-qa.sh # Start everything
13
+ # ./scripts/manual-qa.sh --stop # Stop all services
14
+ # ./scripts/manual-qa.sh --create-data # Create test data only
15
+ #
16
+
17
+ set -e
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
21
+
22
+ # Colors
23
+ RED='\033[0;31m'
24
+ GREEN='\033[0;32m'
25
+ YELLOW='\033[1;33m'
26
+ BLUE='\033[0;34m'
27
+ CYAN='\033[0;36m'
28
+ NC='\033[0m'
29
+
30
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
31
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
32
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
33
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
34
+ log_header() { echo -e "\n${CYAN}=== $1 ===${NC}\n"; }
35
+
36
+ # Parse arguments
37
+ STOP_ONLY=false
38
+ CREATE_DATA_ONLY=false
39
+
40
+ while [[ "$#" -gt 0 ]]; do
41
+ case $1 in
42
+ --stop) STOP_ONLY=true ;;
43
+ --create-data) CREATE_DATA_ONLY=true ;;
44
+ -h|--help)
45
+ echo "Usage: $0 [options]"
46
+ echo ""
47
+ echo "Options:"
48
+ echo " --stop Stop all services"
49
+ echo " --create-data Create test data only (assumes services running)"
50
+ echo " -h, --help Show this help"
51
+ exit 0
52
+ ;;
53
+ *) log_error "Unknown option: $1"; exit 1 ;;
54
+ esac
55
+ shift
56
+ done
57
+
58
+ cd "$PROJECT_DIR"
59
+
60
+ # Stop services
61
+ stop_services() {
62
+ log_header "Stopping Services"
63
+
64
+ # Stop daemon simulators
65
+ pkill -f "daemon-simulator" 2>/dev/null || true
66
+
67
+ # Stop cloud server
68
+ pkill -f "node dist/cloud/index.js" 2>/dev/null || true
69
+
70
+ # Stop Docker services
71
+ docker compose -f docker-compose.dev.yml down 2>/dev/null || true
72
+
73
+ log_success "All services stopped"
74
+ }
75
+
76
+ if [ "$STOP_ONLY" = true ]; then
77
+ stop_services
78
+ exit 0
79
+ fi
80
+
81
+ # Create test data
82
+ create_test_data() {
83
+ log_header "Creating Test Data"
84
+
85
+ local API_URL="${1:-http://localhost:3000}"
86
+
87
+ # Wait for API to be ready
88
+ log_info "Waiting for API..."
89
+ for i in {1..30}; do
90
+ if curl -sf "$API_URL/health" >/dev/null 2>&1; then
91
+ break
92
+ fi
93
+ if [ $i -eq 30 ]; then
94
+ log_error "API not available"
95
+ return 1
96
+ fi
97
+ sleep 1
98
+ done
99
+
100
+ # Create test user
101
+ log_info "Creating test user..."
102
+ USER_RESPONSE=$(curl -sf -X POST "$API_URL/api/test/create-user" \
103
+ -H "Content-Type: application/json" \
104
+ -d '{"email": "qa@test.local", "name": "QA Tester"}' 2>/dev/null || echo "")
105
+
106
+ if [ -n "$USER_RESPONSE" ]; then
107
+ USER_ID=$(echo "$USER_RESPONSE" | grep -o '"userId":"[^"]*"' | cut -d'"' -f4)
108
+ log_success "Created test user: $USER_ID"
109
+ else
110
+ log_warn "Could not create test user (may already exist or test mode disabled)"
111
+ fi
112
+
113
+ # Create test daemons
114
+ log_info "Creating test daemons..."
115
+
116
+ for i in 1 2 3; do
117
+ DAEMON_RESPONSE=$(curl -sf -X POST "$API_URL/api/test/create-daemon" \
118
+ -H "Content-Type: application/json" \
119
+ -d "{\"name\": \"qa-daemon-$i\", \"machineId\": \"qa-machine-$i\"}" 2>/dev/null || echo "")
120
+
121
+ if [ -n "$DAEMON_RESPONSE" ]; then
122
+ DAEMON_ID=$(echo "$DAEMON_RESPONSE" | grep -o '"daemonId":"[^"]*"' | cut -d'"' -f4)
123
+ API_KEY=$(echo "$DAEMON_RESPONSE" | grep -o '"apiKey":"[^"]*"' | cut -d'"' -f4)
124
+ log_success "Created daemon $i: $DAEMON_ID"
125
+
126
+ # Save API key for simulator
127
+ echo "$API_KEY" > "/tmp/qa-daemon-$i.key"
128
+ fi
129
+ done
130
+
131
+ log_success "Test data created!"
132
+ }
133
+
134
+ if [ "$CREATE_DATA_ONLY" = true ]; then
135
+ create_test_data
136
+ exit 0
137
+ fi
138
+
139
+ # Main setup
140
+ log_header "Agent Relay - Manual QA Setup"
141
+
142
+ # Check prerequisites
143
+ if ! docker info >/dev/null 2>&1; then
144
+ log_error "Docker is not running"
145
+ exit 1
146
+ fi
147
+
148
+ if ! command -v node >/dev/null 2>&1; then
149
+ log_error "Node.js is required"
150
+ exit 1
151
+ fi
152
+
153
+ # Step 1: Build if needed
154
+ if [ ! -d "dist" ]; then
155
+ log_header "Building Project"
156
+ npm run build
157
+ fi
158
+
159
+ # Step 2: Start infrastructure
160
+ log_header "Starting Infrastructure"
161
+
162
+ docker compose -f docker-compose.dev.yml up -d postgres redis
163
+
164
+ log_info "Waiting for PostgreSQL..."
165
+ for i in {1..30}; do
166
+ if docker compose -f docker-compose.dev.yml exec -T postgres pg_isready -U agent_relay >/dev/null 2>&1; then
167
+ log_success "PostgreSQL is ready"
168
+ break
169
+ fi
170
+ if [ $i -eq 30 ]; then
171
+ log_error "PostgreSQL failed to start"
172
+ exit 1
173
+ fi
174
+ sleep 1
175
+ done
176
+
177
+ log_info "Waiting for Redis..."
178
+ for i in {1..30}; do
179
+ if docker compose -f docker-compose.dev.yml exec -T redis redis-cli ping >/dev/null 2>&1; then
180
+ log_success "Redis is ready"
181
+ break
182
+ fi
183
+ if [ $i -eq 30 ]; then
184
+ log_error "Redis failed to start"
185
+ exit 1
186
+ fi
187
+ sleep 1
188
+ done
189
+
190
+ # Step 3: Start Cloud API server
191
+ log_header "Starting Cloud API Server"
192
+
193
+ export NODE_ENV=development
194
+ export PORT=3000
195
+ export PUBLIC_URL=http://localhost:3000
196
+ export DATABASE_URL="postgres://agent_relay:dev_password@localhost:5432/agent_relay"
197
+ export REDIS_URL="redis://localhost:6379"
198
+ export SESSION_SECRET="dev-session-secret"
199
+ export VAULT_MASTER_KEY="ZGV2LXZhdWx0LWtleS1jaGFuZ2UtaW4tcHJvZHVjdGlvbg=="
200
+ export RELAY_CLOUD_ENABLED=true
201
+ export RELAY_MEMORY_MONITORING=true
202
+
203
+ # Start cloud server in background
204
+ node dist/cloud/index.js &
205
+ CLOUD_PID=$!
206
+ echo $CLOUD_PID > /tmp/cloud-server.pid
207
+
208
+ log_info "Cloud server starting (PID: $CLOUD_PID)..."
209
+
210
+ # Wait for cloud server
211
+ for i in {1..60}; do
212
+ if curl -sf http://localhost:3000/health >/dev/null 2>&1; then
213
+ log_success "Cloud API server is ready"
214
+ break
215
+ fi
216
+ if [ $i -eq 60 ]; then
217
+ log_error "Cloud server failed to start"
218
+ exit 1
219
+ fi
220
+ sleep 1
221
+ done
222
+
223
+ # Step 4: Create test data
224
+ create_test_data "http://localhost:3000"
225
+
226
+ # Step 5: Start daemon simulators
227
+ log_header "Starting Daemon Simulators"
228
+
229
+ # Check if tsx is available, otherwise use ts-node or compile
230
+ if command -v tsx >/dev/null 2>&1; then
231
+ TSX_CMD="tsx"
232
+ elif command -v ts-node >/dev/null 2>&1; then
233
+ TSX_CMD="ts-node"
234
+ else
235
+ log_warn "No TypeScript runner found, skipping simulators"
236
+ TSX_CMD=""
237
+ fi
238
+
239
+ if [ -n "$TSX_CMD" ] && [ -f "test/cloud/daemon-simulator.ts" ]; then
240
+ # Start simulator 1 - normal operation
241
+ DAEMON_NAME=qa-daemon-1 \
242
+ CLOUD_API_URL=http://localhost:3000 \
243
+ AGENT_COUNT=3 \
244
+ REPORT_INTERVAL_MS=5000 \
245
+ SIMULATE_MEMORY_GROWTH=false \
246
+ $TSX_CMD test/cloud/daemon-simulator.ts &
247
+ echo $! > /tmp/simulator-1.pid
248
+ log_info "Started simulator 1 (PID: $!)"
249
+
250
+ # Start simulator 2 - memory growth
251
+ DAEMON_NAME=qa-daemon-2 \
252
+ CLOUD_API_URL=http://localhost:3000 \
253
+ AGENT_COUNT=2 \
254
+ REPORT_INTERVAL_MS=5000 \
255
+ SIMULATE_MEMORY_GROWTH=true \
256
+ $TSX_CMD test/cloud/daemon-simulator.ts &
257
+ echo $! > /tmp/simulator-2.pid
258
+ log_info "Started simulator 2 (PID: $!)"
259
+
260
+ sleep 3
261
+ log_success "Daemon simulators running"
262
+ else
263
+ log_warn "Daemon simulators not started (tsx/ts-node not available)"
264
+ fi
265
+
266
+ # Done!
267
+ log_header "Manual QA Environment Ready!"
268
+
269
+ echo -e "${GREEN}Access Points:${NC}"
270
+ echo " - Dashboard: http://localhost:3000"
271
+ echo " - API Health: http://localhost:3000/health"
272
+ echo " - Metrics: http://localhost:3000/metrics"
273
+ echo ""
274
+ echo -e "${GREEN}Test Endpoints:${NC}"
275
+ echo " - GET /api/test/status - Check test mode"
276
+ echo " - POST /api/test/create-user - Create test user"
277
+ echo " - POST /api/test/create-daemon - Create test daemon"
278
+ echo ""
279
+ echo -e "${GREEN}Database Access:${NC}"
280
+ echo " psql postgres://agent_relay:dev_password@localhost:5432/agent_relay"
281
+ echo ""
282
+ echo -e "${GREEN}Redis Access:${NC}"
283
+ echo " redis-cli -h localhost -p 6379"
284
+ echo ""
285
+ echo -e "${YELLOW}Note:${NC} OAuth is bypassed in test mode. Use /api/test endpoints to create users."
286
+ echo ""
287
+ echo -e "To stop: ${CYAN}./scripts/manual-qa.sh --stop${NC}"
288
+ echo ""
289
+
290
+ # Keep script running to show logs
291
+ log_info "Showing cloud server logs (Ctrl+C to exit, services keep running)..."
292
+ echo ""
293
+ tail -f /dev/null
@@ -224,10 +224,70 @@ function installDashboardDeps() {
224
224
  }
225
225
  }
226
226
 
227
+ /**
228
+ * Patch agent-trajectories CLI to record agent info on start
229
+ */
230
+ function patchAgentTrajectories() {
231
+ const pkgRoot = getPackageRoot();
232
+ const cliPath = path.join(pkgRoot, 'node_modules', 'agent-trajectories', 'dist', 'cli', 'index.js');
233
+
234
+ if (!fs.existsSync(cliPath)) {
235
+ info('agent-trajectories not installed, skipping patch');
236
+ return;
237
+ }
238
+
239
+ const content = fs.readFileSync(cliPath, 'utf-8');
240
+
241
+ // If already patched, exit early
242
+ if (content.includes('--agent <name>') && content.includes('trajectory.agents.push')) {
243
+ info('agent-trajectories already patched');
244
+ return;
245
+ }
246
+
247
+ const optionNeedle = '.option("-t, --task <id>", "External task ID").option("-s, --source <system>", "Task system (github, linear, jira, beads)").option("--url <url>", "URL to external task")';
248
+ const optionReplacement = `${optionNeedle}.option("-a, --agent <name>", "Agent name starting the trajectory").option("-r, --role <role>", "Agent role (lead, contributor, reviewer)")`;
249
+
250
+ const createNeedle = ` const trajectory = createTrajectory({
251
+ title,
252
+ source
253
+ });
254
+ await storage.save(trajectory);`;
255
+
256
+ const createReplacement = ` const agentName = options.agent || process.env.AGENT_NAME || process.env.AGENT_RELAY_NAME || process.env.USER || process.env.USERNAME;
257
+ const agentRole = options.role || "lead";
258
+ const trajectory = createTrajectory({
259
+ title,
260
+ source
261
+ });
262
+ if (agentName) {
263
+ trajectory.agents.push({
264
+ name: agentName,
265
+ role: ["lead", "contributor", "reviewer"].includes(agentRole) ? agentRole : "lead",
266
+ joinedAt: (/* @__PURE__ */ new Date()).toISOString()
267
+ });
268
+ }
269
+ await storage.save(trajectory);`;
270
+
271
+ if (!content.includes(optionNeedle) || !content.includes(createNeedle)) {
272
+ warn('agent-trajectories CLI format changed, skipping patch');
273
+ return;
274
+ }
275
+
276
+ const updated = content
277
+ .replace(optionNeedle, optionReplacement)
278
+ .replace(createNeedle, createReplacement);
279
+
280
+ fs.writeFileSync(cliPath, updated, 'utf-8');
281
+ success('Patched agent-trajectories to record agent on trail start');
282
+ }
283
+
227
284
  /**
228
285
  * Main postinstall routine
229
286
  */
230
287
  async function main() {
288
+ // Ensure trail CLI captures agent info on start
289
+ patchAgentTrajectories();
290
+
231
291
  // Always install dashboard dependencies (needed for build)
232
292
  installDashboardDeps();
233
293