agent-relay 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/.gitattributes +3 -0
  2. package/.nvmrc +1 -0
  3. package/.trajectories/agent-relay-322-324.md +17 -0
  4. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.json +49 -0
  5. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.md +31 -0
  6. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.json +125 -0
  7. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.md +62 -0
  8. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +65 -0
  9. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +37 -0
  10. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +65 -0
  11. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +37 -0
  12. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +49 -0
  13. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +31 -0
  14. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +113 -0
  15. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +57 -0
  16. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +53 -0
  17. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +32 -0
  18. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.json +49 -0
  19. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.md +31 -0
  20. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +26 -0
  21. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +6 -0
  22. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +47 -0
  23. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +32 -0
  24. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +53 -0
  25. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +32 -0
  26. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.json +77 -0
  27. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.md +42 -0
  28. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +59 -0
  29. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +33 -0
  30. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +53 -0
  31. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +32 -0
  32. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +48 -0
  33. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +24 -0
  34. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.json +77 -0
  35. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.md +42 -0
  36. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.json +77 -0
  37. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.md +42 -0
  38. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +209 -0
  39. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +97 -0
  40. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.json +66 -0
  41. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.md +36 -0
  42. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +48 -0
  43. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +24 -0
  44. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +49 -0
  45. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +23 -0
  46. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.json +40 -0
  47. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.md +22 -0
  48. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +53 -0
  49. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +32 -0
  50. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +49 -0
  51. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +31 -0
  52. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +26 -0
  53. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +6 -0
  54. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.json +121 -0
  55. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.md +29 -0
  56. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +59 -0
  57. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +37 -0
  58. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.json +53 -0
  59. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.md +32 -0
  60. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.json +101 -0
  61. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.md +52 -0
  62. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +77 -0
  63. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +42 -0
  64. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +53 -0
  65. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +32 -0
  66. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +25 -0
  67. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +15 -0
  68. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +101 -0
  69. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +44 -0
  70. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.json +49 -0
  71. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.md +31 -0
  72. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.json +65 -0
  73. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.md +37 -0
  74. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +22 -0
  75. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +5 -0
  76. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +53 -0
  77. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +32 -0
  78. package/.trajectories/completed/2026-01/traj_lq450ly148uw.json +49 -0
  79. package/.trajectories/completed/2026-01/traj_lq450ly148uw.md +31 -0
  80. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +25 -0
  81. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +15 -0
  82. package/.trajectories/completed/2026-01/traj_multi_server_arch.md +101 -0
  83. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +53 -0
  84. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +32 -0
  85. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +53 -0
  86. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +32 -0
  87. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +48 -0
  88. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +24 -0
  89. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +53 -0
  90. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +32 -0
  91. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.json +27 -0
  92. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.md +14 -0
  93. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +77 -0
  94. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +42 -0
  95. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +53 -0
  96. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +32 -0
  97. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +83 -0
  98. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +47 -0
  99. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +59 -0
  100. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +37 -0
  101. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +48 -0
  102. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +16 -0
  103. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +59 -0
  104. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +37 -0
  105. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +53 -0
  106. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +32 -0
  107. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +84 -0
  108. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +109 -0
  109. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +53 -0
  110. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +32 -0
  111. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.json +53 -0
  112. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.md +32 -0
  113. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.json +186 -0
  114. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.md +86 -0
  115. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.json +77 -0
  116. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.md +42 -0
  117. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +71 -0
  118. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +42 -0
  119. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.json +89 -0
  120. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.md +47 -0
  121. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +53 -0
  122. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +32 -0
  123. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +20 -0
  124. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +6 -0
  125. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +175 -0
  126. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +82 -0
  127. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.json +65 -0
  128. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.md +37 -0
  129. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.json +49 -0
  130. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.md +31 -0
  131. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +47 -0
  132. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +32 -0
  133. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +59 -0
  134. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +37 -0
  135. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +53 -0
  136. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +32 -0
  137. package/.trajectories/consolidate-settings-panel.md +24 -0
  138. package/.trajectories/gh-cli-user-token.md +26 -0
  139. package/.trajectories/index.json +468 -0
  140. package/ARCHITECTURE.md +1245 -0
  141. package/TESTING.md +278 -0
  142. package/deploy/init-db.sql +5 -0
  143. package/deploy/scripts/setup-fly-workspaces.sh +69 -0
  144. package/deploy/scripts/setup-railway.sh +75 -0
  145. package/deploy/workspace/codex.config.toml +15 -0
  146. package/deploy/workspace/entrypoint-browser.sh +118 -0
  147. package/deploy/workspace/entrypoint.sh +508 -0
  148. package/deploy/workspace/git-credential-relay +126 -0
  149. package/dist/bridge/spawner.d.ts +7 -0
  150. package/dist/bridge/spawner.js +40 -9
  151. package/dist/bridge/types.d.ts +2 -0
  152. package/dist/cli/index.js +260 -1
  153. package/dist/cloud/api/admin.d.ts +8 -0
  154. package/dist/cloud/api/admin.js +212 -0
  155. package/dist/cloud/api/auth.js +8 -0
  156. package/dist/cloud/api/billing.d.ts +0 -10
  157. package/dist/cloud/api/billing.js +278 -67
  158. package/dist/cloud/api/codex-auth-helper.d.ts +21 -0
  159. package/dist/cloud/api/codex-auth-helper.js +307 -0
  160. package/dist/cloud/api/coordinators.js +402 -0
  161. package/dist/cloud/api/daemons.js +15 -11
  162. package/dist/cloud/api/git.js +127 -19
  163. package/dist/cloud/api/github-app.js +42 -8
  164. package/dist/cloud/api/nango-auth.js +297 -16
  165. package/dist/cloud/api/onboarding.js +112 -35
  166. package/dist/cloud/api/providers.js +12 -16
  167. package/dist/cloud/api/repos.d.ts +1 -0
  168. package/dist/cloud/api/repos.js +311 -49
  169. package/dist/cloud/api/test-helpers.js +40 -0
  170. package/dist/cloud/api/usage.js +13 -0
  171. package/dist/cloud/api/webhooks.d.ts +1 -0
  172. package/dist/cloud/api/webhooks.js +149 -0
  173. package/dist/cloud/api/workspaces.d.ts +18 -0
  174. package/dist/cloud/api/workspaces.js +1042 -21
  175. package/dist/cloud/billing/plans.js +19 -19
  176. package/dist/cloud/config.d.ts +8 -0
  177. package/dist/cloud/config.js +15 -0
  178. package/dist/cloud/db/drizzle.d.ts +5 -2
  179. package/dist/cloud/db/drizzle.js +27 -20
  180. package/dist/cloud/db/schema.d.ts +19 -51
  181. package/dist/cloud/db/schema.js +5 -4
  182. package/dist/cloud/index.d.ts +0 -1
  183. package/dist/cloud/index.js +0 -1
  184. package/dist/cloud/provisioner/index.d.ts +125 -1
  185. package/dist/cloud/provisioner/index.js +939 -53
  186. package/dist/cloud/server.js +161 -16
  187. package/dist/cloud/services/compute-enforcement.d.ts +57 -0
  188. package/dist/cloud/services/compute-enforcement.js +175 -0
  189. package/dist/cloud/services/index.d.ts +2 -0
  190. package/dist/cloud/services/index.js +4 -0
  191. package/dist/cloud/services/intro-expiration.d.ts +55 -0
  192. package/dist/cloud/services/intro-expiration.js +211 -0
  193. package/dist/cloud/services/nango.d.ts +74 -0
  194. package/dist/cloud/services/nango.js +218 -5
  195. package/dist/cloud/services/planLimits.d.ts +22 -0
  196. package/dist/cloud/services/planLimits.js +58 -5
  197. package/dist/cloud/services/ssh-security.d.ts +31 -0
  198. package/dist/cloud/services/ssh-security.js +63 -0
  199. package/dist/continuity/manager.d.ts +5 -0
  200. package/dist/continuity/manager.js +56 -2
  201. package/dist/daemon/api.d.ts +2 -0
  202. package/dist/daemon/api.js +214 -5
  203. package/dist/daemon/cli-auth.d.ts +13 -1
  204. package/dist/daemon/cli-auth.js +166 -47
  205. package/dist/daemon/connection.d.ts +7 -1
  206. package/dist/daemon/connection.js +15 -0
  207. package/dist/daemon/orchestrator.d.ts +2 -0
  208. package/dist/daemon/orchestrator.js +26 -0
  209. package/dist/daemon/repo-manager.d.ts +116 -0
  210. package/dist/daemon/repo-manager.js +384 -0
  211. package/dist/daemon/router.d.ts +60 -1
  212. package/dist/daemon/router.js +281 -20
  213. package/dist/daemon/user-directory.d.ts +111 -0
  214. package/dist/daemon/user-directory.js +233 -0
  215. package/dist/dashboard/out/404.html +1 -1
  216. package/dist/dashboard/out/_next/static/T1tgCqVWHFIkV7ClEtzD7/_ssgManifest.js +1 -0
  217. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +9 -0
  218. package/dist/dashboard/out/_next/static/chunks/766-b54f0853794b78c3.js +1 -0
  219. package/dist/dashboard/out/_next/static/chunks/83-b51836037078006c.js +1 -0
  220. package/dist/dashboard/out/_next/static/chunks/891-6cd50de1224f70bb.js +1 -0
  221. package/dist/dashboard/out/_next/static/chunks/899-bb19a9b3d9b39ea6.js +1 -0
  222. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-8939b0fc700f7eca.js +1 -0
  223. package/dist/dashboard/out/_next/static/chunks/app/app/page-5af1b6b439858aa6.js +1 -0
  224. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-ac39dc0cc3c26fa7.js +1 -0
  225. package/dist/dashboard/out/_next/static/chunks/app/{page-daf87e86f783f980.js → page-4a5938c18a11a654.js} +1 -1
  226. package/dist/dashboard/out/_next/static/chunks/app/providers/page-ac3a6ac433fd6001.js +1 -0
  227. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-09f9caae98a18c09.js +1 -0
  228. package/dist/dashboard/out/_next/static/chunks/{main-97850e03d723ea8c.js → main-2ee6beb2ae96d210.js} +1 -1
  229. package/dist/dashboard/out/_next/static/css/85d2af9c7ac74d62.css +1 -0
  230. package/dist/dashboard/out/_next/static/css/fe4b28883eeff359.css +1 -0
  231. package/dist/dashboard/out/app/onboarding.html +1 -0
  232. package/dist/dashboard/out/app/onboarding.txt +7 -0
  233. package/dist/dashboard/out/app.html +1 -1
  234. package/dist/dashboard/out/app.txt +3 -3
  235. package/dist/dashboard/out/apple-icon.png +0 -0
  236. package/dist/dashboard/out/connect-repos.html +1 -1
  237. package/dist/dashboard/out/connect-repos.txt +3 -3
  238. package/dist/dashboard/out/history.html +1 -1
  239. package/dist/dashboard/out/history.txt +3 -3
  240. package/dist/dashboard/out/index.html +1 -1
  241. package/dist/dashboard/out/index.txt +3 -3
  242. package/dist/dashboard/out/login.html +2 -2
  243. package/dist/dashboard/out/login.txt +3 -3
  244. package/dist/dashboard/out/metrics.html +1 -1
  245. package/dist/dashboard/out/metrics.txt +3 -3
  246. package/dist/dashboard/out/pricing.html +3 -3
  247. package/dist/dashboard/out/pricing.txt +3 -3
  248. package/dist/dashboard/out/providers/setup/claude.html +1 -0
  249. package/dist/dashboard/out/providers/setup/claude.txt +8 -0
  250. package/dist/dashboard/out/providers/setup/codex.html +1 -0
  251. package/dist/dashboard/out/providers/setup/codex.txt +8 -0
  252. package/dist/dashboard/out/providers.html +1 -1
  253. package/dist/dashboard/out/providers.txt +3 -3
  254. package/dist/dashboard/out/signup.html +2 -2
  255. package/dist/dashboard/out/signup.txt +3 -3
  256. package/dist/dashboard-server/server.js +316 -12
  257. package/dist/dashboard-server/user-bridge.d.ts +103 -0
  258. package/dist/dashboard-server/user-bridge.js +189 -0
  259. package/dist/protocol/channels.d.ts +205 -0
  260. package/dist/protocol/channels.js +154 -0
  261. package/dist/protocol/types.d.ts +13 -1
  262. package/dist/resiliency/provider-context.js +2 -0
  263. package/dist/shared/cli-auth-config.d.ts +19 -0
  264. package/dist/shared/cli-auth-config.js +58 -2
  265. package/dist/utils/agent-config.js +1 -1
  266. package/dist/wrapper/auth-detection.d.ts +49 -0
  267. package/dist/wrapper/auth-detection.js +192 -0
  268. package/dist/wrapper/base-wrapper.d.ts +153 -0
  269. package/dist/wrapper/base-wrapper.js +393 -0
  270. package/dist/wrapper/client.d.ts +7 -1
  271. package/dist/wrapper/client.js +3 -0
  272. package/dist/wrapper/index.d.ts +1 -0
  273. package/dist/wrapper/index.js +4 -3
  274. package/dist/wrapper/pty-wrapper.d.ts +62 -84
  275. package/dist/wrapper/pty-wrapper.js +154 -180
  276. package/dist/wrapper/tmux-wrapper.d.ts +41 -66
  277. package/dist/wrapper/tmux-wrapper.js +90 -134
  278. package/package.json +5 -12
  279. package/scripts/postinstall.js +11 -155
  280. package/scripts/test-interactive-terminal.sh +248 -0
  281. package/test-push.txt +1 -0
  282. package/bin/tmux +0 -0
  283. package/dist/bridge/config.d.ts.map +0 -1
  284. package/dist/bridge/config.js.map +0 -1
  285. package/dist/bridge/index.d.ts.map +0 -1
  286. package/dist/bridge/index.js.map +0 -1
  287. package/dist/bridge/multi-project-client.d.ts.map +0 -1
  288. package/dist/bridge/multi-project-client.js.map +0 -1
  289. package/dist/bridge/shadow-cli.d.ts.map +0 -1
  290. package/dist/bridge/shadow-cli.js.map +0 -1
  291. package/dist/bridge/shadow-config.d.ts.map +0 -1
  292. package/dist/bridge/shadow-config.js.map +0 -1
  293. package/dist/bridge/spawner.d.ts.map +0 -1
  294. package/dist/bridge/spawner.js.map +0 -1
  295. package/dist/bridge/teams-config.d.ts.map +0 -1
  296. package/dist/bridge/teams-config.js.map +0 -1
  297. package/dist/bridge/types.d.ts.map +0 -1
  298. package/dist/bridge/types.js.map +0 -1
  299. package/dist/bridge/utils.d.ts.map +0 -1
  300. package/dist/bridge/utils.js.map +0 -1
  301. package/dist/cli/index.d.ts.map +0 -1
  302. package/dist/cli/index.js.map +0 -1
  303. package/dist/cloud/api/auth.d.ts.map +0 -1
  304. package/dist/cloud/api/auth.js.map +0 -1
  305. package/dist/cloud/api/billing.d.ts.map +0 -1
  306. package/dist/cloud/api/billing.js.map +0 -1
  307. package/dist/cloud/api/cli-pty-runner.d.ts.map +0 -1
  308. package/dist/cloud/api/cli-pty-runner.js.map +0 -1
  309. package/dist/cloud/api/coordinators.d.ts.map +0 -1
  310. package/dist/cloud/api/coordinators.js.map +0 -1
  311. package/dist/cloud/api/daemons.d.ts.map +0 -1
  312. package/dist/cloud/api/daemons.js.map +0 -1
  313. package/dist/cloud/api/generic-webhooks.d.ts.map +0 -1
  314. package/dist/cloud/api/generic-webhooks.js.map +0 -1
  315. package/dist/cloud/api/git.d.ts.map +0 -1
  316. package/dist/cloud/api/git.js.map +0 -1
  317. package/dist/cloud/api/github-app.d.ts.map +0 -1
  318. package/dist/cloud/api/github-app.js.map +0 -1
  319. package/dist/cloud/api/middleware/planLimits.d.ts.map +0 -1
  320. package/dist/cloud/api/middleware/planLimits.js.map +0 -1
  321. package/dist/cloud/api/monitoring.d.ts.map +0 -1
  322. package/dist/cloud/api/monitoring.js.map +0 -1
  323. package/dist/cloud/api/nango-auth.d.ts.map +0 -1
  324. package/dist/cloud/api/nango-auth.js.map +0 -1
  325. package/dist/cloud/api/onboarding.d.ts.map +0 -1
  326. package/dist/cloud/api/onboarding.js.map +0 -1
  327. package/dist/cloud/api/policy.d.ts.map +0 -1
  328. package/dist/cloud/api/policy.js.map +0 -1
  329. package/dist/cloud/api/providers.d.ts.map +0 -1
  330. package/dist/cloud/api/providers.js.map +0 -1
  331. package/dist/cloud/api/repos.d.ts.map +0 -1
  332. package/dist/cloud/api/repos.js.map +0 -1
  333. package/dist/cloud/api/teams.d.ts.map +0 -1
  334. package/dist/cloud/api/teams.js.map +0 -1
  335. package/dist/cloud/api/test-helpers.d.ts.map +0 -1
  336. package/dist/cloud/api/test-helpers.js.map +0 -1
  337. package/dist/cloud/api/usage.d.ts.map +0 -1
  338. package/dist/cloud/api/usage.js.map +0 -1
  339. package/dist/cloud/api/webhooks.d.ts.map +0 -1
  340. package/dist/cloud/api/webhooks.js.map +0 -1
  341. package/dist/cloud/api/workspaces.d.ts.map +0 -1
  342. package/dist/cloud/api/workspaces.js.map +0 -1
  343. package/dist/cloud/billing/index.d.ts.map +0 -1
  344. package/dist/cloud/billing/index.js.map +0 -1
  345. package/dist/cloud/billing/plans.d.ts.map +0 -1
  346. package/dist/cloud/billing/plans.js.map +0 -1
  347. package/dist/cloud/billing/service.d.ts.map +0 -1
  348. package/dist/cloud/billing/service.js.map +0 -1
  349. package/dist/cloud/billing/types.d.ts.map +0 -1
  350. package/dist/cloud/billing/types.js.map +0 -1
  351. package/dist/cloud/config.d.ts.map +0 -1
  352. package/dist/cloud/config.js.map +0 -1
  353. package/dist/cloud/db/drizzle.d.ts.map +0 -1
  354. package/dist/cloud/db/drizzle.js.map +0 -1
  355. package/dist/cloud/db/index.d.ts.map +0 -1
  356. package/dist/cloud/db/index.js.map +0 -1
  357. package/dist/cloud/db/schema.d.ts.map +0 -1
  358. package/dist/cloud/db/schema.js.map +0 -1
  359. package/dist/cloud/index.d.ts.map +0 -1
  360. package/dist/cloud/index.js.map +0 -1
  361. package/dist/cloud/provisioner/index.d.ts.map +0 -1
  362. package/dist/cloud/provisioner/index.js.map +0 -1
  363. package/dist/cloud/server.d.ts.map +0 -1
  364. package/dist/cloud/server.js.map +0 -1
  365. package/dist/cloud/services/auto-scaler.d.ts.map +0 -1
  366. package/dist/cloud/services/auto-scaler.js.map +0 -1
  367. package/dist/cloud/services/capacity-manager.d.ts.map +0 -1
  368. package/dist/cloud/services/capacity-manager.js.map +0 -1
  369. package/dist/cloud/services/ci-agent-spawner.d.ts.map +0 -1
  370. package/dist/cloud/services/ci-agent-spawner.js.map +0 -1
  371. package/dist/cloud/services/coordinator.d.ts.map +0 -1
  372. package/dist/cloud/services/coordinator.js.map +0 -1
  373. package/dist/cloud/services/index.d.ts.map +0 -1
  374. package/dist/cloud/services/index.js.map +0 -1
  375. package/dist/cloud/services/mention-handler.d.ts.map +0 -1
  376. package/dist/cloud/services/mention-handler.js.map +0 -1
  377. package/dist/cloud/services/nango.d.ts.map +0 -1
  378. package/dist/cloud/services/nango.js.map +0 -1
  379. package/dist/cloud/services/persistence.d.ts.map +0 -1
  380. package/dist/cloud/services/persistence.js.map +0 -1
  381. package/dist/cloud/services/planLimits.d.ts.map +0 -1
  382. package/dist/cloud/services/planLimits.js.map +0 -1
  383. package/dist/cloud/services/scaling-orchestrator.d.ts.map +0 -1
  384. package/dist/cloud/services/scaling-orchestrator.js.map +0 -1
  385. package/dist/cloud/services/scaling-policy.d.ts.map +0 -1
  386. package/dist/cloud/services/scaling-policy.js.map +0 -1
  387. package/dist/cloud/vault/index.d.ts +0 -76
  388. package/dist/cloud/vault/index.d.ts.map +0 -1
  389. package/dist/cloud/vault/index.js +0 -219
  390. package/dist/cloud/vault/index.js.map +0 -1
  391. package/dist/cloud/webhooks/index.d.ts.map +0 -1
  392. package/dist/cloud/webhooks/index.js.map +0 -1
  393. package/dist/cloud/webhooks/parsers/github.d.ts.map +0 -1
  394. package/dist/cloud/webhooks/parsers/github.js.map +0 -1
  395. package/dist/cloud/webhooks/parsers/index.d.ts.map +0 -1
  396. package/dist/cloud/webhooks/parsers/index.js.map +0 -1
  397. package/dist/cloud/webhooks/parsers/linear.d.ts.map +0 -1
  398. package/dist/cloud/webhooks/parsers/linear.js.map +0 -1
  399. package/dist/cloud/webhooks/parsers/slack.d.ts.map +0 -1
  400. package/dist/cloud/webhooks/parsers/slack.js.map +0 -1
  401. package/dist/cloud/webhooks/responders/github.d.ts.map +0 -1
  402. package/dist/cloud/webhooks/responders/github.js.map +0 -1
  403. package/dist/cloud/webhooks/responders/index.d.ts.map +0 -1
  404. package/dist/cloud/webhooks/responders/index.js.map +0 -1
  405. package/dist/cloud/webhooks/responders/linear.d.ts.map +0 -1
  406. package/dist/cloud/webhooks/responders/linear.js.map +0 -1
  407. package/dist/cloud/webhooks/responders/slack.d.ts.map +0 -1
  408. package/dist/cloud/webhooks/responders/slack.js.map +0 -1
  409. package/dist/cloud/webhooks/router.d.ts.map +0 -1
  410. package/dist/cloud/webhooks/router.js.map +0 -1
  411. package/dist/cloud/webhooks/rules-engine.d.ts.map +0 -1
  412. package/dist/cloud/webhooks/rules-engine.js.map +0 -1
  413. package/dist/cloud/webhooks/types.d.ts.map +0 -1
  414. package/dist/cloud/webhooks/types.js.map +0 -1
  415. package/dist/continuity/formatter.d.ts.map +0 -1
  416. package/dist/continuity/formatter.js.map +0 -1
  417. package/dist/continuity/handoff-store.d.ts.map +0 -1
  418. package/dist/continuity/handoff-store.js.map +0 -1
  419. package/dist/continuity/index.d.ts.map +0 -1
  420. package/dist/continuity/index.js.map +0 -1
  421. package/dist/continuity/ledger-store.d.ts.map +0 -1
  422. package/dist/continuity/ledger-store.js.map +0 -1
  423. package/dist/continuity/manager.d.ts.map +0 -1
  424. package/dist/continuity/manager.js.map +0 -1
  425. package/dist/continuity/parser.d.ts.map +0 -1
  426. package/dist/continuity/parser.js.map +0 -1
  427. package/dist/continuity/types.d.ts.map +0 -1
  428. package/dist/continuity/types.js.map +0 -1
  429. package/dist/daemon/agent-manager.d.ts.map +0 -1
  430. package/dist/daemon/agent-manager.js.map +0 -1
  431. package/dist/daemon/agent-registry.d.ts.map +0 -1
  432. package/dist/daemon/agent-registry.js.map +0 -1
  433. package/dist/daemon/api.d.ts.map +0 -1
  434. package/dist/daemon/api.js.map +0 -1
  435. package/dist/daemon/auth.d.ts.map +0 -1
  436. package/dist/daemon/auth.js.map +0 -1
  437. package/dist/daemon/cli-auth.d.ts.map +0 -1
  438. package/dist/daemon/cli-auth.js.map +0 -1
  439. package/dist/daemon/cloud-sync.d.ts.map +0 -1
  440. package/dist/daemon/cloud-sync.js.map +0 -1
  441. package/dist/daemon/connection.d.ts.map +0 -1
  442. package/dist/daemon/connection.js.map +0 -1
  443. package/dist/daemon/index.d.ts.map +0 -1
  444. package/dist/daemon/index.js.map +0 -1
  445. package/dist/daemon/orchestrator.d.ts.map +0 -1
  446. package/dist/daemon/orchestrator.js.map +0 -1
  447. package/dist/daemon/registry.d.ts.map +0 -1
  448. package/dist/daemon/registry.js.map +0 -1
  449. package/dist/daemon/router.d.ts.map +0 -1
  450. package/dist/daemon/router.js.map +0 -1
  451. package/dist/daemon/server.d.ts.map +0 -1
  452. package/dist/daemon/server.js.map +0 -1
  453. package/dist/daemon/services/browser-testing.d.ts.map +0 -1
  454. package/dist/daemon/services/browser-testing.js.map +0 -1
  455. package/dist/daemon/services/container-spawner.d.ts.map +0 -1
  456. package/dist/daemon/services/container-spawner.js.map +0 -1
  457. package/dist/daemon/types.d.ts.map +0 -1
  458. package/dist/daemon/types.js.map +0 -1
  459. package/dist/daemon/workspace-manager.d.ts.map +0 -1
  460. package/dist/daemon/workspace-manager.js.map +0 -1
  461. package/dist/dashboard/out/_next/static/H5aWG0udPB4iOUIl_gytz/_ssgManifest.js +0 -1
  462. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +0 -1
  463. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +0 -9
  464. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +0 -1
  465. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +0 -1
  466. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +0 -1
  467. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +0 -1
  468. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +0 -1
  469. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +0 -1
  470. package/dist/dashboard-server/metrics.d.ts.map +0 -1
  471. package/dist/dashboard-server/metrics.js.map +0 -1
  472. package/dist/dashboard-server/needs-attention.d.ts.map +0 -1
  473. package/dist/dashboard-server/needs-attention.js.map +0 -1
  474. package/dist/dashboard-server/server.d.ts.map +0 -1
  475. package/dist/dashboard-server/server.js.map +0 -1
  476. package/dist/dashboard-server/start.d.ts.map +0 -1
  477. package/dist/dashboard-server/start.js.map +0 -1
  478. package/dist/hooks/emitter.d.ts.map +0 -1
  479. package/dist/hooks/emitter.js.map +0 -1
  480. package/dist/hooks/inbox-check/hook.d.ts.map +0 -1
  481. package/dist/hooks/inbox-check/hook.js.map +0 -1
  482. package/dist/hooks/inbox-check/index.d.ts.map +0 -1
  483. package/dist/hooks/inbox-check/index.js.map +0 -1
  484. package/dist/hooks/inbox-check/types.d.ts.map +0 -1
  485. package/dist/hooks/inbox-check/types.js.map +0 -1
  486. package/dist/hooks/inbox-check/utils.d.ts.map +0 -1
  487. package/dist/hooks/inbox-check/utils.js.map +0 -1
  488. package/dist/hooks/index.d.ts.map +0 -1
  489. package/dist/hooks/index.js.map +0 -1
  490. package/dist/hooks/registry.d.ts.map +0 -1
  491. package/dist/hooks/registry.js.map +0 -1
  492. package/dist/hooks/trajectory-hooks.d.ts.map +0 -1
  493. package/dist/hooks/trajectory-hooks.js.map +0 -1
  494. package/dist/hooks/types.d.ts.map +0 -1
  495. package/dist/hooks/types.js.map +0 -1
  496. package/dist/index.d.ts.map +0 -1
  497. package/dist/index.js.map +0 -1
  498. package/dist/memory/adapters/index.d.ts.map +0 -1
  499. package/dist/memory/adapters/index.js.map +0 -1
  500. package/dist/memory/adapters/inmemory.d.ts.map +0 -1
  501. package/dist/memory/adapters/inmemory.js.map +0 -1
  502. package/dist/memory/adapters/supermemory.d.ts.map +0 -1
  503. package/dist/memory/adapters/supermemory.js.map +0 -1
  504. package/dist/memory/factory.d.ts.map +0 -1
  505. package/dist/memory/factory.js.map +0 -1
  506. package/dist/memory/index.d.ts.map +0 -1
  507. package/dist/memory/index.js.map +0 -1
  508. package/dist/memory/memory-hooks.d.ts.map +0 -1
  509. package/dist/memory/memory-hooks.js.map +0 -1
  510. package/dist/memory/service.d.ts.map +0 -1
  511. package/dist/memory/service.js.map +0 -1
  512. package/dist/memory/types.d.ts.map +0 -1
  513. package/dist/memory/types.js.map +0 -1
  514. package/dist/policy/agent-policy.d.ts.map +0 -1
  515. package/dist/policy/agent-policy.js.map +0 -1
  516. package/dist/policy/cloud-policy-fetcher.d.ts.map +0 -1
  517. package/dist/policy/cloud-policy-fetcher.js.map +0 -1
  518. package/dist/protocol/framing.d.ts.map +0 -1
  519. package/dist/protocol/framing.js.map +0 -1
  520. package/dist/protocol/index.d.ts.map +0 -1
  521. package/dist/protocol/index.js.map +0 -1
  522. package/dist/protocol/types.d.ts.map +0 -1
  523. package/dist/protocol/types.js.map +0 -1
  524. package/dist/resiliency/context-persistence.d.ts.map +0 -1
  525. package/dist/resiliency/context-persistence.js.map +0 -1
  526. package/dist/resiliency/crash-insights.d.ts.map +0 -1
  527. package/dist/resiliency/crash-insights.js.map +0 -1
  528. package/dist/resiliency/gossip-health.d.ts.map +0 -1
  529. package/dist/resiliency/gossip-health.js.map +0 -1
  530. package/dist/resiliency/health-monitor.d.ts.map +0 -1
  531. package/dist/resiliency/health-monitor.js.map +0 -1
  532. package/dist/resiliency/index.d.ts.map +0 -1
  533. package/dist/resiliency/index.js.map +0 -1
  534. package/dist/resiliency/leader-watchdog.d.ts.map +0 -1
  535. package/dist/resiliency/leader-watchdog.js.map +0 -1
  536. package/dist/resiliency/logger.d.ts.map +0 -1
  537. package/dist/resiliency/logger.js.map +0 -1
  538. package/dist/resiliency/memory-monitor.d.ts.map +0 -1
  539. package/dist/resiliency/memory-monitor.js.map +0 -1
  540. package/dist/resiliency/metrics.d.ts.map +0 -1
  541. package/dist/resiliency/metrics.js.map +0 -1
  542. package/dist/resiliency/provider-context.d.ts.map +0 -1
  543. package/dist/resiliency/provider-context.js.map +0 -1
  544. package/dist/resiliency/stateless-lead.d.ts.map +0 -1
  545. package/dist/resiliency/stateless-lead.js.map +0 -1
  546. package/dist/resiliency/supervisor.d.ts.map +0 -1
  547. package/dist/resiliency/supervisor.js.map +0 -1
  548. package/dist/shared/cli-auth-config.d.ts.map +0 -1
  549. package/dist/shared/cli-auth-config.js.map +0 -1
  550. package/dist/state/agent-state.d.ts.map +0 -1
  551. package/dist/state/agent-state.js.map +0 -1
  552. package/dist/storage/adapter.d.ts.map +0 -1
  553. package/dist/storage/adapter.js.map +0 -1
  554. package/dist/storage/sqlite-adapter.d.ts.map +0 -1
  555. package/dist/storage/sqlite-adapter.js.map +0 -1
  556. package/dist/trajectory/config.d.ts.map +0 -1
  557. package/dist/trajectory/config.js.map +0 -1
  558. package/dist/trajectory/index.d.ts.map +0 -1
  559. package/dist/trajectory/index.js.map +0 -1
  560. package/dist/trajectory/integration.d.ts.map +0 -1
  561. package/dist/trajectory/integration.js.map +0 -1
  562. package/dist/utils/agent-config.d.ts.map +0 -1
  563. package/dist/utils/agent-config.js.map +0 -1
  564. package/dist/utils/command-resolver.d.ts.map +0 -1
  565. package/dist/utils/command-resolver.js.map +0 -1
  566. package/dist/utils/index.d.ts.map +0 -1
  567. package/dist/utils/index.js.map +0 -1
  568. package/dist/utils/logger.d.ts.map +0 -1
  569. package/dist/utils/logger.js.map +0 -1
  570. package/dist/utils/name-generator.d.ts.map +0 -1
  571. package/dist/utils/name-generator.js.map +0 -1
  572. package/dist/utils/project-namespace.d.ts.map +0 -1
  573. package/dist/utils/project-namespace.js.map +0 -1
  574. package/dist/utils/tmux-resolver.d.ts.map +0 -1
  575. package/dist/utils/tmux-resolver.js.map +0 -1
  576. package/dist/utils/update-checker.d.ts.map +0 -1
  577. package/dist/utils/update-checker.js.map +0 -1
  578. package/dist/wrapper/client.d.ts.map +0 -1
  579. package/dist/wrapper/client.js.map +0 -1
  580. package/dist/wrapper/inbox.d.ts.map +0 -1
  581. package/dist/wrapper/inbox.js.map +0 -1
  582. package/dist/wrapper/index.d.ts.map +0 -1
  583. package/dist/wrapper/index.js.map +0 -1
  584. package/dist/wrapper/parser.d.ts.map +0 -1
  585. package/dist/wrapper/parser.js.map +0 -1
  586. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  587. package/dist/wrapper/pty-wrapper.js.map +0 -1
  588. package/dist/wrapper/shared.d.ts.map +0 -1
  589. package/dist/wrapper/shared.js.map +0 -1
  590. package/dist/wrapper/tmux-wrapper.d.ts.map +0 -1
  591. package/dist/wrapper/tmux-wrapper.js.map +0 -1
  592. package/docs/AGENTS.md +0 -513
  593. package/docs/ARCHITECTURE_DECISIONS.md +0 -175
  594. package/docs/CLOUD-ARCHITECTURE.md +0 -804
  595. package/docs/CLOUD-ONBOARDING-DESIGN.md +0 -1983
  596. package/docs/CONTRIBUTING.md +0 -151
  597. package/docs/HOOKS_API.md +0 -394
  598. package/docs/INTEGRATION-GUIDE.md +0 -926
  599. package/docs/PROTOCOL.md +0 -325
  600. package/docs/WRAPPER_EVENTS.md +0 -358
  601. package/docs/agent-policy-snippet.md +0 -40
  602. package/docs/agent-relay-protocol.md +0 -238
  603. package/docs/agent-relay-snippet.md +0 -174
  604. package/docs/archive/CHANGELOG.md +0 -11
  605. package/docs/archive/CLI-SIMPLIFICATION-COMPLETE.md +0 -48
  606. package/docs/archive/DESIGN_BRIDGE_STAFFING.md +0 -878
  607. package/docs/archive/DESIGN_V2.md +0 -1079
  608. package/docs/archive/EXECUTIVE_SUMMARY.md +0 -358
  609. package/docs/archive/MONETIZATION.md +0 -1679
  610. package/docs/archive/PROPOSAL-trajectories.md +0 -1582
  611. package/docs/archive/ROADMAP.md +0 -329
  612. package/docs/archive/SCALING_ANALYSIS.md +0 -280
  613. package/docs/archive/TESTING_PRESENCE_FEATURES.md +0 -327
  614. package/docs/archive/TMUX_IMPLEMENTATION_NOTES.md +0 -364
  615. package/docs/archive/TMUX_IMPROVEMENTS.md +0 -968
  616. package/docs/archive/dashboard-v2-plan.md +0 -179
  617. package/docs/archive/removable-code-analysis.md +0 -24
  618. package/docs/competitive/GASTOWN.md +0 -451
  619. package/docs/competitive/MCP_AGENT_MAIL.md +0 -389
  620. package/docs/competitive/OVERVIEW.md +0 -898
  621. package/docs/competitive/README.md +0 -34
  622. package/docs/competitive/TMUX_ORCHESTRATOR.md +0 -605
  623. package/docs/dashboard.png +0 -0
  624. package/docs/design/ci-failure-webhooks.md +0 -812
  625. package/docs/design/comprehensive-integrations.md +0 -238
  626. package/docs/design/e2b-sandbox-integration.md +0 -504
  627. package/docs/design/github-app-permissions.md +0 -264
  628. package/docs/guides/CLOUD.md +0 -236
  629. package/docs/guides/LOCAL.md +0 -535
  630. package/docs/guides/SELF-HOSTED.md +0 -494
  631. package/docs/local-testing.md +0 -428
  632. package/docs/proposals/continuous-claude-integration.md +0 -622
  633. package/docs/proposals/custom-commands.md +0 -368
  634. package/docs/proposals/shadow-as-subagent.md +0 -765
  635. package/docs/proposals/slack-bot-integration.md +0 -1457
  636. package/docs/tasks/global-skills-system.tasks.md +0 -230
  637. package/docs/tasks/webhook-integrations.tasks.md +0 -184
  638. package/docs/tasks/workspace-capabilities.tasks.md +0 -121
  639. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +0 -366
  640. package/scripts/cloud-setup.sh +0 -96
  641. package/scripts/dev/PUBLIC_RELEASE_PLAN.md +0 -88
  642. package/scripts/dev/dev-team-setup.sh +0 -431
  643. package/scripts/e2e-test.sh +0 -119
  644. package/scripts/games/game-protocol.md +0 -79
  645. package/scripts/games/hearts-setup.sh +0 -264
  646. package/scripts/manual-qa.sh +0 -293
  647. package/scripts/run-cloud-qa.sh +0 -220
  648. package/scripts/test-cli-auth/Dockerfile +0 -44
  649. package/scripts/test-cli-auth/Dockerfile.real +0 -79
  650. package/scripts/test-cli-auth/README.md +0 -286
  651. package/scripts/test-cli-auth/ci-test-real-clis.ts +0 -251
  652. package/scripts/test-cli-auth/ci-test-runner.ts +0 -263
  653. package/scripts/test-cli-auth/mock-cli.sh +0 -147
  654. package/scripts/test-cli-auth/package.json +0 -14
  655. package/scripts/test-cli-auth/test-oauth-flow.ts +0 -220
  656. package/scripts/test-pty-input-auto.js +0 -222
  657. package/scripts/test-pty-input.js +0 -150
  658. package/scripts/tictactoe-setup.sh +0 -181
  659. /package/dist/dashboard/out/_next/static/{H5aWG0udPB4iOUIl_gytz → T1tgCqVWHFIkV7ClEtzD7}/_buildManifest.js +0 -0
  660. /package/dist/dashboard/out/_next/static/chunks/{117-b100311aff8d5c61.js → 117-f7b8ab0809342e77.js} +0 -0
  661. /package/dist/dashboard/out/_next/static/chunks/{648-a13d3c2b1be45466.js → 648-5cc6e1921389a58a.js} +0 -0
  662. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-a4973f3e3c82fb67.js → page-53b8a69f76db17d0.js} +0 -0
  663. /package/dist/dashboard/out/_next/static/chunks/app/connect-repos/{page-dc2e3a1a22478efc.js → page-f45ecbc3e06134fc.js} +0 -0
  664. /package/dist/dashboard/out/_next/static/chunks/app/history/{page-56a8b4616a90dc43.js → page-8c8bed33beb2bf1c.js} +0 -0
  665. /package/dist/dashboard/out/_next/static/chunks/app/login/{page-3eac37ea6f5dd153.js → page-16f3b49e55b1e0ed.js} +0 -0
  666. /package/dist/dashboard/out/_next/static/chunks/app/pricing/{page-4d72d5a5d8a9b618.js → page-982a7000fee44014.js} +0 -0
  667. /package/dist/dashboard/out/_next/static/chunks/app/signup/{page-fee4ed1709070bcd.js → page-547dd0ca55ecd0ba.js} +0 -0
  668. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-bf46c09eb57e019c.js → fd9d1056-609918ca7b6280bb.js} +0 -0
