agent-relay 1.3.2 → 1.5.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 (318) hide show
  1. package/README.md +130 -158
  2. package/bin/relay-pty +0 -0
  3. package/bin/relay-pty-darwin-arm64 +0 -0
  4. package/bin/relay-pty-darwin-x64 +0 -0
  5. package/bin/relay-pty-linux-x64 +0 -0
  6. package/deploy/workspace/entrypoint.sh +9 -0
  7. package/dist/bridge/spawner.d.ts +4 -4
  8. package/dist/bridge/spawner.js +58 -92
  9. package/dist/cli/index.d.ts +8 -6
  10. package/dist/cli/index.js +282 -47
  11. package/dist/cloud/api/daemons.js +13 -32
  12. package/dist/cloud/api/onboarding.js +2 -4
  13. package/dist/cloud/api/providers.js +6 -0
  14. package/dist/cloud/config.d.ts +1 -0
  15. package/dist/cloud/config.js +2 -0
  16. package/dist/cloud/db/bulk-ingest.d.ts +2 -1
  17. package/dist/cloud/db/drizzle.d.ts +21 -26
  18. package/dist/cloud/db/drizzle.js +87 -100
  19. package/dist/cloud/db/index.d.ts +6 -5
  20. package/dist/cloud/db/index.js +9 -8
  21. package/dist/cloud/db/schema.d.ts +1049 -1076
  22. package/dist/cloud/db/schema.js +59 -71
  23. package/dist/cloud/server.js +854 -18
  24. package/dist/cloud/services/persistence.d.ts +15 -15
  25. package/dist/cloud/services/persistence.js +14 -14
  26. package/dist/daemon/agent-manager.d.ts +6 -5
  27. package/dist/daemon/agent-manager.js +12 -8
  28. package/dist/daemon/channel-membership-store.d.ts +48 -0
  29. package/dist/daemon/channel-membership-store.js +149 -0
  30. package/dist/daemon/cloud-sync.d.ts +2 -0
  31. package/dist/daemon/cloud-sync.js +4 -0
  32. package/dist/daemon/connection.js +17 -9
  33. package/dist/daemon/router.d.ts +37 -0
  34. package/dist/daemon/router.js +318 -79
  35. package/dist/daemon/server.d.ts +15 -0
  36. package/dist/daemon/server.js +141 -3
  37. package/dist/dashboard/out/404.html +1 -0
  38. package/dist/dashboard/out/_next/static/IxxVRv94L1w3ReRGAiI-k/_buildManifest.js +1 -0
  39. package/dist/dashboard/out/_next/static/IxxVRv94L1w3ReRGAiI-k/_ssgManifest.js +1 -0
  40. package/dist/dashboard/out/_next/static/chunks/116-eacf84a131b80db9.js +1 -0
  41. package/dist/dashboard/out/_next/static/chunks/117-c8afed19e821a35d.js +2 -0
  42. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  43. package/dist/dashboard/out/_next/static/chunks/532-bace199897eeab37.js +9 -0
  44. package/dist/dashboard/out/_next/static/chunks/64-87ab9cd6bcf2f737.js +1 -0
  45. package/dist/dashboard/out/_next/static/chunks/648-acb2ff9f77cbfbd3.js +1 -0
  46. package/dist/dashboard/out/_next/static/chunks/766-aa7c8c9900ff5f53.js +1 -0
  47. package/dist/dashboard/out/_next/static/chunks/83-4f08122d4e7e79a6.js +1 -0
  48. package/dist/dashboard/out/_next/static/chunks/847-f1f467060f32afff.js +1 -0
  49. package/dist/dashboard/out/_next/static/chunks/891-a024fbe4b619cf6f.js +1 -0
  50. package/dist/dashboard/out/_next/static/chunks/app/_not-found/page-60501fddbafba9dc.js +1 -0
  51. package/dist/dashboard/out/_next/static/chunks/app/app/onboarding/page-f746f29e01fffc43.js +1 -0
  52. package/dist/dashboard/out/_next/static/chunks/app/app/page-ffad986adfcc8b31.js +1 -0
  53. package/dist/dashboard/out/_next/static/chunks/app/cloud/link/page-cfeb437f08a12ed9.js +1 -0
  54. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-03ac6f35a6654ea6.js +1 -0
  55. package/dist/dashboard/out/_next/static/chunks/app/history/page-240f91e8b06ba8ac.js +1 -0
  56. package/dist/dashboard/out/_next/static/chunks/app/layout-c0d118c0f92d969c.js +1 -0
  57. package/dist/dashboard/out/_next/static/chunks/app/login/page-6ec54eee75877971.js +1 -0
  58. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-82938ab8fcf44694.js +1 -0
  59. package/dist/dashboard/out/_next/static/chunks/app/page-671037943b2f2e43.js +1 -0
  60. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-0efa024c28ba4597.js +1 -0
  61. package/dist/dashboard/out/_next/static/chunks/app/providers/page-57cbd738c6a73859.js +1 -0
  62. package/dist/dashboard/out/_next/static/chunks/app/providers/setup/[provider]/page-5ab0854472b402b0.js +1 -0
  63. package/dist/dashboard/out/_next/static/chunks/app/signup/page-18a4665665f6be11.js +1 -0
  64. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  65. package/dist/dashboard/out/_next/static/chunks/fd9d1056-609918ca7b6280bb.js +1 -0
  66. package/dist/dashboard/out/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
  67. package/dist/dashboard/out/_next/static/chunks/main-5a40a5ae29646e1b.js +1 -0
  68. package/dist/dashboard/out/_next/static/chunks/main-app-6e8e8d3ef4e0192a.js +1 -0
  69. package/dist/dashboard/out/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  70. package/dist/dashboard/out/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  71. package/dist/dashboard/out/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  72. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  73. package/dist/dashboard/out/_next/static/css/4034f236dd1a3178.css +1 -0
  74. package/dist/dashboard/out/_next/static/css/8f9ed310f454e5a5.css +1 -0
  75. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  76. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  77. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  78. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  79. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  80. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
  81. package/dist/dashboard/out/alt-logos/logo.svg +38 -0
  82. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  83. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  84. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  85. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  86. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  87. package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
  88. package/dist/dashboard/out/app/onboarding.html +1 -0
  89. package/dist/dashboard/out/app/onboarding.txt +7 -0
  90. package/dist/dashboard/out/app.html +1 -0
  91. package/dist/dashboard/out/app.txt +7 -0
  92. package/dist/dashboard/out/apple-icon.png +0 -0
  93. package/dist/dashboard/out/cloud/link.html +1 -0
  94. package/dist/dashboard/out/cloud/link.txt +7 -0
  95. package/dist/dashboard/out/connect-repos.html +1 -0
  96. package/dist/dashboard/out/connect-repos.txt +7 -0
  97. package/dist/dashboard/out/history.html +1 -0
  98. package/dist/dashboard/out/history.txt +7 -0
  99. package/dist/dashboard/out/index.html +1 -0
  100. package/dist/dashboard/out/index.txt +7 -0
  101. package/dist/dashboard/out/login.html +5 -0
  102. package/dist/dashboard/out/login.txt +7 -0
  103. package/dist/dashboard/out/metrics.html +1 -0
  104. package/dist/dashboard/out/metrics.txt +7 -0
  105. package/dist/dashboard/out/pricing.html +13 -0
  106. package/dist/dashboard/out/pricing.txt +7 -0
  107. package/dist/dashboard/out/providers/setup/claude.html +1 -0
  108. package/dist/dashboard/out/providers/setup/claude.txt +8 -0
  109. package/dist/dashboard/out/providers/setup/codex.html +1 -0
  110. package/dist/dashboard/out/providers/setup/codex.txt +8 -0
  111. package/dist/dashboard/out/providers.html +1 -0
  112. package/dist/dashboard/out/providers.txt +7 -0
  113. package/dist/dashboard/out/signup.html +6 -0
  114. package/dist/dashboard/out/signup.txt +7 -0
  115. package/dist/dashboard-server/metrics.d.ts +105 -0
  116. package/dist/dashboard-server/metrics.js +193 -0
  117. package/dist/dashboard-server/needs-attention.d.ts +24 -0
  118. package/dist/dashboard-server/needs-attention.js +78 -0
  119. package/dist/dashboard-server/server.d.ts +15 -0
  120. package/dist/dashboard-server/server.js +4753 -0
  121. package/dist/dashboard-server/start.d.ts +6 -0
  122. package/dist/dashboard-server/start.js +13 -0
  123. package/dist/dashboard-server/user-bridge.d.ts +132 -0
  124. package/dist/dashboard-server/user-bridge.js +317 -0
  125. package/dist/protocol/channels.d.ts +14 -8
  126. package/dist/protocol/channels.js +1 -1
  127. package/dist/protocol/index.d.ts +1 -0
  128. package/dist/protocol/index.js +1 -0
  129. package/dist/protocol/relay-pty-schemas.d.ts +209 -0
  130. package/dist/protocol/relay-pty-schemas.js +60 -0
  131. package/dist/wrapper/auth-detection.js +8 -1
  132. package/dist/wrapper/base-wrapper.d.ts +11 -1
  133. package/dist/wrapper/base-wrapper.js +67 -6
  134. package/dist/wrapper/client.d.ts +49 -1
  135. package/dist/wrapper/client.js +167 -0
  136. package/dist/wrapper/parser.d.ts +0 -4
  137. package/dist/wrapper/parser.js +38 -10
  138. package/dist/wrapper/pty-wrapper.d.ts +12 -1
  139. package/dist/wrapper/pty-wrapper.js +104 -5
  140. package/dist/wrapper/relay-pty-orchestrator.d.ts +270 -0
  141. package/dist/wrapper/relay-pty-orchestrator.js +970 -0
  142. package/dist/wrapper/shared.d.ts +1 -1
  143. package/dist/wrapper/shared.js +14 -4
  144. package/dist/wrapper/tmux-wrapper.d.ts +13 -1
  145. package/dist/wrapper/tmux-wrapper.js +143 -29
  146. package/package.json +9 -4
  147. package/scripts/postinstall.js +101 -11
  148. package/.trajectories/active/traj_3yx9dy148mge.json +0 -42
  149. package/.trajectories/agent-relay-322-324.md +0 -17
  150. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.json +0 -49
  151. package/.trajectories/completed/2026-01/traj_03zupyv1s7b9.md +0 -31
  152. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.json +0 -125
  153. package/.trajectories/completed/2026-01/traj_0zacdjl1g4ht.md +0 -62
  154. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.json +0 -65
  155. package/.trajectories/completed/2026-01/traj_1dviorhnkcb5.md +0 -37
  156. package/.trajectories/completed/2026-01/traj_1g7yx6qtg4ai.json +0 -49
  157. package/.trajectories/completed/2026-01/traj_1g7yx6qtg4ai.md +0 -31
  158. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.json +0 -65
  159. package/.trajectories/completed/2026-01/traj_1k5if5snst2e.md +0 -37
  160. package/.trajectories/completed/2026-01/traj_1rp3rges5811.json +0 -49
  161. package/.trajectories/completed/2026-01/traj_1rp3rges5811.md +0 -31
  162. package/.trajectories/completed/2026-01/traj_22bhyulruouw.json +0 -113
  163. package/.trajectories/completed/2026-01/traj_22bhyulruouw.md +0 -57
  164. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.json +0 -53
  165. package/.trajectories/completed/2026-01/traj_2dao7ddgnta0.md +0 -32
  166. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.json +0 -49
  167. package/.trajectories/completed/2026-01/traj_33iuy72sezbk.md +0 -31
  168. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.json +0 -26
  169. package/.trajectories/completed/2026-01/traj_3t0440mjeunc.md +0 -6
  170. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.json +0 -47
  171. package/.trajectories/completed/2026-01/traj_45x9494d9xnr.md +0 -32
  172. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.json +0 -53
  173. package/.trajectories/completed/2026-01/traj_4aa0bb77s4nh.md +0 -32
  174. package/.trajectories/completed/2026-01/traj_4qwd4zmhfwp4.json +0 -49
  175. package/.trajectories/completed/2026-01/traj_4qwd4zmhfwp4.md +0 -31
  176. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.json +0 -77
  177. package/.trajectories/completed/2026-01/traj_5ammh5qtvklq.md +0 -42
  178. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.json +0 -59
  179. package/.trajectories/completed/2026-01/traj_5lhmzq8rxpqv.md +0 -33
  180. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.json +0 -53
  181. package/.trajectories/completed/2026-01/traj_5vr4e9erb1fs.md +0 -32
  182. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.json +0 -48
  183. package/.trajectories/completed/2026-01/traj_6fgiwdoklvym.md +0 -24
  184. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.json +0 -77
  185. package/.trajectories/completed/2026-01/traj_6mieijqyvaag.md +0 -42
  186. package/.trajectories/completed/2026-01/traj_6unwwmgyj5sq.json +0 -109
  187. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.json +0 -77
  188. package/.trajectories/completed/2026-01/traj_78ffm31jn3uk.md +0 -42
  189. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.json +0 -209
  190. package/.trajectories/completed/2026-01/traj_7ludwvz45veh.md +0 -97
  191. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.json +0 -66
  192. package/.trajectories/completed/2026-01/traj_94gnp3k30goq.md +0 -36
  193. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.json +0 -48
  194. package/.trajectories/completed/2026-01/traj_9921cuhel0pj.md +0 -24
  195. package/.trajectories/completed/2026-01/traj_a0tqx8biw9c4.json +0 -49
  196. package/.trajectories/completed/2026-01/traj_a0tqx8biw9c4.md +0 -31
  197. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.json +0 -49
  198. package/.trajectories/completed/2026-01/traj_ajs7zqfux4wc.md +0 -23
  199. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.json +0 -40
  200. package/.trajectories/completed/2026-01/traj_avqeghu6pz5a.md +0 -22
  201. package/.trajectories/completed/2026-01/traj_ax8uungxz2qh.json +0 -66
  202. package/.trajectories/completed/2026-01/traj_ax8uungxz2qh.md +0 -36
  203. package/.trajectories/completed/2026-01/traj_c9izbh2snpzf.json +0 -49
  204. package/.trajectories/completed/2026-01/traj_c9izbh2snpzf.md +0 -31
  205. package/.trajectories/completed/2026-01/traj_cpn70dw066nt.json +0 -65
  206. package/.trajectories/completed/2026-01/traj_cpn70dw066nt.md +0 -37
  207. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.json +0 -53
  208. package/.trajectories/completed/2026-01/traj_cvtqhlwcq9s0.md +0 -32
  209. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.json +0 -49
  210. package/.trajectories/completed/2026-01/traj_cxofprm2m2en.md +0 -31
  211. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.json +0 -26
  212. package/.trajectories/completed/2026-01/traj_d2hhz3k0vrhn.md +0 -6
  213. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.json +0 -121
  214. package/.trajectories/completed/2026-01/traj_dcsp9s8y01ra.md +0 -29
  215. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.json +0 -59
  216. package/.trajectories/completed/2026-01/traj_dfuvww9pege5.md +0 -37
  217. package/.trajectories/completed/2026-01/traj_erglv2f8t9eh.json +0 -36
  218. package/.trajectories/completed/2026-01/traj_erglv2f8t9eh.md +0 -21
  219. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.json +0 -53
  220. package/.trajectories/completed/2026-01/traj_fhx9irlckht6.md +0 -32
  221. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.json +0 -101
  222. package/.trajectories/completed/2026-01/traj_fqduidx3xbtp.md +0 -52
  223. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.json +0 -77
  224. package/.trajectories/completed/2026-01/traj_g0fisy9h51mf.md +0 -42
  225. package/.trajectories/completed/2026-01/traj_gjdre5voouod.json +0 -53
  226. package/.trajectories/completed/2026-01/traj_gjdre5voouod.md +0 -32
  227. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.json +0 -25
  228. package/.trajectories/completed/2026-01/traj_gtlyqtta3x8l.md +0 -15
  229. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.json +0 -101
  230. package/.trajectories/completed/2026-01/traj_h4xijiuip3w4.md +0 -44
  231. package/.trajectories/completed/2026-01/traj_he75f24d1xfm.json +0 -101
  232. package/.trajectories/completed/2026-01/traj_he75f24d1xfm.md +0 -52
  233. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.json +0 -49
  234. package/.trajectories/completed/2026-01/traj_hf81ey93uz6t.md +0 -31
  235. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.json +0 -65
  236. package/.trajectories/completed/2026-01/traj_hfmki2jr9d4r.md +0 -37
  237. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.json +0 -22
  238. package/.trajectories/completed/2026-01/traj_hhxte7w4gjjx.md +0 -5
  239. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.json +0 -53
  240. package/.trajectories/completed/2026-01/traj_hpungyhoj6v5.md +0 -32
  241. package/.trajectories/completed/2026-01/traj_lgtodco7dp1n.json +0 -61
  242. package/.trajectories/completed/2026-01/traj_lgtodco7dp1n.md +0 -36
  243. package/.trajectories/completed/2026-01/traj_lq450ly148uw.json +0 -49
  244. package/.trajectories/completed/2026-01/traj_lq450ly148uw.md +0 -31
  245. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.json +0 -25
  246. package/.trajectories/completed/2026-01/traj_m2xkjv0w2sq7.md +0 -15
  247. package/.trajectories/completed/2026-01/traj_multi_server_arch.md +0 -101
  248. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.json +0 -53
  249. package/.trajectories/completed/2026-01/traj_noq5zbvnrdvz.md +0 -32
  250. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.json +0 -53
  251. package/.trajectories/completed/2026-01/traj_ntbs6ppopf46.md +0 -32
  252. package/.trajectories/completed/2026-01/traj_oszg9flv74pk.json +0 -73
  253. package/.trajectories/completed/2026-01/traj_oszg9flv74pk.md +0 -41
  254. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.json +0 -48
  255. package/.trajectories/completed/2026-01/traj_ozd98si6a7ns.md +0 -24
  256. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.json +0 -53
  257. package/.trajectories/completed/2026-01/traj_prdza7a5cxp5.md +0 -32
  258. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.json +0 -27
  259. package/.trajectories/completed/2026-01/traj_psd9ob0j2ru3.md +0 -14
  260. package/.trajectories/completed/2026-01/traj_pulomd3y8cvj.json +0 -77
  261. package/.trajectories/completed/2026-01/traj_pulomd3y8cvj.md +0 -42
  262. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.json +0 -77
  263. package/.trajectories/completed/2026-01/traj_qb3twvvywfwi.md +0 -42
  264. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.json +0 -53
  265. package/.trajectories/completed/2026-01/traj_qft54mi7nfor.md +0 -32
  266. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.json +0 -83
  267. package/.trajectories/completed/2026-01/traj_qx9uhf8whhxo.md +0 -47
  268. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.json +0 -59
  269. package/.trajectories/completed/2026-01/traj_rd9toccj18a0.md +0 -37
  270. package/.trajectories/completed/2026-01/traj_rsavt0jipi3c.json +0 -109
  271. package/.trajectories/completed/2026-01/traj_rsavt0jipi3c.md +0 -56
  272. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.json +0 -48
  273. package/.trajectories/completed/2026-01/traj_rt4fiw3ecp50.md +0 -16
  274. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.json +0 -59
  275. package/.trajectories/completed/2026-01/traj_st8j35b0hrlc.md +0 -37
  276. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.json +0 -53
  277. package/.trajectories/completed/2026-01/traj_t1yy8m7hbuxp.md +0 -32
  278. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.json +0 -84
  279. package/.trajectories/completed/2026-01/traj_tmux_orchestrator_analysis.md +0 -109
  280. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.json +0 -53
  281. package/.trajectories/completed/2026-01/traj_u9n9eqasw16k.md +0 -32
  282. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.json +0 -53
  283. package/.trajectories/completed/2026-01/traj_ub8csuv3lcv4.md +0 -32
  284. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.json +0 -186
  285. package/.trajectories/completed/2026-01/traj_uc29tlso8i9s.md +0 -86
  286. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.json +0 -77
  287. package/.trajectories/completed/2026-01/traj_ui9b4tqxoa7j.md +0 -42
  288. package/.trajectories/completed/2026-01/traj_v87hypnongqx.json +0 -71
  289. package/.trajectories/completed/2026-01/traj_v87hypnongqx.md +0 -42
  290. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.json +0 -89
  291. package/.trajectories/completed/2026-01/traj_v9dkdoxylyid.md +0 -47
  292. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.json +0 -53
  293. package/.trajectories/completed/2026-01/traj_wkp2fgzdyinb.md +0 -32
  294. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.json +0 -20
  295. package/.trajectories/completed/2026-01/traj_x14t8w8rn7xg.md +0 -6
  296. package/.trajectories/completed/2026-01/traj_x721m1j9rzup.json +0 -113
  297. package/.trajectories/completed/2026-01/traj_x721m1j9rzup.md +0 -57
  298. package/.trajectories/completed/2026-01/traj_xjqvmep5ed3h.json +0 -61
  299. package/.trajectories/completed/2026-01/traj_xjqvmep5ed3h.md +0 -36
  300. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.json +0 -175
  301. package/.trajectories/completed/2026-01/traj_xnwbznkvv8ua.md +0 -82
  302. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.json +0 -65
  303. package/.trajectories/completed/2026-01/traj_xy9vifpqet80.md +0 -37
  304. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.json +0 -49
  305. package/.trajectories/completed/2026-01/traj_y7aiwijyfmmv.md +0 -31
  306. package/.trajectories/completed/2026-01/traj_y7n6hfbf7dmg.json +0 -49
  307. package/.trajectories/completed/2026-01/traj_y7n6hfbf7dmg.md +0 -31
  308. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.json +0 -47
  309. package/.trajectories/completed/2026-01/traj_ysjc8zaeqtd3.md +0 -32
  310. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.json +0 -59
  311. package/.trajectories/completed/2026-01/traj_yvdadtvdgnz3.md +0 -37
  312. package/.trajectories/completed/2026-01/traj_yvfkwnkdiso2.json +0 -49
  313. package/.trajectories/completed/2026-01/traj_yvfkwnkdiso2.md +0 -31
  314. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.json +0 -53
  315. package/.trajectories/completed/2026-01/traj_z0vcw1wrzide.md +0 -32
  316. package/.trajectories/consolidate-settings-panel.md +0 -24
  317. package/.trajectories/gh-cli-user-token.md +0 -26
  318. package/.trajectories/index.json +0 -607
