agent-relay 1.2.0 → 1.2.3

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 (540) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  4. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  5. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  6. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  7. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  8. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  9. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  10. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  11. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  12. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  13. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  14. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  15. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  16. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  17. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  18. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  19. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  20. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  21. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  22. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  23. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  24. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  25. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  26. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  27. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  28. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  29. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  30. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  31. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  32. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  33. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  34. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  35. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  36. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  37. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  38. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  39. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  40. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  41. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  42. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  43. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  44. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  45. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  46. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  47. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  48. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  49. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  50. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  51. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  52. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  53. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  54. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  55. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  56. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  57. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  58. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  59. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  60. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  61. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  62. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  63. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  64. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  65. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  66. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  67. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  68. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  69. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  70. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  71. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  72. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  73. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  74. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  75. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  76. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  77. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  78. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  79. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  80. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  81. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  82. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  83. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  84. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  85. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  86. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  87. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  88. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  89. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  90. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  91. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  92. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  93. package/.trajectories/index.json +314 -0
  94. package/ARCHITECTURE.md +1245 -0
  95. package/TESTING.md +278 -0
  96. package/deploy/init-db.sql +5 -0
  97. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  98. package/deploy/scripts/setup-railway.sh +75 -0
  99. package/deploy/workspace/entrypoint-browser.sh +118 -0
  100. package/deploy/workspace/entrypoint.sh +348 -0
  101. package/deploy/workspace/git-credential-relay +111 -0
  102. package/dist/cli/index.js +218 -1
  103. package/dist/cloud/api/billing.js +30 -9
  104. package/dist/cloud/api/codex-auth-helper.d.ts +15 -0
  105. package/dist/cloud/api/codex-auth-helper.js +100 -0
  106. package/dist/cloud/api/git.js +24 -3
  107. package/dist/cloud/api/onboarding.js +15 -2
  108. package/dist/cloud/api/repos.d.ts +1 -0
  109. package/dist/cloud/api/repos.js +186 -0
  110. package/dist/cloud/api/webhooks.d.ts +1 -0
  111. package/dist/cloud/api/webhooks.js +149 -0
  112. package/dist/cloud/api/workspaces.js +97 -6
  113. package/dist/cloud/billing/plans.js +19 -19
  114. package/dist/cloud/provisioner/index.d.ts +32 -0
  115. package/dist/cloud/provisioner/index.js +362 -21
  116. package/dist/cloud/server.js +6 -1
  117. package/dist/cloud/services/nango.d.ts +60 -0
  118. package/dist/cloud/services/nango.js +153 -0
  119. package/dist/cloud/services/planLimits.d.ts +22 -0
  120. package/dist/cloud/services/planLimits.js +58 -5
  121. package/dist/dashboard/out/404.html +1 -1
  122. package/dist/dashboard/out/_next/static/chunks/699-3b1cd6618a45d259.js +1 -0
  123. package/dist/dashboard/out/_next/static/chunks/766-1f2dd8cb7f766b0b.js +1 -0
  124. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-3fdfa60e53f2810d.js +1 -0
  125. package/dist/dashboard/out/_next/static/chunks/app/app/page-e6381e5a6e1fbcfd.js +1 -0
  126. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-3538dfe0ffe984b8.js +1 -0
  127. package/dist/dashboard/out/_next/static/chunks/app/history/{page-56a8b4616a90dc43.js → page-abb9ab2d329f56e9.js} +1 -1
  128. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  129. package/dist/dashboard/out/_next/static/chunks/app/login/{page-3eac37ea6f5dd153.js → page-c22d080201cbd9fb.js} +1 -1
  130. package/dist/dashboard/out/_next/static/chunks/app/metrics/{page-1081dd190a331a91.js → page-67a3e98d9a43a6ed.js} +1 -1
  131. package/dist/dashboard/out/_next/static/chunks/app/{page-daf87e86f783f980.js → page-77e9c65420a06cfb.js} +1 -1
  132. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-b08ed1c34d14434a.js +1 -0
  133. package/dist/dashboard/out/_next/static/chunks/app/providers/page-e88bc117ef7671c3.js +1 -0
  134. package/dist/dashboard/out/_next/static/chunks/app/signup/{page-fee4ed1709070bcd.js → page-68d34f50baa8ab6b.js} +1 -1
  135. package/dist/dashboard/out/_next/static/chunks/{main-app-5d692157a8eb1fd9.js → main-app-6e8e8d3ef4e0192a.js} +1 -1
  136. package/dist/dashboard/out/_next/static/chunks/{main-97850e03d723ea8c.js → main-ed4e1fb6f29c34cf.js} +1 -1
  137. package/dist/dashboard/out/_next/static/css/7c3ae9e8617d42a5.css +1 -0
  138. package/dist/dashboard/out/app/onboarding.html +1 -0
  139. package/dist/dashboard/out/app/onboarding.txt +7 -0
  140. package/dist/dashboard/out/app.html +1 -1
  141. package/dist/dashboard/out/app.txt +2 -2
  142. package/dist/dashboard/out/connect-repos.html +1 -1
  143. package/dist/dashboard/out/connect-repos.txt +2 -2
  144. package/dist/dashboard/out/history.html +1 -1
  145. package/dist/dashboard/out/history.txt +2 -2
  146. package/dist/dashboard/out/index.html +1 -1
  147. package/dist/dashboard/out/index.txt +2 -2
  148. package/dist/dashboard/out/login.html +2 -2
  149. package/dist/dashboard/out/login.txt +2 -2
  150. package/dist/dashboard/out/metrics.html +1 -1
  151. package/dist/dashboard/out/metrics.txt +2 -2
  152. package/dist/dashboard/out/pricing.html +3 -3
  153. package/dist/dashboard/out/pricing.txt +2 -2
  154. package/dist/dashboard/out/providers.html +1 -1
  155. package/dist/dashboard/out/providers.txt +2 -2
  156. package/dist/dashboard/out/signup.html +2 -2
  157. package/dist/dashboard/out/signup.txt +2 -2
  158. package/package.json +2 -11
  159. package/test-push.txt +1 -0
  160. package/bin/tmux +0 -0
  161. package/dist/bridge/config.d.ts.map +0 -1
  162. package/dist/bridge/config.js.map +0 -1
  163. package/dist/bridge/index.d.ts.map +0 -1
  164. package/dist/bridge/index.js.map +0 -1
  165. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  166. package/dist/bridge/multi-project-client.js.map +0 -1
  167. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  168. package/dist/bridge/shadow-cli.js.map +0 -1
  169. package/dist/bridge/shadow-config.d.ts.map +0 -1
  170. package/dist/bridge/shadow-config.js.map +0 -1
  171. package/dist/bridge/spawner.d.ts.map +0 -1
  172. package/dist/bridge/spawner.js.map +0 -1
  173. package/dist/bridge/teams-config.d.ts.map +0 -1
  174. package/dist/bridge/teams-config.js.map +0 -1
  175. package/dist/bridge/types.d.ts.map +0 -1
  176. package/dist/bridge/types.js.map +0 -1
  177. package/dist/bridge/utils.d.ts.map +0 -1
  178. package/dist/bridge/utils.js.map +0 -1
  179. package/dist/cli/index.d.ts.map +0 -1
  180. package/dist/cli/index.js.map +0 -1
  181. package/dist/cloud/api/auth.d.ts.map +0 -1
  182. package/dist/cloud/api/auth.js.map +0 -1
  183. package/dist/cloud/api/billing.d.ts.map +0 -1
  184. package/dist/cloud/api/billing.js.map +0 -1
  185. package/dist/cloud/api/cli-pty-runner.d.ts.map +0 -1
  186. package/dist/cloud/api/cli-pty-runner.js.map +0 -1
  187. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  188. package/dist/cloud/api/coordinators.js.map +0 -1
  189. package/dist/cloud/api/daemons.d.ts.map +0 -1
  190. package/dist/cloud/api/daemons.js.map +0 -1
  191. package/dist/cloud/api/generic-webhooks.d.ts.map +0 -1
  192. package/dist/cloud/api/generic-webhooks.js.map +0 -1
  193. package/dist/cloud/api/git.d.ts.map +0 -1
  194. package/dist/cloud/api/git.js.map +0 -1
  195. package/dist/cloud/api/github-app.d.ts.map +0 -1
  196. package/dist/cloud/api/github-app.js.map +0 -1
  197. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  198. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  199. package/dist/cloud/api/monitoring.d.ts.map +0 -1
  200. package/dist/cloud/api/monitoring.js.map +0 -1
  201. package/dist/cloud/api/nango-auth.d.ts.map +0 -1
  202. package/dist/cloud/api/nango-auth.js.map +0 -1
  203. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  204. package/dist/cloud/api/onboarding.js.map +0 -1
  205. package/dist/cloud/api/policy.d.ts.map +0 -1
  206. package/dist/cloud/api/policy.js.map +0 -1
  207. package/dist/cloud/api/providers.d.ts.map +0 -1
  208. package/dist/cloud/api/providers.js.map +0 -1
  209. package/dist/cloud/api/repos.d.ts.map +0 -1
  210. package/dist/cloud/api/repos.js.map +0 -1
  211. package/dist/cloud/api/teams.d.ts.map +0 -1
  212. package/dist/cloud/api/teams.js.map +0 -1
  213. package/dist/cloud/api/test-helpers.d.ts.map +0 -1
  214. package/dist/cloud/api/test-helpers.js.map +0 -1
  215. package/dist/cloud/api/usage.d.ts.map +0 -1
  216. package/dist/cloud/api/usage.js.map +0 -1
  217. package/dist/cloud/api/webhooks.d.ts.map +0 -1
  218. package/dist/cloud/api/webhooks.js.map +0 -1
  219. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  220. package/dist/cloud/api/workspaces.js.map +0 -1
  221. package/dist/cloud/billing/index.d.ts.map +0 -1
  222. package/dist/cloud/billing/index.js.map +0 -1
  223. package/dist/cloud/billing/plans.d.ts.map +0 -1
  224. package/dist/cloud/billing/plans.js.map +0 -1
  225. package/dist/cloud/billing/service.d.ts.map +0 -1
  226. package/dist/cloud/billing/service.js.map +0 -1
  227. package/dist/cloud/billing/types.d.ts.map +0 -1
  228. package/dist/cloud/billing/types.js.map +0 -1
  229. package/dist/cloud/config.d.ts.map +0 -1
  230. package/dist/cloud/config.js.map +0 -1
  231. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  232. package/dist/cloud/db/drizzle.js.map +0 -1
  233. package/dist/cloud/db/index.d.ts.map +0 -1
  234. package/dist/cloud/db/index.js.map +0 -1
  235. package/dist/cloud/db/schema.d.ts.map +0 -1
  236. package/dist/cloud/db/schema.js.map +0 -1
  237. package/dist/cloud/index.d.ts.map +0 -1
  238. package/dist/cloud/index.js.map +0 -1
  239. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  240. package/dist/cloud/provisioner/index.js.map +0 -1
  241. package/dist/cloud/server.d.ts.map +0 -1
  242. package/dist/cloud/server.js.map +0 -1
  243. package/dist/cloud/services/auto-scaler.d.ts.map +0 -1
  244. package/dist/cloud/services/auto-scaler.js.map +0 -1
  245. package/dist/cloud/services/capacity-manager.d.ts.map +0 -1
  246. package/dist/cloud/services/capacity-manager.js.map +0 -1
  247. package/dist/cloud/services/ci-agent-spawner.d.ts.map +0 -1
  248. package/dist/cloud/services/ci-agent-spawner.js.map +0 -1
  249. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  250. package/dist/cloud/services/coordinator.js.map +0 -1
  251. package/dist/cloud/services/index.d.ts.map +0 -1
  252. package/dist/cloud/services/index.js.map +0 -1
  253. package/dist/cloud/services/mention-handler.d.ts.map +0 -1
  254. package/dist/cloud/services/mention-handler.js.map +0 -1
  255. package/dist/cloud/services/nango.d.ts.map +0 -1
  256. package/dist/cloud/services/nango.js.map +0 -1
  257. package/dist/cloud/services/persistence.d.ts.map +0 -1
  258. package/dist/cloud/services/persistence.js.map +0 -1
  259. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  260. package/dist/cloud/services/planLimits.js.map +0 -1
  261. package/dist/cloud/services/scaling-orchestrator.d.ts.map +0 -1
  262. package/dist/cloud/services/scaling-orchestrator.js.map +0 -1
  263. package/dist/cloud/services/scaling-policy.d.ts.map +0 -1
  264. package/dist/cloud/services/scaling-policy.js.map +0 -1
  265. package/dist/cloud/vault/index.d.ts.map +0 -1
  266. package/dist/cloud/vault/index.js.map +0 -1
  267. package/dist/cloud/webhooks/index.d.ts.map +0 -1
  268. package/dist/cloud/webhooks/index.js.map +0 -1
  269. package/dist/cloud/webhooks/parsers/github.d.ts.map +0 -1
  270. package/dist/cloud/webhooks/parsers/github.js.map +0 -1
  271. package/dist/cloud/webhooks/parsers/index.d.ts.map +0 -1
  272. package/dist/cloud/webhooks/parsers/index.js.map +0 -1
  273. package/dist/cloud/webhooks/parsers/linear.d.ts.map +0 -1
  274. package/dist/cloud/webhooks/parsers/linear.js.map +0 -1
  275. package/dist/cloud/webhooks/parsers/slack.d.ts.map +0 -1
  276. package/dist/cloud/webhooks/parsers/slack.js.map +0 -1
  277. package/dist/cloud/webhooks/responders/github.d.ts.map +0 -1
  278. package/dist/cloud/webhooks/responders/github.js.map +0 -1
  279. package/dist/cloud/webhooks/responders/index.d.ts.map +0 -1
  280. package/dist/cloud/webhooks/responders/index.js.map +0 -1
  281. package/dist/cloud/webhooks/responders/linear.d.ts.map +0 -1
  282. package/dist/cloud/webhooks/responders/linear.js.map +0 -1
  283. package/dist/cloud/webhooks/responders/slack.d.ts.map +0 -1
  284. package/dist/cloud/webhooks/responders/slack.js.map +0 -1
  285. package/dist/cloud/webhooks/router.d.ts.map +0 -1
  286. package/dist/cloud/webhooks/router.js.map +0 -1
  287. package/dist/cloud/webhooks/rules-engine.d.ts.map +0 -1
  288. package/dist/cloud/webhooks/rules-engine.js.map +0 -1
  289. package/dist/cloud/webhooks/types.d.ts.map +0 -1
  290. package/dist/cloud/webhooks/types.js.map +0 -1
  291. package/dist/continuity/formatter.d.ts.map +0 -1
  292. package/dist/continuity/formatter.js.map +0 -1
  293. package/dist/continuity/handoff-store.d.ts.map +0 -1
  294. package/dist/continuity/handoff-store.js.map +0 -1
  295. package/dist/continuity/index.d.ts.map +0 -1
  296. package/dist/continuity/index.js.map +0 -1
  297. package/dist/continuity/ledger-store.d.ts.map +0 -1
  298. package/dist/continuity/ledger-store.js.map +0 -1
  299. package/dist/continuity/manager.d.ts.map +0 -1
  300. package/dist/continuity/manager.js.map +0 -1
  301. package/dist/continuity/parser.d.ts.map +0 -1
  302. package/dist/continuity/parser.js.map +0 -1
  303. package/dist/continuity/types.d.ts.map +0 -1
  304. package/dist/continuity/types.js.map +0 -1
  305. package/dist/daemon/agent-manager.d.ts.map +0 -1
  306. package/dist/daemon/agent-manager.js.map +0 -1
  307. package/dist/daemon/agent-registry.d.ts.map +0 -1
  308. package/dist/daemon/agent-registry.js.map +0 -1
  309. package/dist/daemon/api.d.ts.map +0 -1
  310. package/dist/daemon/api.js.map +0 -1
  311. package/dist/daemon/auth.d.ts.map +0 -1
  312. package/dist/daemon/auth.js.map +0 -1
  313. package/dist/daemon/cli-auth.d.ts.map +0 -1
  314. package/dist/daemon/cli-auth.js.map +0 -1
  315. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  316. package/dist/daemon/cloud-sync.js.map +0 -1
  317. package/dist/daemon/connection.d.ts.map +0 -1
  318. package/dist/daemon/connection.js.map +0 -1
  319. package/dist/daemon/index.d.ts.map +0 -1
  320. package/dist/daemon/index.js.map +0 -1
  321. package/dist/daemon/orchestrator.d.ts.map +0 -1
  322. package/dist/daemon/orchestrator.js.map +0 -1
  323. package/dist/daemon/registry.d.ts.map +0 -1
  324. package/dist/daemon/registry.js.map +0 -1
  325. package/dist/daemon/router.d.ts.map +0 -1
  326. package/dist/daemon/router.js.map +0 -1
  327. package/dist/daemon/server.d.ts.map +0 -1
  328. package/dist/daemon/server.js.map +0 -1
  329. package/dist/daemon/services/browser-testing.d.ts.map +0 -1
  330. package/dist/daemon/services/browser-testing.js.map +0 -1
  331. package/dist/daemon/services/container-spawner.d.ts.map +0 -1
  332. package/dist/daemon/services/container-spawner.js.map +0 -1
  333. package/dist/daemon/types.d.ts.map +0 -1
  334. package/dist/daemon/types.js.map +0 -1
  335. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  336. package/dist/daemon/workspace-manager.js.map +0 -1
  337. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +0 -1
  338. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +0 -1
  339. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +0 -1
  340. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +0 -1
  341. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +0 -1
  342. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +0 -1
  343. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +0 -1
  344. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +0 -1
  345. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  346. package/dist/dashboard-server/metrics.js.map +0 -1
  347. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  348. package/dist/dashboard-server/needs-attention.js.map +0 -1
  349. package/dist/dashboard-server/server.d.ts.map +0 -1
  350. package/dist/dashboard-server/server.js.map +0 -1
  351. package/dist/dashboard-server/start.d.ts.map +0 -1
  352. package/dist/dashboard-server/start.js.map +0 -1
  353. package/dist/hooks/emitter.d.ts.map +0 -1
  354. package/dist/hooks/emitter.js.map +0 -1
  355. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  356. package/dist/hooks/inbox-check/hook.js.map +0 -1
  357. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  358. package/dist/hooks/inbox-check/index.js.map +0 -1
  359. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  360. package/dist/hooks/inbox-check/types.js.map +0 -1
  361. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  362. package/dist/hooks/inbox-check/utils.js.map +0 -1
  363. package/dist/hooks/index.d.ts.map +0 -1
  364. package/dist/hooks/index.js.map +0 -1
  365. package/dist/hooks/registry.d.ts.map +0 -1
  366. package/dist/hooks/registry.js.map +0 -1
  367. package/dist/hooks/trajectory-hooks.d.ts.map +0 -1
  368. package/dist/hooks/trajectory-hooks.js.map +0 -1
  369. package/dist/hooks/types.d.ts.map +0 -1
  370. package/dist/hooks/types.js.map +0 -1
  371. package/dist/index.d.ts.map +0 -1
  372. package/dist/index.js.map +0 -1
  373. package/dist/memory/adapters/index.d.ts.map +0 -1
  374. package/dist/memory/adapters/index.js.map +0 -1
  375. package/dist/memory/adapters/inmemory.d.ts.map +0 -1
  376. package/dist/memory/adapters/inmemory.js.map +0 -1
  377. package/dist/memory/adapters/supermemory.d.ts.map +0 -1
  378. package/dist/memory/adapters/supermemory.js.map +0 -1
  379. package/dist/memory/factory.d.ts.map +0 -1
  380. package/dist/memory/factory.js.map +0 -1
  381. package/dist/memory/index.d.ts.map +0 -1
  382. package/dist/memory/index.js.map +0 -1
  383. package/dist/memory/memory-hooks.d.ts.map +0 -1
  384. package/dist/memory/memory-hooks.js.map +0 -1
  385. package/dist/memory/service.d.ts.map +0 -1
  386. package/dist/memory/service.js.map +0 -1
  387. package/dist/memory/types.d.ts.map +0 -1
  388. package/dist/memory/types.js.map +0 -1
  389. package/dist/policy/agent-policy.d.ts.map +0 -1
  390. package/dist/policy/agent-policy.js.map +0 -1
  391. package/dist/policy/cloud-policy-fetcher.d.ts.map +0 -1
  392. package/dist/policy/cloud-policy-fetcher.js.map +0 -1
  393. package/dist/protocol/framing.d.ts.map +0 -1
  394. package/dist/protocol/framing.js.map +0 -1
  395. package/dist/protocol/index.d.ts.map +0 -1
  396. package/dist/protocol/index.js.map +0 -1
  397. package/dist/protocol/types.d.ts.map +0 -1
  398. package/dist/protocol/types.js.map +0 -1
  399. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  400. package/dist/resiliency/context-persistence.js.map +0 -1
  401. package/dist/resiliency/crash-insights.d.ts.map +0 -1
  402. package/dist/resiliency/crash-insights.js.map +0 -1
  403. package/dist/resiliency/gossip-health.d.ts.map +0 -1
  404. package/dist/resiliency/gossip-health.js.map +0 -1
  405. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  406. package/dist/resiliency/health-monitor.js.map +0 -1
  407. package/dist/resiliency/index.d.ts.map +0 -1
  408. package/dist/resiliency/index.js.map +0 -1
  409. package/dist/resiliency/leader-watchdog.d.ts.map +0 -1
  410. package/dist/resiliency/leader-watchdog.js.map +0 -1
  411. package/dist/resiliency/logger.d.ts.map +0 -1
  412. package/dist/resiliency/logger.js.map +0 -1
  413. package/dist/resiliency/memory-monitor.d.ts.map +0 -1
  414. package/dist/resiliency/memory-monitor.js.map +0 -1
  415. package/dist/resiliency/metrics.d.ts.map +0 -1
  416. package/dist/resiliency/metrics.js.map +0 -1
  417. package/dist/resiliency/provider-context.d.ts.map +0 -1
  418. package/dist/resiliency/provider-context.js.map +0 -1
  419. package/dist/resiliency/stateless-lead.d.ts.map +0 -1
  420. package/dist/resiliency/stateless-lead.js.map +0 -1
  421. package/dist/resiliency/supervisor.d.ts.map +0 -1
  422. package/dist/resiliency/supervisor.js.map +0 -1
  423. package/dist/shared/cli-auth-config.d.ts.map +0 -1
  424. package/dist/shared/cli-auth-config.js.map +0 -1
  425. package/dist/state/agent-state.d.ts.map +0 -1
  426. package/dist/state/agent-state.js.map +0 -1
  427. package/dist/storage/adapter.d.ts.map +0 -1
  428. package/dist/storage/adapter.js.map +0 -1
  429. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  430. package/dist/storage/sqlite-adapter.js.map +0 -1
  431. package/dist/trajectory/config.d.ts.map +0 -1
  432. package/dist/trajectory/config.js.map +0 -1
  433. package/dist/trajectory/index.d.ts.map +0 -1
  434. package/dist/trajectory/index.js.map +0 -1
  435. package/dist/trajectory/integration.d.ts.map +0 -1
  436. package/dist/trajectory/integration.js.map +0 -1
  437. package/dist/utils/agent-config.d.ts.map +0 -1
  438. package/dist/utils/agent-config.js.map +0 -1
  439. package/dist/utils/command-resolver.d.ts.map +0 -1
  440. package/dist/utils/command-resolver.js.map +0 -1
  441. package/dist/utils/index.d.ts.map +0 -1
  442. package/dist/utils/index.js.map +0 -1
  443. package/dist/utils/logger.d.ts.map +0 -1
  444. package/dist/utils/logger.js.map +0 -1
  445. package/dist/utils/name-generator.d.ts.map +0 -1
  446. package/dist/utils/name-generator.js.map +0 -1
  447. package/dist/utils/project-namespace.d.ts.map +0 -1
  448. package/dist/utils/project-namespace.js.map +0 -1
  449. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  450. package/dist/utils/tmux-resolver.js.map +0 -1
  451. package/dist/utils/update-checker.d.ts.map +0 -1
  452. package/dist/utils/update-checker.js.map +0 -1
  453. package/dist/wrapper/client.d.ts.map +0 -1
  454. package/dist/wrapper/client.js.map +0 -1
  455. package/dist/wrapper/inbox.d.ts.map +0 -1
  456. package/dist/wrapper/inbox.js.map +0 -1
  457. package/dist/wrapper/index.d.ts.map +0 -1
  458. package/dist/wrapper/index.js.map +0 -1
  459. package/dist/wrapper/parser.d.ts.map +0 -1
  460. package/dist/wrapper/parser.js.map +0 -1
  461. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  462. package/dist/wrapper/pty-wrapper.js.map +0 -1
  463. package/dist/wrapper/shared.d.ts.map +0 -1
  464. package/dist/wrapper/shared.js.map +0 -1
  465. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  466. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  467. package/docs/AGENTS.md +0 -513
  468. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  469. package/docs/CLOUD-ARCHITECTURE.md +0 -804
  470. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  471. package/docs/CONTRIBUTING.md +0 -151
  472. package/docs/HOOKS_API.md +0 -394
  473. package/docs/INTEGRATION-GUIDE.md +0 -926
  474. package/docs/PROTOCOL.md +0 -325
  475. package/docs/WRAPPER_EVENTS.md +0 -358
  476. package/docs/agent-policy-snippet.md +0 -40
  477. package/docs/agent-relay-protocol.md +0 -238
  478. package/docs/agent-relay-snippet.md +0 -174
  479. package/docs/archive/CHANGELOG.md +0 -11
  480. package/docs/archive/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  481. package/docs/archive/DESIGN_BRIDGE_STAFFING.md +0 -878
  482. package/docs/archive/DESIGN_V2.md +0 -1079
  483. package/docs/archive/EXECUTIVE_SUMMARY.md +0 -358
  484. package/docs/archive/MONETIZATION.md +0 -1679
  485. package/docs/archive/PROPOSAL-trajectories.md +0 -1582
  486. package/docs/archive/ROADMAP.md +0 -329
  487. package/docs/archive/SCALING_ANALYSIS.md +0 -280
  488. package/docs/archive/TESTING_PRESENCE_FEATURES.md +0 -327
  489. package/docs/archive/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  490. package/docs/archive/TMUX_IMPROVEMENTS.md +0 -968
  491. package/docs/archive/dashboard-v2-plan.md +0 -179
  492. package/docs/archive/removable-code-analysis.md +0 -24
  493. package/docs/competitive/GASTOWN.md +0 -451
  494. package/docs/competitive/MCP_AGENT_MAIL.md +0 -389
  495. package/docs/competitive/OVERVIEW.md +0 -898
  496. package/docs/competitive/README.md +0 -34
  497. package/docs/competitive/TMUX_ORCHESTRATOR.md +0 -605
  498. package/docs/dashboard.png +0 -0
  499. package/docs/design/ci-failure-webhooks.md +0 -812
  500. package/docs/design/comprehensive-integrations.md +0 -238
  501. package/docs/design/e2b-sandbox-integration.md +0 -504
  502. package/docs/design/github-app-permissions.md +0 -264
  503. package/docs/guides/CLOUD.md +0 -236
  504. package/docs/guides/LOCAL.md +0 -535
  505. package/docs/guides/SELF-HOSTED.md +0 -494
  506. package/docs/local-testing.md +0 -428
  507. package/docs/proposals/continuous-claude-integration.md +0 -622
  508. package/docs/proposals/custom-commands.md +0 -368
  509. package/docs/proposals/shadow-as-subagent.md +0 -765
  510. package/docs/proposals/slack-bot-integration.md +0 -1457
  511. package/docs/tasks/global-skills-system.tasks.md +0 -230
  512. package/docs/tasks/webhook-integrations.tasks.md +0 -184
  513. package/docs/tasks/workspace-capabilities.tasks.md +0 -121
  514. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +0 -366
  515. package/scripts/cloud-setup.sh +0 -96
  516. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  517. package/scripts/dev/dev-team-setup.sh +0 -431
  518. package/scripts/e2e-test.sh +0 -119
  519. package/scripts/games/game-protocol.md +0 -79
  520. package/scripts/games/hearts-setup.sh +0 -264
  521. package/scripts/manual-qa.sh +0 -293
  522. package/scripts/run-cloud-qa.sh +0 -220
  523. package/scripts/test-cli-auth/Dockerfile +0 -44
  524. package/scripts/test-cli-auth/Dockerfile.real +0 -79
  525. package/scripts/test-cli-auth/README.md +0 -286
  526. package/scripts/test-cli-auth/ci-test-real-clis.ts +0 -251
  527. package/scripts/test-cli-auth/ci-test-runner.ts +0 -263
  528. package/scripts/test-cli-auth/mock-cli.sh +0 -147
  529. package/scripts/test-cli-auth/package.json +0 -14
  530. package/scripts/test-cli-auth/test-oauth-flow.ts +0 -220
  531. package/scripts/test-pty-input-auto.js +0 -222
  532. package/scripts/test-pty-input.js +0 -150
  533. package/scripts/tictactoe-setup.sh +0 -181
  534. /package/dist/dashboard/out/_next/static/chunks/{117-b100311aff8d5c61.js → 117-f7b8ab0809342e77.js} +0 -0
  535. /package/dist/dashboard/out/_next/static/chunks/{648-a13d3c2b1be45466.js → 648-5cc6e1921389a58a.js} +0 -0
  536. /package/dist/dashboard/out/_next/static/chunks/{724-73c1ee5f60abe860.js → 724-2dae7627550ab88f.js} +0 -0
  537. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-a4973f3e3c82fb67.js → page-53b8a69f76db17d0.js} +0 -0
  538. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
  539. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_buildManifest.js +0 -0
  540. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → wPgKJtcOmTFLpUncDg16A}/_ssgManifest.js +0 -0
