@vibedeckx/linux-x64 0.1.10

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 (579) hide show
  1. package/dist/agent-provider.d.ts +92 -0
  2. package/dist/agent-provider.js +8 -0
  3. package/dist/agent-session-manager.d.ts +165 -0
  4. package/dist/agent-session-manager.js +985 -0
  5. package/dist/agent-types.d.ts +148 -0
  6. package/dist/agent-types.js +4 -0
  7. package/dist/bin.d.ts +2 -0
  8. package/dist/bin.js +4 -0
  9. package/dist/browser-manager.d.ts +46 -0
  10. package/dist/browser-manager.js +182 -0
  11. package/dist/chat-session-manager.d.ts +101 -0
  12. package/dist/chat-session-manager.js +1425 -0
  13. package/dist/command.d.ts +1 -0
  14. package/dist/command.js +163 -0
  15. package/dist/constants.d.ts +3 -0
  16. package/dist/constants.js +5 -0
  17. package/dist/conversation-patch.d.ts +103 -0
  18. package/dist/conversation-patch.js +69 -0
  19. package/dist/dialog.d.ts +1 -0
  20. package/dist/dialog.js +41 -0
  21. package/dist/entry-index-provider.d.ts +74 -0
  22. package/dist/entry-index-provider.js +105 -0
  23. package/dist/event-bus.d.ts +47 -0
  24. package/dist/event-bus.js +16 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.js +2 -0
  27. package/dist/plugins/shared-services.d.ts +8 -0
  28. package/dist/plugins/shared-services.js +65 -0
  29. package/dist/process-manager.d.ts +146 -0
  30. package/dist/process-manager.js +779 -0
  31. package/dist/providers/claude-code-provider.d.ts +13 -0
  32. package/dist/providers/claude-code-provider.js +127 -0
  33. package/dist/providers/codex-provider.d.ts +41 -0
  34. package/dist/providers/codex-provider.js +354 -0
  35. package/dist/providers/index.d.ts +5 -0
  36. package/dist/providers/index.js +19 -0
  37. package/dist/remote-patch-cache.d.ts +67 -0
  38. package/dist/remote-patch-cache.js +190 -0
  39. package/dist/reverse-connect-client.d.ts +27 -0
  40. package/dist/reverse-connect-client.js +255 -0
  41. package/dist/reverse-connect-manager.d.ts +31 -0
  42. package/dist/reverse-connect-manager.js +287 -0
  43. package/dist/reverse-connect-types.d.ts +55 -0
  44. package/dist/reverse-connect-types.js +7 -0
  45. package/dist/routes/agent-session-routes.d.ts +4 -0
  46. package/dist/routes/agent-session-routes.js +442 -0
  47. package/dist/routes/browser-proxy-routes.d.ts +25 -0
  48. package/dist/routes/browser-proxy-routes.js +421 -0
  49. package/dist/routes/browser-routes.d.ts +4 -0
  50. package/dist/routes/browser-routes.js +73 -0
  51. package/dist/routes/chat-session-routes.d.ts +7 -0
  52. package/dist/routes/chat-session-routes.js +69 -0
  53. package/dist/routes/diff-routes.d.ts +4 -0
  54. package/dist/routes/diff-routes.js +208 -0
  55. package/dist/routes/event-routes.d.ts +4 -0
  56. package/dist/routes/event-routes.js +52 -0
  57. package/dist/routes/executor-group-routes.d.ts +4 -0
  58. package/dist/routes/executor-group-routes.js +76 -0
  59. package/dist/routes/executor-routes.d.ts +4 -0
  60. package/dist/routes/executor-routes.js +106 -0
  61. package/dist/routes/file-routes.d.ts +4 -0
  62. package/dist/routes/file-routes.js +331 -0
  63. package/dist/routes/process-routes.d.ts +4 -0
  64. package/dist/routes/process-routes.js +183 -0
  65. package/dist/routes/project-remote-routes.d.ts +4 -0
  66. package/dist/routes/project-remote-routes.js +82 -0
  67. package/dist/routes/project-routes.d.ts +4 -0
  68. package/dist/routes/project-routes.js +286 -0
  69. package/dist/routes/remote-routes.d.ts +4 -0
  70. package/dist/routes/remote-routes.js +59 -0
  71. package/dist/routes/remote-server-routes.d.ts +4 -0
  72. package/dist/routes/remote-server-routes.js +157 -0
  73. package/dist/routes/reverse-connect-routes.d.ts +4 -0
  74. package/dist/routes/reverse-connect-routes.js +33 -0
  75. package/dist/routes/settings-routes.d.ts +4 -0
  76. package/dist/routes/settings-routes.js +129 -0
  77. package/dist/routes/task-routes.d.ts +4 -0
  78. package/dist/routes/task-routes.js +107 -0
  79. package/dist/routes/terminal-routes.d.ts +4 -0
  80. package/dist/routes/terminal-routes.js +187 -0
  81. package/dist/routes/translate-routes.d.ts +4 -0
  82. package/dist/routes/translate-routes.js +38 -0
  83. package/dist/routes/websocket-routes.d.ts +4 -0
  84. package/dist/routes/websocket-routes.js +604 -0
  85. package/dist/routes/worktree-routes.d.ts +4 -0
  86. package/dist/routes/worktree-routes.js +511 -0
  87. package/dist/server-types.d.ts +41 -0
  88. package/dist/server-types.js +1 -0
  89. package/dist/server.d.ts +23 -0
  90. package/dist/server.js +238 -0
  91. package/dist/storage/sqlite.d.ts +2 -0
  92. package/dist/storage/sqlite.js +1073 -0
  93. package/dist/storage/types.d.ts +281 -0
  94. package/dist/storage/types.js +1 -0
  95. package/dist/ui/404/index.html +1 -0
  96. package/dist/ui/404.html +1 -0
  97. package/dist/ui/__next.__PAGE__.txt +10 -0
  98. package/dist/ui/__next._full.txt +25 -0
  99. package/dist/ui/__next._head.txt +6 -0
  100. package/dist/ui/__next._index.txt +9 -0
  101. package/dist/ui/__next._tree.txt +6 -0
  102. package/dist/ui/_next/static/7vIIuOQPJu8rdb6uAhwtg/_buildManifest.js +11 -0
  103. package/dist/ui/_next/static/7vIIuOQPJu8rdb6uAhwtg/_clientMiddlewareManifest.json +1 -0
  104. package/dist/ui/_next/static/7vIIuOQPJu8rdb6uAhwtg/_ssgManifest.js +1 -0
  105. package/dist/ui/_next/static/chunks/002f5a047b8d07d4.js +1 -0
  106. package/dist/ui/_next/static/chunks/01178e167ba3e5b4.js +1 -0
  107. package/dist/ui/_next/static/chunks/020d675d21be28d4.js +1 -0
  108. package/dist/ui/_next/static/chunks/024926197424b4a5.js +1 -0
  109. package/dist/ui/_next/static/chunks/02c93f6ca211a65d.js +1 -0
  110. package/dist/ui/_next/static/chunks/0364437dee56dc96.js +1 -0
  111. package/dist/ui/_next/static/chunks/03fc6b527b16efdc.js +1 -0
  112. package/dist/ui/_next/static/chunks/04f9a7932751cf2d.js +1 -0
  113. package/dist/ui/_next/static/chunks/0624b8204e5ae457.js +136 -0
  114. package/dist/ui/_next/static/chunks/067d8978cf41b901.js +1 -0
  115. package/dist/ui/_next/static/chunks/06d96238e85cdbb3.js +1 -0
  116. package/dist/ui/_next/static/chunks/071b9575dbdf1dcb.js +1 -0
  117. package/dist/ui/_next/static/chunks/073d5b9dc87ceab0.js +1 -0
  118. package/dist/ui/_next/static/chunks/0876a7111934d6f7.js +1 -0
  119. package/dist/ui/_next/static/chunks/08ffc3bf406c665d.js +1 -0
  120. package/dist/ui/_next/static/chunks/0969e8274c92c2d8.js +1 -0
  121. package/dist/ui/_next/static/chunks/0a3f62f00d7bec78.js +1 -0
  122. package/dist/ui/_next/static/chunks/0b80166023d89049.js +5 -0
  123. package/dist/ui/_next/static/chunks/0c2a941e61c395b6.js +1 -0
  124. package/dist/ui/_next/static/chunks/0c5eac8493334420.js +1 -0
  125. package/dist/ui/_next/static/chunks/0cc61d37b2333469.js +1 -0
  126. package/dist/ui/_next/static/chunks/0d440843348b2871.js +1 -0
  127. package/dist/ui/_next/static/chunks/0da3d15845f17208.js +1 -0
  128. package/dist/ui/_next/static/chunks/0e1982b1a6cbd127.js +53 -0
  129. package/dist/ui/_next/static/chunks/0e81d5bc1c725b75.js +1 -0
  130. package/dist/ui/_next/static/chunks/0e862e51b01e904b.js +63 -0
  131. package/dist/ui/_next/static/chunks/0ed7b6d86744b723.js +1 -0
  132. package/dist/ui/_next/static/chunks/0f0b3025f4e268b1.js +1 -0
  133. package/dist/ui/_next/static/chunks/10a30eb52825da36.js +1 -0
  134. package/dist/ui/_next/static/chunks/10c48da576fd8eef.js +1 -0
  135. package/dist/ui/_next/static/chunks/133e9f1435ca5f45.js +29 -0
  136. package/dist/ui/_next/static/chunks/16f4db3a54f167fd.js +1 -0
  137. package/dist/ui/_next/static/chunks/1988e3ecf5ad06d3.js +1 -0
  138. package/dist/ui/_next/static/chunks/1acfae010fd77014.js +152 -0
  139. package/dist/ui/_next/static/chunks/1ae53c2f1fff8cc2.js +1 -0
  140. package/dist/ui/_next/static/chunks/1af4fbc6c1256fae.js +1 -0
  141. package/dist/ui/_next/static/chunks/1b758c732032b236.js +1 -0
  142. package/dist/ui/_next/static/chunks/1ba26455a9f70c08.js +1 -0
  143. package/dist/ui/_next/static/chunks/1d22644cb4049d6b.css +1 -0
  144. package/dist/ui/_next/static/chunks/1d241f3b57c14cf7.js +1 -0
  145. package/dist/ui/_next/static/chunks/1d640bbe1c2c7869.js +1 -0
  146. package/dist/ui/_next/static/chunks/1da6354c9cb6f0de.js +1 -0
  147. package/dist/ui/_next/static/chunks/1dcd49914412f67b.js +1 -0
  148. package/dist/ui/_next/static/chunks/1e3b3771294825a4.js +1 -0
  149. package/dist/ui/_next/static/chunks/1eaa8ad7eca7f957.js +1 -0
  150. package/dist/ui/_next/static/chunks/1ebc88f60cadb128.js +1 -0
  151. package/dist/ui/_next/static/chunks/1ecb57b258088259.js +1 -0
  152. package/dist/ui/_next/static/chunks/1f5ba6b80fe19200.js +1 -0
  153. package/dist/ui/_next/static/chunks/20a5531534828366.js +1 -0
  154. package/dist/ui/_next/static/chunks/20b511fc299dfe9a.js +1 -0
  155. package/dist/ui/_next/static/chunks/20bff4eb9a0a6872.css +1 -0
  156. package/dist/ui/_next/static/chunks/219b7d9e437c6bd8.js +15 -0
  157. package/dist/ui/_next/static/chunks/21b32f530e0df2c5.js +1 -0
  158. package/dist/ui/_next/static/chunks/21fc6dc60e7647b1.js +1 -0
  159. package/dist/ui/_next/static/chunks/221a27e65aa5fbfd.js +1 -0
  160. package/dist/ui/_next/static/chunks/23a1e247c32bcc61.js +93 -0
  161. package/dist/ui/_next/static/chunks/2473c16c0c2f6b5f.css +2 -0
  162. package/dist/ui/_next/static/chunks/2615c71c0f8fe9bd.js +1 -0
  163. package/dist/ui/_next/static/chunks/263327288d5e2703.js +1 -0
  164. package/dist/ui/_next/static/chunks/2663fbaf43239e38.js +1 -0
  165. package/dist/ui/_next/static/chunks/27332c590d59f4e5.js +1 -0
  166. package/dist/ui/_next/static/chunks/27ca4a4e8191093f.js +1 -0
  167. package/dist/ui/_next/static/chunks/29b7618dcaa8edba.js +1 -0
  168. package/dist/ui/_next/static/chunks/2ba1d2b55b82f4da.js +21 -0
  169. package/dist/ui/_next/static/chunks/2cb23686e72468c8.js +1 -0
  170. package/dist/ui/_next/static/chunks/2d46f05dcbf1cbc2.js +1 -0
  171. package/dist/ui/_next/static/chunks/2d4c0fd06ca34510.js +2 -0
  172. package/dist/ui/_next/static/chunks/2f3d1d07474b8f79.js +1 -0
  173. package/dist/ui/_next/static/chunks/2f85c2849249a0dd.js +1 -0
  174. package/dist/ui/_next/static/chunks/3001d378f166eec9.js +1 -0
  175. package/dist/ui/_next/static/chunks/3018714f3827e360.js +1 -0
  176. package/dist/ui/_next/static/chunks/301cc25e0d489351.js +1 -0
  177. package/dist/ui/_next/static/chunks/305242b22ba8b49b.js +1 -0
  178. package/dist/ui/_next/static/chunks/3067c6e369066bd6.js +1 -0
  179. package/dist/ui/_next/static/chunks/311a77c9d5cb9de9.js +1 -0
  180. package/dist/ui/_next/static/chunks/320c001380e81470.js +1 -0
  181. package/dist/ui/_next/static/chunks/329db6c551df0faf.js +1 -0
  182. package/dist/ui/_next/static/chunks/33da178724072b3d.js +1 -0
  183. package/dist/ui/_next/static/chunks/33e8248c9296537a.js +1 -0
  184. package/dist/ui/_next/static/chunks/35a9992a8958f93b.js +1 -0
  185. package/dist/ui/_next/static/chunks/35bb90cf09892b72.js +1 -0
  186. package/dist/ui/_next/static/chunks/379f91b92366dc15.js +1 -0
  187. package/dist/ui/_next/static/chunks/391f22359769763f.js +1 -0
  188. package/dist/ui/_next/static/chunks/39231cb1044f7823.js +1 -0
  189. package/dist/ui/_next/static/chunks/394e8b7a1c2c58c6.js +1 -0
  190. package/dist/ui/_next/static/chunks/3a2cfdeb5f76ebd2.js +1 -0
  191. package/dist/ui/_next/static/chunks/3a3bd015fd042386.js +1 -0
  192. package/dist/ui/_next/static/chunks/3ad1bee238af9b5a.js +1 -0
  193. package/dist/ui/_next/static/chunks/3b2b2f7a9b7b130d.js +1 -0
  194. package/dist/ui/_next/static/chunks/3b586f80547e3a22.js +1 -0
  195. package/dist/ui/_next/static/chunks/3ca412e72bd3707a.js +1 -0
  196. package/dist/ui/_next/static/chunks/3cbb3bdceb4230af.js +1 -0
  197. package/dist/ui/_next/static/chunks/3ed1465109fecc2d.js +1 -0
  198. package/dist/ui/_next/static/chunks/3fd0801238b3b099.js +1 -0
  199. package/dist/ui/_next/static/chunks/401df66bd5da2115.js +15 -0
  200. package/dist/ui/_next/static/chunks/4211f4efe510f7ac.js +1 -0
  201. package/dist/ui/_next/static/chunks/43085364d0a41d1d.js +1 -0
  202. package/dist/ui/_next/static/chunks/4310c821dbee7a16.js +1 -0
  203. package/dist/ui/_next/static/chunks/46382f31f63e59cf.js +1 -0
  204. package/dist/ui/_next/static/chunks/468836b90ddf24d6.js +1 -0
  205. package/dist/ui/_next/static/chunks/470d091143104517.js +1 -0
  206. package/dist/ui/_next/static/chunks/4712e4f7e6b6ddc1.js +1 -0
  207. package/dist/ui/_next/static/chunks/4899f1e3f21c077e.js +1 -0
  208. package/dist/ui/_next/static/chunks/492ce6930bf61811.js +1 -0
  209. package/dist/ui/_next/static/chunks/494485a20952ffa3.js +1 -0
  210. package/dist/ui/_next/static/chunks/49535db309898f43.js +1 -0
  211. package/dist/ui/_next/static/chunks/4b8d2612d69e2013.js +1 -0
  212. package/dist/ui/_next/static/chunks/4c4a0f67891826a3.js +1 -0
  213. package/dist/ui/_next/static/chunks/4cc11ce32f4453b0.js +1 -0
  214. package/dist/ui/_next/static/chunks/4d03a0bc963fc3d4.js +1 -0
  215. package/dist/ui/_next/static/chunks/4d603a66c067134e.js +1 -0
  216. package/dist/ui/_next/static/chunks/4d8d7e62c2743f71.js +15 -0
  217. package/dist/ui/_next/static/chunks/4da42f10a5460b36.js +1 -0
  218. package/dist/ui/_next/static/chunks/4e832ffb65e75807.js +1 -0
  219. package/dist/ui/_next/static/chunks/4e954e1cec89a9ea.js +1 -0
  220. package/dist/ui/_next/static/chunks/4f2bc7a7a6b05a8b.js +55 -0
  221. package/dist/ui/_next/static/chunks/4f9c934abf34ceb9.js +1 -0
  222. package/dist/ui/_next/static/chunks/4fa248b0d2586928.js +1 -0
  223. package/dist/ui/_next/static/chunks/4fafbac2156844ca.js +1 -0
  224. package/dist/ui/_next/static/chunks/502039e483cc5e48.js +1 -0
  225. package/dist/ui/_next/static/chunks/509c91c38224448a.js +1 -0
  226. package/dist/ui/_next/static/chunks/5159d6f8d4307f36.js +1 -0
  227. package/dist/ui/_next/static/chunks/5179ab56aaaed42d.js +1 -0
  228. package/dist/ui/_next/static/chunks/5269ea07faff562d.js +1 -0
  229. package/dist/ui/_next/static/chunks/529f3f0f7d42444a.js +1 -0
  230. package/dist/ui/_next/static/chunks/5317db6783ee8dc9.js +1 -0
  231. package/dist/ui/_next/static/chunks/53a7b7c0ab020902.js +1 -0
  232. package/dist/ui/_next/static/chunks/544869c670c1dd8e.js +1 -0
  233. package/dist/ui/_next/static/chunks/547c0db6a433370e.js +1 -0
  234. package/dist/ui/_next/static/chunks/54d5670f5fa2abbe.css +1 -0
  235. package/dist/ui/_next/static/chunks/55761e35a8946a1d.js +15 -0
  236. package/dist/ui/_next/static/chunks/558f73c16b7ff14f.js +1 -0
  237. package/dist/ui/_next/static/chunks/55c76f605958d671.js +1 -0
  238. package/dist/ui/_next/static/chunks/55dc6750fb117bf9.js +1 -0
  239. package/dist/ui/_next/static/chunks/584bad9cf2498405.js +1 -0
  240. package/dist/ui/_next/static/chunks/593b85b9abea3ea6.js +1 -0
  241. package/dist/ui/_next/static/chunks/5a79af73c96155d4.js +1 -0
  242. package/dist/ui/_next/static/chunks/5ee54b9b6b400134.js +1 -0
  243. package/dist/ui/_next/static/chunks/5f27ee48dc820109.js +1 -0
  244. package/dist/ui/_next/static/chunks/5ffd50a08d82e2f3.js +1 -0
  245. package/dist/ui/_next/static/chunks/61d65fe807f69413.js +62 -0
  246. package/dist/ui/_next/static/chunks/626a650bcaaecdb8.js +1 -0
  247. package/dist/ui/_next/static/chunks/62baecafed4dbced.js +1 -0
  248. package/dist/ui/_next/static/chunks/634a4b5b6a38ccab.js +1 -0
  249. package/dist/ui/_next/static/chunks/643c359cf3f7364e.js +1 -0
  250. package/dist/ui/_next/static/chunks/649e65f4820a772b.js +1 -0
  251. package/dist/ui/_next/static/chunks/65028938188a230c.js +1 -0
  252. package/dist/ui/_next/static/chunks/65b3658348e8d4fd.js +1 -0
  253. package/dist/ui/_next/static/chunks/65eed220466cbdbc.js +1 -0
  254. package/dist/ui/_next/static/chunks/66714687cfd91953.js +1 -0
  255. package/dist/ui/_next/static/chunks/66ccaa3e69ed7a69.js +1 -0
  256. package/dist/ui/_next/static/chunks/6754600af0c6b3a8.js +1 -0
  257. package/dist/ui/_next/static/chunks/67a1d37727697340.js +1 -0
  258. package/dist/ui/_next/static/chunks/67e965a7f9531cee.js +1 -0
  259. package/dist/ui/_next/static/chunks/6816bf02e4c22a55.js +1 -0
  260. package/dist/ui/_next/static/chunks/68621b90909ec4e6.js +1 -0
  261. package/dist/ui/_next/static/chunks/6929ceb718c6e4c6.js +1 -0
  262. package/dist/ui/_next/static/chunks/69362fff2240a17b.js +1 -0
  263. package/dist/ui/_next/static/chunks/69dab47a307b1a37.js +1 -0
  264. package/dist/ui/_next/static/chunks/6afa71c8b3358dd5.js +1 -0
  265. package/dist/ui/_next/static/chunks/6bf54dc328e667f7.js +1 -0
  266. package/dist/ui/_next/static/chunks/6c44508faf13f6f0.js +1 -0
  267. package/dist/ui/_next/static/chunks/6c9c2b61c905a2de.js +1 -0
  268. package/dist/ui/_next/static/chunks/6cc2e3d7873522b9.js +1 -0
  269. package/dist/ui/_next/static/chunks/6d01e8902e85bfe0.js +1 -0
  270. package/dist/ui/_next/static/chunks/6dc69e4a91f7a353.js +1 -0
  271. package/dist/ui/_next/static/chunks/6e832e016b60ae19.js +1 -0
  272. package/dist/ui/_next/static/chunks/6eab0d8815c18a6d.js +1 -0
  273. package/dist/ui/_next/static/chunks/6f862eb588fa3b7e.js +1 -0
  274. package/dist/ui/_next/static/chunks/6ff7b0a8653036b2.js +1 -0
  275. package/dist/ui/_next/static/chunks/710ce144a9645f3c.js +1 -0
  276. package/dist/ui/_next/static/chunks/71293e300c639b6b.js +1 -0
  277. package/dist/ui/_next/static/chunks/7186d7cce354a012.js +1 -0
  278. package/dist/ui/_next/static/chunks/7215d586009e8158.js +1 -0
  279. package/dist/ui/_next/static/chunks/726fdeaff53a89ac.js +1 -0
  280. package/dist/ui/_next/static/chunks/7322a00d61e7ffad.js +1 -0
  281. package/dist/ui/_next/static/chunks/73c60ee9f233051d.js +1 -0
  282. package/dist/ui/_next/static/chunks/740f5627b5c57baa.js +1 -0
  283. package/dist/ui/_next/static/chunks/74438794a8e9ba80.js +1 -0
  284. package/dist/ui/_next/static/chunks/74ffcd7d13b3fea0.js +1 -0
  285. package/dist/ui/_next/static/chunks/7510496048ab1ad4.js +1 -0
  286. package/dist/ui/_next/static/chunks/7636f89f38cbc3e3.js +1 -0
  287. package/dist/ui/_next/static/chunks/782a93ec4348b666.js +1 -0
  288. package/dist/ui/_next/static/chunks/7850bbac1925646c.js +1 -0
  289. package/dist/ui/_next/static/chunks/790dcc1e825d2504.js +1 -0
  290. package/dist/ui/_next/static/chunks/798597a1c1248d29.js +1 -0
  291. package/dist/ui/_next/static/chunks/7a70641f70a5c72d.js +60 -0
  292. package/dist/ui/_next/static/chunks/7c62789391c35dce.js +1 -0
  293. package/dist/ui/_next/static/chunks/7d533d3f2ab624f2.js +1 -0
  294. package/dist/ui/_next/static/chunks/7d6087c3fabf9ded.js +1 -0
  295. package/dist/ui/_next/static/chunks/7d84c9cb810e6902.js +1 -0
  296. package/dist/ui/_next/static/chunks/7dc4f5ba8c25c409.js +1 -0
  297. package/dist/ui/_next/static/chunks/7e10c0644fbb99d1.js +1 -0
  298. package/dist/ui/_next/static/chunks/7e7aaacf104c17f4.js +1 -0
  299. package/dist/ui/_next/static/chunks/7e92979509de57ed.js +1 -0
  300. package/dist/ui/_next/static/chunks/7f9a52e36f9f001e.js +1 -0
  301. package/dist/ui/_next/static/chunks/7fc4ae2e7cf2e37e.js +1 -0
  302. package/dist/ui/_next/static/chunks/801232fdde8ce252.js +1 -0
  303. package/dist/ui/_next/static/chunks/808ed0f189237446.js +1 -0
  304. package/dist/ui/_next/static/chunks/8199e6b3fa54b2ff.js +1 -0
  305. package/dist/ui/_next/static/chunks/81fa0fa05a94eb02.js +1 -0
  306. package/dist/ui/_next/static/chunks/821b5389566b82d2.js +1 -0
  307. package/dist/ui/_next/static/chunks/82b9e04f88e657df.js +1 -0
  308. package/dist/ui/_next/static/chunks/830c79cc12f2c5a4.js +1 -0
  309. package/dist/ui/_next/static/chunks/8388ae863590404b.js +4 -0
  310. package/dist/ui/_next/static/chunks/83ab70f11a82a8c6.js +1 -0
  311. package/dist/ui/_next/static/chunks/83faf7904ac18d7f.js +1 -0
  312. package/dist/ui/_next/static/chunks/850d850bd879606f.js +1 -0
  313. package/dist/ui/_next/static/chunks/864d4b5cf4ae2226.js +1 -0
  314. package/dist/ui/_next/static/chunks/86d8962196053f53.js +139 -0
  315. package/dist/ui/_next/static/chunks/8723d7000b263475.js +1 -0
  316. package/dist/ui/_next/static/chunks/87e5597a4336e2c1.js +1 -0
  317. package/dist/ui/_next/static/chunks/899fe56c4c707c65.js +1 -0
  318. package/dist/ui/_next/static/chunks/8bda52f55493ae9b.js +1 -0
  319. package/dist/ui/_next/static/chunks/8ce5668c3da0679a.js +1 -0
  320. package/dist/ui/_next/static/chunks/8d1c22aafb4783c5.js +1 -0
  321. package/dist/ui/_next/static/chunks/8deda0adfe811d18.js +1 -0
  322. package/dist/ui/_next/static/chunks/8eed597098a27801.js +1 -0
  323. package/dist/ui/_next/static/chunks/8ff7a1947b8d114b.js +1 -0
  324. package/dist/ui/_next/static/chunks/90367a2ee1e720b2.js +1 -0
  325. package/dist/ui/_next/static/chunks/9097640e1931c0de.js +1 -0
  326. package/dist/ui/_next/static/chunks/912457473a4c91c3.js +1 -0
  327. package/dist/ui/_next/static/chunks/91f7dd388c6b88c6.js +1 -0
  328. package/dist/ui/_next/static/chunks/932d4334e5f98b7c.js +1 -0
  329. package/dist/ui/_next/static/chunks/94b1efc14d44707b.js +1 -0
  330. package/dist/ui/_next/static/chunks/956107bc3ba52911.js +1 -0
  331. package/dist/ui/_next/static/chunks/962e5cad8ea716fc.js +36 -0
  332. package/dist/ui/_next/static/chunks/96acf903dff8ecf7.js +1 -0
  333. package/dist/ui/_next/static/chunks/96b274c82c194b4f.js +1 -0
  334. package/dist/ui/_next/static/chunks/96b3c1b1afe3201d.js +1 -0
  335. package/dist/ui/_next/static/chunks/9880c26551206d33.js +1 -0
  336. package/dist/ui/_next/static/chunks/98ea228d01556617.js +1 -0
  337. package/dist/ui/_next/static/chunks/9951c25a8b05148f.js +1 -0
  338. package/dist/ui/_next/static/chunks/9b10895d33be5f6e.js +1 -0
  339. package/dist/ui/_next/static/chunks/9b50a76ddbe4934d.js +1 -0
  340. package/dist/ui/_next/static/chunks/9bbb1c0146042008.js +1 -0
  341. package/dist/ui/_next/static/chunks/9ccab70823e99451.js +1 -0
  342. package/dist/ui/_next/static/chunks/9cd7bcb29e0b3418.js +24 -0
  343. package/dist/ui/_next/static/chunks/9d06bd5d701ace73.js +1 -0
  344. package/dist/ui/_next/static/chunks/9e5d9fc30c12fbdd.js +1 -0
  345. package/dist/ui/_next/static/chunks/9ec3bc5544bcc15a.js +1 -0
  346. package/dist/ui/_next/static/chunks/9f47133184a7455a.js +1 -0
  347. package/dist/ui/_next/static/chunks/a002d3850b7c7c59.js +1 -0
  348. package/dist/ui/_next/static/chunks/a0bc5573cadd1377.js +1 -0
  349. package/dist/ui/_next/static/chunks/a1d3de9e7615662e.js +160 -0
  350. package/dist/ui/_next/static/chunks/a2ce60768a8373e7.js +1 -0
  351. package/dist/ui/_next/static/chunks/a305087b1a55b367.js +1 -0
  352. package/dist/ui/_next/static/chunks/a41df0d443f66c68.js +1 -0
  353. package/dist/ui/_next/static/chunks/a49d2e9f31886b5e.js +1 -0
  354. package/dist/ui/_next/static/chunks/a50922e0883f65cd.js +1 -0
  355. package/dist/ui/_next/static/chunks/a60e84ee8b6c5ffc.js +43 -0
  356. package/dist/ui/_next/static/chunks/a6dad97d9634a72d.js +1 -0
  357. package/dist/ui/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  358. package/dist/ui/_next/static/chunks/a7c40c289b5e2384.js +1 -0
  359. package/dist/ui/_next/static/chunks/a7fdfeea5fd894c1.js +59 -0
  360. package/dist/ui/_next/static/chunks/a81381241f4f484c.js +1 -0
  361. package/dist/ui/_next/static/chunks/a8a3989305bcc136.js +215 -0
  362. package/dist/ui/_next/static/chunks/a8cf26088e63128c.js +1 -0
  363. package/dist/ui/_next/static/chunks/aac4ca816d9ccdb6.js +1 -0
  364. package/dist/ui/_next/static/chunks/ab432bc28a971c8f.js +1 -0
  365. package/dist/ui/_next/static/chunks/abccff1b09b6effa.js +1 -0
  366. package/dist/ui/_next/static/chunks/ac8a8986f09ec520.js +1 -0
  367. package/dist/ui/_next/static/chunks/accbf306b5ddb732.js +1 -0
  368. package/dist/ui/_next/static/chunks/af7b09aba1d477ff.js +1 -0
  369. package/dist/ui/_next/static/chunks/af8114430894d79e.js +1 -0
  370. package/dist/ui/_next/static/chunks/afe2ff5d0727a240.js +1 -0
  371. package/dist/ui/_next/static/chunks/b096fa008120f0ae.js +1 -0
  372. package/dist/ui/_next/static/chunks/b0bc568eaff56dad.js +1 -0
  373. package/dist/ui/_next/static/chunks/b225dddc0852f85c.js +215 -0
  374. package/dist/ui/_next/static/chunks/b2342c5099957971.js +1 -0
  375. package/dist/ui/_next/static/chunks/b2d8c64d7d6a06b7.js +1 -0
  376. package/dist/ui/_next/static/chunks/b331c855cfc8fd57.js +1 -0
  377. package/dist/ui/_next/static/chunks/b356ee8615740392.js +1 -0
  378. package/dist/ui/_next/static/chunks/b3beaac9b7957d3f.js +1 -0
  379. package/dist/ui/_next/static/chunks/b4e7d4a109c4c080.js +1 -0
  380. package/dist/ui/_next/static/chunks/b5010f2ea9df9d00.js +77 -0
  381. package/dist/ui/_next/static/chunks/b5f9d21bd1b51a48.js +1 -0
  382. package/dist/ui/_next/static/chunks/b6a16eb77c5c9831.js +1 -0
  383. package/dist/ui/_next/static/chunks/b6a8e7c2216683ca.js +262 -0
  384. package/dist/ui/_next/static/chunks/b873c4d327a450e0.js +1 -0
  385. package/dist/ui/_next/static/chunks/b8aec8caed569fd2.js +24 -0
  386. package/dist/ui/_next/static/chunks/b8e7601e2379fd74.js +1 -0
  387. package/dist/ui/_next/static/chunks/ba3d03bf2f33f2a3.js +1 -0
  388. package/dist/ui/_next/static/chunks/ba698805336b2cb2.js +1 -0
  389. package/dist/ui/_next/static/chunks/bc48735eee7d1345.js +1 -0
  390. package/dist/ui/_next/static/chunks/bcb48aab1bdae96a.js +1 -0
  391. package/dist/ui/_next/static/chunks/bde2ca9d150d96ff.js +1 -0
  392. package/dist/ui/_next/static/chunks/be4af851547fc916.js +1 -0
  393. package/dist/ui/_next/static/chunks/be70ba8c4ba5cdb6.js +1 -0
  394. package/dist/ui/_next/static/chunks/be87578ee895734b.js +1 -0
  395. package/dist/ui/_next/static/chunks/c0aeb40fcca7d006.js +1 -0
  396. package/dist/ui/_next/static/chunks/c32156843c32ebca.js +1 -0
  397. package/dist/ui/_next/static/chunks/c57a3e045f3722c1.js +1 -0
  398. package/dist/ui/_next/static/chunks/c5add23cde4a234a.js +1 -0
  399. package/dist/ui/_next/static/chunks/c60897f3554a9388.js +1 -0
  400. package/dist/ui/_next/static/chunks/c648a36722afd12a.js +1 -0
  401. package/dist/ui/_next/static/chunks/c652f05e0a0d7b81.js +1 -0
  402. package/dist/ui/_next/static/chunks/c678d9303ed453b4.js +1 -0
  403. package/dist/ui/_next/static/chunks/c681430c24597d06.js +1 -0
  404. package/dist/ui/_next/static/chunks/c890870fb65940bc.js +1 -0
  405. package/dist/ui/_next/static/chunks/c94c394aeec71e21.js +1 -0
  406. package/dist/ui/_next/static/chunks/ca1eb1e2978389e4.js +1 -0
  407. package/dist/ui/_next/static/chunks/ca3512025a981c82.js +1 -0
  408. package/dist/ui/_next/static/chunks/ca6db0d999bad46b.js +1 -0
  409. package/dist/ui/_next/static/chunks/ca926babdf75597c.js +1 -0
  410. package/dist/ui/_next/static/chunks/cb0877764d4a31f2.js +1 -0
  411. package/dist/ui/_next/static/chunks/cb15e0c2ff49cf52.js +1 -0
  412. package/dist/ui/_next/static/chunks/cb1ae84204260ecd.js +1 -0
  413. package/dist/ui/_next/static/chunks/cb2ef733c53d80f7.js +1 -0
  414. package/dist/ui/_next/static/chunks/cbaa87ba8930fb75.js +1 -0
  415. package/dist/ui/_next/static/chunks/cbd29ba61906e19f.js +1 -0
  416. package/dist/ui/_next/static/chunks/ccf1e618faea3d02.js +148 -0
  417. package/dist/ui/_next/static/chunks/cd91712ea04f43ba.js +13 -0
  418. package/dist/ui/_next/static/chunks/cdd85dc039d450f3.js +1 -0
  419. package/dist/ui/_next/static/chunks/ce663833f73b1ec5.js +1 -0
  420. package/dist/ui/_next/static/chunks/ceda8fcac21d8e70.js +1 -0
  421. package/dist/ui/_next/static/chunks/cf565875b66f8cad.js +1 -0
  422. package/dist/ui/_next/static/chunks/d127ded39a594c84.js +1 -0
  423. package/dist/ui/_next/static/chunks/d34124988f5b8f6d.js +1 -0
  424. package/dist/ui/_next/static/chunks/d36807add3e11d59.js +60 -0
  425. package/dist/ui/_next/static/chunks/d3f2e4603faebed8.js +1 -0
  426. package/dist/ui/_next/static/chunks/d414302c23047b9b.js +1 -0
  427. package/dist/ui/_next/static/chunks/d42adc0237103e65.js +1 -0
  428. package/dist/ui/_next/static/chunks/d4a06b205f0a641b.js +1 -0
  429. package/dist/ui/_next/static/chunks/d4e5289ace3acef0.js +1 -0
  430. package/dist/ui/_next/static/chunks/d53b4725d3328076.js +1 -0
  431. package/dist/ui/_next/static/chunks/d5bd04634f922925.js +1 -0
  432. package/dist/ui/_next/static/chunks/d642c9229900dc48.js +1 -0
  433. package/dist/ui/_next/static/chunks/d6651bb78c09d144.js +5 -0
  434. package/dist/ui/_next/static/chunks/d7276c56aa62ceed.js +1 -0
  435. package/dist/ui/_next/static/chunks/d85cd9cda46f2d1b.js +1 -0
  436. package/dist/ui/_next/static/chunks/d8978f4b468bbad4.js +1 -0
  437. package/dist/ui/_next/static/chunks/d8fb9668a83c0603.js +1 -0
  438. package/dist/ui/_next/static/chunks/d95c62472fc41baf.js +1 -0
  439. package/dist/ui/_next/static/chunks/da13170b983f7ebf.js +1 -0
  440. package/dist/ui/_next/static/chunks/dae86e12c7741e6c.js +19 -0
  441. package/dist/ui/_next/static/chunks/db44023a744297d1.js +1 -0
  442. package/dist/ui/_next/static/chunks/dbe7840308be36b8.js +1 -0
  443. package/dist/ui/_next/static/chunks/dc0a4df8f7080b29.js +1 -0
  444. package/dist/ui/_next/static/chunks/dc4a6f59be156511.js +1 -0
  445. package/dist/ui/_next/static/chunks/dcda5e7b57ed88e0.js +1 -0
  446. package/dist/ui/_next/static/chunks/de9ff8c97f75b947.js +1 -0
  447. package/dist/ui/_next/static/chunks/df6abcdb3eb0b236.js +1 -0
  448. package/dist/ui/_next/static/chunks/df8a0933ca385a63.js +1 -0
  449. package/dist/ui/_next/static/chunks/dff6434c44c2dfaa.js +1 -0
  450. package/dist/ui/_next/static/chunks/e037ec5e62b2bdc3.js +1 -0
  451. package/dist/ui/_next/static/chunks/e212cf1f5a503899.js +1 -0
  452. package/dist/ui/_next/static/chunks/e2bfdac0a2305cc1.js +1 -0
  453. package/dist/ui/_next/static/chunks/e2dce648399ad4d4.js +1 -0
  454. package/dist/ui/_next/static/chunks/e318291bb8d74aee.js +1 -0
  455. package/dist/ui/_next/static/chunks/e33e40c2e7ab7629.js +1 -0
  456. package/dist/ui/_next/static/chunks/e410dfbcccddc478.js +1 -0
  457. package/dist/ui/_next/static/chunks/e411d58b52ab342b.js +1 -0
  458. package/dist/ui/_next/static/chunks/e57f7ffd0803a922.js +117 -0
  459. package/dist/ui/_next/static/chunks/e6b56ceb762e84c4.js +1 -0
  460. package/dist/ui/_next/static/chunks/e6d9a6ca68017eef.js +1 -0
  461. package/dist/ui/_next/static/chunks/e6ec2663605cf5a7.js +29 -0
  462. package/dist/ui/_next/static/chunks/e834330589be0639.js +1 -0
  463. package/dist/ui/_next/static/chunks/e8f662ba8bc76802.js +1 -0
  464. package/dist/ui/_next/static/chunks/e9e8e72d7ff45812.js +1 -0
  465. package/dist/ui/_next/static/chunks/eadd25eb66104a63.js +1 -0
  466. package/dist/ui/_next/static/chunks/ec3a7a7f48a8aca9.js +1 -0
  467. package/dist/ui/_next/static/chunks/ed62e349fb1ce14c.js +1 -0
  468. package/dist/ui/_next/static/chunks/ed6caa113f5769a5.js +1 -0
  469. package/dist/ui/_next/static/chunks/f02ac565bb5bc450.js +1 -0
  470. package/dist/ui/_next/static/chunks/f1a7a173e3da4ff4.js +1 -0
  471. package/dist/ui/_next/static/chunks/f268093817d3b260.js +1 -0
  472. package/dist/ui/_next/static/chunks/f6f811ccfe79e963.js +1 -0
  473. package/dist/ui/_next/static/chunks/f8955634331fd956.js +1 -0
  474. package/dist/ui/_next/static/chunks/f8c965a996875e30.js +56 -0
  475. package/dist/ui/_next/static/chunks/f9bb8411d37b06d7.js +1 -0
  476. package/dist/ui/_next/static/chunks/f9d4f77d8c130497.js +1 -0
  477. package/dist/ui/_next/static/chunks/fba113a516eb485f.js +1 -0
  478. package/dist/ui/_next/static/chunks/fc069e49a569d83c.js +1 -0
  479. package/dist/ui/_next/static/chunks/fc245016ffebdde3.js +1 -0
  480. package/dist/ui/_next/static/chunks/fc2d01d74dcf3921.js +1 -0
  481. package/dist/ui/_next/static/chunks/fe2ad0e00041a87d.js +1 -0
  482. package/dist/ui/_next/static/chunks/fe571740188dea3a.js +1 -0
  483. package/dist/ui/_next/static/chunks/turbopack-a5ce95b200d58f7a.js +4 -0
  484. package/dist/ui/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  485. package/dist/ui/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  486. package/dist/ui/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  487. package/dist/ui/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  488. package/dist/ui/_next/static/media/KaTeX_AMS-Regular.892f691b.ttf +0 -0
  489. package/dist/ui/_next/static/media/KaTeX_AMS-Regular.c30af439.woff2 +0 -0
  490. package/dist/ui/_next/static/media/KaTeX_AMS-Regular.e6a3cada.woff +0 -0
  491. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Bold.2f97783e.woff +0 -0
  492. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Bold.a36b8125.ttf +0 -0
  493. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Bold.db991531.woff2 +0 -0
  494. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Regular.2b13f013.woff +0 -0
  495. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Regular.7c50032c.ttf +0 -0
  496. package/dist/ui/_next/static/media/KaTeX_Caligraphic-Regular.c20eee08.woff2 +0 -0
  497. package/dist/ui/_next/static/media/KaTeX_Fraktur-Bold.5fa2f5e4.woff +0 -0
  498. package/dist/ui/_next/static/media/KaTeX_Fraktur-Bold.d514bd28.woff2 +0 -0
  499. package/dist/ui/_next/static/media/KaTeX_Fraktur-Bold.e311399d.ttf +0 -0
  500. package/dist/ui/_next/static/media/KaTeX_Fraktur-Regular.18139813.woff +0 -0
  501. package/dist/ui/_next/static/media/KaTeX_Fraktur-Regular.2a73476d.ttf +0 -0
  502. package/dist/ui/_next/static/media/KaTeX_Fraktur-Regular.5d62e468.woff2 +0 -0
  503. package/dist/ui/_next/static/media/KaTeX_Main-Bold.6d137c77.ttf +0 -0
  504. package/dist/ui/_next/static/media/KaTeX_Main-Bold.c24b5ba7.woff +0 -0
  505. package/dist/ui/_next/static/media/KaTeX_Main-Bold.f4e2828d.woff2 +0 -0
  506. package/dist/ui/_next/static/media/KaTeX_Main-BoldItalic.079b33ae.woff +0 -0
  507. package/dist/ui/_next/static/media/KaTeX_Main-BoldItalic.c003d3ec.ttf +0 -0
  508. package/dist/ui/_next/static/media/KaTeX_Main-BoldItalic.f1884480.woff2 +0 -0
  509. package/dist/ui/_next/static/media/KaTeX_Main-Italic.26a3619b.woff +0 -0
  510. package/dist/ui/_next/static/media/KaTeX_Main-Italic.61da3e93.ttf +0 -0
  511. package/dist/ui/_next/static/media/KaTeX_Main-Italic.a3746929.woff2 +0 -0
  512. package/dist/ui/_next/static/media/KaTeX_Main-Regular.12644167.woff2 +0 -0
  513. package/dist/ui/_next/static/media/KaTeX_Main-Regular.876b86ad.ttf +0 -0
  514. package/dist/ui/_next/static/media/KaTeX_Main-Regular.d511f158.woff +0 -0
  515. package/dist/ui/_next/static/media/KaTeX_Math-BoldItalic.5c6a6a93.woff2 +0 -0
  516. package/dist/ui/_next/static/media/KaTeX_Math-BoldItalic.ad4dffd5.woff +0 -0
  517. package/dist/ui/_next/static/media/KaTeX_Math-BoldItalic.e73b3bf0.ttf +0 -0
  518. package/dist/ui/_next/static/media/KaTeX_Math-Italic.03974bc4.ttf +0 -0
  519. package/dist/ui/_next/static/media/KaTeX_Math-Italic.1cd2c488.woff +0 -0
  520. package/dist/ui/_next/static/media/KaTeX_Math-Italic.d8564edb.woff2 +0 -0
  521. package/dist/ui/_next/static/media/KaTeX_SansSerif-Bold.a03f9428.woff2 +0 -0
  522. package/dist/ui/_next/static/media/KaTeX_SansSerif-Bold.d4608ed5.ttf +0 -0
  523. package/dist/ui/_next/static/media/KaTeX_SansSerif-Bold.ff51ef5c.woff +0 -0
  524. package/dist/ui/_next/static/media/KaTeX_SansSerif-Italic.8ed740d6.woff +0 -0
  525. package/dist/ui/_next/static/media/KaTeX_SansSerif-Italic.9245afda.woff2 +0 -0
  526. package/dist/ui/_next/static/media/KaTeX_SansSerif-Italic.c0b22b1e.ttf +0 -0
  527. package/dist/ui/_next/static/media/KaTeX_SansSerif-Regular.128c9bc2.woff2 +0 -0
  528. package/dist/ui/_next/static/media/KaTeX_SansSerif-Regular.156dbd4e.ttf +0 -0
  529. package/dist/ui/_next/static/media/KaTeX_SansSerif-Regular.ee7b0a16.woff +0 -0
  530. package/dist/ui/_next/static/media/KaTeX_Script-Regular.00d9a561.ttf +0 -0
  531. package/dist/ui/_next/static/media/KaTeX_Script-Regular.186c7155.woff2 +0 -0
  532. package/dist/ui/_next/static/media/KaTeX_Script-Regular.afc2fd5a.woff +0 -0
  533. package/dist/ui/_next/static/media/KaTeX_Size1-Regular.4450ef36.woff2 +0 -0
  534. package/dist/ui/_next/static/media/KaTeX_Size1-Regular.9aaff96b.ttf +0 -0
  535. package/dist/ui/_next/static/media/KaTeX_Size1-Regular.e5bf4c74.woff +0 -0
  536. package/dist/ui/_next/static/media/KaTeX_Size2-Regular.6a97527b.woff2 +0 -0
  537. package/dist/ui/_next/static/media/KaTeX_Size2-Regular.8fbd32af.woff +0 -0
  538. package/dist/ui/_next/static/media/KaTeX_Size2-Regular.f11810ed.ttf +0 -0
  539. package/dist/ui/_next/static/media/KaTeX_Size3-Regular.45ae8eba.woff +0 -0
  540. package/dist/ui/_next/static/media/KaTeX_Size3-Regular.54b7ce9d.woff2 +0 -0
  541. package/dist/ui/_next/static/media/KaTeX_Size3-Regular.9812ade2.ttf +0 -0
  542. package/dist/ui/_next/static/media/KaTeX_Size4-Regular.44a4d487.ttf +0 -0
  543. package/dist/ui/_next/static/media/KaTeX_Size4-Regular.927fc5b9.woff2 +0 -0
  544. package/dist/ui/_next/static/media/KaTeX_Size4-Regular.b211e3d3.woff +0 -0
  545. package/dist/ui/_next/static/media/KaTeX_Typewriter-Regular.68b6c3a9.woff +0 -0
  546. package/dist/ui/_next/static/media/KaTeX_Typewriter-Regular.a1a7ff52.ttf +0 -0
  547. package/dist/ui/_next/static/media/KaTeX_Typewriter-Regular.ff99d643.woff2 +0 -0
  548. package/dist/ui/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  549. package/dist/ui/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  550. package/dist/ui/_next/static/media/favicon.0b3bf435.ico +0 -0
  551. package/dist/ui/_not-found/__next._full.txt +18 -0
  552. package/dist/ui/_not-found/__next._head.txt +6 -0
  553. package/dist/ui/_not-found/__next._index.txt +9 -0
  554. package/dist/ui/_not-found/__next._not-found.__PAGE__.txt +5 -0
  555. package/dist/ui/_not-found/__next._not-found.txt +4 -0
  556. package/dist/ui/_not-found/__next._tree.txt +3 -0
  557. package/dist/ui/_not-found/index.html +1 -0
  558. package/dist/ui/_not-found/index.txt +18 -0
  559. package/dist/ui/favicon.ico +0 -0
  560. package/dist/ui/file.svg +1 -0
  561. package/dist/ui/globe.svg +1 -0
  562. package/dist/ui/index.html +1 -0
  563. package/dist/ui/index.txt +25 -0
  564. package/dist/ui/next.svg +1 -0
  565. package/dist/ui/vercel.svg +1 -0
  566. package/dist/ui/window.svg +1 -0
  567. package/dist/utils/chat-model.d.ts +11 -0
  568. package/dist/utils/chat-model.js +37 -0
  569. package/dist/utils/diff-parser.d.ts +20 -0
  570. package/dist/utils/diff-parser.js +100 -0
  571. package/dist/utils/proxy-manager.d.ts +18 -0
  572. package/dist/utils/proxy-manager.js +42 -0
  573. package/dist/utils/remote-proxy.d.ts +40 -0
  574. package/dist/utils/remote-proxy.js +145 -0
  575. package/dist/utils/worktree-paths.d.ts +13 -0
  576. package/dist/utils/worktree-paths.js +64 -0
  577. package/dist/virtual-ws-adapter.d.ts +26 -0
  578. package/dist/virtual-ws-adapter.js +54 -0
  579. package/package.json +19 -0