@@ -1,327 +0,0 @@
1
- # Manual Testing Guide: Presence & Cloud Features
2
-
3
- This document provides step-by-step testing procedures for the presence indicators, typing indicators, and user profile features in cloud mode.
4
-
5
- ## Prerequisites
6
-
7
- 1. **Cloud Mode Setup**: You need access to the cloud-hosted dashboard with GitHub OAuth authentication.
8
- 2. **Multiple Test Accounts**: Ideally 2-3 different GitHub accounts to test multi-user features.
9
- 3. **Multiple Browser Windows**: Use different browsers or incognito windows for simultaneous sessions.
10
-
11
- ---
12
-
13
- ## Test 1: GitHub Avatar & Username Display
14
-
15
- ### Objective
16
- Verify that logged-in users see their GitHub avatar and username in messages.
17
-
18
- ### Steps
19
-
20
- 1. Log in to the cloud dashboard using GitHub OAuth
21
- 2. Send a message to any agent (e.g., `@AgentName Hello`)
22
- 3. Observe the message in the chat
23
-
24
- ### Expected Results
25
-
26
- - [ ] Your GitHub avatar appears next to your sent message
27
- - [ ] Your GitHub username appears as the sender
28
- - [ ] Messages display "You" or your username consistently
29
-
30
- ---
31
-
32
- ## Test 2: Presence Indicator - Single User
33
-
34
- ### Objective
35
- Verify presence tracking works for a single user.
36
-
37
- ### Steps
38
-
39
- 1. Log in to the cloud dashboard
40
- 2. Look at the header area below the main header
41
-
42
- ### Expected Results
43
-
44
- - [ ] A green dot indicator appears showing online status
45
- - [ ] Your avatar appears in the stacked avatar row
46
- - [ ] "1 online" text displays next to the avatars
47
- - [ ] Clicking the indicator shows a dropdown with your username
48
-
49
- ---
50
-
51
- ## Test 3: Presence Indicator - Multiple Users
52
-
53
- ### Objective
54
- Verify multiple users can see each other's presence.
55
-
56
- ### Steps
57
-
58
- 1. **User A**: Log in with first GitHub account in Browser 1
59
- 2. **User B**: Log in with second GitHub account in Browser 2 (different browser or incognito)
60
- 3. Both users observe the presence indicator
61
-
62
- ### Expected Results
63
-
64
- - [ ] Both users see "2 online" in the presence indicator
65
- - [ ] Both avatars appear in the stacked row
66
- - [ ] Clicking shows both usernames in the dropdown
67
- - [ ] Each user can see the other's GitHub avatar
68
-
69
- ---
70
-
71
- ## Test 4: Presence Join/Leave Detection
72
-
73
- ### Objective
74
- Verify real-time updates when users join and leave.
75
-
76
- ### Steps
77
-
78
- 1. **User A**: Already logged in
79
- 2. **User B**: Log in to dashboard
80
- 3. Observe User A's screen when User B joins
81
- 4. **User B**: Close the browser tab
82
- 5. Observe User A's screen after User B leaves
83
-
84
- ### Expected Results
85
-
86
- - [ ] User A immediately sees count increase when User B joins
87
- - [ ] User B's avatar appears in User A's presence list
88
- - [ ] User A immediately sees count decrease when User B leaves
89
- - [ ] User B's avatar disappears from User A's presence list
90
-
91
- ---
92
-
93
- ## Test 5: Multi-Tab Support
94
-
95
- ### Objective
96
- Verify a user stays "online" when they have multiple tabs open.
97
-
98
- ### Steps
99
-
100
- 1. **User A**: Log in to dashboard in Tab 1
101
- 2. **User A**: Open a second tab to the same dashboard (Tab 2)
102
- 3. **User B**: Log in from a different browser
103
- 4. Observe presence count (should show 2 users, not 3)
104
- 5. **User A**: Close Tab 1
105
- 6. Observe presence (User A should still show as online)
106
- 7. **User A**: Close Tab 2
107
- 8. Observe presence (User A should now show as offline)
108
-
109
- ### Expected Results
110
-
111
- - [ ] Multiple tabs from same user don't inflate online count
112
- - [ ] Closing one tab doesn't disconnect the user
113
- - [ ] User only shows as offline when ALL tabs are closed
114
-
115
- ---
116
-
117
- ## Test 6: Typing Indicator - Single User
118
-
119
- ### Objective
120
- Verify typing indicators appear when another user is typing.
121
-
122
- ### Steps
123
-
124
- 1. **User A**: Log in in Browser 1
125
- 2. **User B**: Log in in Browser 2
126
- 3. **User B**: Start typing a message (don't send)
127
- 4. Observe User A's screen
128
-
129
- ### Expected Results
130
-
131
- - [ ] User A sees "User B is typing..." indicator
132
- - [ ] The indicator appears below the message list, above the composer
133
- - [ ] User B's avatar appears in the typing indicator
134
- - [ ] Animated dots appear next to the message
135
-
136
- ---
137
-
138
- ## Test 7: Typing Indicator - Stop Typing
139
-
140
- ### Objective
141
- Verify typing indicator disappears when user stops typing.
142
-
143
- ### Steps
144
-
145
- 1. Continue from Test 6
146
- 2. **User B**: Delete all text from the input field
147
- 3. Observe User A's screen
148
-
149
- ### Expected Results
150
-
151
- - [ ] Typing indicator disappears within 1 second
152
- - [ ] No residual "typing" state shown
153
-
154
- ---
155
-
156
- ## Test 8: Typing Indicator - Auto-Clear
157
-
158
- ### Objective
159
- Verify typing indicator auto-clears after 3 seconds of inactivity.
160
-
161
- ### Steps
162
-
163
- 1. **User A**: Log in in Browser 1
164
- 2. **User B**: Log in in Browser 2
165
- 3. **User B**: Type something and then stop (don't clear input)
166
- 4. Wait 3-4 seconds
167
-
168
- ### Expected Results
169
-
170
- - [ ] Typing indicator disappears after ~3 seconds of no typing activity
171
- - [ ] This prevents stale "typing" states
172
-
173
- ---
174
-
175
- ## Test 9: User Profile Panel - Open
176
-
177
- ### Objective
178
- Verify the user profile panel opens when clicking on an online user.
179
-
180
- ### Steps
181
-
182
- 1. Have at least 2 users logged in
183
- 2. Click on the online users indicator
184
- 3. Click on another user's name/avatar in the dropdown
185
-
186
- ### Expected Results
187
-
188
- - [ ] A slide-out panel appears from the right
189
- - [ ] Panel shows the user's large avatar
190
- - [ ] Panel shows the user's GitHub username
191
- - [ ] Panel shows "Online" status with green indicator
192
- - [ ] Panel shows "Online Since" timestamp
193
- - [ ] Panel shows "Last Active" timestamp
194
- - [ ] Panel shows GitHub link
195
-
196
- ---
197
-
198
- ## Test 10: User Profile Panel - Actions
199
-
200
- ### Objective
201
- Verify profile panel action buttons work correctly.
202
-
203
- ### Steps
204
-
205
- 1. Open a user's profile panel (from Test 9)
206
- 2. Click the "Mention @username" button
207
- 3. Close the panel and open it again
208
- 4. Click the "View on GitHub" button
209
-
210
- ### Expected Results
211
-
212
- - [ ] "Mention" button closes panel (TODO: should insert @username in composer)
213
- - [ ] "View on GitHub" opens new tab to user's GitHub profile
214
- - [ ] GitHub profile URL is correctly formatted
215
-
216
- ---
217
-
218
- ## Test 11: User Profile Panel - Close Methods
219
-
220
- ### Objective
221
- Verify all methods of closing the profile panel work.
222
-
223
- ### Steps
224
-
225
- 1. Open a user's profile panel
226
- 2. Click the X button in the panel header
227
- 3. Open the panel again
228
- 4. Press the Escape key
229
- 5. Open the panel again
230
- 6. Click outside the panel (on the backdrop)
231
-
232
- ### Expected Results
233
-
234
- - [ ] X button closes the panel
235
- - [ ] Escape key closes the panel
236
- - [ ] Clicking backdrop closes the panel
237
-
238
- ---
239
-
240
- ## Test 12: Human User Autocomplete
241
-
242
- ### Objective
243
- Verify human users appear in @ mention autocomplete.
244
-
245
- ### Steps
246
-
247
- 1. Have User A and User B both logged in
248
- 2. Have User A send at least one message
249
- 3. **User B**: Start typing `@` in the message input
250
- 4. Observe the autocomplete dropdown
251
-
252
- ### Expected Results
253
-
254
- - [ ] User A appears in the autocomplete list
255
- - [ ] Human users show with purple color and person icon
256
- - [ ] Human users are labeled as "Human user"
257
- - [ ] Selecting a human user inserts @username in message
258
-
259
- ---
260
-
261
- ## Test 13: Input Validation - Invalid Username
262
-
263
- ### Objective
264
- Verify the server rejects invalid usernames (security feature).
265
-
266
- ### Steps
267
-
268
- This test requires developer tools or a custom client:
269
-
270
- 1. Open browser developer tools
271
- 2. Find the presence WebSocket connection
272
- 3. Try to send a join message with an invalid username (e.g., containing special characters)
273
-
274
- ### Expected Results
275
-
276
- - [ ] Server rejects the invalid username
277
- - [ ] No error is displayed to the user (silent rejection)
278
- - [ ] Console logs show "Invalid username rejected"
279
-
280
- ---
281
-
282
- ## Test 14: Security - Cannot Remove Other Users
283
-
284
- ### Objective
285
- Verify users cannot forcibly remove others from online list.
286
-
287
- ### Steps
288
-
289
- This test requires developer tools:
290
-
291
- 1. User A and User B both logged in
292
- 2. Using developer tools, try to send a leave message with User B's username from User A's connection
293
-
294
- ### Expected Results
295
-
296
- - [ ] Server rejects the leave attempt
297
- - [ ] User B remains in the online list
298
- - [ ] Console logs show security warning
299
-
300
- ---
301
-
302
- ## Troubleshooting
303
-
304
- ### Presence Not Updating
305
-
306
- 1. Check browser console for WebSocket errors
307
- 2. Verify `/ws/presence` WebSocket is connected
308
- 3. Refresh the page to reconnect
309
-
310
- ### Typing Indicator Stuck
311
-
312
- 1. This may indicate a WebSocket issue
313
- 2. Typing indicators auto-clear after 3 seconds
314
- 3. Refresh to reset
315
-
316
- ### Profile Panel Not Opening
317
-
318
- 1. Ensure you're clicking on a user, not just the indicator
319
- 2. Check for JavaScript errors in console
320
-
321
- ---
322
-
323
- ## Notes
324
-
325
- - All presence features require cloud mode (GitHub OAuth login)
326
- - Local mode does not support multi-user presence
327
- - WebSocket connections may take a moment to establish on page load
@@ -1,364 +0,0 @@
1
- # tmux Implementation Notes
2
-
3
- ## Previous Failure Analysis
4
-
5
- ### What Failed: "Game never even started"
6
-
7
- The previous tmux implementation had these issues:
8
-
9
- 1. **Nested PTY Attachment**: Created tmux session, then attached via node-pty
10
- ```typescript
11
- // Created tmux session
12
- execSync(`tmux new-session -d -s ${session} '${command}'`);
13
- // Then attached via PTY
14
- this.ptyProcess = pty.spawn('tmux', ['attach-session', '-t', session]);
15
- ```
16
- This creates: Agent CLI → tmux → tmux attach → node-pty
17
- Double terminal layer causes escape sequence issues.
18
-
19
- 2. **Command Quoting Problem**: Single quotes break complex commands
20
- ```bash
21
- tmux new-session -d -s session 'claude -p "You're playing..."'
22
- # The apostrophe in "You're" breaks the quoting
23
- ```
24
-
25
- 3. **Environment Variables Not Passed**: ENV vars set on attach, not on session
26
- - The agent process inside tmux doesn't see AGENT_RELAY_NAME
27
-
28
- 4. **No Session Ready Wait**: Attached immediately after creating session
29
- - Session might not be ready, causing race conditions
30
-
31
- ## New Architecture: No Attachment
32
-
33
- ```
34
- ┌──────────────────────────────────┐
35
- │ tmux session "relay-AgentX" │
36
- │ (detached, running in background)│
37
- │ ┌────────────────────────────┐ │
38
- │ │ agent CLI process │ │
39
- │ │ (claude, codex, etc) │ │
40
- │ └────────────────────────────┘ │
41
- └──────────────────────────────────┘
42
- ↑ ↓
43
- send-keys capture-pane
44
- (inject input) (read output)
45
- │ │
46
- ┌──────────────────────────────────┐
47
- │ TmuxWrapper (this process) │
48
- │ - Polls capture-pane @ 100ms │
49
- │ - Detects new output (diff) │
50
- │ - Parses ->relay: commands │
51
- │ - Writes to stdout for user │
52
- │ - Injects messages via send-keys│
53
- │ - Forwards user stdin to tmux │
54
- └──────────────────────────────────┘
55
- ```
56
-
57
- ## Key Differences from Previous Implementation
58
-
59
- 1. **No PTY attachment** - Eliminates double-terminal problem
60
- 2. **capture-pane polling** - Direct access to terminal content
61
- 3. **Proper command escaping** - Use shell escaping, not simple quotes
62
- 4. **Environment via tmux** - Set ENV in tmux session directly
63
- 5. **Session ready wait** - Wait for session to be active before proceeding
64
-
65
- ## Implementation Details
66
-
67
- ### Starting a Session
68
-
69
- ```bash
70
- # Set environment variables IN the tmux session
71
- tmux new-session -d -s relay-AgentX \
72
- -x 120 -y 40 \
73
- "export AGENT_RELAY_NAME=AgentX; exec claude"
74
- ```
75
-
76
- ### Capturing Output
77
-
78
- ```bash
79
- # Capture entire scrollback (not just visible pane)
80
- tmux capture-pane -t relay-AgentX -p -S -
81
- ```
82
-
83
- ### Sending Input
84
-
85
- ```bash
86
- # Use -l for literal string (no escaping needed)
87
- tmux send-keys -t relay-AgentX -l "Your message here"
88
- tmux send-keys -t relay-AgentX Enter
89
- ```
90
-
91
- ### Handling User Input
92
-
93
- Forward process stdin to tmux session:
94
- ```typescript
95
- process.stdin.on('data', (data) => {
96
- execSync(`tmux send-keys -t ${session} -l "${escape(data)}"`);
97
- });
98
- ```
99
-
100
- ## Edge Cases to Handle
101
-
102
- 1. **Fast output**: capture-pane might miss fast scrolling
103
- - Solution: Use -S - to get full scrollback, diff against last capture
104
-
105
- 2. **Binary/escape sequences**: Output might contain control characters
106
- - Solution: Strip ANSI codes before parsing ->relay:
107
-
108
- 3. **Session death**: tmux session might exit
109
- - Solution: Monitor with `tmux has-session -t session`
110
-
111
- 4. **Multiple messages**: Several ->relay: in one capture
112
- - Solution: Track last processed line/position
113
-
114
- 5. **Stdin race conditions**: User types while we inject
115
- - Solution: Queue injections, use mutex/lock
116
-
117
- ## Testing Plan
118
-
119
- 1. **Basic session start**: Does claude actually launch in tmux?
120
- 2. **Output capture**: Can we see claude's output?
121
- 3. **Input injection**: Can we send text and get response?
122
- 4. **->relay detection**: Does parser find ->relay: commands?
123
- 5. **Full game**: Two agents playing tic-tac-toe
124
-
125
- ## Rollback Plan
126
-
127
- If this doesn't work, fall back to:
128
- 1. File-based inbox (already implemented)
129
- 2. Hook-based polling (Claude only)
130
- 3. Spawn-per-message (loses context)
131
-
132
- ---
133
-
134
- ## Implementation Complete - Testing Instructions
135
-
136
- ### Build Status: SUCCESS
137
-
138
- The new TmuxWrapper has been implemented at:
139
- - `src/wrapper/tmux-wrapper.ts`
140
-
141
- CLI updated to support `--tmux2` flag.
142
-
143
- ### Quick Test: Basic Session Start
144
-
145
- ```bash
146
- # Test 1: Does bash work in tmux?
147
- node dist/cli/index.js wrap --tmux2 -n TestAgent -- bash
148
-
149
- # You should see:
150
- # - "Mode: tmux2 (new simplified tmux wrapper)"
151
- # - Bash prompt in your terminal
152
- # - Type commands, they should work
153
- # - Ctrl+C to exit
154
- ```
155
-
156
- ### Test 2: Simple Echo Command
157
-
158
- ```bash
159
- # Start with echo (should immediately show output and exit)
160
- node dist/cli/index.js wrap --tmux2 -n TestAgent -- echo "Hello World"
161
- ```
162
-
163
- ### Test 3: Claude CLI (No Relay)
164
-
165
- ```bash
166
- # Test Claude starts correctly
167
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude
168
-
169
- # Expected: Claude CLI starts, you can interact with it
170
- ```
171
-
172
- ### Test 4: With Relay Daemon
173
-
174
- ```bash
175
- # Terminal 1: Start daemon
176
- node dist/cli/index.js start -f
177
-
178
- # Terminal 2: Start PlayerX
179
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude
180
-
181
- # Terminal 3: Start PlayerO
182
- node dist/cli/index.js wrap --tmux2 -n PlayerO -- claude
183
-
184
- # Terminal 4: Send a test message
185
- node dist/cli/index.js send -f Coordinator -t PlayerX -m "Hello from Coordinator"
186
-
187
- # Expected: PlayerX terminal should show the message and inject it
188
- ```
189
-
190
- ### Test 5: Tic-Tac-Toe
191
-
192
- ```bash
193
- # Terminal 1: Daemon
194
- node dist/cli/index.js start -f
195
-
196
- # Terminal 2: PlayerX
197
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude -p "You are PlayerX playing tic-tac-toe. Use ->relay:PlayerO to send moves. Start with your first move."
198
-
199
- # Terminal 3: PlayerO
200
- node dist/cli/index.js wrap --tmux2 -n PlayerO -- claude -p "You are PlayerO playing tic-tac-toe. Use ->relay:PlayerX to send moves. Wait for PlayerX to start."
201
- ```
202
-
203
- ### Debugging
204
-
205
- ```bash
206
- # Check if tmux session exists
207
- tmux list-sessions
208
-
209
- # Attach to session manually to see what's happening
210
- tmux attach -t relay-PlayerX-<pid>
211
-
212
- # Kill stuck sessions
213
- tmux kill-server
214
- ```
215
-
216
- ### Key Differences from Old tmux Implementation
217
-
218
- 1. **No PTY attachment** - We don't `tmux attach` via node-pty
219
- 2. **capture-pane polling** - Read output by polling, not events
220
- 3. **send-keys -l** - Use literal mode for text injection
221
- 4. **Environment via tmux setenv** - Set ENV vars in tmux session directly
222
- 5. **Simpler architecture** - Less layers = fewer failure points
223
-
224
- ---
225
-
226
- ## Test Results - December 19, 2025
227
-
228
- ### Basic Test: PASSED
229
-
230
- Message injection into bash session works:
231
-
232
- ```
233
- [daemon] Agent registered: TestAgent
234
- [router] Coordinator -> TestAgent: Hello TestAgent!...
235
- [router] Delivered to TestAgent: success
236
- [tmux:TestAgent] ← Coordinator: Hello TestAgent!...
237
- [tmux:TestAgent] Injecting message from Coordinator
238
- [tmux:TestAgent] Message injected successfully
239
- bash-3.2$ Relay message from Coordinator: Hello TestAgent!
240
- ```
241
-
242
- The message was successfully typed into the bash terminal via tmux send-keys.
243
-
244
- ### What Works
245
-
246
- 1. **Session creation** - tmux session starts correctly
247
- 2. **Output capture** - capture-pane polling detects new output
248
- 3. **Relay connection** - Agent connects to daemon
249
- 4. **Message routing** - Messages route between agents
250
- 5. **Message injection** - Text is typed into the terminal via send-keys
251
-
252
- ### Next Steps
253
-
254
- 1. Test with Claude CLI (replace bash with claude)
255
- 2. Test full tic-tac-toe game between two agents
256
- 3. Verify ->relay: command parsing works in both directions
257
- 4. Check if multi-round injection remains stable (previous implementations failed after 2-3 rounds)
258
-
259
- ### Critical Question
260
-
261
- Does this implementation avoid the "fails after a few rounds" problem? The key difference:
262
-
263
- - **Old approach**: PTY stdin write (`ptyProcess.write()`) - corrupts over time
264
- - **New approach**: tmux send-keys (`tmux send-keys -l "..."`) - should be more stable
265
-
266
- ---
267
-
268
- ## December 19, 2025 - Attach-Based Implementation: SUCCESS
269
-
270
- ### Problem with First tmux Attempt
271
-
272
- The first tmux wrapper tried to:
273
- 1. Poll `capture-pane` for output
274
- 2. Write output to stdout
275
- 3. This caused display corruption after message injection
276
-
277
- ### Solution: Direct Attach
278
-
279
- New architecture:
280
- 1. Start agent in detached tmux session
281
- 2. **Attach user directly** via `spawn('tmux', ['attach'], { stdio: 'inherit' })`
282
- 3. Background polling is **completely silent** (no stdout writes)
283
- 4. Injection via `send-keys` works on attached session
284
- 5. Logs only to stderr
285
-
286
- ### Test Result: PASSED
287
-
288
- Message injection works without display corruption:
289
- ```bash
290
- # Terminal 1: Daemon
291
- node dist/cli/index.js start -f
292
-
293
- # Terminal 2: Agent
294
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude
295
-
296
- # Terminal 3: Send message
297
- node dist/cli/index.js send -f Test -t PlayerX -m "Hello!"
298
- # → Message injected successfully, display intact
299
- ```
300
-
301
- ### Next: Multi-Round Tic-Tac-Toe Test
302
-
303
- The critical test is whether injection remains stable over multiple rounds:
304
- ```bash
305
- # Terminal 1: Daemon
306
- node dist/cli/index.js start -f
307
-
308
- # Terminal 2: PlayerX
309
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude -p "Play tic-tac-toe. Use ->relay:PlayerO to send moves."
310
-
311
- # Terminal 3: PlayerO
312
- node dist/cli/index.js wrap --tmux2 -n PlayerO -- claude -p "Play tic-tac-toe. Use ->relay:PlayerX to send moves."
313
- ```
314
-
315
- If this works for a full game (5-9 moves), we've solved the problem.
316
-
317
- ---
318
-
319
- ## December 19, 2025 - Command Quoting Fix
320
-
321
- ### Problem
322
-
323
- Running with `-p` flag failed:
324
- ```bash
325
- node dist/cli/index.js wrap --tmux2 -n PlayerX -- claude -p "You are PlayerX..."
326
- # Result: Claude terminal didn't open
327
- ```
328
-
329
- ### Root Cause
330
-
331
- The CLI was joining all command parts into a single string at line 229:
332
- ```typescript
333
- const command = commandParts.join(' ');
334
- ```
335
-
336
- And passing only this joined string to TmuxWrapper. But by the time args reach Node.js,
337
- the shell has already stripped the outer quotes, so `commandParts` = `['claude', '-p', 'You are PlayerX...']`.
338
-
339
- When joined back together without re-quoting: `claude -p You are PlayerX...` - the prompt is split.
340
-
341
- ### Fix
342
-
343
- 1. **CLI (index.ts)**: Split command and args separately:
344
- ```typescript
345
- const [mainCommand, ...commandArgs] = commandParts;
346
- // Pass to TmuxWrapper as:
347
- // command: mainCommand ('claude')
348
- // args: commandArgs (['-p', 'You are PlayerX...'])
349
- ```
350
-
351
- 2. **TmuxWrapper**: `buildCommand()` re-quotes args containing spaces:
352
- ```typescript
353
- private buildCommand(): string {
354
- const quotedArgs = this.config.args.map(arg => {
355
- if (arg.includes(' ') || arg.includes('"') || arg.includes("'")) {
356
- return `"${arg.replace(/"/g, '\\"')}"`;
357
- }
358
- return arg;
359
- });
360
- return `${this.config.command} ${quotedArgs.join(' ')}`;
361
- }
362
- ```
363
-
364
- Result: `claude -p "You are PlayerX..."` is correctly sent to tmux.