@@ -1,251 +0,0 @@
1
- #!/usr/bin/env npx tsx
2
- /**
3
- * CI Test Runner for Real CLI OAuth Flows
4
- *
5
- * Tests the actual CLI tools to verify:
6
- * 1. URL extraction patterns work with real CLI output
7
- * 2. Prompt detection works with real prompts
8
- * 3. Auto-responses navigate through the flow correctly
9
- *
10
- * Exit codes:
11
- * 0 - All available CLIs passed
12
- * 1 - One or more tests failed
13
- *
14
- * Note: CLIs that aren't installed are skipped, not failed.
15
- *
16
- * IMPORTANT: This test uses the same runCLIAuthViaPTY function as production
17
- * to ensure the PTY handling logic is consistent.
18
- */
19
-
20
- import { execSync } from 'child_process';
21
- import { writeFileSync } from 'fs';
22
-
23
- // Import the actual config and PTY runner from cli-pty-runner.ts
24
- // This ensures tests use the EXACT SAME logic as production
25
- // In Docker: /app/src/cloud/api/cli-pty-runner.ts (maintains source tree structure)
26
- import {
27
- CLI_AUTH_CONFIG,
28
- runCLIAuthViaPTY,
29
- type PTYAuthResult,
30
- } from './src/cloud/api/cli-pty-runner.js';
31
-
32
- interface TestResult {
33
- provider: string;
34
- command: string;
35
- installed: boolean;
36
- passed: boolean;
37
- skipped: boolean;
38
- urlExtracted: string | null;
39
- promptsDetected: string[];
40
- promptsResponded: string[];
41
- successDetected: boolean;
42
- exitCode: number | null;
43
- duration: number;
44
- rawOutput: string;
45
- error?: string;
46
- }
47
-
48
- /**
49
- * Check if a CLI is installed
50
- */
51
- function isCliInstalled(command: string): boolean {
52
- try {
53
- execSync(`which ${command}`, { stdio: 'pipe' });
54
- return true;
55
- } catch {
56
- return false;
57
- }
58
- }
59
-
60
- /**
61
- * Test a real CLI's OAuth flow using the shared PTY runner
62
- *
63
- * Uses the EXACT SAME runCLIAuthViaPTY function as production to ensure
64
- * the PTY handling logic is consistent between tests and production.
65
- */
66
- async function testRealCli(providerId: string): Promise<TestResult> {
67
- const config = CLI_AUTH_CONFIG[providerId];
68
- if (!config) {
69
- return {
70
- provider: providerId,
71
- command: 'unknown',
72
- installed: false,
73
- passed: false,
74
- skipped: true,
75
- urlExtracted: null,
76
- promptsDetected: [],
77
- promptsResponded: [],
78
- successDetected: false,
79
- exitCode: null,
80
- duration: 0,
81
- rawOutput: '',
82
- error: `Unknown provider: ${providerId}`,
83
- };
84
- }
85
-
86
- const result: TestResult = {
87
- provider: providerId,
88
- command: `${config.command} ${config.args.join(' ')}`.trim(),
89
- installed: isCliInstalled(config.command),
90
- passed: false,
91
- skipped: false,
92
- urlExtracted: null,
93
- promptsDetected: [],
94
- promptsResponded: [],
95
- successDetected: false,
96
- exitCode: null,
97
- duration: 0,
98
- rawOutput: '',
99
- };
100
-
101
- // Skip if CLI not installed
102
- if (!result.installed) {
103
- result.skipped = true;
104
- result.error = `CLI '${config.command}' not installed`;
105
- return result;
106
- }
107
-
108
- const startTime = Date.now();
109
-
110
- // Use the shared PTY runner - SAME code as production
111
- const ptyResult: PTYAuthResult = await runCLIAuthViaPTY(config, {
112
- onAuthUrl: (url) => {
113
- result.urlExtracted = url;
114
- console.log(` [${providerId}] URL found: ${url.substring(0, 60)}...`);
115
- },
116
- onPromptHandled: (description) => {
117
- result.promptsDetected.push(description);
118
- result.promptsResponded.push(description);
119
- console.log(` [${providerId}] Responded to: ${description}`);
120
- },
121
- onOutput: (data) => {
122
- result.rawOutput += data;
123
- },
124
- });
125
-
126
- result.duration = Date.now() - startTime;
127
- result.exitCode = ptyResult.exitCode;
128
- result.successDetected = ptyResult.success;
129
-
130
- // Pass if we got a URL (main goal of OAuth flow)
131
- result.passed = !!result.urlExtracted;
132
-
133
- if (!result.passed) {
134
- result.error = ptyResult.error || 'Failed to extract auth URL from CLI output';
135
- }
136
-
137
- return result;
138
- }
139
-
140
- /**
141
- * Run tests for all configured providers
142
- */
143
- async function runAllTests() {
144
- console.log('╔══════════════════════════════════════════════════════════════╗');
145
- console.log('║ CLI OAuth Flow Tests - Real CLIs ║');
146
- console.log('╚══════════════════════════════════════════════════════════════╝');
147
- console.log('');
148
-
149
- const results: TestResult[] = [];
150
- const providerIds = Object.keys(CLI_AUTH_CONFIG);
151
-
152
- for (const providerId of providerIds) {
153
- const config = CLI_AUTH_CONFIG[providerId];
154
- console.log(`Testing ${config.displayName} (${providerId})...`);
155
-
156
- const result = await testRealCli(providerId);
157
- results.push(result);
158
-
159
- if (result.skipped) {
160
- console.log(` ⏭️ SKIPPED: ${result.error}`);
161
- } else if (result.passed) {
162
- console.log(` ✅ PASSED`);
163
- } else {
164
- console.log(` ❌ FAILED: ${result.error}`);
165
- }
166
-
167
- console.log(` Installed: ${result.installed ? 'Yes' : 'No'}`);
168
- if (!result.skipped) {
169
- console.log(` URL: ${result.urlExtracted ? 'Extracted' : 'NOT FOUND'}`);
170
- console.log(` Prompts: ${result.promptsResponded.length}/${config.prompts.length} handled`);
171
- console.log(` Duration: ${result.duration}ms`);
172
- }
173
- console.log('');
174
- }
175
-
176
- // Summary
177
- const installed = results.filter(r => r.installed);
178
- const skipped = results.filter(r => r.skipped);
179
- const passed = results.filter(r => r.passed);
180
- const failed = results.filter(r => !r.passed && !r.skipped);
181
-
182
- console.log('═══════════════════════════════════════════════════════════════');
183
- console.log(`Summary:`);
184
- console.log(` Installed: ${installed.length}/${results.length}`);
185
- console.log(` Passed: ${passed.length}`);
186
- console.log(` Failed: ${failed.length}`);
187
- console.log(` Skipped: ${skipped.length}`);
188
- console.log('═══════════════════════════════════════════════════════════════');
189
-
190
- // Write JSON results
191
- const jsonResults = {
192
- timestamp: new Date().toISOString(),
193
- results: results.map(r => ({
194
- provider: r.provider,
195
- command: r.command,
196
- installed: r.installed,
197
- passed: r.passed,
198
- skipped: r.skipped,
199
- urlExtracted: r.urlExtracted ? true : false,
200
- urlSample: r.urlExtracted?.substring(0, 80),
201
- promptsDetected: r.promptsDetected,
202
- promptsResponded: r.promptsResponded,
203
- exitCode: r.exitCode,
204
- duration: r.duration,
205
- error: r.error,
206
- })),
207
- summary: {
208
- total: results.length,
209
- installed: installed.length,
210
- passed: passed.length,
211
- failed: failed.length,
212
- skipped: skipped.length,
213
- },
214
- };
215
-
216
- try {
217
- writeFileSync('/tmp/cli-oauth-test-results.json', JSON.stringify(jsonResults, null, 2));
218
- console.log('\nResults written to /tmp/cli-oauth-test-results.json');
219
- } catch {
220
- console.log('\n--- JSON Results ---');
221
- console.log(JSON.stringify(jsonResults, null, 2));
222
- }
223
-
224
- // Exit with failure only if an installed CLI failed
225
- // Skipped CLIs don't count as failures
226
- if (failed.length > 0) {
227
- console.log('\nFailed CLIs:');
228
- for (const result of failed) {
229
- console.log(` - ${result.provider}: ${result.error}`);
230
- if (result.rawOutput) {
231
- console.log(` Last 500 chars of output:`);
232
- console.log(` ${result.rawOutput.slice(-500).replace(/\n/g, '\n ')}`);
233
- }
234
- }
235
- process.exit(1);
236
- }
237
-
238
- // Warn if no CLIs were tested
239
- if (installed.length === 0) {
240
- console.log('\n⚠️ WARNING: No CLIs were installed - no actual testing performed!');
241
- process.exit(0); // Don't fail, but warn
242
- }
243
-
244
- console.log('\n✅ All installed CLIs passed!');
245
- process.exit(0);
246
- }
247
-
248
- runAllTests().catch((err) => {
249
- console.error('Test runner failed:', err);
250
- process.exit(1);
251
- });
@@ -1,263 +0,0 @@
1
- #!/usr/bin/env npx tsx
2
- /**
3
- * CI Test Runner for CLI OAuth Flow
4
- *
5
- * This script runs in a Docker container and tests each provider's
6
- * CLI OAuth flow to ensure URL extraction works correctly.
7
- *
8
- * Exit codes:
9
- * 0 - All tests passed
10
- * 1 - One or more tests failed
11
- *
12
- * Output format (JSON):
13
- * { "results": [...], "summary": { "passed": N, "failed": N } }
14
- */
15
-
16
- import * as pty from 'node-pty';
17
- import { writeFileSync } from 'fs';
18
-
19
- // Provider configurations - must match CLI_AUTH_CONFIG in onboarding.ts
20
- const PROVIDERS = {
21
- anthropic: {
22
- command: 'claude',
23
- args: [] as string[],
24
- urlPattern: /(https:\/\/[^\s]+)/,
25
- expectedUrlPrefix: 'https://console.anthropic.com',
26
- prompts: [
27
- { pattern: /dark\s*(mode|theme)/i, response: '\r' },
28
- { pattern: /(subscription|api\s*key)/i, response: '\r' },
29
- { pattern: /trust/i, response: 'y\r' },
30
- ],
31
- },
32
- openai: {
33
- command: 'codex',
34
- args: ['login'],
35
- urlPattern: /(https:\/\/[^\s]+)/,
36
- expectedUrlPrefix: 'https://auth.openai.com',
37
- prompts: [
38
- { pattern: /trust/i, response: 'y\r' },
39
- ],
40
- },
41
- google: {
42
- command: 'gemini',
43
- args: [] as string[],
44
- urlPattern: /(https:\/\/[^\s]+)/,
45
- expectedUrlPrefix: 'https://accounts.google.com',
46
- prompts: [],
47
- },
48
- opencode: {
49
- command: 'opencode',
50
- args: [] as string[],
51
- urlPattern: /(https:\/\/[^\s]+)/,
52
- expectedUrlPrefix: 'https://opencode.ai',
53
- prompts: [],
54
- },
55
- droid: {
56
- command: 'droid',
57
- args: [] as string[],
58
- urlPattern: /(https:\/\/[^\s]+)/,
59
- expectedUrlPrefix: 'https://factory.ai',
60
- prompts: [],
61
- },
62
- };
63
-
64
- interface TestResult {
65
- provider: string;
66
- command: string;
67
- passed: boolean;
68
- urlExtracted: string | null;
69
- urlValid: boolean;
70
- promptsHandled: number;
71
- exitCode: number | null;
72
- duration: number;
73
- output: string;
74
- error?: string;
75
- }
76
-
77
- function stripAnsi(text: string): string {
78
- return text.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
79
- }
80
-
81
- async function testProvider(providerId: string): Promise<TestResult> {
82
- const config = PROVIDERS[providerId as keyof typeof PROVIDERS];
83
- if (!config) {
84
- return {
85
- provider: providerId,
86
- command: 'unknown',
87
- passed: false,
88
- urlExtracted: null,
89
- urlValid: false,
90
- promptsHandled: 0,
91
- exitCode: null,
92
- duration: 0,
93
- output: '',
94
- error: `Unknown provider: ${providerId}`,
95
- };
96
- }
97
-
98
- const startTime = Date.now();
99
- const result: TestResult = {
100
- provider: providerId,
101
- command: `${config.command} ${config.args.join(' ')}`.trim(),
102
- passed: false,
103
- urlExtracted: null,
104
- urlValid: false,
105
- promptsHandled: 0,
106
- exitCode: null,
107
- duration: 0,
108
- output: '',
109
- };
110
-
111
- return new Promise((resolve) => {
112
- const respondedPrompts = new Set<number>();
113
-
114
- try {
115
- const proc = pty.spawn(config.command, config.args, {
116
- name: 'xterm-256color',
117
- cols: 120,
118
- rows: 30,
119
- env: { ...process.env, TERM: 'xterm-256color', NO_COLOR: '1' },
120
- });
121
-
122
- const timeout = setTimeout(() => {
123
- proc.kill();
124
- result.error = 'Timeout waiting for CLI';
125
- result.duration = Date.now() - startTime;
126
- resolve(result);
127
- }, 15000);
128
-
129
- proc.onData((data: string) => {
130
- result.output += data;
131
- const cleanText = stripAnsi(data);
132
-
133
- // Check for prompts and respond
134
- for (let i = 0; i < config.prompts.length; i++) {
135
- if (respondedPrompts.has(i)) continue;
136
- if (config.prompts[i].pattern.test(cleanText)) {
137
- respondedPrompts.add(i);
138
- result.promptsHandled++;
139
- setTimeout(() => {
140
- try {
141
- proc.write(config.prompts[i].response);
142
- } catch {
143
- // Process may have exited
144
- }
145
- }, 100);
146
- }
147
- }
148
-
149
- // Check for URL
150
- const match = cleanText.match(config.urlPattern);
151
- if (match && match[1] && !result.urlExtracted) {
152
- result.urlExtracted = match[1];
153
- result.urlValid = result.urlExtracted.startsWith(config.expectedUrlPrefix);
154
- }
155
- });
156
-
157
- proc.onExit(({ exitCode }) => {
158
- clearTimeout(timeout);
159
- result.exitCode = exitCode;
160
- result.duration = Date.now() - startTime;
161
-
162
- // Determine pass/fail
163
- result.passed = !!(
164
- result.urlExtracted &&
165
- result.urlValid &&
166
- exitCode === 0
167
- );
168
-
169
- resolve(result);
170
- });
171
-
172
- // Send signal to continue after prompts are done
173
- setTimeout(() => {
174
- try {
175
- proc.write('\n');
176
- } catch {
177
- // Ignore
178
- }
179
- }, 5000);
180
- } catch (err) {
181
- result.error = err instanceof Error ? err.message : 'Unknown error';
182
- result.duration = Date.now() - startTime;
183
- resolve(result);
184
- }
185
- });
186
- }
187
-
188
- async function runAllTests() {
189
- console.log('╔══════════════════════════════════════════════════════════════╗');
190
- console.log('║ CLI OAuth Flow CI Tests ║');
191
- console.log('╚══════════════════════════════════════════════════════════════╝');
192
- console.log('');
193
-
194
- const results: TestResult[] = [];
195
-
196
- for (const providerId of Object.keys(PROVIDERS)) {
197
- process.stdout.write(`Testing ${providerId}... `);
198
- const result = await testProvider(providerId);
199
- results.push(result);
200
-
201
- if (result.passed) {
202
- console.log('✅ PASSED');
203
- } else {
204
- console.log(`❌ FAILED${result.error ? `: ${result.error}` : ''}`);
205
- }
206
-
207
- // Detailed output
208
- console.log(` Command: ${result.command}`);
209
- console.log(` URL: ${result.urlExtracted || 'NOT FOUND'}`);
210
- console.log(` Valid: ${result.urlValid ? 'Yes' : 'No'}`);
211
- console.log(` Prompts: ${result.promptsHandled}/${PROVIDERS[providerId as keyof typeof PROVIDERS].prompts.length}`);
212
- console.log(` Exit: ${result.exitCode}`);
213
- console.log(` Duration: ${result.duration}ms`);
214
- console.log('');
215
- }
216
-
217
- // Summary
218
- const passed = results.filter(r => r.passed).length;
219
- const failed = results.filter(r => !r.passed).length;
220
-
221
- console.log('═══════════════════════════════════════════════════════════════');
222
- console.log(`Summary: ${passed} passed, ${failed} failed out of ${results.length} tests`);
223
- console.log('═══════════════════════════════════════════════════════════════');
224
-
225
- // Write JSON results for CI parsing
226
- const jsonResults = {
227
- timestamp: new Date().toISOString(),
228
- results: results.map(r => ({
229
- provider: r.provider,
230
- command: r.command,
231
- passed: r.passed,
232
- urlExtracted: r.urlExtracted,
233
- urlValid: r.urlValid,
234
- promptsHandled: r.promptsHandled,
235
- exitCode: r.exitCode,
236
- duration: r.duration,
237
- error: r.error,
238
- })),
239
- summary: {
240
- total: results.length,
241
- passed,
242
- failed,
243
- },
244
- };
245
-
246
- // Write to file for CI artifact
247
- try {
248
- writeFileSync('/tmp/cli-oauth-test-results.json', JSON.stringify(jsonResults, null, 2));
249
- console.log('\nResults written to /tmp/cli-oauth-test-results.json');
250
- } catch {
251
- // Might not have write access, output to stdout instead
252
- console.log('\n--- JSON Results ---');
253
- console.log(JSON.stringify(jsonResults, null, 2));
254
- }
255
-
256
- // Exit with appropriate code
257
- process.exit(failed > 0 ? 1 : 0);
258
- }
259
-
260
- runAllTests().catch((err) => {
261
- console.error('Test runner failed:', err);
262
- process.exit(1);
263
- });
@@ -1,147 +0,0 @@
1
- #!/bin/bash
2
- # Mock CLI for testing OAuth flow prompt handling
3
- # Usage: ./mock-cli.sh <provider> [delay]
4
- #
5
- # This script simulates the interactive prompts of various AI CLI tools
6
- # for testing the onboarding OAuth flow without actual CLI binaries.
7
- #
8
- # When installed as symlinks (e.g., /usr/local/bin/claude -> mock-cli.sh),
9
- # it auto-detects the provider from the command name.
10
-
11
- # Detect provider from how the script was called
12
- SCRIPT_NAME=$(basename "$0")
13
-
14
- case "$SCRIPT_NAME" in
15
- claude) PROVIDER="claude" ;;
16
- codex) PROVIDER="codex" ;;
17
- gemini) PROVIDER="gemini" ;;
18
- opencode) PROVIDER="opencode" ;;
19
- droid) PROVIDER="droid" ;;
20
- mock-cli.sh|mock-cli|mock-cli-impl.sh)
21
- PROVIDER="${1:-claude}"
22
- shift 2>/dev/null || true
23
- ;;
24
- *) PROVIDER="${1:-claude}" ;;
25
- esac
26
-
27
- # Handle 'login' subcommand for codex
28
- if [ "$PROVIDER" = "codex" ] && [ "$1" = "login" ]; then
29
- shift
30
- fi
31
-
32
- DELAY="${1:-0.3}"
33
-
34
- # Colors for output
35
- GREEN='\033[0;32m'
36
- BLUE='\033[0;34m'
37
- YELLOW='\033[1;33m'
38
- NC='\033[0m' # No Color
39
-
40
- case "$PROVIDER" in
41
- claude|anthropic)
42
- echo -e "${BLUE}Claude Code CLI${NC}"
43
- echo ""
44
- sleep "$DELAY"
45
-
46
- # Dark mode prompt
47
- echo -e "Would you like to use ${YELLOW}dark mode${NC}? (y/n) "
48
- read -r -n 1 response 2>/dev/null || true
49
- echo ""
50
- sleep "$DELAY"
51
-
52
- # Login method selection prompt (matches real Claude CLI)
53
- echo -e "Select login method:"
54
- echo ""
55
- echo -e " ❯ 1. Claude account with ${YELLOW}subscription${NC} · Pro, Max, Team, or Enterprise"
56
- echo ""
57
- echo -e " 2. Anthropic Console account · API usage billing"
58
- read -r -n 1 response 2>/dev/null || true
59
- echo ""
60
- sleep "$DELAY"
61
-
62
- # Trust directory prompt
63
- echo -e "Do you ${YELLOW}trust this directory${NC}? [y/N] "
64
- read -r -n 1 response 2>/dev/null || true
65
- echo ""
66
- sleep "$DELAY"
67
-
68
- # Auth URL
69
- echo ""
70
- echo -e "Please visit the following URL to authenticate:"
71
- echo -e "${GREEN}https://console.anthropic.com/oauth/authorize?client_id=mock-test-123&state=abc${NC}"
72
- echo ""
73
- echo "Waiting for authentication..."
74
-
75
- # Wait for completion signal (or timeout)
76
- read -r -t 30 2>/dev/null || true
77
- echo -e "${GREEN}Authentication successful!${NC}"
78
- ;;
79
-
80
- codex|openai)
81
- echo -e "${BLUE}Codex CLI${NC}"
82
- echo ""
83
- sleep "$DELAY"
84
-
85
- # Trust directory prompt
86
- echo -e "Do you ${YELLOW}trust this workspace${NC}? [y/N] "
87
- read -r -n 1 response 2>/dev/null || true
88
- echo ""
89
- sleep "$DELAY"
90
-
91
- # Auth URL
92
- echo ""
93
- echo -e "Open this URL to log in:"
94
- echo -e "${GREEN}https://auth.openai.com/authorize?client_id=mock-test-456&state=def${NC}"
95
- echo ""
96
- echo "Waiting..."
97
-
98
- read -r -t 30 2>/dev/null || true
99
- echo -e "${GREEN}Logged in successfully${NC}"
100
- ;;
101
-
102
- gemini|google)
103
- echo -e "${BLUE}Gemini CLI${NC}"
104
- echo ""
105
- sleep "$DELAY"
106
-
107
- # Auth URL
108
- echo -e "Authenticate at:"
109
- echo -e "${GREEN}https://accounts.google.com/o/oauth2/v2/auth?client_id=mock-test-789${NC}"
110
- echo ""
111
-
112
- read -r -t 30 2>/dev/null || true
113
- echo -e "${GREEN}Authenticated!${NC}"
114
- ;;
115
-
116
- opencode)
117
- echo -e "${BLUE}OpenCode CLI${NC}"
118
- echo ""
119
- sleep "$DELAY"
120
-
121
- echo -e "Login URL:"
122
- echo -e "${GREEN}https://opencode.ai/auth?session=mock-session${NC}"
123
- echo ""
124
-
125
- read -r -t 30 2>/dev/null || true
126
- echo -e "${GREEN}Success${NC}"
127
- ;;
128
-
129
- droid)
130
- echo -e "${BLUE}Droid CLI${NC}"
131
- echo ""
132
- sleep "$DELAY"
133
-
134
- echo -e "Visit to authenticate:"
135
- echo -e "${GREEN}https://factory.ai/droid/auth?id=mock-droid${NC}"
136
- echo ""
137
-
138
- read -r -t 30 2>/dev/null || true
139
- echo -e "${GREEN}Authenticated${NC}"
140
- ;;
141
-
142
- *)
143
- echo "Unknown provider: $PROVIDER"
144
- echo "Supported: claude, codex, gemini, opencode, droid"
145
- exit 1
146
- ;;
147
- esac
@@ -1,14 +0,0 @@
1
- {
2
- "name": "cli-oauth-test",
3
- "version": "1.0.0",
4
- "description": "CLI OAuth flow testing for agent-relay",
5
- "type": "module",
6
- "scripts": {
7
- "test": "tsx ci-test-runner.ts",
8
- "test:local": "tsx test-oauth-flow.ts"
9
- },
10
- "dependencies": {
11
- "node-pty": "^1.0.0",
12
- "tsx": "^4.19.0"
13
- }
14
- }