@@ -0,0 +1,604 @@
1
+ import fp from "fastify-plugin";
2
+ import { randomUUID } from "crypto";
3
+ import WebSocket from "ws";
4
+ import { VirtualWsAdapter } from "../virtual-ws-adapter.js";
5
+ import "../server-types.js";
6
+ /**
7
+ * Verify a Clerk session token for WebSocket connections.
8
+ * Returns the userId if valid, null otherwise.
9
+ */
10
+ async function verifyWsToken(token) {
11
+ try {
12
+ const { verifyToken } = await import("@clerk/backend");
13
+ const payload = await verifyToken(token, {
14
+ secretKey: process.env.CLERK_SECRET_KEY,
15
+ });
16
+ return payload.sub ?? null;
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ // ---- Remote reconnection constants ----
23
+ const REMOTE_RECONNECT_MAX_ATTEMPTS = 10;
24
+ const REMOTE_RECONNECT_BASE_DELAY_MS = 1000;
25
+ const REMOTE_RECONNECT_MAX_DELAY_MS = 30000;
26
+ /** How long a connection must stay open before we consider it "stable" and reset the attempt counter. */
27
+ const REMOTE_RECONNECT_STABILITY_MS = 10000;
28
+ /** Build a WebSocket URL for a remote agent session. */
29
+ function buildRemoteWsUrl(remoteInfo) {
30
+ const cleanRemoteUrl = remoteInfo.remoteUrl.replace(/\/+$/, "");
31
+ const wsProtocol = cleanRemoteUrl.startsWith("https") ? "wss" : "ws";
32
+ const wsUrl = cleanRemoteUrl.replace(/^https?/, wsProtocol);
33
+ return `${wsUrl}/api/agent-sessions/${remoteInfo.remoteSessionId}/stream?apiKey=${encodeURIComponent(remoteInfo.remoteApiKey)}`;
34
+ }
35
+ /** Try to parse a raw WS message string, returning undefined on failure. */
36
+ function tryParseWsMessage(raw) {
37
+ try {
38
+ return JSON.parse(raw);
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ /**
45
+ * Create a persistent WebSocket to the remote server and wire up message
46
+ * handling (sync or live mode), reconnection on close, and status broadcasts.
47
+ *
48
+ * Called both on first frontend connection and on automatic reconnection.
49
+ */
50
+ function connectPersistentRemoteWs(sessionId, remoteInfo, cache, wsOptions, reverseConnectManager) {
51
+ const hasCachedData = cache.hasData(sessionId);
52
+ const useVirtual = reverseConnectManager && reverseConnectManager.isConnected(remoteInfo.remoteServerId);
53
+ console.log(`[AgentWS] Opening persistent remote WS for ${sessionId} (cached=${hasCachedData}, virtual=${!!useVirtual})`);
54
+ let remoteWs;
55
+ if (useVirtual) {
56
+ const channelId = randomUUID();
57
+ const wsPath = `/api/agent-sessions/${remoteInfo.remoteSessionId}/stream`;
58
+ const wsQuery = `apiKey=${encodeURIComponent(remoteInfo.remoteApiKey)}`;
59
+ const adapter = new VirtualWsAdapter((data) => reverseConnectManager.sendChannelData(remoteInfo.remoteServerId, channelId, data), () => reverseConnectManager.closeChannel(remoteInfo.remoteServerId, channelId));
60
+ reverseConnectManager.setChannelAdapter(remoteInfo.remoteServerId, channelId, adapter);
61
+ reverseConnectManager.openVirtualChannel(remoteInfo.remoteServerId, channelId, wsPath, wsQuery);
62
+ remoteWs = adapter;
63
+ // Simulate open event on next tick
64
+ setTimeout(() => adapter.emit("open"), 0);
65
+ }
66
+ else {
67
+ if (!remoteInfo.remoteUrl) {
68
+ // No direct URL available (reverse-connect only) — cannot fall back to direct WS
69
+ console.log(`[AgentWS] No direct URL for ${sessionId}, skipping reconnect (reverse-connect only)`);
70
+ cache.setReconnecting(sessionId, false);
71
+ cache.broadcast(sessionId, JSON.stringify({ remoteStatus: "disconnected" }));
72
+ return;
73
+ }
74
+ let remoteWsUrl;
75
+ try {
76
+ remoteWsUrl = buildRemoteWsUrl(remoteInfo);
77
+ remoteWs = new WebSocket(remoteWsUrl, undefined, wsOptions);
78
+ }
79
+ catch (err) {
80
+ console.error(`[AgentWS] Failed to open remote WS for ${sessionId}:`, err);
81
+ cache.setReconnecting(sessionId, false);
82
+ cache.broadcast(sessionId, JSON.stringify({ remoteStatus: "disconnected" }));
83
+ return;
84
+ }
85
+ }
86
+ cache.setRemoteWs(sessionId, remoteWs);
87
+ cache.setReconnecting(sessionId, false);
88
+ cache.clearReconnectTimer(sessionId);
89
+ /** Live-mode message handler — shared by both first-connect and post-sync paths. */
90
+ const handleLiveMessage = (data) => {
91
+ const raw = data.toString();
92
+ const parsed = tryParseWsMessage(raw);
93
+ if (!parsed)
94
+ return;
95
+ if ("JsonPatch" in parsed) {
96
+ cache.appendMessage(sessionId, raw, true);
97
+ cache.broadcast(sessionId, raw);
98
+ }
99
+ else if ("finished" in parsed) {
100
+ cache.setFinished(sessionId);
101
+ cache.broadcast(sessionId, raw);
102
+ }
103
+ else if ("taskCompleted" in parsed) {
104
+ cache.appendMessage(sessionId, raw, false);
105
+ cache.broadcast(sessionId, raw);
106
+ }
107
+ else if ("error" in parsed) {
108
+ cache.appendMessage(sessionId, raw, false);
109
+ cache.broadcast(sessionId, raw);
110
+ // If session not found on remote, stop reconnecting
111
+ if (parsed.error === "Session not found") {
112
+ cache.setFinished(sessionId);
113
+ }
114
+ }
115
+ else if ("Ready" in parsed) {
116
+ cache.broadcast(sessionId, raw);
117
+ }
118
+ };
119
+ remoteWs.on("open", () => {
120
+ console.log(`[AgentWS] Persistent remote WS connected for ${sessionId} (sync=${hasCachedData})`);
121
+ cache.broadcast(sessionId, JSON.stringify({ remoteStatus: "connected" }));
122
+ // Only reset the reconnect attempt counter after the connection has been
123
+ // stable for a minimum duration. This prevents an infinite ~1s reconnect
124
+ // loop when connections succeed but immediately close (e.g. remote closes
125
+ // after sync, idle timeout, etc.).
126
+ const stabilityTimer = setTimeout(() => {
127
+ cache.resetReconnectAttempt(sessionId);
128
+ }, REMOTE_RECONNECT_STABILITY_MS);
129
+ remoteWs.once("close", () => clearTimeout(stabilityTimer));
130
+ });
131
+ // Ping/pong keepalive to prevent idle disconnections (e.g. Cloudflare 100s timeout)
132
+ const pingInterval = setInterval(() => {
133
+ if (remoteWs.readyState === WebSocket.OPEN) {
134
+ remoteWs.ping();
135
+ }
136
+ }, 30000);
137
+ if (!hasCachedData) {
138
+ // First connection ever — stream directly in live mode
139
+ remoteWs.on("message", handleLiveMessage);
140
+ }
141
+ else {
142
+ // Has cached data but persistent WS died — need sync first
143
+ const replayBuffer = [];
144
+ let syncing = true;
145
+ remoteWs.on("message", (data) => {
146
+ const raw = data.toString();
147
+ const parsed = tryParseWsMessage(raw);
148
+ if (!parsed)
149
+ return;
150
+ if (!syncing) {
151
+ handleLiveMessage(data);
152
+ return;
153
+ }
154
+ if ("Ready" in parsed) {
155
+ // Remote finished replay — reconcile
156
+ syncing = false;
157
+ const currentEntry = cache.get(sessionId);
158
+ const cachedMsgCount = currentEntry.messages.length;
159
+ if (replayBuffer.length > cachedMsgCount) {
160
+ // Remote has newer data — send delta + update cache
161
+ const delta = replayBuffer.slice(cachedMsgCount);
162
+ console.log(`[AgentWS] Sync delta: ${delta.length} new msgs for ${sessionId}`);
163
+ for (const msg of delta) {
164
+ const p = tryParseWsMessage(msg);
165
+ cache.appendMessage(sessionId, msg, !!(p && "JsonPatch" in p));
166
+ cache.broadcast(sessionId, msg);
167
+ }
168
+ }
169
+ else if (replayBuffer.length < cachedMsgCount) {
170
+ // Cache is stale (session was restarted remotely) — full replace
171
+ console.log(`[AgentWS] Sync stale cache for ${sessionId}: remote=${replayBuffer.length}, cached=${cachedMsgCount}`);
172
+ let newPatchCount = 0;
173
+ for (const msg of replayBuffer) {
174
+ const p = tryParseWsMessage(msg);
175
+ if (p && "JsonPatch" in p)
176
+ newPatchCount++;
177
+ }
178
+ cache.replaceAll(sessionId, [...replayBuffer], newPatchCount);
179
+ // Tell frontends to clear and re-render
180
+ const clearPatch = {
181
+ JsonPatch: [{
182
+ op: "replace",
183
+ path: "/entries",
184
+ value: { type: "ENTRY", content: { type: "system", content: "__CLEAR_ALL__", timestamp: Date.now() } },
185
+ }],
186
+ };
187
+ cache.broadcast(sessionId, JSON.stringify(clearPatch));
188
+ for (const msg of replayBuffer) {
189
+ cache.broadcast(sessionId, msg);
190
+ }
191
+ cache.broadcast(sessionId, JSON.stringify({ Ready: true }));
192
+ }
193
+ // else equal — cache is current, nothing to send
194
+ // Switch to live-mode handler
195
+ remoteWs.removeAllListeners("message");
196
+ remoteWs.on("message", handleLiveMessage);
197
+ return;
198
+ }
199
+ // Buffer history messages during sync
200
+ if ("JsonPatch" in parsed || "taskCompleted" in parsed || "error" in parsed) {
201
+ replayBuffer.push(raw);
202
+ }
203
+ if ("finished" in parsed) {
204
+ cache.setFinished(sessionId);
205
+ }
206
+ });
207
+ }
208
+ // ---- Lifecycle handlers ----
209
+ remoteWs.on("error", (error) => {
210
+ console.error(`[AgentWS] Persistent remote WS error for ${sessionId}:`, error);
211
+ clearInterval(pingInterval);
212
+ // "close" event fires next and handles reconnection
213
+ });
214
+ remoteWs.on("close", () => {
215
+ console.log(`[AgentWS] Persistent remote WS closed for ${sessionId}`);
216
+ clearInterval(pingInterval);
217
+ cache.setRemoteWs(sessionId, null);
218
+ // Don't reconnect if session is finished or cache entry was deleted
219
+ const entry = cache.get(sessionId);
220
+ if (!entry || entry.finished)
221
+ return;
222
+ scheduleRemoteReconnect(sessionId, remoteInfo, cache, wsOptions, reverseConnectManager);
223
+ });
224
+ }
225
+ /**
226
+ * Schedule a reconnection attempt with exponential backoff.
227
+ * Broadcasts `remoteStatus` updates to all subscribed frontends.
228
+ */
229
+ function scheduleRemoteReconnect(sessionId, remoteInfo, cache, wsOptions, reverseConnectManager) {
230
+ const entry = cache.get(sessionId);
231
+ if (!entry || entry.finished)
232
+ return;
233
+ const attempt = cache.getReconnectAttempt(sessionId);
234
+ if (attempt >= REMOTE_RECONNECT_MAX_ATTEMPTS) {
235
+ console.log(`[AgentWS] Max reconnect attempts (${REMOTE_RECONNECT_MAX_ATTEMPTS}) reached for ${sessionId}`);
236
+ cache.setReconnecting(sessionId, false);
237
+ cache.broadcast(sessionId, JSON.stringify({ remoteStatus: "disconnected" }));
238
+ return;
239
+ }
240
+ cache.setReconnecting(sessionId, true);
241
+ const delay = Math.min(REMOTE_RECONNECT_MAX_DELAY_MS, REMOTE_RECONNECT_BASE_DELAY_MS * Math.pow(2, attempt));
242
+ const jitter = delay * Math.random() * 0.25;
243
+ const totalDelay = delay + jitter;
244
+ console.log(`[AgentWS] Scheduling remote reconnect for ${sessionId} in ${Math.round(totalDelay)}ms (attempt ${attempt + 1}/${REMOTE_RECONNECT_MAX_ATTEMPTS})`);
245
+ cache.broadcast(sessionId, JSON.stringify({ remoteStatus: "reconnecting", attempt: attempt + 1 }));
246
+ cache.incrementReconnectAttempt(sessionId);
247
+ const timer = setTimeout(() => {
248
+ // Guard: entry might have been deleted while waiting
249
+ if (!cache.get(sessionId) || cache.get(sessionId).finished) {
250
+ cache.setReconnecting(sessionId, false);
251
+ return;
252
+ }
253
+ connectPersistentRemoteWs(sessionId, remoteInfo, cache, wsOptions, reverseConnectManager);
254
+ }, totalDelay);
255
+ cache.setReconnectTimer(sessionId, timer);
256
+ }
257
+ const routes = async (fastify) => {
258
+ // When a reverse-connect tunnel comes back online, re-establish persistent
259
+ // remote WS connections for any cached sessions that belong to that server.
260
+ fastify.reverseConnectManager.setStatusChangeHandler((remoteServerId, status) => {
261
+ if (status !== "online")
262
+ return;
263
+ const cache = fastify.remotePatchCache;
264
+ const wsOptions = fastify.proxyManager.getWsOptions();
265
+ for (const [sessionId, remoteInfo] of fastify.remoteSessionMap) {
266
+ if (remoteInfo.remoteServerId !== remoteServerId)
267
+ continue;
268
+ const entry = cache.get(sessionId);
269
+ if (!entry || entry.finished)
270
+ continue;
271
+ if (cache.getRemoteWs(sessionId) || cache.isReconnecting(sessionId))
272
+ continue;
273
+ console.log(`[AgentWS] Reverse-connect restored for ${remoteServerId}, re-establishing WS for ${sessionId}`);
274
+ cache.resetReconnectAttempt(sessionId);
275
+ connectPersistentRemoteWs(sessionId, remoteInfo, cache, wsOptions, fastify.reverseConnectManager);
276
+ }
277
+ });
278
+ // WebSocket routes must be registered after the websocket plugin is ready
279
+ fastify.after(() => {
280
+ // Executor process logs WebSocket
281
+ fastify.get("/api/executor-processes/:processId/logs", { websocket: true }, (socket, req) => {
282
+ const { processId } = req.params;
283
+ console.log(`[WebSocket] Client connected for process ${processId}`);
284
+ // Remote executor process proxy
285
+ if (processId.startsWith("remote-")) {
286
+ const remoteInfo = fastify.remoteExecutorMap.get(processId);
287
+ if (!remoteInfo) {
288
+ console.log(`[WebSocket] Remote process ${processId} not found in map`);
289
+ socket.send(JSON.stringify({ type: "error", message: "Remote process not found" }));
290
+ socket.close();
291
+ return;
292
+ }
293
+ const useVirtualExec = fastify.reverseConnectManager.isConnected(remoteInfo.remoteServerId);
294
+ let remoteWs;
295
+ if (useVirtualExec) {
296
+ const channelId = randomUUID();
297
+ const wsPath = `/api/executor-processes/${remoteInfo.remoteProcessId}/logs`;
298
+ const wsQuery = `apiKey=${encodeURIComponent(remoteInfo.remoteApiKey)}`;
299
+ const adapter = new VirtualWsAdapter((data) => fastify.reverseConnectManager.sendChannelData(remoteInfo.remoteServerId, channelId, data), () => fastify.reverseConnectManager.closeChannel(remoteInfo.remoteServerId, channelId));
300
+ fastify.reverseConnectManager.setChannelAdapter(remoteInfo.remoteServerId, channelId, adapter);
301
+ fastify.reverseConnectManager.openVirtualChannel(remoteInfo.remoteServerId, channelId, wsPath, wsQuery);
302
+ remoteWs = adapter;
303
+ console.log(`[WebSocket] Virtual channel opened for remote process ${remoteInfo.remoteProcessId}`);
304
+ setTimeout(() => adapter.emit("open"), 0);
305
+ }
306
+ else {
307
+ const cleanRemoteUrl = remoteInfo.remoteUrl.replace(/\/+$/, "");
308
+ const wsProtocol = cleanRemoteUrl.startsWith("https") ? "wss" : "ws";
309
+ const wsUrl = cleanRemoteUrl.replace(/^https?/, wsProtocol);
310
+ const remoteWsUrl = `${wsUrl}/api/executor-processes/${remoteInfo.remoteProcessId}/logs?apiKey=${encodeURIComponent(remoteInfo.remoteApiKey)}`;
311
+ console.log(`[WebSocket] Proxying to remote: ${remoteWsUrl.replace(remoteInfo.remoteApiKey, "***")}`);
312
+ remoteWs = new WebSocket(remoteWsUrl, undefined, fastify.proxyManager.getWsOptions());
313
+ }
314
+ remoteWs.on("open", () => {
315
+ console.log(`[WebSocket] Connected to remote process ${remoteInfo.remoteProcessId}`);
316
+ });
317
+ // Ping/pong keepalive to prevent idle disconnections when browser tab is backgrounded
318
+ const pingInterval = setInterval(() => {
319
+ if (remoteWs.readyState === WebSocket.OPEN) {
320
+ remoteWs.ping();
321
+ }
322
+ }, 30000);
323
+ remoteWs.on("message", (data) => {
324
+ try {
325
+ const raw = data.toString();
326
+ socket.send(raw);
327
+ // Detect remote process finish and clean up remoteExecutorMap
328
+ try {
329
+ const parsed = JSON.parse(raw);
330
+ if (parsed.type === "finished") {
331
+ const info = fastify.remoteExecutorMap.get(processId);
332
+ if (info) {
333
+ fastify.eventBus.emit({
334
+ type: "executor:stopped",
335
+ projectId: info.projectId ?? "",
336
+ executorId: info.executorId,
337
+ processId,
338
+ exitCode: parsed.exitCode ?? 0,
339
+ target: info.remoteServerId,
340
+ });
341
+ fastify.remoteExecutorMap.delete(processId);
342
+ }
343
+ }
344
+ }
345
+ catch { /* ignore parse errors */ }
346
+ }
347
+ catch (error) {
348
+ console.error("[WebSocket] Failed to forward message to client:", error);
349
+ }
350
+ });
351
+ socket.on("message", (data) => {
352
+ try {
353
+ if (remoteWs.readyState === WebSocket.OPEN) {
354
+ remoteWs.send(data.toString());
355
+ }
356
+ }
357
+ catch (error) {
358
+ console.error("[WebSocket] Failed to forward message to remote:", error);
359
+ }
360
+ });
361
+ remoteWs.on("close", () => {
362
+ console.log(`[WebSocket] Remote connection closed for process ${processId}`);
363
+ clearInterval(pingInterval);
364
+ socket.close();
365
+ });
366
+ remoteWs.on("error", (error) => {
367
+ console.error(`[WebSocket] Remote connection error:`, error);
368
+ clearInterval(pingInterval);
369
+ socket.send(JSON.stringify({ type: "error", message: "Remote connection error" }));
370
+ socket.close();
371
+ });
372
+ socket.on("close", () => {
373
+ console.log(`[WebSocket] Client disconnected from remote process ${processId}`);
374
+ clearInterval(pingInterval);
375
+ remoteWs.close();
376
+ });
377
+ return;
378
+ }
379
+ // Local process handling
380
+ const isPty = fastify.processManager.isPtyProcess(processId);
381
+ socket.send(JSON.stringify({ type: "init", isPty }));
382
+ const logs = fastify.processManager.getLogs(processId);
383
+ console.log(`[WebSocket] Sending ${logs.length} historical logs`);
384
+ for (const log of logs) {
385
+ socket.send(JSON.stringify(log));
386
+ }
387
+ const isRunning = fastify.processManager.isRunning(processId);
388
+ console.log(`[WebSocket] Process running: ${isRunning}`);
389
+ if (logs.length === 0 && !isRunning) {
390
+ console.log(`[WebSocket] Process not found or no logs, closing connection`);
391
+ socket.send(JSON.stringify({ type: "error", message: "Process not found" }));
392
+ socket.close();
393
+ return;
394
+ }
395
+ const lastLog = logs[logs.length - 1];
396
+ if (lastLog?.type === "finished") {
397
+ socket.close();
398
+ return;
399
+ }
400
+ const unsubscribe = fastify.processManager.subscribe(processId, (msg) => {
401
+ try {
402
+ socket.send(JSON.stringify(msg));
403
+ if (msg.type === "finished") {
404
+ socket.close();
405
+ }
406
+ }
407
+ catch (error) {
408
+ unsubscribe?.();
409
+ }
410
+ });
411
+ socket.on("message", (data) => {
412
+ try {
413
+ const message = JSON.parse(data.toString());
414
+ if (message.type === "input" || message.type === "resize") {
415
+ fastify.processManager.handleInput(processId, message);
416
+ }
417
+ }
418
+ catch (error) {
419
+ console.error("[WebSocket] Failed to parse input message:", error);
420
+ }
421
+ });
422
+ socket.on("close", () => {
423
+ unsubscribe?.();
424
+ });
425
+ });
426
+ // Agent Session WebSocket
427
+ fastify.get("/api/agent-sessions/:sessionId/stream", { websocket: true }, async (socket, req) => {
428
+ const { sessionId } = req.params;
429
+ // Log before auth check for visibility
430
+ console.log(`[AgentWS] Connection attempt for session ${sessionId} (auth=${fastify.authEnabled})`);
431
+ // Verify auth token for WebSocket when auth is enabled
432
+ if (fastify.authEnabled) {
433
+ const apiKey = req.query.apiKey;
434
+ const token = req.query.token;
435
+ // API key takes precedence (remote proxy connections)
436
+ if (!apiKey) {
437
+ if (!token) {
438
+ console.log(`[AgentWS] Auth rejected: no token (session=${sessionId})`);
439
+ socket.send(JSON.stringify({ error: "Authentication required" }));
440
+ socket.close();
441
+ return;
442
+ }
443
+ const userId = await verifyWsToken(token);
444
+ if (!userId) {
445
+ console.log(`[AgentWS] Auth rejected: invalid token (session=${sessionId})`);
446
+ socket.send(JSON.stringify({ error: "Invalid authentication token" }));
447
+ socket.close();
448
+ return;
449
+ }
450
+ }
451
+ }
452
+ console.log(`[AgentWS] Client connected for session ${sessionId}`);
453
+ // Ping/pong keepalive to prevent idle disconnections (code 1005)
454
+ const pingInterval = setInterval(() => {
455
+ if (socket.readyState === WebSocket.OPEN) {
456
+ socket.ping();
457
+ }
458
+ }, 30000); // Ping every 30 seconds
459
+ if (sessionId.startsWith("remote-")) {
460
+ const remoteInfo = fastify.remoteSessionMap.get(sessionId);
461
+ if (!remoteInfo) {
462
+ console.log(`[AgentWS] Remote session ${sessionId} not found in map`);
463
+ socket.send(JSON.stringify({ type: "error", message: "Remote session not found" }));
464
+ socket.close();
465
+ return;
466
+ }
467
+ const cache = fastify.remotePatchCache;
468
+ const cacheEntry = cache.getOrCreate(sessionId);
469
+ // --- Phase 1: Replay cached data to this frontend ---
470
+ if (cacheEntry.messages.length > 0) {
471
+ console.log(`[AgentWS] Replaying ${cacheEntry.messages.length} cached msgs for ${sessionId}`);
472
+ for (const raw of cacheEntry.messages) {
473
+ try {
474
+ socket.send(raw);
475
+ }
476
+ catch { /* client gone */ }
477
+ }
478
+ try {
479
+ socket.send(JSON.stringify({ Ready: true }));
480
+ }
481
+ catch { /* client gone */ }
482
+ if (cacheEntry.finished) {
483
+ try {
484
+ socket.send(JSON.stringify({ finished: true }));
485
+ }
486
+ catch { /* noop */ }
487
+ cache.addSubscriber(sessionId, socket);
488
+ socket.on("close", () => {
489
+ clearInterval(pingInterval);
490
+ cache.removeSubscriber(sessionId, socket);
491
+ });
492
+ return;
493
+ }
494
+ }
495
+ // --- Phase 2: Ensure persistent remote WS ---
496
+ cache.addSubscriber(sessionId, socket);
497
+ const wsOptions = fastify.proxyManager.getWsOptions();
498
+ const existingRemoteWs = cache.getRemoteWs(sessionId);
499
+ if (!existingRemoteWs && !cache.isReconnecting(sessionId)) {
500
+ // Need to open a new persistent remote WS
501
+ connectPersistentRemoteWs(sessionId, remoteInfo, cache, wsOptions, fastify.reverseConnectManager);
502
+ }
503
+ // Send current remote connection status to the newly connected frontend
504
+ if (cache.getRemoteWs(sessionId)) {
505
+ try {
506
+ socket.send(JSON.stringify({ remoteStatus: "connected" }));
507
+ }
508
+ catch { /* noop */ }
509
+ }
510
+ else if (cache.isReconnecting(sessionId)) {
511
+ const attempt = cache.getReconnectAttempt(sessionId);
512
+ try {
513
+ socket.send(JSON.stringify({ remoteStatus: "reconnecting", attempt }));
514
+ }
515
+ catch { /* noop */ }
516
+ }
517
+ // --- Phase 3: Set up frontend socket handlers ---
518
+ socket.on("message", (data) => {
519
+ try {
520
+ const rws = cache.getRemoteWs(sessionId);
521
+ if (rws)
522
+ rws.send(data.toString());
523
+ }
524
+ catch (error) {
525
+ console.error("[AgentWS] Failed to forward message to remote:", error);
526
+ }
527
+ });
528
+ socket.on("close", () => {
529
+ console.log(`[AgentWS] Client disconnected from remote session ${sessionId}`);
530
+ clearInterval(pingInterval);
531
+ cache.removeSubscriber(sessionId, socket);
532
+ // Do NOT close persistent remote WS
533
+ });
534
+ return;
535
+ }
536
+ // Local session handling
537
+ const unsubscribe = fastify.agentSessionManager.subscribe(sessionId, socket);
538
+ if (!unsubscribe) {
539
+ console.log(`[AgentWS] Session ${sessionId} not found`);
540
+ clearInterval(pingInterval);
541
+ socket.send(JSON.stringify({ error: "Session not found" }));
542
+ socket.close();
543
+ return;
544
+ }
545
+ socket.on("message", (data) => {
546
+ try {
547
+ const message = JSON.parse(data.toString());
548
+ if (message.type === "user_message") {
549
+ fastify.agentSessionManager.sendUserMessage(sessionId, message.content);
550
+ }
551
+ }
552
+ catch (error) {
553
+ console.error("[AgentWS] Failed to parse message:", error);
554
+ }
555
+ });
556
+ socket.on("close", () => {
557
+ console.log(`[AgentWS] Client disconnected from session ${sessionId}`);
558
+ clearInterval(pingInterval);
559
+ unsubscribe?.();
560
+ });
561
+ });
562
+ // Chat Session WebSocket
563
+ fastify.get("/api/chat-sessions/:sessionId/stream", { websocket: true }, (socket, req) => {
564
+ const { sessionId } = req.params;
565
+ console.log(`[ChatWS] Client connected for session ${sessionId}`);
566
+ // Ping/pong keepalive
567
+ const pingInterval = setInterval(() => {
568
+ if (socket.readyState === WebSocket.OPEN) {
569
+ socket.ping();
570
+ }
571
+ }, 30000);
572
+ const unsubscribe = fastify.chatSessionManager.subscribe(sessionId, socket);
573
+ if (!unsubscribe) {
574
+ console.log(`[ChatWS] Session ${sessionId} not found`);
575
+ clearInterval(pingInterval);
576
+ socket.send(JSON.stringify({ error: "Session not found" }));
577
+ socket.close();
578
+ return;
579
+ }
580
+ socket.on("message", (data) => {
581
+ try {
582
+ const message = JSON.parse(data.toString());
583
+ if (message.type === "user_message") {
584
+ // Chat sessions only accept string content
585
+ const chatContent = typeof message.content === "string" ? message.content : message.content.filter((p) => p.type === "text").map((p) => p.text).join("\n");
586
+ fastify.chatSessionManager.sendMessage(sessionId, chatContent);
587
+ }
588
+ else if (message.type === "browser_result") {
589
+ fastify.chatSessionManager.handleBrowserResult(message.result);
590
+ }
591
+ }
592
+ catch (error) {
593
+ console.error("[ChatWS] Failed to parse message:", error);
594
+ }
595
+ });
596
+ socket.on("close", () => {
597
+ console.log(`[ChatWS] Client disconnected from session ${sessionId}`);
598
+ clearInterval(pingInterval);
599
+ unsubscribe?.();
600
+ });
601
+ });
602
+ });
603
+ };
604
+ export default fp(routes, { name: "websocket-routes" });
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from "fastify";
2
+ import "../server-types.js";
3
+ declare const _default: FastifyPluginAsync;
4
+ export default _default;