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,220 +0,0 @@
1
- #!/usr/bin/env npx tsx
2
- /**
3
- * CLI OAuth Flow Integration Test
4
- *
5
- * Tests the prompt handling and URL extraction for each provider
6
- * using mock CLIs that simulate the real interactive flows.
7
- *
8
- * Usage:
9
- * npx tsx scripts/test-cli-auth/test-oauth-flow.ts [provider]
10
- *
11
- * Examples:
12
- * npx tsx scripts/test-cli-auth/test-oauth-flow.ts # Test all providers
13
- * npx tsx scripts/test-cli-auth/test-oauth-flow.ts claude # Test Claude only
14
- */
15
-
16
- import * as pty from 'node-pty';
17
- import path from 'path';
18
- import { fileURLToPath } from 'url';
19
- import {
20
- CLI_AUTH_CONFIG,
21
- stripAnsiCodes,
22
- matchesSuccessPattern,
23
- findMatchingPrompt,
24
- } from '../../src/cloud/api/onboarding.js';
25
-
26
- const __filename = fileURLToPath(import.meta.url);
27
- const __dirname = path.dirname(__filename);
28
-
29
- interface TestResult {
30
- provider: string;
31
- passed: boolean;
32
- urlExtracted: string | null;
33
- promptsResponded: string[];
34
- successDetected: boolean;
35
- output: string;
36
- error?: string;
37
- }
38
-
39
- /**
40
- * Test a single provider's OAuth flow using the mock CLI
41
- */
42
- async function testProvider(providerId: string): Promise<TestResult> {
43
- const config = CLI_AUTH_CONFIG[providerId];
44
- if (!config) {
45
- return {
46
- provider: providerId,
47
- passed: false,
48
- urlExtracted: null,
49
- promptsResponded: [],
50
- successDetected: false,
51
- output: '',
52
- error: `Unknown provider: ${providerId}`,
53
- };
54
- }
55
-
56
- const result: TestResult = {
57
- provider: providerId,
58
- passed: false,
59
- urlExtracted: null,
60
- promptsResponded: [],
61
- successDetected: false,
62
- output: '',
63
- };
64
-
65
- return new Promise((resolve) => {
66
- const mockCliPath = path.join(__dirname, 'mock-cli.sh');
67
- const respondedPrompts = new Set<string>();
68
-
69
- // Map provider IDs to mock CLI provider names
70
- const mockProviderName = providerId === 'anthropic' ? 'claude' :
71
- providerId === 'openai' ? 'codex' :
72
- providerId === 'google' ? 'gemini' : providerId;
73
-
74
- const proc = pty.spawn('bash', [mockCliPath, mockProviderName, '0.2'], {
75
- name: 'xterm-256color',
76
- cols: 120,
77
- rows: 30,
78
- cwd: __dirname,
79
- env: { ...process.env, TERM: 'xterm-256color' },
80
- });
81
-
82
- const timeout = setTimeout(() => {
83
- proc.kill();
84
- result.error = 'Timeout waiting for completion';
85
- resolve(result);
86
- }, 10000);
87
-
88
- proc.onData((data: string) => {
89
- result.output += data;
90
-
91
- // Check for matching prompts and auto-respond
92
- const matchingPrompt = findMatchingPrompt(data, config.prompts, respondedPrompts);
93
- if (matchingPrompt) {
94
- respondedPrompts.add(matchingPrompt.description);
95
- result.promptsResponded.push(matchingPrompt.description);
96
- setTimeout(() => {
97
- try {
98
- proc.write(matchingPrompt.response);
99
- } catch {
100
- // Process may have exited
101
- }
102
- }, matchingPrompt.delay ?? 50);
103
- }
104
-
105
- // Look for auth URL
106
- const cleanText = stripAnsiCodes(data);
107
- const match = cleanText.match(config.urlPattern);
108
- if (match && match[1] && !result.urlExtracted) {
109
- result.urlExtracted = match[1];
110
- }
111
-
112
- // Check for success indicators
113
- if (matchesSuccessPattern(data, config.successPatterns)) {
114
- result.successDetected = true;
115
- }
116
- });
117
-
118
- proc.onExit(({ exitCode }) => {
119
- clearTimeout(timeout);
120
-
121
- // Determine if test passed
122
- result.passed = !!(
123
- result.urlExtracted &&
124
- result.successDetected &&
125
- exitCode === 0
126
- );
127
-
128
- // Send completion signal to mock CLI
129
- setTimeout(() => resolve(result), 100);
130
- });
131
-
132
- // For mock CLI, send signal to continue after prompts
133
- setTimeout(() => {
134
- try {
135
- proc.write('\n'); // Signal to continue
136
- } catch {
137
- // Ignore
138
- }
139
- }, 3000);
140
- });
141
- }
142
-
143
- /**
144
- * Run tests for specified providers or all providers
145
- */
146
- async function runTests(providers?: string[]) {
147
- const providerIds = providers ?? Object.keys(CLI_AUTH_CONFIG);
148
-
149
- console.log('╔══════════════════════════════════════════════════════════════╗');
150
- console.log('║ CLI OAuth Flow Integration Tests ║');
151
- console.log('╚══════════════════════════════════════════════════════════════╝');
152
- console.log('');
153
-
154
- const results: TestResult[] = [];
155
-
156
- for (const providerId of providerIds) {
157
- const config = CLI_AUTH_CONFIG[providerId];
158
- if (!config) {
159
- console.log(`⚠️ Unknown provider: ${providerId}`);
160
- continue;
161
- }
162
-
163
- console.log(`Testing ${config.displayName} (${providerId})...`);
164
-
165
- const result = await testProvider(providerId);
166
- results.push(result);
167
-
168
- if (result.passed) {
169
- console.log(` ✅ PASSED`);
170
- } else {
171
- console.log(` ❌ FAILED${result.error ? `: ${result.error}` : ''}`);
172
- }
173
-
174
- console.log(` URL extracted: ${result.urlExtracted ? '✓' : '✗'}`);
175
- console.log(` Success detected: ${result.successDetected ? '✓' : '✗'}`);
176
- if (result.promptsResponded.length > 0) {
177
- console.log(` Prompts responded: ${result.promptsResponded.join(', ')}`);
178
- }
179
- console.log('');
180
- }
181
-
182
- // Summary
183
- const passed = results.filter(r => r.passed).length;
184
- const failed = results.filter(r => !r.passed).length;
185
-
186
- console.log('═══════════════════════════════════════════════════════════════');
187
- console.log(`Summary: ${passed} passed, ${failed} failed`);
188
- console.log('═══════════════════════════════════════════════════════════════');
189
-
190
- // Exit with error if any tests failed
191
- if (failed > 0) {
192
- console.log('\nFailed tests:');
193
- for (const result of results.filter(r => !r.passed)) {
194
- console.log(` - ${result.provider}: ${result.error || 'See details above'}`);
195
- }
196
- process.exit(1);
197
- }
198
- }
199
-
200
- // Parse CLI args
201
- const args = process.argv.slice(2);
202
- if (args.includes('--help') || args.includes('-h')) {
203
- console.log(`
204
- CLI OAuth Flow Integration Test
205
-
206
- Usage:
207
- npx tsx scripts/test-cli-auth/test-oauth-flow.ts [provider...]
208
-
209
- Examples:
210
- npx tsx scripts/test-cli-auth/test-oauth-flow.ts # Test all providers
211
- npx tsx scripts/test-cli-auth/test-oauth-flow.ts anthropic # Test Claude only
212
- npx tsx scripts/test-cli-auth/test-oauth-flow.ts anthropic openai # Test multiple
213
-
214
- Providers:
215
- ${Object.keys(CLI_AUTH_CONFIG).join(', ')}
216
- `);
217
- process.exit(0);
218
- }
219
-
220
- runTests(args.length > 0 ? args : undefined).catch(console.error);
@@ -1,222 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Automated PTY input test for Claude CLI
4
- * Tests different input methods without user interaction
5
- * Run inside workspace container: node /app/dist/scripts/test-pty-input-auto.js
6
- */
7
-
8
- import * as pty from 'node-pty';
9
-
10
- const TEST_CODE = 'test-auth-code-12345';
11
- const INPUT_METHOD = process.argv[2] || '1';
12
-
13
- // Debug: Log all escape sequences we send
14
- function logHex(label, data) {
15
- const hex = Buffer.from(data).toString('hex').replace(/(.{2})/g, '$1 ').trim();
16
- console.log(`[HEX] ${label}: ${hex}`);
17
- }
18
-
19
- function stripAnsi(str) {
20
- return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
21
- }
22
-
23
- async function main() {
24
- console.log(`\nTesting PTY input method ${INPUT_METHOD} with code: ${TEST_CODE}\n`);
25
-
26
- const proc = pty.spawn('claude', [], {
27
- name: 'xterm-256color',
28
- cols: 120,
29
- rows: 30,
30
- cwd: '/workspace',
31
- env: {
32
- ...process.env,
33
- NO_COLOR: '1',
34
- TERM: 'xterm-256color',
35
- DISPLAY: '',
36
- },
37
- });
38
-
39
- let output = '';
40
- let authUrl = null;
41
- let codePromptSeen = false;
42
- let codeSent = false;
43
- const prompts = [
44
- { pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
45
- { pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
46
- ];
47
- const respondedPrompts = new Set();
48
-
49
- proc.onData((data) => {
50
- output += data;
51
- const clean = stripAnsi(data);
52
-
53
- // Log meaningful output
54
- if (clean.trim()) {
55
- const lines = clean.trim().split('\n').map(l => l.trim()).filter(l => l);
56
- for (const line of lines) {
57
- if (line.length > 3 && !line.match(/^[·✢*✶✻✽]+$/)) {
58
- console.log('[PTY]', line.substring(0, 120));
59
- }
60
- }
61
- }
62
-
63
- // Auto-respond to prompts
64
- for (const prompt of prompts) {
65
- if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
66
- respondedPrompts.add(prompt.name);
67
- console.log(`\n[AUTO] Responding to: ${prompt.name}`);
68
- setTimeout(() => proc.write(prompt.response), 100);
69
- }
70
- }
71
-
72
- // Capture auth URL
73
- const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
74
- if (urlMatch && !authUrl) {
75
- authUrl = urlMatch[1];
76
- console.log('\n[CAPTURED] Auth URL detected');
77
- }
78
-
79
- // Look for code paste prompt - various patterns Claude might use
80
- const codePromptPatterns = [
81
- /paste.*code/i,
82
- /enter.*code/i,
83
- /authorization.*code/i,
84
- /code.*here/i,
85
- /waiting.*code/i,
86
- /input.*code/i,
87
- ];
88
-
89
- if (authUrl && !codePromptSeen && !codeSent) {
90
- for (const pattern of codePromptPatterns) {
91
- if (pattern.test(clean)) {
92
- codePromptSeen = true;
93
- console.log('\n[DETECTED] Code prompt pattern:', pattern.toString());
94
- break;
95
- }
96
- }
97
- }
98
-
99
- // Also look for the text input box indicator from Ink
100
- // After URL is shown and some time passes, try sending the code
101
- if (authUrl && !codeSent) {
102
- // Check if we see any indication we should enter the code
103
- const outputLower = stripAnsi(output).toLowerCase();
104
- const hasCodePrompt = outputLower.includes('paste') ||
105
- outputLower.includes('enter the code') ||
106
- outputLower.includes('authorization code') ||
107
- outputLower.includes("browser didn't open");
108
-
109
- if (hasCodePrompt || output.length > 5000) {
110
- codeSent = true;
111
- console.log('\n[SENDING] Sending code after prompt/timeout...');
112
- setTimeout(() => sendCode(proc), 500);
113
- }
114
- }
115
- });
116
-
117
- proc.onExit(({ exitCode }) => {
118
- console.log('\n[EXIT] Claude exited with code:', exitCode);
119
- console.log('[TOTAL OUTPUT LENGTH]', output.length);
120
-
121
- // Check for credentials
122
- import('fs').then(fs => {
123
- const credPath = '/home/workspace/.claude/.credentials.json';
124
- if (fs.existsSync(credPath)) {
125
- console.log('[SUCCESS] Credentials file found!');
126
- const creds = fs.readFileSync(credPath, 'utf8');
127
- console.log('[CREDS]', creds.substring(0, 200));
128
- } else {
129
- console.log('[RESULT] No credentials file created (expected with test code)');
130
- }
131
- });
132
-
133
- setTimeout(() => process.exit(exitCode), 1000);
134
- });
135
-
136
- async function sendCode(ptyProc) {
137
- const PASTE_START = '\x1b[200~';
138
- const PASTE_END = '\x1b[201~';
139
-
140
- console.log(`[METHOD ${INPUT_METHOD}] Sending test code...`);
141
-
142
- switch (INPUT_METHOD) {
143
- case '1':
144
- console.log('[1] Plain code + \\r (carriage return)');
145
- logHex('sending', TEST_CODE + '\r');
146
- ptyProc.write(TEST_CODE + '\r');
147
- break;
148
- case '2':
149
- console.log('[2] Plain code + \\n (newline)');
150
- logHex('sending', TEST_CODE + '\n');
151
- ptyProc.write(TEST_CODE + '\n');
152
- break;
153
- case '3':
154
- console.log('[3] Bracketed paste + \\r');
155
- logHex('paste start', PASTE_START);
156
- logHex('code', TEST_CODE);
157
- logHex('paste end', PASTE_END);
158
- ptyProc.write(PASTE_START + TEST_CODE + PASTE_END);
159
- await new Promise(r => setTimeout(r, 200));
160
- logHex('enter', '\r');
161
- ptyProc.write('\r');
162
- break;
163
- case '4':
164
- console.log('[4] Plain code + \\r\\n (CRLF)');
165
- logHex('sending', TEST_CODE + '\r\n');
166
- ptyProc.write(TEST_CODE + '\r\n');
167
- break;
168
- case '5':
169
- console.log('[5] Character by character + \\r');
170
- for (const char of TEST_CODE) {
171
- ptyProc.write(char);
172
- await new Promise(r => setTimeout(r, 10));
173
- }
174
- await new Promise(r => setTimeout(r, 200));
175
- logHex('enter', '\r');
176
- ptyProc.write('\r');
177
- break;
178
- case '6':
179
- console.log('[6] Code then wait, then Enter separately');
180
- logHex('code only', TEST_CODE);
181
- ptyProc.write(TEST_CODE);
182
- await new Promise(r => setTimeout(r, 1000));
183
- console.log('[6] Now sending Enter...');
184
- logHex('enter', '\r');
185
- ptyProc.write('\r');
186
- break;
187
- case '7':
188
- console.log('[7] Send Enter first then code then Enter');
189
- ptyProc.write('\r'); // Clear any existing state
190
- await new Promise(r => setTimeout(r, 200));
191
- logHex('code + enter', TEST_CODE + '\r');
192
- ptyProc.write(TEST_CODE + '\r');
193
- break;
194
- case '8':
195
- console.log('[8] Ctrl+M (same as \\r but explicit)');
196
- logHex('code + ctrl-m', TEST_CODE + '\x0d');
197
- ptyProc.write(TEST_CODE + '\x0d');
198
- break;
199
- default:
200
- console.log('[DEFAULT] Plain code + \\r');
201
- ptyProc.write(TEST_CODE + '\r');
202
- }
203
-
204
- console.log('[SENT] Waiting for response...');
205
-
206
- // Give it more time to process and show error
207
- setTimeout(() => {
208
- console.log('\n[TIMEOUT] Test complete, terminating...');
209
- console.log('[FINAL OUTPUT CHECK] Last 500 chars of output:');
210
- console.log(stripAnsi(output).slice(-500));
211
- ptyProc.kill();
212
- }, 20000);
213
- }
214
-
215
- // Failsafe timeout
216
- setTimeout(() => {
217
- console.log('\n[FAILSAFE] Max time reached, terminating...');
218
- proc.kill();
219
- }, 60000);
220
- }
221
-
222
- main().catch(console.error);
@@ -1,150 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Test PTY input methods for Claude CLI
4
- * Run inside workspace container: node /app/dist/scripts/test-pty-input.js
5
- */
6
-
7
- import * as pty from 'node-pty';
8
- import * as readline from 'readline';
9
-
10
- const rl = readline.createInterface({
11
- input: process.stdin,
12
- output: process.stdout
13
- });
14
-
15
- function ask(question) {
16
- return new Promise(resolve => rl.question(question, resolve));
17
- }
18
-
19
- function stripAnsi(str) {
20
- return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
21
- }
22
-
23
- async function main() {
24
- console.log('Starting Claude CLI via PTY...\n');
25
-
26
- const proc = pty.spawn('claude', [], {
27
- name: 'xterm-256color',
28
- cols: 120,
29
- rows: 30,
30
- cwd: '/workspace',
31
- env: {
32
- ...process.env,
33
- NO_COLOR: '1',
34
- TERM: 'xterm-256color',
35
- DISPLAY: '',
36
- },
37
- });
38
-
39
- let output = '';
40
- let authUrl = null;
41
- const prompts = [
42
- { pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
43
- { pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
44
- ];
45
- const respondedPrompts = new Set();
46
-
47
- proc.onData((data) => {
48
- output += data;
49
- const clean = stripAnsi(data);
50
-
51
- // Log output
52
- if (clean.trim()) {
53
- console.log('[PTY]', clean.substring(0, 200));
54
- }
55
-
56
- // Auto-respond to prompts
57
- for (const prompt of prompts) {
58
- if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
59
- respondedPrompts.add(prompt.name);
60
- console.log(`\n[AUTO] Responding to: ${prompt.name}`);
61
- setTimeout(() => proc.write(prompt.response), 100);
62
- }
63
- }
64
-
65
- // Capture auth URL
66
- const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
67
- if (urlMatch && !authUrl) {
68
- authUrl = urlMatch[1];
69
- console.log('\n[CAPTURED] Auth URL:', authUrl.substring(0, 80) + '...');
70
- promptForCode();
71
- }
72
- });
73
-
74
- proc.onExit(({ exitCode }) => {
75
- console.log('\n[EXIT] Claude exited with code:', exitCode);
76
- console.log('[OUTPUT LENGTH]', output.length);
77
- rl.close();
78
- process.exit(exitCode);
79
- });
80
-
81
- async function promptForCode() {
82
- console.log('\n========================================');
83
- console.log('Complete OAuth in browser, then paste the code here.');
84
- console.log('========================================\n');
85
-
86
- const code = await ask('Paste auth code: ');
87
-
88
- console.log('\nSelect input method:');
89
- console.log('1. Plain code + \\r');
90
- console.log('2. Plain code + \\n');
91
- console.log('3. Bracketed paste + \\r');
92
- console.log('4. Bracketed paste + \\n');
93
- console.log('5. Character by character + \\r');
94
-
95
- const method = await ask('Choice (1-5): ');
96
-
97
- const PASTE_START = '\x1b[200~';
98
- const PASTE_END = '\x1b[201~';
99
- const cleanCode = code.trim();
100
-
101
- console.log(`\n[SENDING] Using method ${method}...`);
102
-
103
- switch (method) {
104
- case '1':
105
- proc.write(cleanCode + '\r');
106
- break;
107
- case '2':
108
- proc.write(cleanCode + '\n');
109
- break;
110
- case '3':
111
- proc.write(PASTE_START + cleanCode + PASTE_END);
112
- await new Promise(r => setTimeout(r, 200));
113
- proc.write('\r');
114
- break;
115
- case '4':
116
- proc.write(PASTE_START + cleanCode + PASTE_END);
117
- await new Promise(r => setTimeout(r, 200));
118
- proc.write('\n');
119
- break;
120
- case '5':
121
- for (const char of cleanCode) {
122
- proc.write(char);
123
- await new Promise(r => setTimeout(r, 10));
124
- }
125
- await new Promise(r => setTimeout(r, 200));
126
- proc.write('\r');
127
- break;
128
- default:
129
- proc.write(cleanCode + '\r');
130
- }
131
-
132
- console.log('[SENT] Waiting for response...\n');
133
-
134
- // Wait and watch output
135
- setTimeout(() => {
136
- console.log('\n[CHECK] Checking for credentials file...');
137
- import('fs').then(fs => {
138
- const credPath = '/home/workspace/.claude/.credentials.json';
139
- if (fs.existsSync(credPath)) {
140
- console.log('[SUCCESS] Credentials file found!');
141
- console.log(fs.readFileSync(credPath, 'utf8').substring(0, 200));
142
- } else {
143
- console.log('[FAIL] No credentials file yet');
144
- }
145
- });
146
- }, 5000);
147
- }
148
- }
149
-
150
- main().catch(console.error);