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,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
 
@@ -0,0 +1,220 @@
1
+ #!/bin/bash
2
+ #
3
+ # Agent Relay Cloud - Full QA Test Runner
4
+ #
5
+ # This script runs the complete cloud QA test suite locally using Docker.
6
+ # It simulates the production environment with:
7
+ # - PostgreSQL database
8
+ # - Redis for sessions/pub-sub
9
+ # - Cloud API server
10
+ # - Simulated daemons reporting metrics
11
+ # - Integration tests
12
+ #
13
+ # Usage:
14
+ # ./scripts/run-cloud-qa.sh # Run all tests
15
+ # ./scripts/run-cloud-qa.sh --quick # Quick smoke test
16
+ # ./scripts/run-cloud-qa.sh --cleanup # Cleanup only
17
+ # ./scripts/run-cloud-qa.sh --logs # Show logs after tests
18
+ #
19
+
20
+ set -e
21
+
22
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
23
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
24
+ COMPOSE_FILE="$PROJECT_DIR/docker-compose.test.yml"
25
+
26
+ # Colors for output
27
+ RED='\033[0;31m'
28
+ GREEN='\033[0;32m'
29
+ YELLOW='\033[1;33m'
30
+ BLUE='\033[0;34m'
31
+ NC='\033[0m' # No Color
32
+
33
+ log_info() {
34
+ echo -e "${BLUE}[INFO]${NC} $1"
35
+ }
36
+
37
+ log_success() {
38
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
39
+ }
40
+
41
+ log_warn() {
42
+ echo -e "${YELLOW}[WARN]${NC} $1"
43
+ }
44
+
45
+ log_error() {
46
+ echo -e "${RED}[ERROR]${NC} $1"
47
+ }
48
+
49
+ # Parse arguments
50
+ QUICK_MODE=false
51
+ CLEANUP_ONLY=false
52
+ SHOW_LOGS=false
53
+ KEEP_RUNNING=false
54
+
55
+ while [[ "$#" -gt 0 ]]; do
56
+ case $1 in
57
+ --quick) QUICK_MODE=true ;;
58
+ --cleanup) CLEANUP_ONLY=true ;;
59
+ --logs) SHOW_LOGS=true ;;
60
+ --keep) KEEP_RUNNING=true ;;
61
+ -h|--help)
62
+ echo "Usage: $0 [options]"
63
+ echo ""
64
+ echo "Options:"
65
+ echo " --quick Run quick smoke test only"
66
+ echo " --cleanup Cleanup test containers and volumes"
67
+ echo " --logs Show container logs after tests"
68
+ echo " --keep Keep containers running after tests"
69
+ echo " -h, --help Show this help message"
70
+ exit 0
71
+ ;;
72
+ *) log_error "Unknown option: $1"; exit 1 ;;
73
+ esac
74
+ shift
75
+ done
76
+
77
+ # Cleanup function
78
+ cleanup() {
79
+ log_info "Cleaning up test environment..."
80
+ docker compose -f "$COMPOSE_FILE" down -v --remove-orphans 2>/dev/null || true
81
+ log_success "Cleanup complete"
82
+ }
83
+
84
+ # Handle SIGINT/SIGTERM
85
+ trap cleanup EXIT
86
+
87
+ # Cleanup only mode
88
+ if [ "$CLEANUP_ONLY" = true ]; then
89
+ cleanup
90
+ exit 0
91
+ fi
92
+
93
+ # Check Docker is running
94
+ if ! docker info >/dev/null 2>&1; then
95
+ log_error "Docker is not running. Please start Docker and try again."
96
+ exit 1
97
+ fi
98
+
99
+ # Check docker-compose file exists
100
+ if [ ! -f "$COMPOSE_FILE" ]; then
101
+ log_error "docker-compose.test.yml not found at: $COMPOSE_FILE"
102
+ exit 1
103
+ fi
104
+
105
+ log_info "=========================================="
106
+ log_info "Agent Relay Cloud - QA Test Suite"
107
+ log_info "=========================================="
108
+ echo ""
109
+
110
+ # Step 1: Build images
111
+ log_info "Step 1: Building Docker images..."
112
+ docker compose -f "$COMPOSE_FILE" build --quiet
113
+
114
+ # Step 2: Start infrastructure (PostgreSQL, Redis)
115
+ log_info "Step 2: Starting infrastructure..."
116
+ docker compose -f "$COMPOSE_FILE" up -d postgres redis
117
+
118
+ # Wait for services to be healthy
119
+ log_info "Waiting for PostgreSQL and Redis..."
120
+ for i in {1..30}; do
121
+ if docker compose -f "$COMPOSE_FILE" ps postgres | grep -q "healthy" && \
122
+ docker compose -f "$COMPOSE_FILE" ps redis | grep -q "healthy"; then
123
+ log_success "Infrastructure is ready"
124
+ break
125
+ fi
126
+ if [ $i -eq 30 ]; then
127
+ log_error "Infrastructure failed to become healthy"
128
+ docker compose -f "$COMPOSE_FILE" logs postgres redis
129
+ exit 1
130
+ fi
131
+ sleep 1
132
+ done
133
+
134
+ # Step 3: Start cloud server
135
+ log_info "Step 3: Starting Cloud API server..."
136
+ docker compose -f "$COMPOSE_FILE" up -d cloud
137
+
138
+ # Wait for cloud server
139
+ log_info "Waiting for Cloud API server..."
140
+ for i in {1..60}; do
141
+ if curl -sf http://localhost:3100/health >/dev/null 2>&1; then
142
+ log_success "Cloud API server is ready"
143
+ break
144
+ fi
145
+ if [ $i -eq 60 ]; then
146
+ log_error "Cloud API server failed to start"
147
+ docker compose -f "$COMPOSE_FILE" logs cloud
148
+ exit 1
149
+ fi
150
+ sleep 1
151
+ done
152
+
153
+ # Step 4: Start daemon simulators
154
+ log_info "Step 4: Starting daemon simulators..."
155
+ docker compose -f "$COMPOSE_FILE" up -d daemon-simulator-1 daemon-simulator-2
156
+
157
+ # Give simulators time to connect and report metrics
158
+ log_info "Waiting for simulators to connect..."
159
+ sleep 10
160
+
161
+ if [ "$QUICK_MODE" = true ]; then
162
+ # Quick smoke test
163
+ log_info "Running quick smoke test..."
164
+
165
+ # Test health endpoint
166
+ if curl -sf http://localhost:3100/health >/dev/null; then
167
+ log_success "Health check passed"
168
+ else
169
+ log_error "Health check failed"
170
+ exit 1
171
+ fi
172
+
173
+ # Test API is responding
174
+ if curl -sf http://localhost:3100/api/test/status >/dev/null; then
175
+ log_success "Test API responding"
176
+ else
177
+ log_warn "Test API not available (may be in production mode)"
178
+ fi
179
+
180
+ log_success "Quick smoke test passed!"
181
+ else
182
+ # Step 5: Run integration tests
183
+ log_info "Step 5: Running integration tests..."
184
+
185
+ # Run the test runner container
186
+ docker compose -f "$COMPOSE_FILE" --profile test run --rm test-runner
187
+ TEST_EXIT_CODE=$?
188
+
189
+ if [ $TEST_EXIT_CODE -eq 0 ]; then
190
+ log_success "All integration tests passed!"
191
+ else
192
+ log_error "Integration tests failed with exit code: $TEST_EXIT_CODE"
193
+ fi
194
+ fi
195
+
196
+ # Show logs if requested
197
+ if [ "$SHOW_LOGS" = true ]; then
198
+ log_info "Container logs:"
199
+ echo ""
200
+ docker compose -f "$COMPOSE_FILE" logs --tail=100
201
+ fi
202
+
203
+ # Keep running if requested
204
+ if [ "$KEEP_RUNNING" = true ]; then
205
+ log_info "Containers are still running. Press Ctrl+C to stop."
206
+ log_info "Cloud API: http://localhost:3100"
207
+ log_info "PostgreSQL: localhost:5433"
208
+ log_info "Redis: localhost:6380"
209
+ # Disable cleanup trap
210
+ trap - EXIT
211
+ # Wait forever
212
+ while true; do sleep 3600; done
213
+ else
214
+ log_info "Cleaning up..."
215
+ fi
216
+
217
+ echo ""
218
+ log_info "=========================================="
219
+ log_info "QA Test Suite Complete"
220
+ log_info "=========================================="
@@ -0,0 +1,44 @@
1
+ # CLI OAuth Flow Test Container
2
+ #
3
+ # This container simulates the AI provider CLIs for testing
4
+ # the OAuth URL capture flow without actual provider accounts.
5
+ #
6
+ # Usage:
7
+ # docker build -t cli-oauth-test scripts/test-cli-auth/
8
+ # docker run --rm cli-oauth-test
9
+ #
10
+ # For interactive testing:
11
+ # docker run --rm -it cli-oauth-test bash
12
+ # claude # Run mock Claude CLI
13
+ # codex login # Run mock Codex CLI
14
+
15
+ FROM node:20-slim
16
+
17
+ # Install dependencies
18
+ RUN apt-get update && apt-get install -y \
19
+ bash \
20
+ && rm -rf /var/lib/apt/lists/*
21
+
22
+ WORKDIR /app
23
+
24
+ # Copy mock CLI script
25
+ COPY mock-cli.sh /usr/local/bin/mock-cli
26
+ RUN chmod +x /usr/local/bin/mock-cli
27
+
28
+ # Create symlinks for each provider CLI
29
+ # The mock-cli.sh auto-detects the provider from $0
30
+ RUN ln -s /usr/local/bin/mock-cli /usr/local/bin/claude && \
31
+ ln -s /usr/local/bin/mock-cli /usr/local/bin/codex && \
32
+ ln -s /usr/local/bin/mock-cli /usr/local/bin/gemini && \
33
+ ln -s /usr/local/bin/mock-cli /usr/local/bin/opencode && \
34
+ ln -s /usr/local/bin/mock-cli /usr/local/bin/droid
35
+
36
+ # Copy test files
37
+ COPY ci-test-runner.ts /app/
38
+ COPY package.json /app/
39
+
40
+ # Install test dependencies
41
+ RUN npm install
42
+
43
+ # Default command runs the CI tests
44
+ CMD ["npx", "tsx", "/app/ci-test-runner.ts"]
@@ -0,0 +1,79 @@
1
+ # CLI OAuth Flow Test Container - Real CLIs
2
+ #
3
+ # This container installs the actual AI provider CLIs and tests
4
+ # URL extraction from their OAuth flows.
5
+ #
6
+ # Installation methods match deploy/workspace/Dockerfile to ensure consistency.
7
+ #
8
+ # Usage:
9
+ # docker build -f Dockerfile.real -t cli-oauth-test-real scripts/test-cli-auth/
10
+ # docker run --rm cli-oauth-test-real
11
+ #
12
+ # For interactive testing:
13
+ # docker run --rm -it cli-oauth-test-real bash
14
+
15
+ FROM node:20-slim
16
+
17
+ # Install system dependencies (matches deploy/workspace/Dockerfile)
18
+ RUN apt-get update && apt-get install -y \
19
+ bash \
20
+ ca-certificates \
21
+ curl \
22
+ git \
23
+ python3 \
24
+ make \
25
+ g++ \
26
+ jq \
27
+ && rm -rf /var/lib/apt/lists/*
28
+
29
+ WORKDIR /app
30
+
31
+ # Install npm-based CLIs globally as root (npm -g requires root)
32
+ RUN npm install -g @openai/codex || echo "Codex install failed"
33
+ RUN npm install -g @google/gemini-cli || echo "Gemini install failed"
34
+ RUN npm install -g opencode-ai@latest || echo "OpenCode install failed"
35
+
36
+ # Create test user (CLIs install to ~/.local/bin)
37
+ RUN useradd -m -u 1001 testuser
38
+ RUN chown -R testuser:testuser /app
39
+ USER testuser
40
+
41
+ # Install AI CLIs as testuser (these install scripts write to ~/.local/bin)
42
+
43
+ # Claude - uses official install script
44
+ RUN curl -fsSL https://claude.ai/install.sh | bash || echo "Claude install failed"
45
+ # Note: We don't pre-seed Claude config - we want to test the full interactive flow
46
+ # including the dark mode and auth method prompts
47
+
48
+ # Note: OpenCode is installed as root above via npm
49
+
50
+ # Droid - uses official install script
51
+ RUN curl -fsSL https://app.factory.ai/cli | sh || echo "Droid install failed"
52
+
53
+ # Add user's local bin to PATH
54
+ ENV PATH="/home/testuser/.local/bin:$PATH"
55
+
56
+ # Copy test files and source dependencies
57
+ # Context is repo root, so paths are relative to that
58
+ COPY --chown=testuser:testuser scripts/test-cli-auth/ci-test-real-clis.ts /app/
59
+ COPY --chown=testuser:testuser scripts/test-cli-auth/package.json /app/
60
+
61
+ # Copy source modules maintaining the relative path structure
62
+ # cli-pty-runner.ts imports from '../../shared/cli-auth-config.js'
63
+ # So we need: /app/src/cloud/api/cli-pty-runner.ts -> /app/src/shared/cli-auth-config.ts
64
+ COPY --chown=testuser:testuser src/cloud/api/cli-pty-runner.ts /app/src/cloud/api/
65
+ COPY --chown=testuser:testuser src/shared/cli-auth-config.ts /app/src/shared/
66
+
67
+ # Install test dependencies
68
+ RUN npm install
69
+
70
+ # Verify which CLIs are installed
71
+ RUN echo "=== Installed CLIs ===" && \
72
+ (which claude && claude --version 2>&1 | head -1) || echo "claude: not found" && \
73
+ (which codex && codex --version 2>&1 | head -1) || echo "codex: not found" && \
74
+ (which gemini && gemini --version 2>&1 | head -1) || echo "gemini: not found" && \
75
+ (which opencode && opencode --version 2>&1 | head -1) || echo "opencode: not found" && \
76
+ (which droid && droid --version 2>&1 | head -1) || echo "droid: not found"
77
+
78
+ # Default command runs the CI tests
79
+ CMD ["npx", "tsx", "/app/ci-test-real-clis.ts"]