@@ -1,109 +0,0 @@
1
- # Trajectory: Tmux-Orchestrator competitive analysis
2
-
3
- > **Status:** Completed
4
- > **Task:** analyze-tmux-orchestrator
5
- > **Started:** January 4, 2026 at 09:00 AM
6
- > **Completed:** January 4, 2026 at 09:30 AM
7
- > **Confidence:** 0.9
8
-
9
- ---
10
-
11
- ## Summary
12
-
13
- Comprehensive competitive analysis of Tmux-Orchestrator vs Agent Relay, identified key features to adopt.
14
-
15
- ---
16
-
17
- ## Key Decisions
18
-
19
- ### 1. Continuity context already works on spawn - no new feature needed
20
- - **Reasoning:** PtyWrapper.injectContinuityContext() already loads ledger + handoff and injects on agent spawn
21
-
22
- ### 2. Use trajectories for learnings instead of separate learning repository
23
- - **Reasoning:** Trajectories already capture learnings via trail complete --learnings. Just need search functionality.
24
-
25
- ### 3. Self-scheduling is the key missing feature for 24/7 autonomy
26
- - **Reasoning:** Tmux-Orchestrator's schedule_with_note.sh enables agents to wake themselves up. We need ->relay:schedule command.
27
-
28
- ### 4. Skip git commit tracking - requires git worktree architecture we don't have
29
- - **Reasoning:** Tmux-Orchestrator's 30-minute commit rule assumes per-agent git worktrees. Not applicable to our current single-repo model.
30
-
31
- ---
32
-
33
- ## Learnings
34
-
35
- 1. **Tmux-Orchestrator pioneered 24/7 autonomous agent operation** using tmux persistence + self-scheduling
36
-
37
- 2. **Git commit tracking requires per-agent worktrees** - their 30-min rule isn't applicable without that architecture
38
-
39
- 3. **Fixed 3-tier hierarchy** (Orchestrator→PM→Engineer) solves context window limits but is less flexible than relay's any-topology approach
40
-
41
- 4. **Shell script + timing delays (~500ms)** is simpler but 100x slower than our Unix socket (<5ms)
42
-
43
- 5. **Self-scheduling with context notes** is the killer feature for autonomous operation
44
-
45
- 6. **Our continuity system already covers spawn context** - ledger + handoff injection works
46
-
47
- 7. **Trajectory learnings field already exists** - just need search/index functionality
48
-
49
- ---
50
-
51
- ## Chapters
52
-
53
- ### 1. Plan
54
- *Agent: default*
55
-
56
- - Fetched Tmux-Orchestrator README and CLAUDE.md from GitHub
57
- - Reviewed existing competitive analyses format (GASTOWN.md, MCP_AGENT_MAIL.md)
58
-
59
- ### 2. Execute
60
- *Agent: default*
61
-
62
- - Created docs/competitive/TMUX_ORCHESTRATOR.md with full analysis
63
- - Updated OVERVIEW.md comparison matrix with Tmux-Orchestrator
64
- - Updated README.md with new analysis link
65
-
66
- ### 3. Execute
67
- *Agent: default*
68
-
69
- - Created 5 beads for features to adopt
70
- - Reviewed existing continuity system - found spawn context already works
71
- - Updated beads to reflect existing functionality
72
-
73
- ### 4. Review
74
- *Agent: default*
75
-
76
- - Confirmed PtyWrapper.injectContinuityContext() handles spawn context
77
- - Confirmed trajectories already capture learnings field
78
- - Identified self-scheduling as the truly new feature needed
79
-
80
- ---
81
-
82
- ## Beads Created
83
-
84
- **None** - Analysis validated our existing architecture covers their solutions.
85
-
86
- ### What They Built vs What We Have
87
-
88
- | Their Solution | Our Solution |
89
- |----------------|--------------|
90
- | Self-scheduling (wake up) | Real-time messaging (agents wake each other) |
91
- | Context notes for spawn | Continuity injection (ledger + handoff) |
92
- | Git commit tracking | N/A (needs worktrees) |
93
- | LEARNINGS.md | Trajectories with learnings field |
94
- | ~500ms timing delays | <5ms Unix socket |
95
-
96
- ### Key Insight
97
- Tmux-Orchestrator pioneered autonomous agents with shell scripts. Our architecture (real-time messaging + continuity) is the next evolution - we've already solved their problems more elegantly.
98
-
99
- ---
100
-
101
- ## Files Changed
102
-
103
- - `docs/competitive/TMUX_ORCHESTRATOR.md` - New analysis (600+ lines)
104
- - `docs/competitive/README.md` - Added to table
105
- - `docs/competitive/OVERVIEW.md` - Added to comparison matrix
106
-
107
- ---
108
-
109
- *Trajectory completed 2026-01-04*
@@ -1,53 +0,0 @@
1
- {
2
- "id": "traj_u9n9eqasw16k",
3
- "version": 1,
4
- "task": {
5
- "title": "Backend trajectory data-loading fix review",
6
- "source": {
7
- "system": "plain",
8
- "id": "backend-review"
9
- }
10
- },
11
- "status": "completed",
12
- "startedAt": "2026-01-03T14:40:11.376Z",
13
- "agents": [
14
- {
15
- "name": "CodeReviewer",
16
- "role": "lead",
17
- "joinedAt": "2026-01-03T14:40:11.377Z"
18
- }
19
- ],
20
- "chapters": [
21
- {
22
- "id": "chap_xfg9tvbm40wy",
23
- "title": "Work",
24
- "agentName": "default",
25
- "startedAt": "2026-01-03T14:41:43.249Z",
26
- "events": [
27
- {
28
- "ts": 1767451303250,
29
- "type": "decision",
30
- "content": "Active trajectories lose status coloring: Active trajectories lose status coloring",
31
- "raw": {
32
- "question": "Active trajectories lose status coloring",
33
- "chosen": "Active trajectories lose status coloring",
34
- "alternatives": [],
35
- "reasoning": "mapEventStatus doesn't map 'active' so in-progress runs show no status indicator"
36
- },
37
- "significance": "high"
38
- }
39
- ],
40
- "endedAt": "2026-01-03T14:41:50.001Z"
41
- }
42
- ],
43
- "commits": [],
44
- "filesChanged": [],
45
- "projectId": "/Users/khaliqgant/Projects/agent-workforce/relay",
46
- "tags": [],
47
- "completedAt": "2026-01-03T14:41:50.001Z",
48
- "retrospective": {
49
- "summary": "Reviewed backend filesystem trajectory loading; flagged missing 'active' status mapping",
50
- "approach": "Standard approach",
51
- "confidence": 0.78
52
- }
53
- }
@@ -1,32 +0,0 @@
1
- # Trajectory: Backend trajectory data-loading fix review
2
-
3
- > **Status:** ✅ Completed
4
- > **Task:** backend-review
5
- > **Confidence:** 78%
6
- > **Started:** January 3, 2026 at 03:40 PM
7
- > **Completed:** January 3, 2026 at 03:41 PM
8
-
9
- ---
10
-
11
- ## Summary
12
-
13
- Reviewed backend filesystem trajectory loading; flagged missing 'active' status mapping
14
-
15
- **Approach:** Standard approach
16
-
17
- ---
18
-
19
- ## Key Decisions
20
-
21
- ### Active trajectories lose status coloring
22
- - **Chose:** Active trajectories lose status coloring
23
- - **Reasoning:** mapEventStatus doesn't map 'active' so in-progress runs show no status indicator
24
-
25
- ---
26
-
27
- ## Chapters
28
-
29
- ### 1. Work
30
- *Agent: default*
31
-
32
- - Active trajectories lose status coloring: Active trajectories lose status coloring
@@ -1,53 +0,0 @@
1
- {
2
- "id": "traj_ub8csuv3lcv4",
3
- "version": 1,
4
- "task": {
5
- "title": "Fix WebSocket disconnections for workspace instances",
6
- "source": {
7
- "system": "plain",
8
- "id": "workspace-websocket-stability"
9
- }
10
- },
11
- "status": "completed",
12
- "startedAt": "2026-01-06T18:13:23.603Z",
13
- "agents": [
14
- {
15
- "name": "default",
16
- "role": "lead",
17
- "joinedAt": "2026-01-06T18:13:35.723Z"
18
- }
19
- ],
20
- "chapters": [
21
- {
22
- "id": "chap_e4vj0j8ig7ma",
23
- "title": "Work",
24
- "agentName": "default",
25
- "startedAt": "2026-01-06T18:13:35.723Z",
26
- "events": [
27
- {
28
- "ts": 1767723215725,
29
- "type": "decision",
30
- "content": "Add ping/pong keepalive to main and bridge WebSockets: Add ping/pong keepalive to main and bridge WebSockets",
31
- "raw": {
32
- "question": "Add ping/pong keepalive to main and bridge WebSockets",
33
- "chosen": "Add ping/pong keepalive to main and bridge WebSockets",
34
- "alternatives": [],
35
- "reasoning": "Main dashboard and bridge WebSocket endpoints were missing ping/pong keepalive, while logs and presence endpoints had it. Without keepalive, TCP/proxy timeouts kill idle connections (typically 60-120s)."
36
- },
37
- "significance": "high"
38
- }
39
- ],
40
- "endedAt": "2026-01-06T18:16:51.462Z"
41
- }
42
- ],
43
- "commits": [],
44
- "filesChanged": [],
45
- "projectId": "/home/user/relay",
46
- "tags": [],
47
- "completedAt": "2026-01-06T18:16:51.462Z",
48
- "retrospective": {
49
- "summary": "Added ping/pong keepalive to main and bridge WebSockets to fix connection instability",
50
- "approach": "Standard approach",
51
- "confidence": 0.9
52
- }
53
- }
@@ -1,32 +0,0 @@
1
- # Trajectory: Fix WebSocket disconnections for workspace instances
2
-
3
- > **Status:** ✅ Completed
4
- > **Task:** workspace-websocket-stability
5
- > **Confidence:** 90%
6
- > **Started:** January 6, 2026 at 06:13 PM
7
- > **Completed:** January 6, 2026 at 06:16 PM
8
-
9
- ---
10
-
11
- ## Summary
12
-
13
- Added ping/pong keepalive to main and bridge WebSockets to fix connection instability
14
-
15
- **Approach:** Standard approach
16
-
17
- ---
18
-
19
- ## Key Decisions
20
-
21
- ### Add ping/pong keepalive to main and bridge WebSockets
22
- - **Chose:** Add ping/pong keepalive to main and bridge WebSockets
23
- - **Reasoning:** Main dashboard and bridge WebSocket endpoints were missing ping/pong keepalive, while logs and presence endpoints had it. Without keepalive, TCP/proxy timeouts kill idle connections (typically 60-120s).
24
-
25
- ---
26
-
27
- ## Chapters
28
-
29
- ### 1. Work
30
- *Agent: default*
31
-
32
- - Add ping/pong keepalive to main and bridge WebSockets: Add ping/pong keepalive to main and bridge WebSockets
@@ -1,186 +0,0 @@
1
- {
2
- "id": "traj_uc29tlso8i9s",
3
- "version": 1,
4
- "task": {
5
- "title": "Production-ready SSH tunneling for Codex OAuth with security hardening"
6
- },
7
- "status": "completed",
8
- "startedAt": "2026-01-07T10:08:04.299Z",
9
- "agents": [
10
- {
11
- "name": "khaliqgant",
12
- "role": "lead",
13
- "joinedAt": "2026-01-07T10:08:04.300Z"
14
- },
15
- {
16
- "name": "default",
17
- "role": "contributor",
18
- "joinedAt": "2026-01-07T10:08:04.710Z"
19
- }
20
- ],
21
- "chapters": [
22
- {
23
- "id": "chap_8omowh9k21wa",
24
- "title": "Work",
25
- "agentName": "default",
26
- "startedAt": "2026-01-07T10:08:04.710Z",
27
- "events": [
28
- {
29
- "ts": 1767780484710,
30
- "type": "decision",
31
- "content": "Changed UsageBanner intro bonus from purple to cyan: Changed UsageBanner intro bonus from purple to cyan",
32
- "raw": {
33
- "question": "Changed UsageBanner intro bonus from purple to cyan",
34
- "chosen": "Changed UsageBanner intro bonus from purple to cyan",
35
- "alternatives": [],
36
- "reasoning": "Brand consistency - cyan is primary accent color, purple was off-brand"
37
- },
38
- "significance": "high"
39
- },
40
- {
41
- "ts": 1767780493469,
42
- "type": "decision",
43
- "content": "Added landing page auth check - shows Go to App when logged in: Added landing page auth check - shows Go to App when logged in",
44
- "raw": {
45
- "question": "Added landing page auth check - shows Go to App when logged in",
46
- "chosen": "Added landing page auth check - shows Go to App when logged in",
47
- "alternatives": [],
48
- "reasoning": "Better UX for returning users who shouldn't see Sign In buttons"
49
- },
50
- "significance": "high"
51
- },
52
- {
53
- "ts": 1767780494224,
54
- "type": "decision",
55
- "content": "Expose SSH port 2222 publicly on Fly.io via TCP service: Expose SSH port 2222 publicly on Fly.io via TCP service",
56
- "raw": {
57
- "question": "Expose SSH port 2222 publicly on Fly.io via TCP service",
58
- "chosen": "Expose SSH port 2222 publicly on Fly.io via TCP service",
59
- "alternatives": [],
60
- "reasoning": "Internal .internal hostnames aren't routable from user machines. Public SSH with unique passwords per workspace is secure enough for production."
61
- },
62
- "significance": "high"
63
- },
64
- {
65
- "ts": 1767780500783,
66
- "type": "decision",
67
- "content": "Updated CTA terminal to show realistic CLI flow (cloud link + send): Updated CTA terminal to show realistic CLI flow (cloud link + send)",
68
- "raw": {
69
- "question": "Updated CTA terminal to show realistic CLI flow (cloud link + send)",
70
- "chosen": "Updated CTA terminal to show realistic CLI flow (cloud link + send)",
71
- "alternatives": [],
72
- "reasoning": "Previous mock commands were inaccurate. Now shows actual agent-relay cloud commands"
73
- },
74
- "significance": "high"
75
- },
76
- {
77
- "ts": 1767780501007,
78
- "type": "decision",
79
- "content": "Use deterministic password derivation instead of storage: Use deterministic password derivation instead of storage",
80
- "raw": {
81
- "question": "Use deterministic password derivation instead of storage",
82
- "chosen": "Use deterministic password derivation instead of storage",
83
- "alternatives": [],
84
- "reasoning": "SHA-256(workspaceId + salt) produces unique passwords without database storage. Both cloud server and container can derive the same password independently. 96 bits of entropy is sufficient."
85
- },
86
- "significance": "high"
87
- },
88
- {
89
- "ts": 1767780508469,
90
- "type": "decision",
91
- "content": "Create shared ssh-security.ts utility: Create shared ssh-security.ts utility",
92
- "raw": {
93
- "question": "Create shared ssh-security.ts utility",
94
- "chosen": "Create shared ssh-security.ts utility",
95
- "alternatives": [],
96
- "reasoning": "Password derivation was duplicated in provisioner and codex-auth-helper. Single source of truth prevents bugs if algorithm changes. Also adds startup validation."
97
- },
98
- "significance": "high"
99
- },
100
- {
101
- "ts": 1767780510961,
102
- "type": "decision",
103
- "content": "Fixed TypeScript error: Promise<never> to Promise<void>: Fixed TypeScript error: Promise<never> to Promise<void>",
104
- "raw": {
105
- "question": "Fixed TypeScript error: Promise<never> to Promise<void>",
106
- "chosen": "Fixed TypeScript error: Promise<never> to Promise<void>",
107
- "alternatives": [],
108
- "reasoning": "Promise<never> caused control flow analysis to mark subsequent code as unreachable"
109
- },
110
- "significance": "high"
111
- },
112
- {
113
- "ts": 1767780517965,
114
- "type": "decision",
115
- "content": "Keep password-based SSH for now, defer key-based auth: Keep password-based SSH for now, defer key-based auth",
116
- "raw": {
117
- "question": "Keep password-based SSH for now, defer key-based auth",
118
- "chosen": "Keep password-based SSH for now, defer key-based auth",
119
- "alternatives": [],
120
- "reasoning": "Password-based is simpler to implement and per-workspace unique passwords provide reasonable security. Key-based auth would require container-side authorized_keys management - tracked as future improvement in agent-relay-476."
121
- },
122
- "significance": "high"
123
- },
124
- {
125
- "ts": 1767780523070,
126
- "type": "decision",
127
- "content": "Settings page: replaced sidebar with always-visible horizontal tabs: Settings page: replaced sidebar with always-visible horizontal tabs",
128
- "raw": {
129
- "question": "Settings page: replaced sidebar with always-visible horizontal tabs",
130
- "chosen": "Settings page: replaced sidebar with always-visible horizontal tabs",
131
- "alternatives": [],
132
- "reasoning": "Desktop sidebar wasn't rendering for user. Horizontal tabs provide consistent navigation on all screen sizes"
133
- },
134
- "significance": "high"
135
- },
136
- {
137
- "ts": 1767780530293,
138
- "type": "decision",
139
- "content": "Billing API: respect database user.plan when no Stripe subscription: Billing API: respect database user.plan when no Stripe subscription",
140
- "raw": {
141
- "question": "Billing API: respect database user.plan when no Stripe subscription",
142
- "chosen": "Billing API: respect database user.plan when no Stripe subscription",
143
- "alternatives": [],
144
- "reasoning": "Allows manual plan overrides in database to take effect without Stripe subscription"
145
- },
146
- "significance": "high"
147
- },
148
- {
149
- "ts": 1767780538628,
150
- "type": "decision",
151
- "content": "Billing panel: dynamic tier descriptions and smart plan recommendations: Billing panel: dynamic tier descriptions and smart plan recommendations",
152
- "raw": {
153
- "question": "Billing panel: dynamic tier descriptions and smart plan recommendations",
154
- "chosen": "Billing panel: dynamic tier descriptions and smart plan recommendations",
155
- "alternatives": [],
156
- "reasoning": "Fixed hardcoded Free tier text. Only highlight upgrades, not downgrades (no Pro promotion to Team users)"
157
- },
158
- "significance": "high"
159
- },
160
- {
161
- "ts": 1767780548294,
162
- "type": "decision",
163
- "content": "Aligned workspace Codex auth with /app onboarding: Aligned workspace Codex auth with /app onboarding",
164
- "raw": {
165
- "question": "Aligned workspace Codex auth with /app onboarding",
166
- "chosen": "Aligned workspace Codex auth with /app onboarding",
167
- "alternatives": [],
168
- "reasoning": "Added supportsDeviceFlow prop to ProviderAuthFlow to match /app page props"
169
- },
170
- "significance": "high"
171
- }
172
- ],
173
- "endedAt": "2026-01-07T10:09:10.870Z"
174
- }
175
- ],
176
- "commits": [],
177
- "filesChanged": [],
178
- "projectId": "/Users/khaliqgant/Projects/agent-workforce/relay",
179
- "tags": [],
180
- "completedAt": "2026-01-07T10:09:10.870Z",
181
- "retrospective": {
182
- "summary": "Implemented production-ready SSH tunneling for Codex OAuth. Key changes: (1) Exposed SSH port 2222 publicly on Fly.io via TCP service, (2) Changed from .internal to .fly.dev hostname for public routing, (3) Created shared ssh-security.ts with deterministic password derivation (SHA-256 of workspaceId + salt), (4) Added startup validation for SSH_PASSWORD_SALT env var, (5) Created beads for future improvements: rate limiting, key-based auth, time-limited access.",
183
- "approach": "Standard approach",
184
- "confidence": 0.85
185
- }
186
- }
@@ -1,86 +0,0 @@
1
- # Trajectory: Production-ready SSH tunneling for Codex OAuth with security hardening
2
-
3
- > **Status:** ✅ Completed
4
- > **Confidence:** 85%
5
- > **Started:** January 7, 2026 at 11:08 AM
6
- > **Completed:** January 7, 2026 at 11:09 AM
7
-
8
- ---
9
-
10
- ## Summary
11
-
12
- Implemented production-ready SSH tunneling for Codex OAuth. Key changes: (1) Exposed SSH port 2222 publicly on Fly.io via TCP service, (2) Changed from .internal to .fly.dev hostname for public routing, (3) Created shared ssh-security.ts with deterministic password derivation (SHA-256 of workspaceId + salt), (4) Added startup validation for SSH_PASSWORD_SALT env var, (5) Created beads for future improvements: rate limiting, key-based auth, time-limited access.
13
-
14
- **Approach:** Standard approach
15
-
16
- ---
17
-
18
- ## Key Decisions
19
-
20
- ### Changed UsageBanner intro bonus from purple to cyan
21
- - **Chose:** Changed UsageBanner intro bonus from purple to cyan
22
- - **Reasoning:** Brand consistency - cyan is primary accent color, purple was off-brand
23
-
24
- ### Added landing page auth check - shows Go to App when logged in
25
- - **Chose:** Added landing page auth check - shows Go to App when logged in
26
- - **Reasoning:** Better UX for returning users who shouldn't see Sign In buttons
27
-
28
- ### Expose SSH port 2222 publicly on Fly.io via TCP service
29
- - **Chose:** Expose SSH port 2222 publicly on Fly.io via TCP service
30
- - **Reasoning:** Internal .internal hostnames aren't routable from user machines. Public SSH with unique passwords per workspace is secure enough for production.
31
-
32
- ### Updated CTA terminal to show realistic CLI flow (cloud link + send)
33
- - **Chose:** Updated CTA terminal to show realistic CLI flow (cloud link + send)
34
- - **Reasoning:** Previous mock commands were inaccurate. Now shows actual agent-relay cloud commands
35
-
36
- ### Use deterministic password derivation instead of storage
37
- - **Chose:** Use deterministic password derivation instead of storage
38
- - **Reasoning:** SHA-256(workspaceId + salt) produces unique passwords without database storage. Both cloud server and container can derive the same password independently. 96 bits of entropy is sufficient.
39
-
40
- ### Create shared ssh-security.ts utility
41
- - **Chose:** Create shared ssh-security.ts utility
42
- - **Reasoning:** Password derivation was duplicated in provisioner and codex-auth-helper. Single source of truth prevents bugs if algorithm changes. Also adds startup validation.
43
-
44
- ### Fixed TypeScript error: Promise<never> to Promise<void>
45
- - **Chose:** Fixed TypeScript error: Promise<never> to Promise<void>
46
- - **Reasoning:** Promise<never> caused control flow analysis to mark subsequent code as unreachable
47
-
48
- ### Keep password-based SSH for now, defer key-based auth
49
- - **Chose:** Keep password-based SSH for now, defer key-based auth
50
- - **Reasoning:** Password-based is simpler to implement and per-workspace unique passwords provide reasonable security. Key-based auth would require container-side authorized_keys management - tracked as future improvement in agent-relay-476.
51
-
52
- ### Settings page: replaced sidebar with always-visible horizontal tabs
53
- - **Chose:** Settings page: replaced sidebar with always-visible horizontal tabs
54
- - **Reasoning:** Desktop sidebar wasn't rendering for user. Horizontal tabs provide consistent navigation on all screen sizes
55
-
56
- ### Billing API: respect database user.plan when no Stripe subscription
57
- - **Chose:** Billing API: respect database user.plan when no Stripe subscription
58
- - **Reasoning:** Allows manual plan overrides in database to take effect without Stripe subscription
59
-
60
- ### Billing panel: dynamic tier descriptions and smart plan recommendations
61
- - **Chose:** Billing panel: dynamic tier descriptions and smart plan recommendations
62
- - **Reasoning:** Fixed hardcoded Free tier text. Only highlight upgrades, not downgrades (no Pro promotion to Team users)
63
-
64
- ### Aligned workspace Codex auth with /app onboarding
65
- - **Chose:** Aligned workspace Codex auth with /app onboarding
66
- - **Reasoning:** Added supportsDeviceFlow prop to ProviderAuthFlow to match /app page props
67
-
68
- ---
69
-
70
- ## Chapters
71
-
72
- ### 1. Work
73
- *Agent: default*
74
-
75
- - Changed UsageBanner intro bonus from purple to cyan: Changed UsageBanner intro bonus from purple to cyan
76
- - Added landing page auth check - shows Go to App when logged in: Added landing page auth check - shows Go to App when logged in
77
- - Expose SSH port 2222 publicly on Fly.io via TCP service: Expose SSH port 2222 publicly on Fly.io via TCP service
78
- - Updated CTA terminal to show realistic CLI flow (cloud link + send): Updated CTA terminal to show realistic CLI flow (cloud link + send)
79
- - Use deterministic password derivation instead of storage: Use deterministic password derivation instead of storage
80
- - Create shared ssh-security.ts utility: Create shared ssh-security.ts utility
81
- - Fixed TypeScript error: Promise<never> to Promise<void>: Fixed TypeScript error: Promise<never> to Promise<void>
82
- - Keep password-based SSH for now, defer key-based auth: Keep password-based SSH for now, defer key-based auth
83
- - Settings page: replaced sidebar with always-visible horizontal tabs: Settings page: replaced sidebar with always-visible horizontal tabs
84
- - Billing API: respect database user.plan when no Stripe subscription: Billing API: respect database user.plan when no Stripe subscription
85
- - Billing panel: dynamic tier descriptions and smart plan recommendations: Billing panel: dynamic tier descriptions and smart plan recommendations
86
- - Aligned workspace Codex auth with /app onboarding: Aligned workspace Codex auth with /app onboarding
@@ -1,77 +0,0 @@
1
- {
2
- "id": "traj_ui9b4tqxoa7j",
3
- "version": 1,
4
- "task": {
5
- "title": "Fix agent token fetch with improved error handling",
6
- "source": {
7
- "system": "plain",
8
- "id": "fix-agent-token-fetch-sW7v5"
9
- }
10
- },
11
- "status": "completed",
12
- "startedAt": "2026-01-06T08:24:36.222Z",
13
- "agents": [
14
- {
15
- "name": "default",
16
- "role": "lead",
17
- "joinedAt": "2026-01-06T08:24:48.653Z"
18
- }
19
- ],
20
- "chapters": [
21
- {
22
- "id": "chap_8510b2gli7tq",
23
- "title": "Work",
24
- "agentName": "default",
25
- "startedAt": "2026-01-06T08:24:48.653Z",
26
- "events": [
27
- {
28
- "ts": 1767687888655,
29
- "type": "decision",
30
- "content": "Enhanced verifyWorkspaceToken to return detailed failure reasons: Enhanced verifyWorkspaceToken to return detailed failure reasons",
31
- "raw": {
32
- "question": "Enhanced verifyWorkspaceToken to return detailed failure reasons",
33
- "chosen": "Enhanced verifyWorkspaceToken to return detailed failure reasons",
34
- "alternatives": [],
35
- "reasoning": "Helps diagnose whether issue is missing token, wrong format, or mismatch"
36
- },
37
- "significance": "high"
38
- },
39
- {
40
- "ts": 1767687904489,
41
- "type": "decision",
42
- "content": "Added error codes and actionable hints to all error responses: Added error codes and actionable hints to all error responses",
43
- "raw": {
44
- "question": "Added error codes and actionable hints to all error responses",
45
- "chosen": "Added error codes and actionable hints to all error responses",
46
- "alternatives": [],
47
- "reasoning": "Enables git-credential-relay to show specific guidance to users"
48
- },
49
- "significance": "high"
50
- },
51
- {
52
- "ts": 1767687910382,
53
- "type": "decision",
54
- "content": "Wrapped Nango token fetch in try-catch with specific error handling: Wrapped Nango token fetch in try-catch with specific error handling",
55
- "raw": {
56
- "question": "Wrapped Nango token fetch in try-catch with specific error handling",
57
- "chosen": "Wrapped Nango token fetch in try-catch with specific error handling",
58
- "alternatives": [],
59
- "reasoning": "Distinguishes between expired connections and temporary failures"
60
- },
61
- "significance": "high"
62
- }
63
- ],
64
- "endedAt": "2026-01-06T08:25:20.777Z"
65
- }
66
- ],
67
- "commits": [],
68
- "filesChanged": [],
69
- "projectId": "/home/user/relay",
70
- "tags": [],
71
- "completedAt": "2026-01-06T08:25:20.777Z",
72
- "retrospective": {
73
- "summary": "Added comprehensive error handling and diagnostics to git token API and credential helper",
74
- "approach": "Standard approach",
75
- "confidence": 0.85
76
- }
77
- }
@@ -1,42 +0,0 @@
1
- # Trajectory: Fix agent token fetch with improved error handling
2
-
3
- > **Status:** ✅ Completed
4
- > **Task:** fix-agent-token-fetch-sW7v5
5
- > **Confidence:** 85%
6
- > **Started:** January 6, 2026 at 08:24 AM
7
- > **Completed:** January 6, 2026 at 08:25 AM
8
-
9
- ---
10
-
11
- ## Summary
12
-
13
- Added comprehensive error handling and diagnostics to git token API and credential helper
14
-
15
- **Approach:** Standard approach
16
-
17
- ---
18
-
19
- ## Key Decisions
20
-
21
- ### Enhanced verifyWorkspaceToken to return detailed failure reasons
22
- - **Chose:** Enhanced verifyWorkspaceToken to return detailed failure reasons
23
- - **Reasoning:** Helps diagnose whether issue is missing token, wrong format, or mismatch
24
-
25
- ### Added error codes and actionable hints to all error responses
26
- - **Chose:** Added error codes and actionable hints to all error responses
27
- - **Reasoning:** Enables git-credential-relay to show specific guidance to users
28
-
29
- ### Wrapped Nango token fetch in try-catch with specific error handling
30
- - **Chose:** Wrapped Nango token fetch in try-catch with specific error handling
31
- - **Reasoning:** Distinguishes between expired connections and temporary failures
32
-
33
- ---
34
-
35
- ## Chapters
36
-
37
- ### 1. Work
38
- *Agent: default*
39
-
40
- - Enhanced verifyWorkspaceToken to return detailed failure reasons: Enhanced verifyWorkspaceToken to return detailed failure reasons
41
- - Added error codes and actionable hints to all error responses: Added error codes and actionable hints to all error responses
42
- - Wrapped Nango token fetch in try-catch with specific error handling: Wrapped Nango token fetch in try-catch with specific error handling