@surething/cockpit 1.0.175

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 (1095) hide show
  1. package/.next-prod/BUILD_ID +1 -0
  2. package/.next-prod/app-path-routes-manifest.json +99 -0
  3. package/.next-prod/build-manifest.json +20 -0
  4. package/.next-prod/diagnostics/build-diagnostics.json +6 -0
  5. package/.next-prod/diagnostics/framework.json +1 -0
  6. package/.next-prod/export-marker.json +6 -0
  7. package/.next-prod/images-manifest.json +67 -0
  8. package/.next-prod/next-minimal-server.js.nft.json +1 -0
  9. package/.next-prod/next-server.js.nft.json +1 -0
  10. package/.next-prod/package.json +1 -0
  11. package/.next-prod/prerender-manifest.json +119 -0
  12. package/.next-prod/react-loadable-manifest.json +4241 -0
  13. package/.next-prod/required-server-files.js +326 -0
  14. package/.next-prod/required-server-files.json +326 -0
  15. package/.next-prod/routes-manifest.json +641 -0
  16. package/.next-prod/server/app/_global-error/page.js +3 -0
  17. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -0
  18. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -0
  19. package/.next-prod/server/app/_global-error.html +2 -0
  20. package/.next-prod/server/app/_global-error.meta +16 -0
  21. package/.next-prod/server/app/_global-error.rsc +12 -0
  22. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +12 -0
  23. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  24. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +4 -0
  25. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +5 -0
  26. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +4 -0
  27. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  28. package/.next-prod/server/app/_not-found/page.js +2 -0
  29. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -0
  30. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -0
  31. package/.next-prod/server/app/_not-found.html +18 -0
  32. package/.next-prod/server/app/_not-found.meta +16 -0
  33. package/.next-prod/server/app/_not-found.rsc +18 -0
  34. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +18 -0
  35. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +6 -0
  36. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +6 -0
  37. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  38. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  39. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +5 -0
  40. package/.next-prod/server/app/api/bash/route.js +1 -0
  41. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -0
  42. package/.next-prod/server/app/api/bash/route_client-reference-manifest.js +1 -0
  43. package/.next-prod/server/app/api/chat/route.js +5 -0
  44. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -0
  45. package/.next-prod/server/app/api/chat/route_client-reference-manifest.js +1 -0
  46. package/.next-prod/server/app/api/claude-stats/route.js +1 -0
  47. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -0
  48. package/.next-prod/server/app/api/claude-stats/route_client-reference-manifest.js +1 -0
  49. package/.next-prod/server/app/api/commands/route.js +1 -0
  50. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -0
  51. package/.next-prod/server/app/api/commands/route_client-reference-manifest.js +1 -0
  52. package/.next-prod/server/app/api/comments/route.js +1 -0
  53. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -0
  54. package/.next-prod/server/app/api/comments/route_client-reference-manifest.js +1 -0
  55. package/.next-prod/server/app/api/db/columns/route.js +15 -0
  56. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -0
  57. package/.next-prod/server/app/api/db/columns/route_client-reference-manifest.js +1 -0
  58. package/.next-prod/server/app/api/db/connect/route.js +1 -0
  59. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -0
  60. package/.next-prod/server/app/api/db/connect/route_client-reference-manifest.js +1 -0
  61. package/.next-prod/server/app/api/db/disconnect/route.js +1 -0
  62. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -0
  63. package/.next-prod/server/app/api/db/disconnect/route_client-reference-manifest.js +1 -0
  64. package/.next-prod/server/app/api/db/export/route.js +1 -0
  65. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -0
  66. package/.next-prod/server/app/api/db/export/route_client-reference-manifest.js +1 -0
  67. package/.next-prod/server/app/api/db/query/route.js +1 -0
  68. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -0
  69. package/.next-prod/server/app/api/db/query/route_client-reference-manifest.js +1 -0
  70. package/.next-prod/server/app/api/db/schemas/route.js +8 -0
  71. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -0
  72. package/.next-prod/server/app/api/db/schemas/route_client-reference-manifest.js +1 -0
  73. package/.next-prod/server/app/api/extension/version/route.js +1 -0
  74. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -0
  75. package/.next-prod/server/app/api/extension/version/route_client-reference-manifest.js +1 -0
  76. package/.next-prod/server/app/api/file/route.js +1 -0
  77. package/.next-prod/server/app/api/file/route.js.nft.json +1 -0
  78. package/.next-prod/server/app/api/file/route_client-reference-manifest.js +1 -0
  79. package/.next-prod/server/app/api/files/blame/route.js +1 -0
  80. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -0
  81. package/.next-prod/server/app/api/files/blame/route_client-reference-manifest.js +1 -0
  82. package/.next-prod/server/app/api/files/clipboard/route.js +1 -0
  83. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -0
  84. package/.next-prod/server/app/api/files/clipboard/route_client-reference-manifest.js +1 -0
  85. package/.next-prod/server/app/api/files/copy/route.js +1 -0
  86. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -0
  87. package/.next-prod/server/app/api/files/copy/route_client-reference-manifest.js +1 -0
  88. package/.next-prod/server/app/api/files/delete/route.js +1 -0
  89. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -0
  90. package/.next-prod/server/app/api/files/delete/route_client-reference-manifest.js +1 -0
  91. package/.next-prod/server/app/api/files/expanded/route.js +1 -0
  92. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -0
  93. package/.next-prod/server/app/api/files/expanded/route_client-reference-manifest.js +1 -0
  94. package/.next-prod/server/app/api/files/index/route.js +1 -0
  95. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -0
  96. package/.next-prod/server/app/api/files/index/route_client-reference-manifest.js +1 -0
  97. package/.next-prod/server/app/api/files/init/route.js +1 -0
  98. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -0
  99. package/.next-prod/server/app/api/files/init/route_client-reference-manifest.js +1 -0
  100. package/.next-prod/server/app/api/files/paste/route.js +1 -0
  101. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -0
  102. package/.next-prod/server/app/api/files/paste/route_client-reference-manifest.js +1 -0
  103. package/.next-prod/server/app/api/files/read/route.js +1 -0
  104. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -0
  105. package/.next-prod/server/app/api/files/read/route_client-reference-manifest.js +1 -0
  106. package/.next-prod/server/app/api/files/readdir/route.js +1 -0
  107. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -0
  108. package/.next-prod/server/app/api/files/readdir/route_client-reference-manifest.js +1 -0
  109. package/.next-prod/server/app/api/files/recent/route.js +1 -0
  110. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -0
  111. package/.next-prod/server/app/api/files/recent/route_client-reference-manifest.js +1 -0
  112. package/.next-prod/server/app/api/files/save/route.js +1 -0
  113. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -0
  114. package/.next-prod/server/app/api/files/save/route_client-reference-manifest.js +1 -0
  115. package/.next-prod/server/app/api/files/search/route.js +1 -0
  116. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -0
  117. package/.next-prod/server/app/api/files/search/route_client-reference-manifest.js +1 -0
  118. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -0
  119. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -0
  120. package/.next-prod/server/app/api/git/branch-diff/route_client-reference-manifest.js +1 -0
  121. package/.next-prod/server/app/api/git/branches/route.js +1 -0
  122. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -0
  123. package/.next-prod/server/app/api/git/branches/route_client-reference-manifest.js +1 -0
  124. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -0
  125. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -0
  126. package/.next-prod/server/app/api/git/commit-diff/route_client-reference-manifest.js +1 -0
  127. package/.next-prod/server/app/api/git/commits/route.js +1 -0
  128. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -0
  129. package/.next-prod/server/app/api/git/commits/route_client-reference-manifest.js +1 -0
  130. package/.next-prod/server/app/api/git/diff/route.js +1 -0
  131. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -0
  132. package/.next-prod/server/app/api/git/diff/route_client-reference-manifest.js +1 -0
  133. package/.next-prod/server/app/api/git/discard/route.js +1 -0
  134. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -0
  135. package/.next-prod/server/app/api/git/discard/route_client-reference-manifest.js +1 -0
  136. package/.next-prod/server/app/api/git/stage/route.js +1 -0
  137. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -0
  138. package/.next-prod/server/app/api/git/stage/route_client-reference-manifest.js +1 -0
  139. package/.next-prod/server/app/api/git/status/route.js +1 -0
  140. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -0
  141. package/.next-prod/server/app/api/git/status/route_client-reference-manifest.js +1 -0
  142. package/.next-prod/server/app/api/git/unstage/route.js +1 -0
  143. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -0
  144. package/.next-prod/server/app/api/git/unstage/route_client-reference-manifest.js +1 -0
  145. package/.next-prod/server/app/api/git/worktree/route.js +1 -0
  146. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -0
  147. package/.next-prod/server/app/api/git/worktree/route_client-reference-manifest.js +1 -0
  148. package/.next-prod/server/app/api/global-state/route.js +1 -0
  149. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -0
  150. package/.next-prod/server/app/api/global-state/route_client-reference-manifest.js +1 -0
  151. package/.next-prod/server/app/api/jupyter/load/route.js +1 -0
  152. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -0
  153. package/.next-prod/server/app/api/jupyter/load/route_client-reference-manifest.js +1 -0
  154. package/.next-prod/server/app/api/jupyter/save/route.js +1 -0
  155. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -0
  156. package/.next-prod/server/app/api/jupyter/save/route_client-reference-manifest.js +1 -0
  157. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -0
  158. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -0
  159. package/.next-prod/server/app/api/jupyter/shutdown/route_client-reference-manifest.js +1 -0
  160. package/.next-prod/server/app/api/lsp/definition/route.js +1 -0
  161. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -0
  162. package/.next-prod/server/app/api/lsp/definition/route_client-reference-manifest.js +1 -0
  163. package/.next-prod/server/app/api/lsp/hover/route.js +1 -0
  164. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -0
  165. package/.next-prod/server/app/api/lsp/hover/route_client-reference-manifest.js +1 -0
  166. package/.next-prod/server/app/api/lsp/references/route.js +1 -0
  167. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -0
  168. package/.next-prod/server/app/api/lsp/references/route_client-reference-manifest.js +1 -0
  169. package/.next-prod/server/app/api/lsp/status/route.js +1 -0
  170. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -0
  171. package/.next-prod/server/app/api/lsp/status/route_client-reference-manifest.js +1 -0
  172. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -0
  173. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -0
  174. package/.next-prod/server/app/api/lsp/warmup/route_client-reference-manifest.js +1 -0
  175. package/.next-prod/server/app/api/mysql/columns/route.js +9 -0
  176. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -0
  177. package/.next-prod/server/app/api/mysql/columns/route_client-reference-manifest.js +1 -0
  178. package/.next-prod/server/app/api/mysql/connect/route.js +1 -0
  179. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -0
  180. package/.next-prod/server/app/api/mysql/connect/route_client-reference-manifest.js +1 -0
  181. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -0
  182. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -0
  183. package/.next-prod/server/app/api/mysql/disconnect/route_client-reference-manifest.js +1 -0
  184. package/.next-prod/server/app/api/mysql/export/route.js +1 -0
  185. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -0
  186. package/.next-prod/server/app/api/mysql/export/route_client-reference-manifest.js +1 -0
  187. package/.next-prod/server/app/api/mysql/query/route.js +1 -0
  188. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -0
  189. package/.next-prod/server/app/api/mysql/query/route_client-reference-manifest.js +1 -0
  190. package/.next-prod/server/app/api/mysql/schemas/route.js +6 -0
  191. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -0
  192. package/.next-prod/server/app/api/mysql/schemas/route_client-reference-manifest.js +1 -0
  193. package/.next-prod/server/app/api/note/route.js +1 -0
  194. package/.next-prod/server/app/api/note/route.js.nft.json +1 -0
  195. package/.next-prod/server/app/api/note/route_client-reference-manifest.js +1 -0
  196. package/.next-prod/server/app/api/open-cursor/route.js +1 -0
  197. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -0
  198. package/.next-prod/server/app/api/open-cursor/route_client-reference-manifest.js +1 -0
  199. package/.next-prod/server/app/api/open-vscode/route.js +1 -0
  200. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -0
  201. package/.next-prod/server/app/api/open-vscode/route_client-reference-manifest.js +1 -0
  202. package/.next-prod/server/app/api/pick-folder/route.js +1 -0
  203. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -0
  204. package/.next-prod/server/app/api/pick-folder/route_client-reference-manifest.js +1 -0
  205. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -0
  206. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -0
  207. package/.next-prod/server/app/api/pinned-sessions/route_client-reference-manifest.js +1 -0
  208. package/.next-prod/server/app/api/project-settings/route.js +1 -0
  209. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -0
  210. package/.next-prod/server/app/api/project-settings/route_client-reference-manifest.js +1 -0
  211. package/.next-prod/server/app/api/project-state/route.js +1 -0
  212. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -0
  213. package/.next-prod/server/app/api/project-state/route_client-reference-manifest.js +1 -0
  214. package/.next-prod/server/app/api/projects/route.js +1 -0
  215. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -0
  216. package/.next-prod/server/app/api/projects/route_client-reference-manifest.js +1 -0
  217. package/.next-prod/server/app/api/redis/command/route.js +1 -0
  218. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -0
  219. package/.next-prod/server/app/api/redis/command/route_client-reference-manifest.js +1 -0
  220. package/.next-prod/server/app/api/redis/connect/route.js +1 -0
  221. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -0
  222. package/.next-prod/server/app/api/redis/connect/route_client-reference-manifest.js +1 -0
  223. package/.next-prod/server/app/api/redis/delete/route.js +1 -0
  224. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -0
  225. package/.next-prod/server/app/api/redis/delete/route_client-reference-manifest.js +1 -0
  226. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -0
  227. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -0
  228. package/.next-prod/server/app/api/redis/disconnect/route_client-reference-manifest.js +1 -0
  229. package/.next-prod/server/app/api/redis/get/route.js +1 -0
  230. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -0
  231. package/.next-prod/server/app/api/redis/get/route_client-reference-manifest.js +1 -0
  232. package/.next-prod/server/app/api/redis/keys/route.js +1 -0
  233. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -0
  234. package/.next-prod/server/app/api/redis/keys/route_client-reference-manifest.js +1 -0
  235. package/.next-prod/server/app/api/redis/set/route.js +1 -0
  236. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -0
  237. package/.next-prod/server/app/api/redis/set/route_client-reference-manifest.js +1 -0
  238. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -0
  239. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -0
  240. package/.next-prod/server/app/api/review/[id]/comments/route_client-reference-manifest.js +1 -0
  241. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -0
  242. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -0
  243. package/.next-prod/server/app/api/review/[id]/replies/route_client-reference-manifest.js +1 -0
  244. package/.next-prod/server/app/api/review/[id]/route.js +1 -0
  245. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -0
  246. package/.next-prod/server/app/api/review/[id]/route_client-reference-manifest.js +1 -0
  247. package/.next-prod/server/app/api/review/identify/route.js +1 -0
  248. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -0
  249. package/.next-prod/server/app/api/review/identify/route_client-reference-manifest.js +1 -0
  250. package/.next-prod/server/app/api/review/order/route.js +1 -0
  251. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -0
  252. package/.next-prod/server/app/api/review/order/route_client-reference-manifest.js +1 -0
  253. package/.next-prod/server/app/api/review/route.js +1 -0
  254. package/.next-prod/server/app/api/review/route.js.nft.json +1 -0
  255. package/.next-prod/server/app/api/review/route_client-reference-manifest.js +1 -0
  256. package/.next-prod/server/app/api/review/share-info/route.js +1 -0
  257. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -0
  258. package/.next-prod/server/app/api/review/share-info/route_client-reference-manifest.js +1 -0
  259. package/.next-prod/server/app/api/review/users/route.js +1 -0
  260. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -0
  261. package/.next-prod/server/app/api/review/users/route_client-reference-manifest.js +1 -0
  262. package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -0
  263. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -0
  264. package/.next-prod/server/app/api/scheduled-tasks/route_client-reference-manifest.js +1 -0
  265. package/.next-prod/server/app/api/services/config/route.js +1 -0
  266. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -0
  267. package/.next-prod/server/app/api/services/config/route_client-reference-manifest.js +1 -0
  268. package/.next-prod/server/app/api/services/scripts/route.js +1 -0
  269. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -0
  270. package/.next-prod/server/app/api/services/scripts/route_client-reference-manifest.js +1 -0
  271. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -0
  272. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -0
  273. package/.next-prod/server/app/api/session/[sessionId]/fork/route_client-reference-manifest.js +1 -0
  274. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -0
  275. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -0
  276. package/.next-prod/server/app/api/session/[sessionId]/history/route_client-reference-manifest.js +1 -0
  277. package/.next-prod/server/app/api/session-by-path/route.js +1 -0
  278. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -0
  279. package/.next-prod/server/app/api/session-by-path/route_client-reference-manifest.js +1 -0
  280. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -0
  281. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -0
  282. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route_client-reference-manifest.js +1 -0
  283. package/.next-prod/server/app/api/sessions/projects/route.js +1 -0
  284. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -0
  285. package/.next-prod/server/app/api/sessions/projects/route_client-reference-manifest.js +1 -0
  286. package/.next-prod/server/app/api/sessions/route.js +1 -0
  287. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -0
  288. package/.next-prod/server/app/api/sessions/route_client-reference-manifest.js +1 -0
  289. package/.next-prod/server/app/api/settings/route.js +1 -0
  290. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -0
  291. package/.next-prod/server/app/api/settings/route_client-reference-manifest.js +1 -0
  292. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -0
  293. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -0
  294. package/.next-prod/server/app/api/terminal/aliases/route_client-reference-manifest.js +1 -0
  295. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -0
  296. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -0
  297. package/.next-prod/server/app/api/terminal/autocomplete/route_client-reference-manifest.js +1 -0
  298. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -0
  299. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -0
  300. package/.next-prod/server/app/api/terminal/bubble-order/route_client-reference-manifest.js +1 -0
  301. package/.next-prod/server/app/api/terminal/env/route.js +1 -0
  302. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -0
  303. package/.next-prod/server/app/api/terminal/env/route_client-reference-manifest.js +1 -0
  304. package/.next-prod/server/app/api/terminal/history/route.js +1 -0
  305. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -0
  306. package/.next-prod/server/app/api/terminal/history/route_client-reference-manifest.js +1 -0
  307. package/.next-prod/server/app/api/version/route.js +1 -0
  308. package/.next-prod/server/app/api/version/route.js.nft.json +1 -0
  309. package/.next-prod/server/app/api/version/route_client-reference-manifest.js +1 -0
  310. package/.next-prod/server/app/favicon.ico/route.js +1 -0
  311. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -0
  312. package/.next-prod/server/app/favicon.ico.body +0 -0
  313. package/.next-prod/server/app/favicon.ico.meta +1 -0
  314. package/.next-prod/server/app/manifest.webmanifest/route.js +16 -0
  315. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  316. package/.next-prod/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  317. package/.next-prod/server/app/manifest.webmanifest.body +1 -0
  318. package/.next-prod/server/app/manifest.webmanifest.meta +1 -0
  319. package/.next-prod/server/app/page.js +97 -0
  320. package/.next-prod/server/app/page.js.nft.json +1 -0
  321. package/.next-prod/server/app/page_client-reference-manifest.js +1 -0
  322. package/.next-prod/server/app/project/page.js +29 -0
  323. package/.next-prod/server/app/project/page.js.nft.json +1 -0
  324. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -0
  325. package/.next-prod/server/app/review/[id]/page.js +2 -0
  326. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -0
  327. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -0
  328. package/.next-prod/server/app-paths-manifest.json +99 -0
  329. package/.next-prod/server/chunks/1639.js +1 -0
  330. package/.next-prod/server/chunks/1667.js +1 -0
  331. package/.next-prod/server/chunks/1813.js +1 -0
  332. package/.next-prod/server/chunks/1912.js +1 -0
  333. package/.next-prod/server/chunks/2325.js +82 -0
  334. package/.next-prod/server/chunks/2376.js +36 -0
  335. package/.next-prod/server/chunks/2816.js +1 -0
  336. package/.next-prod/server/chunks/2840.js +62 -0
  337. package/.next-prod/server/chunks/3434.js +1 -0
  338. package/.next-prod/server/chunks/3441.js +24 -0
  339. package/.next-prod/server/chunks/3503.js +29 -0
  340. package/.next-prod/server/chunks/3863.js +1 -0
  341. package/.next-prod/server/chunks/3932.js +56 -0
  342. package/.next-prod/server/chunks/4042.js +1 -0
  343. package/.next-prod/server/chunks/4073.js +1 -0
  344. package/.next-prod/server/chunks/4097.js +136 -0
  345. package/.next-prod/server/chunks/4098.js +1 -0
  346. package/.next-prod/server/chunks/4268.js +4 -0
  347. package/.next-prod/server/chunks/4272.js +5 -0
  348. package/.next-prod/server/chunks/4309.js +141 -0
  349. package/.next-prod/server/chunks/4345.js +1 -0
  350. package/.next-prod/server/chunks/4367.js +1 -0
  351. package/.next-prod/server/chunks/4388.js +24 -0
  352. package/.next-prod/server/chunks/4442.js +1 -0
  353. package/.next-prod/server/chunks/4490.js +26 -0
  354. package/.next-prod/server/chunks/4741.js +22 -0
  355. package/.next-prod/server/chunks/4793.js +1 -0
  356. package/.next-prod/server/chunks/5152.js +1 -0
  357. package/.next-prod/server/chunks/5460.js +201 -0
  358. package/.next-prod/server/chunks/5481.js +1 -0
  359. package/.next-prod/server/chunks/5536.js +148 -0
  360. package/.next-prod/server/chunks/5733.js +5 -0
  361. package/.next-prod/server/chunks/582.js +1 -0
  362. package/.next-prod/server/chunks/5958.js +1 -0
  363. package/.next-prod/server/chunks/6062.js +1 -0
  364. package/.next-prod/server/chunks/6117.js +13 -0
  365. package/.next-prod/server/chunks/6142.js +287 -0
  366. package/.next-prod/server/chunks/6346.js +1 -0
  367. package/.next-prod/server/chunks/6443.js +1 -0
  368. package/.next-prod/server/chunks/6804.js +43 -0
  369. package/.next-prod/server/chunks/7265.js +93 -0
  370. package/.next-prod/server/chunks/7284.js +1 -0
  371. package/.next-prod/server/chunks/7307.js +1 -0
  372. package/.next-prod/server/chunks/7483.js +1 -0
  373. package/.next-prod/server/chunks/7484.js +64 -0
  374. package/.next-prod/server/chunks/7514.js +31 -0
  375. package/.next-prod/server/chunks/7800.js +166 -0
  376. package/.next-prod/server/chunks/8068.js +63 -0
  377. package/.next-prod/server/chunks/8351.js +23 -0
  378. package/.next-prod/server/chunks/8491.js +5 -0
  379. package/.next-prod/server/chunks/8585.js +198 -0
  380. package/.next-prod/server/chunks/887.js +215 -0
  381. package/.next-prod/server/chunks/911.js +1 -0
  382. package/.next-prod/server/chunks/9116.js +65 -0
  383. package/.next-prod/server/chunks/925.js +68 -0
  384. package/.next-prod/server/chunks/9298.js +139 -0
  385. package/.next-prod/server/chunks/9401.js +1 -0
  386. package/.next-prod/server/chunks/9408.js +1 -0
  387. package/.next-prod/server/functions-config-manifest.json +24 -0
  388. package/.next-prod/server/interception-route-rewrite-manifest.js +1 -0
  389. package/.next-prod/server/middleware-build-manifest.js +1 -0
  390. package/.next-prod/server/middleware-manifest.json +6 -0
  391. package/.next-prod/server/middleware-react-loadable-manifest.js +1 -0
  392. package/.next-prod/server/next-font-manifest.js +1 -0
  393. package/.next-prod/server/next-font-manifest.json +1 -0
  394. package/.next-prod/server/pages/404.html +18 -0
  395. package/.next-prod/server/pages/500.html +2 -0
  396. package/.next-prod/server/pages-manifest.json +4 -0
  397. package/.next-prod/server/server-reference-manifest.js +1 -0
  398. package/.next-prod/server/server-reference-manifest.json +1 -0
  399. package/.next-prod/server/webpack-runtime.js +1 -0
  400. package/.next-prod/static/DV3WCL3Yj_UIBxTQ3r93N/_buildManifest.js +1 -0
  401. package/.next-prod/static/DV3WCL3Yj_UIBxTQ3r93N/_ssgManifest.js +1 -0
  402. package/.next-prod/static/chunks/10.6cf001c181ce1098.js +1 -0
  403. package/.next-prod/static/chunks/1078.02294b2934d5bf21.js +1 -0
  404. package/.next-prod/static/chunks/1142.17e45d200709420d.js +1 -0
  405. package/.next-prod/static/chunks/1161.06b33878b495da50.js +1 -0
  406. package/.next-prod/static/chunks/1184.e80a999422621ed9.js +1 -0
  407. package/.next-prod/static/chunks/1188.1d4ce94ddc297119.js +1 -0
  408. package/.next-prod/static/chunks/1198.2a5c215f01a8b74d.js +1 -0
  409. package/.next-prod/static/chunks/1215.88ed89521e915107.js +1 -0
  410. package/.next-prod/static/chunks/1219.e27b0bd10b029e40.js +1 -0
  411. package/.next-prod/static/chunks/123.d6fe9c2353baf42b.js +1 -0
  412. package/.next-prod/static/chunks/1247.64e212daa5bb3925.js +1 -0
  413. package/.next-prod/static/chunks/1248.36af3903f037c1f5.js +1 -0
  414. package/.next-prod/static/chunks/1274.ce6906b1fe2e04b8.js +1 -0
  415. package/.next-prod/static/chunks/1280.1651bb5167170457.js +1 -0
  416. package/.next-prod/static/chunks/1310.c38c5fbf05820fcd.js +166 -0
  417. package/.next-prod/static/chunks/1335.716cc5924662708e.js +1 -0
  418. package/.next-prod/static/chunks/1365.d7391145ca7f8791.js +1 -0
  419. package/.next-prod/static/chunks/1379.03e1e0f31bdaa2cc.js +1 -0
  420. package/.next-prod/static/chunks/1409.9f81cd6d2cab4b67.js +1 -0
  421. package/.next-prod/static/chunks/1413.117c5958c59cc695.js +1 -0
  422. package/.next-prod/static/chunks/142.e09e154342f02da4.js +4 -0
  423. package/.next-prod/static/chunks/1453.3c24c777a3deca2d.js +1 -0
  424. package/.next-prod/static/chunks/1456.a1f849b334fff0da.js +1 -0
  425. package/.next-prod/static/chunks/1501.549af2c91a889a08.js +1 -0
  426. package/.next-prod/static/chunks/1534.918a25b2e3daab22.js +1 -0
  427. package/.next-prod/static/chunks/1556.96abc9ff91b0c383.js +1 -0
  428. package/.next-prod/static/chunks/1583.03a06dbdde85ac56.js +1 -0
  429. package/.next-prod/static/chunks/1590.05549e036336164c.js +65 -0
  430. package/.next-prod/static/chunks/1593-7902218f5b10761f.js +1 -0
  431. package/.next-prod/static/chunks/1595.ee61519fde230f60.js +1 -0
  432. package/.next-prod/static/chunks/1656.a9efc78185a5a85f.js +1 -0
  433. package/.next-prod/static/chunks/1664.6d5b5e3112b66906.js +1 -0
  434. package/.next-prod/static/chunks/1898.e07b2b1c5e789b06.js +1 -0
  435. package/.next-prod/static/chunks/1932.b0aea9b52cabe5e8.js +1 -0
  436. package/.next-prod/static/chunks/194.dace825a3ddbbbff.js +1 -0
  437. package/.next-prod/static/chunks/1948.bf7e0d9ede202530.js +29 -0
  438. package/.next-prod/static/chunks/1977.a06c8e8d2198f765.js +1 -0
  439. package/.next-prod/static/chunks/1987.226da043eabc8911.js +5 -0
  440. package/.next-prod/static/chunks/1991.d869abe5092c9011.js +1 -0
  441. package/.next-prod/static/chunks/1cd6e1d3.8121a74b2042bff3.js +1 -0
  442. package/.next-prod/static/chunks/2013.598558c40e51e107.js +1 -0
  443. package/.next-prod/static/chunks/2020.46a0112747939389.js +1 -0
  444. package/.next-prod/static/chunks/2031.3877441c49bff5cd.js +1 -0
  445. package/.next-prod/static/chunks/2041.00f4fa0ab26c6ba5.js +1 -0
  446. package/.next-prod/static/chunks/2062.4a0ab3400fea0e34.js +1 -0
  447. package/.next-prod/static/chunks/2072-37a80cb92f1ee2d4.js +4 -0
  448. package/.next-prod/static/chunks/2107.c627112b02b9e1c8.js +1 -0
  449. package/.next-prod/static/chunks/2130.441ae0f68863efeb.js +1 -0
  450. package/.next-prod/static/chunks/214.f6bba63dfa159e01.js +1 -0
  451. package/.next-prod/static/chunks/2160.e38d781fd5c4cde0.js +1 -0
  452. package/.next-prod/static/chunks/2179.1bf5fe315e6e132c.js +1 -0
  453. package/.next-prod/static/chunks/2215.9d2d6fbe90ffcc80.js +1 -0
  454. package/.next-prod/static/chunks/2235.b4453110c06e2b09.js +1 -0
  455. package/.next-prod/static/chunks/2349.ca15d465c4260b4b.js +1 -0
  456. package/.next-prod/static/chunks/2374.7560cc5c4b8ed6b0.js +1 -0
  457. package/.next-prod/static/chunks/2403.3dda71b6482dce3b.js +1 -0
  458. package/.next-prod/static/chunks/2485.3188870375e9fbee.js +1 -0
  459. package/.next-prod/static/chunks/2489.fcc70bd67329a70e.js +1 -0
  460. package/.next-prod/static/chunks/2501.4e65b56602faa956.js +1 -0
  461. package/.next-prod/static/chunks/2503.bb9d3528c3c7ccae.js +1 -0
  462. package/.next-prod/static/chunks/252.a9e22657cbf67b42.js +1 -0
  463. package/.next-prod/static/chunks/254.8b4308512ac955b5.js +24 -0
  464. package/.next-prod/static/chunks/2614.8349e4b407470a30.js +1 -0
  465. package/.next-prod/static/chunks/2710.fe0656d4ebae4d30.js +1 -0
  466. package/.next-prod/static/chunks/2728.5fed9ac13dfcd1d1.js +1 -0
  467. package/.next-prod/static/chunks/2729.826909b4d5229ba6.js +68 -0
  468. package/.next-prod/static/chunks/2735.5a3e65a580bd5af9.js +1 -0
  469. package/.next-prod/static/chunks/2747.1d85d388314f2904.js +1 -0
  470. package/.next-prod/static/chunks/2765.2c6d9772af50feed.js +1 -0
  471. package/.next-prod/static/chunks/2783.e8bbf2c794ef9750.js +1 -0
  472. package/.next-prod/static/chunks/2812.dcd8179a6b1d76c9.js +1 -0
  473. package/.next-prod/static/chunks/2821.fa74c6e87f6e759a.js +1 -0
  474. package/.next-prod/static/chunks/2839.a832cb0d77a9d298.js +1 -0
  475. package/.next-prod/static/chunks/2895.0339e755e79ee794.js +1 -0
  476. package/.next-prod/static/chunks/2921.26016c4c7eb031e8.js +1 -0
  477. package/.next-prod/static/chunks/2954.7d8daeae6410d4a4.js +1 -0
  478. package/.next-prod/static/chunks/2964.1a0e15f7327680a2.js +1 -0
  479. package/.next-prod/static/chunks/2ff9d716.93c18c265de76cfb.js +136 -0
  480. package/.next-prod/static/chunks/305-fced91c3443b6178.js +1 -0
  481. package/.next-prod/static/chunks/3072.b6da96c10080c967.js +1 -0
  482. package/.next-prod/static/chunks/3074.911584369786c26c.js +1 -0
  483. package/.next-prod/static/chunks/3077.bf82c0c332cc9fec.js +1 -0
  484. package/.next-prod/static/chunks/3082.159e4ab8f0572597.js +1 -0
  485. package/.next-prod/static/chunks/3095.8cd478c42cee505a.js +1 -0
  486. package/.next-prod/static/chunks/3111.1cf85db2faeb20cc.js +1 -0
  487. package/.next-prod/static/chunks/3126.c89ab7ce8e10978e.js +1 -0
  488. package/.next-prod/static/chunks/3175.538ce7aec634bddb.js +1 -0
  489. package/.next-prod/static/chunks/3186.3665756f8aae3eb7.js +1 -0
  490. package/.next-prod/static/chunks/3194.5a331fb5e3dc34e9.js +1 -0
  491. package/.next-prod/static/chunks/3229.5e91f7d0b135266b.js +1 -0
  492. package/.next-prod/static/chunks/327.8ecab0b86d52b597.js +1 -0
  493. package/.next-prod/static/chunks/3274.858f7f9216c8b074.js +1 -0
  494. package/.next-prod/static/chunks/3286.196c508356bb0b66.js +1 -0
  495. package/.next-prod/static/chunks/3288.f210cd6796271d4f.js +1 -0
  496. package/.next-prod/static/chunks/3290.b5ba2646ad49c9fd.js +1 -0
  497. package/.next-prod/static/chunks/3304.16305e84f4ff6598.js +1 -0
  498. package/.next-prod/static/chunks/3313.471138e5504646a9.js +1 -0
  499. package/.next-prod/static/chunks/3324.85e21e3313d0901c.js +1 -0
  500. package/.next-prod/static/chunks/3392.460f5a753531f501.js +1 -0
  501. package/.next-prod/static/chunks/34.ce581867cf95e24b.js +1 -0
  502. package/.next-prod/static/chunks/3419.78b520dab7e2f96d.js +1 -0
  503. package/.next-prod/static/chunks/3437.0ad1ecc8c5b8a679.js +1 -0
  504. package/.next-prod/static/chunks/3476.246c30b47bded3b7.js +1 -0
  505. package/.next-prod/static/chunks/3483.fc2a0b1185dbaa5d.js +1 -0
  506. package/.next-prod/static/chunks/3492.ca55498822ad7796.js +1 -0
  507. package/.next-prod/static/chunks/3530-6d8abfd0e950d439.js +14 -0
  508. package/.next-prod/static/chunks/36.b4a553bf2106f6d3.js +1 -0
  509. package/.next-prod/static/chunks/3613.9a37e282a0b018d7.js +1 -0
  510. package/.next-prod/static/chunks/3682.d8c0079db560c625.js +1 -0
  511. package/.next-prod/static/chunks/3695-f14fb3e48483755c.js +18 -0
  512. package/.next-prod/static/chunks/376.9e742ff6919b2b54.js +1 -0
  513. package/.next-prod/static/chunks/3782.8de9ba0149339c0c.js +1 -0
  514. package/.next-prod/static/chunks/3787.78ebe68a043f50ce.js +1 -0
  515. package/.next-prod/static/chunks/3794-337d1ca25ad99a89.js +2 -0
  516. package/.next-prod/static/chunks/3860.be5b243bf7d6618c.js +1 -0
  517. package/.next-prod/static/chunks/3873.72a9a21509f713f7.js +1 -0
  518. package/.next-prod/static/chunks/392.3cad93691f1b7360.js +1 -0
  519. package/.next-prod/static/chunks/3942.00e2e29e2d62b039.js +1 -0
  520. package/.next-prod/static/chunks/3979.cea8623f6e9f83ea.js +1 -0
  521. package/.next-prod/static/chunks/400.59979e0d3ae126e4.js +1 -0
  522. package/.next-prod/static/chunks/4053.90d71fcbe4ffd852.js +1 -0
  523. package/.next-prod/static/chunks/4080.08a21dae9e93c547.js +1 -0
  524. package/.next-prod/static/chunks/4163.c6ebefdd9aa5c358.js +1 -0
  525. package/.next-prod/static/chunks/4174.9e84de8f8816fe01.js +1 -0
  526. package/.next-prod/static/chunks/4223.c10556cd92fc8018.js +1 -0
  527. package/.next-prod/static/chunks/4240-38a224bd376cc8a0.js +1 -0
  528. package/.next-prod/static/chunks/4242.3a66c58375424a5b.js +1 -0
  529. package/.next-prod/static/chunks/425.9a3434a28926566a.js +1 -0
  530. package/.next-prod/static/chunks/4275.8f2e531757c2a813.js +1 -0
  531. package/.next-prod/static/chunks/4295.6c0f4838b0c9c69d.js +1 -0
  532. package/.next-prod/static/chunks/4309.a887a10e84c44f9e.js +1 -0
  533. package/.next-prod/static/chunks/4350.b9d80827e8eee01a.js +1 -0
  534. package/.next-prod/static/chunks/4357.05060a5a3fea9ff1.js +1 -0
  535. package/.next-prod/static/chunks/4358.f15dd467571f7594.js +1 -0
  536. package/.next-prod/static/chunks/4367.2610339aa03a9fb3.js +1 -0
  537. package/.next-prod/static/chunks/4370.ac13b62c811f7ede.js +1 -0
  538. package/.next-prod/static/chunks/4402d2ac.d0d1b1777a45e0b2.js +1 -0
  539. package/.next-prod/static/chunks/4474.053807fa34066566.js +1 -0
  540. package/.next-prod/static/chunks/4539.559c223da16b0282.js +1 -0
  541. package/.next-prod/static/chunks/4540.03df20c499bca840.js +1 -0
  542. package/.next-prod/static/chunks/4553.a16dba8d6d03226c.js +1 -0
  543. package/.next-prod/static/chunks/4567.d405b50b917bd2c2.js +1 -0
  544. package/.next-prod/static/chunks/4583.2a5df6eb3a6ea30b.js +1 -0
  545. package/.next-prod/static/chunks/4593.676ac488744e1af5.js +1 -0
  546. package/.next-prod/static/chunks/4608.1ff246d6b4c771f8.js +1 -0
  547. package/.next-prod/static/chunks/4634.0332a56fdb8e26c0.js +1 -0
  548. package/.next-prod/static/chunks/4650.61aec912b756287b.js +1 -0
  549. package/.next-prod/static/chunks/4659.b8e05ba7cbf46556.js +1 -0
  550. package/.next-prod/static/chunks/4678.867dfae26694be02.js +1 -0
  551. package/.next-prod/static/chunks/4699.8603b2742a761084.js +1 -0
  552. package/.next-prod/static/chunks/4823.907850963b2bcb70.js +1 -0
  553. package/.next-prod/static/chunks/4829.402ec60139d36417.js +1 -0
  554. package/.next-prod/static/chunks/4892.1674cc00200143ba.js +1 -0
  555. package/.next-prod/static/chunks/4900.b723a916eafdf743.js +1 -0
  556. package/.next-prod/static/chunks/4903.004f583a12223dac.js +1 -0
  557. package/.next-prod/static/chunks/4963.0f6678151a159143.js +1 -0
  558. package/.next-prod/static/chunks/4969.1cb10af9489ea295.js +1 -0
  559. package/.next-prod/static/chunks/4976.8870319ffbd1c31f.js +1 -0
  560. package/.next-prod/static/chunks/4bd1b696-e5d7c65570c947b7.js +1 -0
  561. package/.next-prod/static/chunks/4ca0cff5.07efe2bc8f09d72e.js +1 -0
  562. package/.next-prod/static/chunks/5005.cf839e066f3d3efe.js +1 -0
  563. package/.next-prod/static/chunks/5019.2906d96e77b98f68.js +198 -0
  564. package/.next-prod/static/chunks/5025.b597364f0cf8b85a.js +1 -0
  565. package/.next-prod/static/chunks/5061.025d30c3123eeaf6.js +1 -0
  566. package/.next-prod/static/chunks/5136.ac897c2a56ee392f.js +1 -0
  567. package/.next-prod/static/chunks/5139.83dc2c84aeea716b.js +63 -0
  568. package/.next-prod/static/chunks/5183.2e5c895a2be76262.js +1 -0
  569. package/.next-prod/static/chunks/5199.5faac6a2cc104a4c.js +36 -0
  570. package/.next-prod/static/chunks/5269.25d99df0164521ad.js +23 -0
  571. package/.next-prod/static/chunks/5318.d48b9096df0171df.js +1 -0
  572. package/.next-prod/static/chunks/5320.191be461ff110fb3.js +1 -0
  573. package/.next-prod/static/chunks/5325.aad15a16a5d57787.js +1 -0
  574. package/.next-prod/static/chunks/5331.4d5d42e5253dbee2.js +1 -0
  575. package/.next-prod/static/chunks/5338.76f7773c317f3142.js +1 -0
  576. package/.next-prod/static/chunks/5347.3192e0021174aaa8.js +1 -0
  577. package/.next-prod/static/chunks/5364.2e5ba480c24d7854.js +148 -0
  578. package/.next-prod/static/chunks/5375.ebc026e6140b52f1.js +1 -0
  579. package/.next-prod/static/chunks/5394.9d260f733e336357.js +287 -0
  580. package/.next-prod/static/chunks/53c1bd3f.2911e2bac119d910.js +1 -0
  581. package/.next-prod/static/chunks/541.cfa15b606745131a.js +1 -0
  582. package/.next-prod/static/chunks/5424.4d62f7ee887cd8b9.js +1 -0
  583. package/.next-prod/static/chunks/5482.0907421e6bf5eeec.js +1 -0
  584. package/.next-prod/static/chunks/5491.5cc285c4b84dac30.js +1 -0
  585. package/.next-prod/static/chunks/5493-9f80ad2c7c9cf840.js +1 -0
  586. package/.next-prod/static/chunks/5498.fa0a196807d6cd2f.js +1 -0
  587. package/.next-prod/static/chunks/54a60aa6-f60235f3d6b54466.js +79 -0
  588. package/.next-prod/static/chunks/5518.6c3dc9afe81a566b.js +1 -0
  589. package/.next-prod/static/chunks/5520.eab85d7487e77510.js +1 -0
  590. package/.next-prod/static/chunks/5553.75df19e3cc1246d6.js +1 -0
  591. package/.next-prod/static/chunks/5575.3d90c643343a1329.js +1 -0
  592. package/.next-prod/static/chunks/5645.9002948124d25d41.js +1 -0
  593. package/.next-prod/static/chunks/5670.2a1b27a6fdb7aa6b.js +1 -0
  594. package/.next-prod/static/chunks/5690.d30877807cf5c7eb.js +1 -0
  595. package/.next-prod/static/chunks/570e4624.a82467c542429379.js +1 -0
  596. package/.next-prod/static/chunks/5712.574fca2d5f06483a.js +1 -0
  597. package/.next-prod/static/chunks/5728.8ef773d61765855e.js +1 -0
  598. package/.next-prod/static/chunks/5750.aa57d25b74640d23.js +1 -0
  599. package/.next-prod/static/chunks/5755.00015c284ed6fb39.js +1 -0
  600. package/.next-prod/static/chunks/5788.e5d5040b65e5edf3.js +1 -0
  601. package/.next-prod/static/chunks/579.33fc87fb95163c6a.js +1 -0
  602. package/.next-prod/static/chunks/583.5061a2f9e7b7e97d.js +1 -0
  603. package/.next-prod/static/chunks/5920.9db223329ee9e11a.js +1 -0
  604. package/.next-prod/static/chunks/5922.0d75c174139a59a4.js +1 -0
  605. package/.next-prod/static/chunks/5937.0827b5b3eb831ff0.js +1 -0
  606. package/.next-prod/static/chunks/5968.63d5869783fad06f.js +1 -0
  607. package/.next-prod/static/chunks/5997.226c07d9e6c496e0.js +1 -0
  608. package/.next-prod/static/chunks/6026.4027a04696ef04db.js +1 -0
  609. package/.next-prod/static/chunks/6046.00d36aea7fd5b147.js +1 -0
  610. package/.next-prod/static/chunks/6089.2dd351186ec85cc3.js +1 -0
  611. package/.next-prod/static/chunks/6099.43e6595fcf24fc33.js +1 -0
  612. package/.next-prod/static/chunks/6110.5ce3f75fced27aaf.js +1 -0
  613. package/.next-prod/static/chunks/6144.f967a8228bcdf663.js +1 -0
  614. package/.next-prod/static/chunks/6155.e6cf0ef7c818caa9.js +1 -0
  615. package/.next-prod/static/chunks/6166.ecd82a9dcb484b97.js +1 -0
  616. package/.next-prod/static/chunks/624.2dd909fbfce98c5e.js +1 -0
  617. package/.next-prod/static/chunks/6290.e14cf4fc52dd4539.js +1 -0
  618. package/.next-prod/static/chunks/6293.5914fa73a9f7e777.js +1 -0
  619. package/.next-prod/static/chunks/6311.5b9c1f74df9a8f67.js +1 -0
  620. package/.next-prod/static/chunks/6331.758f2f66b92cada9.js +1 -0
  621. package/.next-prod/static/chunks/6339.bc9301cc22898be0.js +1 -0
  622. package/.next-prod/static/chunks/6360.ff0a9063773daeeb.js +1 -0
  623. package/.next-prod/static/chunks/6383.ca3e074feb80c69c.js +1 -0
  624. package/.next-prod/static/chunks/640.5bf1e25d0bddf875.js +1 -0
  625. package/.next-prod/static/chunks/6402.a0070d7688ed986b.js +1 -0
  626. package/.next-prod/static/chunks/6412.089ee787a294d10b.js +1 -0
  627. package/.next-prod/static/chunks/6455.12b78a2660d609eb.js +1 -0
  628. package/.next-prod/static/chunks/6460.8ce93fe47320f6c5.js +1 -0
  629. package/.next-prod/static/chunks/6563.5d618b608750f4dc.js +1 -0
  630. package/.next-prod/static/chunks/6572.ca2463823b9b01a0.js +1 -0
  631. package/.next-prod/static/chunks/6580.75d53830b434451f.js +1 -0
  632. package/.next-prod/static/chunks/6588.0fbca957af7d9e6a.js +1 -0
  633. package/.next-prod/static/chunks/6647.584c5d5cd8dfdb5a.js +1 -0
  634. package/.next-prod/static/chunks/6686.796c782c33ab8ca9.js +1 -0
  635. package/.next-prod/static/chunks/6701.bff0efb979f71a17.js +1 -0
  636. package/.next-prod/static/chunks/6704.f280f0ad0f5d8644.js +1 -0
  637. package/.next-prod/static/chunks/6729.0f91dcaaaffa2ed4.js +1 -0
  638. package/.next-prod/static/chunks/6741.06fdaf122961074e.js +1 -0
  639. package/.next-prod/static/chunks/6846.91283f709c40802c.js +1 -0
  640. package/.next-prod/static/chunks/6859.bacad166ee995fe0.js +1 -0
  641. package/.next-prod/static/chunks/6871.38519003bd87ac1c.js +62 -0
  642. package/.next-prod/static/chunks/6887.6c81234d73740fb9.js +1 -0
  643. package/.next-prod/static/chunks/6927.aa3914b5fb0d14d4.js +1 -0
  644. package/.next-prod/static/chunks/6931.3c90e9fe0f7f1e66.js +1 -0
  645. package/.next-prod/static/chunks/6938.0ccf683bd8aa8410.js +1 -0
  646. package/.next-prod/static/chunks/6948.2719ed8731963209.js +1 -0
  647. package/.next-prod/static/chunks/6959.5a803faf27f88e9f.js +1 -0
  648. package/.next-prod/static/chunks/6962.3bbd080592d4efa0.js +64 -0
  649. package/.next-prod/static/chunks/698.e0dda03fd303b96b.js +1 -0
  650. package/.next-prod/static/chunks/700.65a02f6a597083dc.js +9 -0
  651. package/.next-prod/static/chunks/7021.b71240b1d5f6fbe4.js +1 -0
  652. package/.next-prod/static/chunks/7040.b8e05ba7cbf46556.js +1 -0
  653. package/.next-prod/static/chunks/7041.174bf29bd837f06d.js +1 -0
  654. package/.next-prod/static/chunks/7082.fc816f91214026d7.js +1 -0
  655. package/.next-prod/static/chunks/7084.921c9737b83f55eb.js +1 -0
  656. package/.next-prod/static/chunks/7085.b16e7c0e24741232.js +215 -0
  657. package/.next-prod/static/chunks/70e0d97a-6903b8594c742784.js +1 -0
  658. package/.next-prod/static/chunks/7113.86e40b60c804b8c5.js +1 -0
  659. package/.next-prod/static/chunks/7130.8d24694735826c22.js +1 -0
  660. package/.next-prod/static/chunks/7142.dbd2cf8141eece5e.js +1 -0
  661. package/.next-prod/static/chunks/7152.c7b7f1f5e9622f21.js +1 -0
  662. package/.next-prod/static/chunks/7182.b747e3ef1524157a.js +1 -0
  663. package/.next-prod/static/chunks/7227.a6b2f01487bb3d9d.js +1 -0
  664. package/.next-prod/static/chunks/7258.6cbe24c3bcb63d1d.js +1 -0
  665. package/.next-prod/static/chunks/7425.8b47c8e398a12dd8.js +1 -0
  666. package/.next-prod/static/chunks/7443.124211e5abc05d3f.js +93 -0
  667. package/.next-prod/static/chunks/7455.71d54397710b923c.js +1 -0
  668. package/.next-prod/static/chunks/7465.867e8ff655666413.js +1 -0
  669. package/.next-prod/static/chunks/7479.433d3878625aba75.js +24 -0
  670. package/.next-prod/static/chunks/7524.9528295a19a5837a.js +1 -0
  671. package/.next-prod/static/chunks/7525.f433aaf1fe40c90a.js +1 -0
  672. package/.next-prod/static/chunks/7547.54b68d37b50c2f21.js +43 -0
  673. package/.next-prod/static/chunks/7557.bdc743175125b3d8.js +1 -0
  674. package/.next-prod/static/chunks/7610.b1439345dbcf285d.js +1 -0
  675. package/.next-prod/static/chunks/7625.ab66bd50d2fb61a4.js +1 -0
  676. package/.next-prod/static/chunks/7635.166d83de1d29e758.js +1 -0
  677. package/.next-prod/static/chunks/7636.bf91320a9ff695af.js +1 -0
  678. package/.next-prod/static/chunks/7650.18f74243e9325242.js +1 -0
  679. package/.next-prod/static/chunks/7785.1402a4110c300764.js +1 -0
  680. package/.next-prod/static/chunks/7799.f90cda9aba4e0e77.js +1 -0
  681. package/.next-prod/static/chunks/7819.3c56f48c0dc5ad5d.js +1 -0
  682. package/.next-prod/static/chunks/7844.2bb29faa262f313e.js +1 -0
  683. package/.next-prod/static/chunks/7846.c9705c044ab8f87a.js +1 -0
  684. package/.next-prod/static/chunks/7874.8db6929b94cdf697.js +1 -0
  685. package/.next-prod/static/chunks/7884.79af1a2f4511cea5.js +1 -0
  686. package/.next-prod/static/chunks/7889.af3e581842f34c28.js +1 -0
  687. package/.next-prod/static/chunks/7921.c361f794cc208e06.js +1 -0
  688. package/.next-prod/static/chunks/794.06b1ae4fc9cc10a9.js +1 -0
  689. package/.next-prod/static/chunks/7977.80e4daa080a79c39.js +1 -0
  690. package/.next-prod/static/chunks/799ebd4e.ccb85c56e9216a38.js +1 -0
  691. package/.next-prod/static/chunks/7d29de82.30ff86a90cbfd921.js +1 -0
  692. package/.next-prod/static/chunks/8113.907baefc7227cfb8.js +1 -0
  693. package/.next-prod/static/chunks/8132.74491162f08af899.js +1 -0
  694. package/.next-prod/static/chunks/816.ccc7dc455fcaf7c0.js +1 -0
  695. package/.next-prod/static/chunks/8192.5918d83ac6a0e2dc.js +1 -0
  696. package/.next-prod/static/chunks/8243.aa3ccfb41335eb1f.js +1 -0
  697. package/.next-prod/static/chunks/8257.dd8f651f1a43fee2.js +1 -0
  698. package/.next-prod/static/chunks/8288.8ff86c6a3bee6b7c.js +1 -0
  699. package/.next-prod/static/chunks/830.e49b226c07876df4.js +1 -0
  700. package/.next-prod/static/chunks/8317.9c6f22e0c8cd07a8.js +141 -0
  701. package/.next-prod/static/chunks/8318.a70d7a81445f8cf9.js +1 -0
  702. package/.next-prod/static/chunks/840.a9c535f8868cc4bd.js +1 -0
  703. package/.next-prod/static/chunks/8406.955ccfbb4b70b8c3.js +1 -0
  704. package/.next-prod/static/chunks/8430.b1f802dcffa41626.js +1 -0
  705. package/.next-prod/static/chunks/8432.bd66ac287c569996.js +1 -0
  706. package/.next-prod/static/chunks/8457.b61d96d8d30215fc.js +1 -0
  707. package/.next-prod/static/chunks/8496.046efd6301dd804f.js +1 -0
  708. package/.next-prod/static/chunks/8545.be0c9eea6aae5971.js +1 -0
  709. package/.next-prod/static/chunks/8555.ab3ee6358f1d64da.js +1 -0
  710. package/.next-prod/static/chunks/862.7cd3197e1ba5fd00.js +1 -0
  711. package/.next-prod/static/chunks/8656.2ceb4e5ff5df2fca.js +1 -0
  712. package/.next-prod/static/chunks/8670.90ede75068758e82.js +1 -0
  713. package/.next-prod/static/chunks/8704.a1003918da6654da.js +1 -0
  714. package/.next-prod/static/chunks/8773.614f1f4f0f845c5e.js +1 -0
  715. package/.next-prod/static/chunks/8776.6fb12270eca03fd3.js +149 -0
  716. package/.next-prod/static/chunks/8848.b0a10ee0b0a2b91b.js +1 -0
  717. package/.next-prod/static/chunks/8863.4a09596cf95e996a.js +82 -0
  718. package/.next-prod/static/chunks/893.c469257bbbbca4f5.js +1 -0
  719. package/.next-prod/static/chunks/8947.31d3d834d8281fd9.js +1 -0
  720. package/.next-prod/static/chunks/9005.473ce947d16e7f65.js +1 -0
  721. package/.next-prod/static/chunks/9006.11537833945ec4b8.js +1 -0
  722. package/.next-prod/static/chunks/9015.c4e40321a6503a1b.js +1 -0
  723. package/.next-prod/static/chunks/90542734.58d84d15ab7a8c98.js +1 -0
  724. package/.next-prod/static/chunks/9114-abef8471519b7dee.js +1 -0
  725. package/.next-prod/static/chunks/9136.191be42a2fee842c.js +1 -0
  726. package/.next-prod/static/chunks/9178.48a90097ee3f0b0c.js +1 -0
  727. package/.next-prod/static/chunks/9186.3af6fcd13ab752fa.js +1 -0
  728. package/.next-prod/static/chunks/9189.3e9d29bf275ec462.js +1 -0
  729. package/.next-prod/static/chunks/9220.0206dd0432eca784.js +1 -0
  730. package/.next-prod/static/chunks/9224.401f9320ee58570b.js +1 -0
  731. package/.next-prod/static/chunks/9233.124321d2f404e01c.js +1 -0
  732. package/.next-prod/static/chunks/9240.d38ddbe94e0bf128.js +1 -0
  733. package/.next-prod/static/chunks/9261.303cbbe69262a995.js +1 -0
  734. package/.next-prod/static/chunks/9267.fbfd65ea31e7448c.js +1 -0
  735. package/.next-prod/static/chunks/9294.a20485f3282321b3.js +1 -0
  736. package/.next-prod/static/chunks/92e53eb0.097194be4a0e7d55.js +1 -0
  737. package/.next-prod/static/chunks/9302.726b065f2df0323a.js +1 -0
  738. package/.next-prod/static/chunks/9318.ba24787a52cefe4c.js +56 -0
  739. package/.next-prod/static/chunks/9373.6206c440af44002a.js +1 -0
  740. package/.next-prod/static/chunks/9377.f9db706e76f04afe.js +1 -0
  741. package/.next-prod/static/chunks/9382.bc0e11ecc88dd62c.js +1 -0
  742. package/.next-prod/static/chunks/9421.a5c1dbcfbfdd8f52.js +1 -0
  743. package/.next-prod/static/chunks/9448.2668b3cd408e86de.js +1 -0
  744. package/.next-prod/static/chunks/9466.3dacf5969d47ba2c.js +1 -0
  745. package/.next-prod/static/chunks/9521.e1240eb862eb32dc.js +1 -0
  746. package/.next-prod/static/chunks/9547.7729788fff21926f.js +1 -0
  747. package/.next-prod/static/chunks/9565.8de0671f99d12abe.js +1 -0
  748. package/.next-prod/static/chunks/9569.2f36b2b1c2f838d7.js +1 -0
  749. package/.next-prod/static/chunks/9615.3b62c13af671f714.js +1 -0
  750. package/.next-prod/static/chunks/9648.8235b6fea7087b3a.js +1 -0
  751. package/.next-prod/static/chunks/966.57e4cd93c2368d34.js +1 -0
  752. package/.next-prod/static/chunks/9666.a515fa6d89a71f1c.js +1 -0
  753. package/.next-prod/static/chunks/968.29d4ba7ee8bd5ccb.js +1 -0
  754. package/.next-prod/static/chunks/9680.d5ceac8967e0b6a8.js +1 -0
  755. package/.next-prod/static/chunks/9690.7773c72f0eff6dec.js +1 -0
  756. package/.next-prod/static/chunks/9841.422321143547591a.js +1 -0
  757. package/.next-prod/static/chunks/9842.3b71b65b30d8ef2a.js +1 -0
  758. package/.next-prod/static/chunks/9996.18b7bca2f0ab222e.js +1 -0
  759. package/.next-prod/static/chunks/aaea2bcf-6b3391c26b869501.js +1 -0
  760. package/.next-prod/static/chunks/af7f6608.85a7e1eb0d4130b0.js +53 -0
  761. package/.next-prod/static/chunks/app/_global-error/page-f2ae9d2d29d5fe08.js +1 -0
  762. package/.next-prod/static/chunks/app/_not-found/page-511b5b7e4ffc7ac9.js +1 -0
  763. package/.next-prod/static/chunks/app/api/bash/route-f2ae9d2d29d5fe08.js +1 -0
  764. package/.next-prod/static/chunks/app/api/chat/route-f2ae9d2d29d5fe08.js +1 -0
  765. package/.next-prod/static/chunks/app/api/claude-stats/route-f2ae9d2d29d5fe08.js +1 -0
  766. package/.next-prod/static/chunks/app/api/commands/route-f2ae9d2d29d5fe08.js +1 -0
  767. package/.next-prod/static/chunks/app/api/comments/route-f2ae9d2d29d5fe08.js +1 -0
  768. package/.next-prod/static/chunks/app/api/db/columns/route-f2ae9d2d29d5fe08.js +1 -0
  769. package/.next-prod/static/chunks/app/api/db/connect/route-f2ae9d2d29d5fe08.js +1 -0
  770. package/.next-prod/static/chunks/app/api/db/disconnect/route-f2ae9d2d29d5fe08.js +1 -0
  771. package/.next-prod/static/chunks/app/api/db/export/route-f2ae9d2d29d5fe08.js +1 -0
  772. package/.next-prod/static/chunks/app/api/db/query/route-f2ae9d2d29d5fe08.js +1 -0
  773. package/.next-prod/static/chunks/app/api/db/schemas/route-f2ae9d2d29d5fe08.js +1 -0
  774. package/.next-prod/static/chunks/app/api/extension/version/route-f2ae9d2d29d5fe08.js +1 -0
  775. package/.next-prod/static/chunks/app/api/file/route-f2ae9d2d29d5fe08.js +1 -0
  776. package/.next-prod/static/chunks/app/api/files/blame/route-f2ae9d2d29d5fe08.js +1 -0
  777. package/.next-prod/static/chunks/app/api/files/clipboard/route-f2ae9d2d29d5fe08.js +1 -0
  778. package/.next-prod/static/chunks/app/api/files/copy/route-f2ae9d2d29d5fe08.js +1 -0
  779. package/.next-prod/static/chunks/app/api/files/delete/route-f2ae9d2d29d5fe08.js +1 -0
  780. package/.next-prod/static/chunks/app/api/files/expanded/route-f2ae9d2d29d5fe08.js +1 -0
  781. package/.next-prod/static/chunks/app/api/files/index/route-f2ae9d2d29d5fe08.js +1 -0
  782. package/.next-prod/static/chunks/app/api/files/init/route-f2ae9d2d29d5fe08.js +1 -0
  783. package/.next-prod/static/chunks/app/api/files/paste/route-f2ae9d2d29d5fe08.js +1 -0
  784. package/.next-prod/static/chunks/app/api/files/read/route-f2ae9d2d29d5fe08.js +1 -0
  785. package/.next-prod/static/chunks/app/api/files/readdir/route-f2ae9d2d29d5fe08.js +1 -0
  786. package/.next-prod/static/chunks/app/api/files/recent/route-f2ae9d2d29d5fe08.js +1 -0
  787. package/.next-prod/static/chunks/app/api/files/save/route-f2ae9d2d29d5fe08.js +1 -0
  788. package/.next-prod/static/chunks/app/api/files/search/route-f2ae9d2d29d5fe08.js +1 -0
  789. package/.next-prod/static/chunks/app/api/git/branch-diff/route-f2ae9d2d29d5fe08.js +1 -0
  790. package/.next-prod/static/chunks/app/api/git/branches/route-f2ae9d2d29d5fe08.js +1 -0
  791. package/.next-prod/static/chunks/app/api/git/commit-diff/route-f2ae9d2d29d5fe08.js +1 -0
  792. package/.next-prod/static/chunks/app/api/git/commits/route-f2ae9d2d29d5fe08.js +1 -0
  793. package/.next-prod/static/chunks/app/api/git/diff/route-f2ae9d2d29d5fe08.js +1 -0
  794. package/.next-prod/static/chunks/app/api/git/discard/route-f2ae9d2d29d5fe08.js +1 -0
  795. package/.next-prod/static/chunks/app/api/git/stage/route-f2ae9d2d29d5fe08.js +1 -0
  796. package/.next-prod/static/chunks/app/api/git/status/route-f2ae9d2d29d5fe08.js +1 -0
  797. package/.next-prod/static/chunks/app/api/git/unstage/route-f2ae9d2d29d5fe08.js +1 -0
  798. package/.next-prod/static/chunks/app/api/git/worktree/route-f2ae9d2d29d5fe08.js +1 -0
  799. package/.next-prod/static/chunks/app/api/global-state/route-f2ae9d2d29d5fe08.js +1 -0
  800. package/.next-prod/static/chunks/app/api/jupyter/load/route-f2ae9d2d29d5fe08.js +1 -0
  801. package/.next-prod/static/chunks/app/api/jupyter/save/route-f2ae9d2d29d5fe08.js +1 -0
  802. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-f2ae9d2d29d5fe08.js +1 -0
  803. package/.next-prod/static/chunks/app/api/lsp/definition/route-f2ae9d2d29d5fe08.js +1 -0
  804. package/.next-prod/static/chunks/app/api/lsp/hover/route-f2ae9d2d29d5fe08.js +1 -0
  805. package/.next-prod/static/chunks/app/api/lsp/references/route-f2ae9d2d29d5fe08.js +1 -0
  806. package/.next-prod/static/chunks/app/api/lsp/status/route-f2ae9d2d29d5fe08.js +1 -0
  807. package/.next-prod/static/chunks/app/api/lsp/warmup/route-f2ae9d2d29d5fe08.js +1 -0
  808. package/.next-prod/static/chunks/app/api/mysql/columns/route-f2ae9d2d29d5fe08.js +1 -0
  809. package/.next-prod/static/chunks/app/api/mysql/connect/route-f2ae9d2d29d5fe08.js +1 -0
  810. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-f2ae9d2d29d5fe08.js +1 -0
  811. package/.next-prod/static/chunks/app/api/mysql/export/route-f2ae9d2d29d5fe08.js +1 -0
  812. package/.next-prod/static/chunks/app/api/mysql/query/route-f2ae9d2d29d5fe08.js +1 -0
  813. package/.next-prod/static/chunks/app/api/mysql/schemas/route-f2ae9d2d29d5fe08.js +1 -0
  814. package/.next-prod/static/chunks/app/api/note/route-f2ae9d2d29d5fe08.js +1 -0
  815. package/.next-prod/static/chunks/app/api/open-cursor/route-f2ae9d2d29d5fe08.js +1 -0
  816. package/.next-prod/static/chunks/app/api/open-vscode/route-f2ae9d2d29d5fe08.js +1 -0
  817. package/.next-prod/static/chunks/app/api/pick-folder/route-f2ae9d2d29d5fe08.js +1 -0
  818. package/.next-prod/static/chunks/app/api/pinned-sessions/route-f2ae9d2d29d5fe08.js +1 -0
  819. package/.next-prod/static/chunks/app/api/project-settings/route-f2ae9d2d29d5fe08.js +1 -0
  820. package/.next-prod/static/chunks/app/api/project-state/route-f2ae9d2d29d5fe08.js +1 -0
  821. package/.next-prod/static/chunks/app/api/projects/route-f2ae9d2d29d5fe08.js +1 -0
  822. package/.next-prod/static/chunks/app/api/redis/command/route-f2ae9d2d29d5fe08.js +1 -0
  823. package/.next-prod/static/chunks/app/api/redis/connect/route-f2ae9d2d29d5fe08.js +1 -0
  824. package/.next-prod/static/chunks/app/api/redis/delete/route-f2ae9d2d29d5fe08.js +1 -0
  825. package/.next-prod/static/chunks/app/api/redis/disconnect/route-f2ae9d2d29d5fe08.js +1 -0
  826. package/.next-prod/static/chunks/app/api/redis/get/route-f2ae9d2d29d5fe08.js +1 -0
  827. package/.next-prod/static/chunks/app/api/redis/keys/route-f2ae9d2d29d5fe08.js +1 -0
  828. package/.next-prod/static/chunks/app/api/redis/set/route-f2ae9d2d29d5fe08.js +1 -0
  829. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-f2ae9d2d29d5fe08.js +1 -0
  830. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-f2ae9d2d29d5fe08.js +1 -0
  831. package/.next-prod/static/chunks/app/api/review/[id]/route-f2ae9d2d29d5fe08.js +1 -0
  832. package/.next-prod/static/chunks/app/api/review/identify/route-f2ae9d2d29d5fe08.js +1 -0
  833. package/.next-prod/static/chunks/app/api/review/order/route-f2ae9d2d29d5fe08.js +1 -0
  834. package/.next-prod/static/chunks/app/api/review/route-f2ae9d2d29d5fe08.js +1 -0
  835. package/.next-prod/static/chunks/app/api/review/share-info/route-f2ae9d2d29d5fe08.js +1 -0
  836. package/.next-prod/static/chunks/app/api/review/users/route-f2ae9d2d29d5fe08.js +1 -0
  837. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-f2ae9d2d29d5fe08.js +1 -0
  838. package/.next-prod/static/chunks/app/api/services/config/route-f2ae9d2d29d5fe08.js +1 -0
  839. package/.next-prod/static/chunks/app/api/services/scripts/route-f2ae9d2d29d5fe08.js +1 -0
  840. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-f2ae9d2d29d5fe08.js +1 -0
  841. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-f2ae9d2d29d5fe08.js +1 -0
  842. package/.next-prod/static/chunks/app/api/session-by-path/route-f2ae9d2d29d5fe08.js +1 -0
  843. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-f2ae9d2d29d5fe08.js +1 -0
  844. package/.next-prod/static/chunks/app/api/sessions/projects/route-f2ae9d2d29d5fe08.js +1 -0
  845. package/.next-prod/static/chunks/app/api/sessions/route-f2ae9d2d29d5fe08.js +1 -0
  846. package/.next-prod/static/chunks/app/api/settings/route-f2ae9d2d29d5fe08.js +1 -0
  847. package/.next-prod/static/chunks/app/api/terminal/aliases/route-f2ae9d2d29d5fe08.js +1 -0
  848. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-f2ae9d2d29d5fe08.js +1 -0
  849. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-f2ae9d2d29d5fe08.js +1 -0
  850. package/.next-prod/static/chunks/app/api/terminal/env/route-f2ae9d2d29d5fe08.js +1 -0
  851. package/.next-prod/static/chunks/app/api/terminal/history/route-f2ae9d2d29d5fe08.js +1 -0
  852. package/.next-prod/static/chunks/app/api/version/route-f2ae9d2d29d5fe08.js +1 -0
  853. package/.next-prod/static/chunks/app/global-error-3c48d7d42c672863.js +1 -0
  854. package/.next-prod/static/chunks/app/layout-44210aade5d56585.js +1 -0
  855. package/.next-prod/static/chunks/app/manifest.webmanifest/route-f2ae9d2d29d5fe08.js +1 -0
  856. package/.next-prod/static/chunks/app/page-cc2bf3ca4c337090.js +1 -0
  857. package/.next-prod/static/chunks/app/project/page-fb1ff1d5d382977d.js +25 -0
  858. package/.next-prod/static/chunks/app/review/[id]/page-64f18d8d2476753c.js +1 -0
  859. package/.next-prod/static/chunks/ce16f5a9.5c7821b201f35593.js +1 -0
  860. package/.next-prod/static/chunks/cee15710.869cef5f741d40c2.js +1 -0
  861. package/.next-prod/static/chunks/cfdf2ac7.4506d3f72b310564.js +1 -0
  862. package/.next-prod/static/chunks/d1c28714.f52cffdd449a2d14.js +1 -0
  863. package/.next-prod/static/chunks/d3ac728e-d1ae8819b8f0be6a.js +1 -0
  864. package/.next-prod/static/chunks/e868780c.a081703edc1bc551.js +18 -0
  865. package/.next-prod/static/chunks/framework-81b2e59ffe13bb24.js +1 -0
  866. package/.next-prod/static/chunks/main-ac50dc1e450895a2.js +5 -0
  867. package/.next-prod/static/chunks/main-app-b76c0df33a946918.js +1 -0
  868. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-f2ae9d2d29d5fe08.js +1 -0
  869. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-f2ae9d2d29d5fe08.js +1 -0
  870. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-f2ae9d2d29d5fe08.js +1 -0
  871. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-f2ae9d2d29d5fe08.js +1 -0
  872. package/.next-prod/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  873. package/.next-prod/static/chunks/webpack-67d02a2a41508d41.js +1 -0
  874. package/.next-prod/static/css/2163ab5e45fedc6a.css +1 -0
  875. package/.next-prod/static/css/dd86f60184ab34a9.css +3 -0
  876. package/.next-prod/static/media/0086f8992871c45b-s.woff2 +0 -0
  877. package/.next-prod/static/media/03b436aa846269de-s.woff2 +0 -0
  878. package/.next-prod/static/media/08aedeceaf1dcd57-s.woff2 +0 -0
  879. package/.next-prod/static/media/0aa834ed78bf6d07-s.woff2 +0 -0
  880. package/.next-prod/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  881. package/.next-prod/static/media/21350d82a1f187e9-s.woff2 +0 -0
  882. package/.next-prod/static/media/36008747766f78c6-s.woff2 +0 -0
  883. package/.next-prod/static/media/5c0c2bcbaa4149ca-s.p.woff2 +0 -0
  884. package/.next-prod/static/media/67957d42bae0796d-s.woff2 +0 -0
  885. package/.next-prod/static/media/6d38f9d4e0f4772b-s.woff2 +0 -0
  886. package/.next-prod/static/media/886030b0b59bc5a7-s.woff2 +0 -0
  887. package/.next-prod/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  888. package/.next-prod/static/media/939c4f875ee75fbb-s.woff2 +0 -0
  889. package/.next-prod/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
  890. package/.next-prod/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
  891. package/.next-prod/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
  892. package/.next-prod/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
  893. package/.next-prod/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
  894. package/.next-prod/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
  895. package/.next-prod/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
  896. package/.next-prod/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
  897. package/.next-prod/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
  898. package/.next-prod/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
  899. package/.next-prod/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
  900. package/.next-prod/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
  901. package/.next-prod/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
  902. package/.next-prod/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
  903. package/.next-prod/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
  904. package/.next-prod/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
  905. package/.next-prod/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
  906. package/.next-prod/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
  907. package/.next-prod/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
  908. package/.next-prod/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
  909. package/.next-prod/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
  910. package/.next-prod/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
  911. package/.next-prod/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
  912. package/.next-prod/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
  913. package/.next-prod/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
  914. package/.next-prod/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
  915. package/.next-prod/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
  916. package/.next-prod/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
  917. package/.next-prod/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
  918. package/.next-prod/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
  919. package/.next-prod/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
  920. package/.next-prod/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
  921. package/.next-prod/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
  922. package/.next-prod/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
  923. package/.next-prod/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
  924. package/.next-prod/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
  925. package/.next-prod/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
  926. package/.next-prod/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
  927. package/.next-prod/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
  928. package/.next-prod/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
  929. package/.next-prod/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
  930. package/.next-prod/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
  931. package/.next-prod/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
  932. package/.next-prod/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
  933. package/.next-prod/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
  934. package/.next-prod/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
  935. package/.next-prod/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
  936. package/.next-prod/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
  937. package/.next-prod/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
  938. package/.next-prod/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
  939. package/.next-prod/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
  940. package/.next-prod/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
  941. package/.next-prod/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
  942. package/.next-prod/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
  943. package/.next-prod/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
  944. package/.next-prod/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
  945. package/.next-prod/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
  946. package/.next-prod/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
  947. package/.next-prod/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
  948. package/.next-prod/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
  949. package/.next-prod/static/media/ab00a911ac2adf48-s.woff2 +0 -0
  950. package/.next-prod/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  951. package/.next-prod/static/media/bb3ef058b751a6ad-s.p.woff2 +0 -0
  952. package/.next-prod/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  953. package/.next-prod/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  954. package/.next-prod/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  955. package/.next-prod/static/media/f911b923c6adde36-s.woff2 +0 -0
  956. package/.next-prod/trace +12 -0
  957. package/.next-prod/trace-build +1 -0
  958. package/.next-prod/types/app/api/bash/route.ts +350 -0
  959. package/.next-prod/types/app/api/chat/route.ts +350 -0
  960. package/.next-prod/types/app/api/claude-stats/route.ts +350 -0
  961. package/.next-prod/types/app/api/commands/route.ts +350 -0
  962. package/.next-prod/types/app/api/comments/route.ts +350 -0
  963. package/.next-prod/types/app/api/db/columns/route.ts +350 -0
  964. package/.next-prod/types/app/api/db/connect/route.ts +350 -0
  965. package/.next-prod/types/app/api/db/disconnect/route.ts +350 -0
  966. package/.next-prod/types/app/api/db/export/route.ts +350 -0
  967. package/.next-prod/types/app/api/db/query/route.ts +350 -0
  968. package/.next-prod/types/app/api/db/schemas/route.ts +350 -0
  969. package/.next-prod/types/app/api/extension/version/route.ts +350 -0
  970. package/.next-prod/types/app/api/file/route.ts +350 -0
  971. package/.next-prod/types/app/api/files/blame/route.ts +350 -0
  972. package/.next-prod/types/app/api/files/clipboard/route.ts +350 -0
  973. package/.next-prod/types/app/api/files/copy/route.ts +350 -0
  974. package/.next-prod/types/app/api/files/delete/route.ts +350 -0
  975. package/.next-prod/types/app/api/files/expanded/route.ts +350 -0
  976. package/.next-prod/types/app/api/files/index/route.ts +350 -0
  977. package/.next-prod/types/app/api/files/init/route.ts +350 -0
  978. package/.next-prod/types/app/api/files/paste/route.ts +350 -0
  979. package/.next-prod/types/app/api/files/read/route.ts +350 -0
  980. package/.next-prod/types/app/api/files/readdir/route.ts +350 -0
  981. package/.next-prod/types/app/api/files/recent/route.ts +350 -0
  982. package/.next-prod/types/app/api/files/save/route.ts +350 -0
  983. package/.next-prod/types/app/api/files/search/route.ts +350 -0
  984. package/.next-prod/types/app/api/git/branch-diff/route.ts +350 -0
  985. package/.next-prod/types/app/api/git/branches/route.ts +350 -0
  986. package/.next-prod/types/app/api/git/commit-diff/route.ts +350 -0
  987. package/.next-prod/types/app/api/git/commits/route.ts +350 -0
  988. package/.next-prod/types/app/api/git/diff/route.ts +350 -0
  989. package/.next-prod/types/app/api/git/discard/route.ts +350 -0
  990. package/.next-prod/types/app/api/git/stage/route.ts +350 -0
  991. package/.next-prod/types/app/api/git/status/route.ts +350 -0
  992. package/.next-prod/types/app/api/git/unstage/route.ts +350 -0
  993. package/.next-prod/types/app/api/git/worktree/route.ts +350 -0
  994. package/.next-prod/types/app/api/global-state/route.ts +350 -0
  995. package/.next-prod/types/app/api/jupyter/load/route.ts +350 -0
  996. package/.next-prod/types/app/api/jupyter/save/route.ts +350 -0
  997. package/.next-prod/types/app/api/jupyter/shutdown/route.ts +350 -0
  998. package/.next-prod/types/app/api/lsp/definition/route.ts +350 -0
  999. package/.next-prod/types/app/api/lsp/hover/route.ts +350 -0
  1000. package/.next-prod/types/app/api/lsp/references/route.ts +350 -0
  1001. package/.next-prod/types/app/api/lsp/status/route.ts +350 -0
  1002. package/.next-prod/types/app/api/lsp/warmup/route.ts +350 -0
  1003. package/.next-prod/types/app/api/mysql/columns/route.ts +350 -0
  1004. package/.next-prod/types/app/api/mysql/connect/route.ts +350 -0
  1005. package/.next-prod/types/app/api/mysql/disconnect/route.ts +350 -0
  1006. package/.next-prod/types/app/api/mysql/export/route.ts +350 -0
  1007. package/.next-prod/types/app/api/mysql/query/route.ts +350 -0
  1008. package/.next-prod/types/app/api/mysql/schemas/route.ts +350 -0
  1009. package/.next-prod/types/app/api/note/route.ts +350 -0
  1010. package/.next-prod/types/app/api/open-cursor/route.ts +350 -0
  1011. package/.next-prod/types/app/api/open-vscode/route.ts +350 -0
  1012. package/.next-prod/types/app/api/pick-folder/route.ts +350 -0
  1013. package/.next-prod/types/app/api/pinned-sessions/route.ts +350 -0
  1014. package/.next-prod/types/app/api/project-settings/route.ts +350 -0
  1015. package/.next-prod/types/app/api/project-state/route.ts +350 -0
  1016. package/.next-prod/types/app/api/projects/route.ts +350 -0
  1017. package/.next-prod/types/app/api/redis/command/route.ts +350 -0
  1018. package/.next-prod/types/app/api/redis/connect/route.ts +350 -0
  1019. package/.next-prod/types/app/api/redis/delete/route.ts +350 -0
  1020. package/.next-prod/types/app/api/redis/disconnect/route.ts +350 -0
  1021. package/.next-prod/types/app/api/redis/get/route.ts +350 -0
  1022. package/.next-prod/types/app/api/redis/keys/route.ts +350 -0
  1023. package/.next-prod/types/app/api/redis/set/route.ts +350 -0
  1024. package/.next-prod/types/app/api/review/[id]/comments/route.ts +350 -0
  1025. package/.next-prod/types/app/api/review/[id]/replies/route.ts +350 -0
  1026. package/.next-prod/types/app/api/review/[id]/route.ts +350 -0
  1027. package/.next-prod/types/app/api/review/identify/route.ts +350 -0
  1028. package/.next-prod/types/app/api/review/order/route.ts +350 -0
  1029. package/.next-prod/types/app/api/review/route.ts +350 -0
  1030. package/.next-prod/types/app/api/review/share-info/route.ts +350 -0
  1031. package/.next-prod/types/app/api/review/users/route.ts +350 -0
  1032. package/.next-prod/types/app/api/scheduled-tasks/route.ts +350 -0
  1033. package/.next-prod/types/app/api/services/config/route.ts +350 -0
  1034. package/.next-prod/types/app/api/services/scripts/route.ts +350 -0
  1035. package/.next-prod/types/app/api/session/[sessionId]/fork/route.ts +350 -0
  1036. package/.next-prod/types/app/api/session/[sessionId]/history/route.ts +350 -0
  1037. package/.next-prod/types/app/api/session-by-path/route.ts +350 -0
  1038. package/.next-prod/types/app/api/sessions/projects/[encodedPath]/route.ts +350 -0
  1039. package/.next-prod/types/app/api/sessions/projects/route.ts +350 -0
  1040. package/.next-prod/types/app/api/sessions/route.ts +350 -0
  1041. package/.next-prod/types/app/api/settings/route.ts +350 -0
  1042. package/.next-prod/types/app/api/terminal/aliases/route.ts +350 -0
  1043. package/.next-prod/types/app/api/terminal/autocomplete/route.ts +350 -0
  1044. package/.next-prod/types/app/api/terminal/bubble-order/route.ts +350 -0
  1045. package/.next-prod/types/app/api/terminal/env/route.ts +350 -0
  1046. package/.next-prod/types/app/api/terminal/history/route.ts +350 -0
  1047. package/.next-prod/types/app/api/version/route.ts +350 -0
  1048. package/.next-prod/types/app/page.ts +86 -0
  1049. package/.next-prod/types/app/project/page.ts +86 -0
  1050. package/.next-prod/types/app/review/[id]/page.ts +86 -0
  1051. package/.next-prod/types/package.json +1 -0
  1052. package/.next-prod/types/routes.d.ts +164 -0
  1053. package/.next-prod/types/validator.ts +898 -0
  1054. package/LICENSE +21 -0
  1055. package/README.md +94 -0
  1056. package/README.zh.md +100 -0
  1057. package/bin/cock-browser.mjs +435 -0
  1058. package/bin/cock-dev.mjs +6 -0
  1059. package/bin/cock-terminal.mjs +215 -0
  1060. package/bin/cock.mjs +99 -0
  1061. package/bin/postinstall.mjs +29 -0
  1062. package/chrome-extension/automation.js +684 -0
  1063. package/chrome-extension/background.js +364 -0
  1064. package/chrome-extension/content.js +224 -0
  1065. package/chrome-extension/disguise.js +14 -0
  1066. package/chrome-extension/icons/icon128.png +0 -0
  1067. package/chrome-extension/icons/icon16.png +0 -0
  1068. package/chrome-extension/icons/icon48.png +0 -0
  1069. package/chrome-extension/manifest.json +42 -0
  1070. package/chrome-extension/network-capture.js +197 -0
  1071. package/chrome-extension/rules.json +56 -0
  1072. package/dist/JupyterKernelManager-475VNVA5.mjs +248 -0
  1073. package/dist/chunk-OER3N6H7.mjs +250 -0
  1074. package/dist/scheduledTasks.mjs +418 -0
  1075. package/dist/wsServer.mjs +1441 -0
  1076. package/next.config.ts +18 -0
  1077. package/package.json +122 -0
  1078. package/public/favicon.ico +0 -0
  1079. package/public/icons/dev/icon-128x128.png +0 -0
  1080. package/public/icons/dev/icon-144x144.png +0 -0
  1081. package/public/icons/dev/icon-152x152.png +0 -0
  1082. package/public/icons/dev/icon-192x192.png +0 -0
  1083. package/public/icons/dev/icon-384x384.png +0 -0
  1084. package/public/icons/dev/icon-512x512.png +0 -0
  1085. package/public/icons/dev/icon-72x72.png +0 -0
  1086. package/public/icons/dev/icon-96x96.png +0 -0
  1087. package/public/icons/icon-128x128.png +0 -0
  1088. package/public/icons/icon-144x144.png +0 -0
  1089. package/public/icons/icon-152x152.png +0 -0
  1090. package/public/icons/icon-192x192.png +0 -0
  1091. package/public/icons/icon-384x384.png +0 -0
  1092. package/public/icons/icon-512x512.png +0 -0
  1093. package/public/icons/icon-72x72.png +0 -0
  1094. package/public/icons/icon-96x96.png +0 -0
  1095. package/server.mjs +135 -0
@@ -0,0 +1,1441 @@
1
+ import {
2
+ GLOBAL_STATE_FILE,
3
+ REVIEW_DIR,
4
+ REVIEW_SIGNAL_FILE,
5
+ ensureParentDir,
6
+ getLastUserMessage,
7
+ getTerminalHistoryPath,
8
+ getTerminalOutputPath,
9
+ readJsonFile
10
+ } from "./chunk-OER3N6H7.mjs";
11
+
12
+ // src/lib/wsServer.ts
13
+ import { WebSocketServer, WebSocket as WebSocket2 } from "ws";
14
+ import { parse } from "url";
15
+ import { watch as watch2, existsSync as existsSync2, mkdirSync as mkdirSync2 } from "fs";
16
+ import { dirname } from "path";
17
+ import { spawn, execSync } from "child_process";
18
+ import * as nodePty from "node-pty";
19
+
20
+ // src/lib/fileWatcher.ts
21
+ import { watch, readFileSync, statSync, existsSync, mkdirSync, writeFileSync } from "fs";
22
+ import { join, resolve } from "path";
23
+ var GIT_WATCH_FILES = [
24
+ ".git/HEAD",
25
+ // Do not watch .git/index: git status refreshes its stat cache, causing a feedback loop.
26
+ // commit/checkout/merge all modify HEAD or refs simultaneously; index is not needed.
27
+ ".git/MERGE_HEAD",
28
+ ".git/REBASE_HEAD"
29
+ ];
30
+ var GIT_WATCH_DIRS = [
31
+ ".git/refs"
32
+ ];
33
+ var DEBOUNCE_MS = 500;
34
+ var THROTTLE_MS = 3e3;
35
+ function resolveGitDir(cwd) {
36
+ const dotGit = join(cwd, ".git");
37
+ try {
38
+ const stat = statSync(dotGit);
39
+ if (stat.isDirectory()) {
40
+ return dotGit;
41
+ }
42
+ const content = readFileSync(dotGit, "utf-8").trim();
43
+ const match = content.match(/^gitdir:\s*(.+)$/);
44
+ if (match) {
45
+ return resolve(cwd, match[1]);
46
+ }
47
+ } catch {
48
+ }
49
+ return dotGit;
50
+ }
51
+ var FileWatcherManager = class {
52
+ constructor() {
53
+ this.watchers = /* @__PURE__ */ new Map();
54
+ }
55
+ /**
56
+ * Subscribe to file change events for a given cwd.
57
+ * @returns unsubscribe function
58
+ */
59
+ subscribe(cwd, callback) {
60
+ let entry = this.watchers.get(cwd);
61
+ if (!entry) {
62
+ entry = this.createWatcher(cwd);
63
+ this.watchers.set(cwd, entry);
64
+ }
65
+ entry.listeners.add(callback);
66
+ return () => {
67
+ this.unsubscribe(cwd, callback);
68
+ };
69
+ }
70
+ unsubscribe(cwd, callback) {
71
+ const entry = this.watchers.get(cwd);
72
+ if (!entry) return;
73
+ entry.listeners.delete(callback);
74
+ if (entry.listeners.size === 0) {
75
+ if (entry.debounceTimer) clearTimeout(entry.debounceTimer);
76
+ if (entry.throttleTimer) clearTimeout(entry.throttleTimer);
77
+ if (entry.cwdRestartTimer) clearTimeout(entry.cwdRestartTimer);
78
+ for (const w of entry.watchers) {
79
+ try {
80
+ w.close();
81
+ } catch {
82
+ }
83
+ }
84
+ this.watchers.delete(cwd);
85
+ }
86
+ }
87
+ createWatcher(cwd) {
88
+ const entry = {
89
+ watchers: [],
90
+ listeners: /* @__PURE__ */ new Set(),
91
+ pendingEvents: [],
92
+ debounceTimer: null,
93
+ throttleTimer: null,
94
+ cwdRestartTimer: null
95
+ };
96
+ const pushEvent = (event) => {
97
+ if (!entry.pendingEvents.some((e) => e.type === event.type)) {
98
+ entry.pendingEvents.push(event);
99
+ }
100
+ if (entry.debounceTimer) clearTimeout(entry.debounceTimer);
101
+ entry.debounceTimer = setTimeout(() => {
102
+ this.flush(entry);
103
+ }, DEBOUNCE_MS);
104
+ if (!entry.throttleTimer) {
105
+ entry.throttleTimer = setTimeout(() => {
106
+ this.flush(entry);
107
+ }, THROTTLE_MS);
108
+ }
109
+ };
110
+ const startCwdWatcher = () => {
111
+ try {
112
+ const cwdWatcher = watch(cwd, { recursive: true }, (_eventType, filename) => {
113
+ if (!filename) return;
114
+ if (filename.startsWith(".next/") || filename.startsWith("node_modules/")) return;
115
+ if (filename.startsWith(".git/")) {
116
+ if (filename === ".git/HEAD" || filename.startsWith(".git/refs/")) {
117
+ pushEvent({ type: "git" });
118
+ }
119
+ return;
120
+ }
121
+ pushEvent({ type: "file" });
122
+ });
123
+ cwdWatcher.on("error", (err) => {
124
+ console.error(`File watcher error for ${cwd}:`, err);
125
+ const idx = entry.watchers.indexOf(cwdWatcher);
126
+ if (idx !== -1) entry.watchers.splice(idx, 1);
127
+ try {
128
+ cwdWatcher.close();
129
+ } catch {
130
+ }
131
+ if (entry.listeners.size > 0 && !entry.cwdRestartTimer) {
132
+ entry.cwdRestartTimer = setTimeout(() => {
133
+ entry.cwdRestartTimer = null;
134
+ if (entry.listeners.size > 0) startCwdWatcher();
135
+ }, 2e3);
136
+ }
137
+ });
138
+ entry.watchers.push(cwdWatcher);
139
+ } catch (err) {
140
+ console.error(`Failed to watch ${cwd}:`, err);
141
+ }
142
+ };
143
+ startCwdWatcher();
144
+ const gitDir = resolveGitDir(cwd);
145
+ const watchGitFile = (filePath) => {
146
+ try {
147
+ const w = watch(filePath, () => {
148
+ pushEvent({ type: "git" });
149
+ try {
150
+ w.close();
151
+ } catch {
152
+ }
153
+ const idx = entry.watchers.indexOf(w);
154
+ if (idx !== -1) entry.watchers.splice(idx, 1);
155
+ if (entry.listeners.size > 0) {
156
+ setTimeout(() => watchGitFile(filePath), 50);
157
+ }
158
+ });
159
+ w.on("error", () => {
160
+ const idx = entry.watchers.indexOf(w);
161
+ if (idx !== -1) entry.watchers.splice(idx, 1);
162
+ if (entry.listeners.size > 0 && existsSync(filePath)) {
163
+ setTimeout(() => watchGitFile(filePath), 500);
164
+ }
165
+ });
166
+ entry.watchers.push(w);
167
+ } catch {
168
+ }
169
+ };
170
+ for (const gitFile of GIT_WATCH_FILES) {
171
+ const filename = gitFile.replace(".git/", "");
172
+ watchGitFile(join(gitDir, filename));
173
+ }
174
+ for (const gitDirName of GIT_WATCH_DIRS) {
175
+ const dirName = gitDirName.replace(".git/", "");
176
+ try {
177
+ const w = watch(join(gitDir, dirName), { recursive: true }, () => {
178
+ pushEvent({ type: "git" });
179
+ });
180
+ w.on("error", () => {
181
+ });
182
+ entry.watchers.push(w);
183
+ } catch {
184
+ }
185
+ }
186
+ return entry;
187
+ }
188
+ flush(entry) {
189
+ if (entry.debounceTimer) {
190
+ clearTimeout(entry.debounceTimer);
191
+ entry.debounceTimer = null;
192
+ }
193
+ if (entry.throttleTimer) {
194
+ clearTimeout(entry.throttleTimer);
195
+ entry.throttleTimer = null;
196
+ }
197
+ if (entry.pendingEvents.length === 0) return;
198
+ const events = [...entry.pendingEvents];
199
+ entry.pendingEvents = [];
200
+ for (const callback of entry.listeners) {
201
+ try {
202
+ callback(events);
203
+ } catch (err) {
204
+ console.error("File watcher callback error:", err);
205
+ }
206
+ }
207
+ }
208
+ };
209
+ var ReviewWatcher = class {
210
+ constructor() {
211
+ this.listeners = /* @__PURE__ */ new Set();
212
+ this.watcher = null;
213
+ this.debounceTimer = null;
214
+ }
215
+ subscribe(callback) {
216
+ this.listeners.add(callback);
217
+ if (!this.watcher) this.start();
218
+ return () => {
219
+ this.listeners.delete(callback);
220
+ if (this.listeners.size === 0) this.stop();
221
+ };
222
+ }
223
+ start() {
224
+ try {
225
+ if (!existsSync(REVIEW_DIR)) mkdirSync(REVIEW_DIR, { recursive: true });
226
+ if (!existsSync(REVIEW_SIGNAL_FILE)) writeFileSync(REVIEW_SIGNAL_FILE, "0");
227
+ this.watcher = watch(REVIEW_SIGNAL_FILE, () => {
228
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
229
+ this.debounceTimer = setTimeout(() => this.notify(), 300);
230
+ });
231
+ this.watcher.on("error", () => {
232
+ this.stop();
233
+ setTimeout(() => {
234
+ if (this.listeners.size > 0) this.start();
235
+ }, 2e3);
236
+ });
237
+ } catch {
238
+ }
239
+ }
240
+ stop() {
241
+ if (this.watcher) {
242
+ try {
243
+ this.watcher.close();
244
+ } catch {
245
+ }
246
+ this.watcher = null;
247
+ }
248
+ if (this.debounceTimer) {
249
+ clearTimeout(this.debounceTimer);
250
+ this.debounceTimer = null;
251
+ }
252
+ }
253
+ notify() {
254
+ for (const cb of this.listeners) {
255
+ try {
256
+ cb();
257
+ } catch (err) {
258
+ console.error("ReviewWatcher callback error:", err);
259
+ }
260
+ }
261
+ }
262
+ };
263
+ var fileWatcher = new FileWatcherManager();
264
+ var reviewWatcher = new ReviewWatcher();
265
+
266
+ // src/lib/wsServer.ts
267
+ import { readFile } from "fs/promises";
268
+
269
+ // src/lib/terminal/RunningCommandRegistry.ts
270
+ import fs from "fs/promises";
271
+
272
+ // src/lib/shortId.ts
273
+ function crc32(str) {
274
+ let crc = 4294967295;
275
+ for (let i = 0; i < str.length; i++) {
276
+ crc ^= str.charCodeAt(i);
277
+ for (let j = 0; j < 8; j++) {
278
+ crc = crc >>> 1 ^ (crc & 1 ? 3988292384 : 0);
279
+ }
280
+ }
281
+ return (crc ^ 4294967295) >>> 0;
282
+ }
283
+ function toShortId(fullId) {
284
+ const hash = crc32(fullId);
285
+ let id = "";
286
+ let val = hash;
287
+ for (let i = 0; i < 4; i++) {
288
+ id += String.fromCharCode(97 + val % 26);
289
+ val = Math.floor(val / 26);
290
+ }
291
+ return id;
292
+ }
293
+
294
+ // src/lib/terminal/TerminalBridge.ts
295
+ var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_registry");
296
+ var REVERSE_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_reverse");
297
+ var OUTPUT_LISTENERS_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_output_listeners");
298
+ var EXIT_LISTENERS_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_exit_listeners");
299
+ function getRegistry() {
300
+ const g = globalThis;
301
+ if (!g[REGISTRY_KEY]) g[REGISTRY_KEY] = /* @__PURE__ */ new Map();
302
+ return g[REGISTRY_KEY];
303
+ }
304
+ function getReverseIndex() {
305
+ const g = globalThis;
306
+ if (!g[REVERSE_KEY]) g[REVERSE_KEY] = /* @__PURE__ */ new Map();
307
+ return g[REVERSE_KEY];
308
+ }
309
+ function getOutputListeners() {
310
+ const g = globalThis;
311
+ if (!g[OUTPUT_LISTENERS_KEY]) g[OUTPUT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
312
+ return g[OUTPUT_LISTENERS_KEY];
313
+ }
314
+ function getExitListeners() {
315
+ const g = globalThis;
316
+ if (!g[EXIT_LISTENERS_KEY]) g[EXIT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
317
+ return g[EXIT_LISTENERS_KEY];
318
+ }
319
+ function registerTerminal(tabId, commandId, command, projectCwd) {
320
+ const fullId = tabId + commandId;
321
+ const shortId = toShortId(fullId);
322
+ getRegistry().set(shortId, { shortId, commandId, tabId, command, projectCwd, registeredAt: Date.now() });
323
+ getReverseIndex().set(commandId, shortId);
324
+ return shortId;
325
+ }
326
+ function finalizeTerminal(commandId, exitCode) {
327
+ const shortId = getReverseIndex().get(commandId);
328
+ if (shortId) {
329
+ const entry = getRegistry().get(shortId);
330
+ if (entry) {
331
+ entry.exitCode = exitCode;
332
+ }
333
+ getOutputListeners().delete(commandId);
334
+ getExitListeners().delete(commandId);
335
+ }
336
+ }
337
+ function unregisterTerminal(commandId) {
338
+ const shortId = getReverseIndex().get(commandId);
339
+ if (shortId) {
340
+ getRegistry().delete(shortId);
341
+ getReverseIndex().delete(commandId);
342
+ getOutputListeners().delete(commandId);
343
+ getExitListeners().delete(commandId);
344
+ }
345
+ }
346
+ function getTerminalByShortId(shortId) {
347
+ return getRegistry().get(shortId);
348
+ }
349
+ function listTerminals(getRunning) {
350
+ const result = [];
351
+ for (const [, entry] of getRegistry()) {
352
+ const cmd = getRunning?.(entry.commandId);
353
+ result.push({
354
+ shortId: entry.shortId,
355
+ commandId: entry.commandId,
356
+ tabId: entry.tabId,
357
+ command: entry.command,
358
+ pid: cmd?.pid ?? 0,
359
+ running: !!cmd
360
+ });
361
+ }
362
+ return result;
363
+ }
364
+ function addOutputListener(commandId, cb) {
365
+ const listeners = getOutputListeners();
366
+ if (!listeners.has(commandId)) listeners.set(commandId, /* @__PURE__ */ new Set());
367
+ listeners.get(commandId).add(cb);
368
+ return () => {
369
+ listeners.get(commandId)?.delete(cb);
370
+ if (listeners.get(commandId)?.size === 0) listeners.delete(commandId);
371
+ };
372
+ }
373
+ function notifyOutputListeners(commandId, data) {
374
+ const cbs = getOutputListeners().get(commandId);
375
+ if (cbs) {
376
+ for (const cb of cbs) cb(data);
377
+ }
378
+ }
379
+ function addExitListener(commandId, cb) {
380
+ const listeners = getExitListeners();
381
+ if (!listeners.has(commandId)) listeners.set(commandId, /* @__PURE__ */ new Set());
382
+ listeners.get(commandId).add(cb);
383
+ return () => {
384
+ listeners.get(commandId)?.delete(cb);
385
+ if (listeners.get(commandId)?.size === 0) listeners.delete(commandId);
386
+ };
387
+ }
388
+ function notifyExitListeners(commandId, exitCode) {
389
+ const cbs = getExitListeners().get(commandId);
390
+ if (cbs) {
391
+ for (const cb of cbs) cb(exitCode);
392
+ }
393
+ }
394
+
395
+ // src/lib/terminal/RunningCommandRegistry.ts
396
+ var MAX_OUTPUT_LINES = 5e3;
397
+ var OUTPUT_FILE_THRESHOLD = 4096;
398
+ var MAX_PARTIAL_BYTES = 64 * 1024;
399
+ var GLOBAL_KEY = /* @__PURE__ */ Symbol.for("terminal_running_commands");
400
+ var SERVER_ID_KEY = /* @__PURE__ */ Symbol.for("terminal_server_id");
401
+ function getServerId() {
402
+ const g = globalThis;
403
+ if (!g[SERVER_ID_KEY]) {
404
+ g[SERVER_ID_KEY] = `srv_${Date.now()}_${process.pid}`;
405
+ console.log(`[registry] server started, id=${g[SERVER_ID_KEY]}, pid=${process.pid}`);
406
+ }
407
+ return g[SERVER_ID_KEY];
408
+ }
409
+ getServerId();
410
+ function getRegistry2() {
411
+ const g = globalThis;
412
+ if (!g[GLOBAL_KEY]) {
413
+ g[GLOBAL_KEY] = /* @__PURE__ */ new Map();
414
+ }
415
+ return g[GLOBAL_KEY];
416
+ }
417
+ function registerCommand(cmd) {
418
+ console.log(`[registry] register: id=${cmd.commandId}, cmd="${cmd.command}", pid=${cmd.pid}, pty=${!!cmd.ptyProcess}, server=${getServerId()}`);
419
+ getRegistry2().set(cmd.commandId, {
420
+ ...cmd,
421
+ outputLines: [],
422
+ outputPartial: ""
423
+ });
424
+ registerTerminal(cmd.tabId, cmd.commandId, cmd.command, cmd.projectCwd);
425
+ writeHistoryPlaceholder(cmd.commandId, cmd.command, cmd.timestamp, cmd.cwd, cmd.projectCwd, cmd.tabId, !!cmd.usePty).catch(() => {
426
+ });
427
+ if (cmd.ptyProcess) {
428
+ const pty = cmd.ptyProcess;
429
+ pty.onData((data) => {
430
+ appendCommandOutput(cmd.commandId, data);
431
+ });
432
+ const ptyPid = cmd.pid;
433
+ pty.onExit(async ({ exitCode }) => {
434
+ try {
435
+ await finalizeCommand(cmd.commandId, exitCode, ptyPid);
436
+ } catch (e) {
437
+ console.error("[registry] finalize error:", e);
438
+ }
439
+ });
440
+ } else {
441
+ const child = cmd.process;
442
+ child.stdout?.on("data", (data) => {
443
+ appendCommandOutput(cmd.commandId, data.toString());
444
+ });
445
+ child.stderr?.on("data", (data) => {
446
+ appendCommandOutput(cmd.commandId, data.toString());
447
+ });
448
+ const childPid = cmd.pid;
449
+ child.on("close", async (code) => {
450
+ try {
451
+ await finalizeCommand(cmd.commandId, code ?? 0, childPid);
452
+ } catch (e) {
453
+ console.error("[registry] finalize error:", e);
454
+ }
455
+ });
456
+ child.on("error", async () => {
457
+ try {
458
+ await finalizeCommand(cmd.commandId, 1, childPid);
459
+ } catch (e) {
460
+ console.error("[registry] finalize error:", e);
461
+ }
462
+ });
463
+ }
464
+ }
465
+ function appendCommandOutput(commandId, data) {
466
+ const cmd = getRegistry2().get(commandId);
467
+ if (!cmd) return;
468
+ const text = cmd.outputPartial + data;
469
+ const parts = text.split("\n");
470
+ cmd.outputPartial = parts.pop() || "";
471
+ if (cmd.outputPartial.length > MAX_PARTIAL_BYTES) {
472
+ cmd.outputPartial = cmd.outputPartial.slice(-MAX_PARTIAL_BYTES);
473
+ }
474
+ if (parts.length > 0) {
475
+ cmd.outputLines.push(...parts);
476
+ if (cmd.outputLines.length > MAX_OUTPUT_LINES) {
477
+ cmd.outputLines.splice(0, cmd.outputLines.length - MAX_OUTPUT_LINES);
478
+ }
479
+ }
480
+ notifyOutputListeners(commandId, data);
481
+ }
482
+ function getBufferedOutput(cmd) {
483
+ const lines = cmd.outputLines.join("\n");
484
+ if (cmd.outputPartial) {
485
+ return lines ? lines + "\n" + cmd.outputPartial : cmd.outputPartial;
486
+ }
487
+ return lines;
488
+ }
489
+ function getRunningCommands(projectCwd) {
490
+ const results = [];
491
+ for (const cmd of getRegistry2().values()) {
492
+ if (cmd.projectCwd === projectCwd) {
493
+ results.push({
494
+ commandId: cmd.commandId,
495
+ command: cmd.command,
496
+ cwd: cmd.cwd,
497
+ tabId: cmd.tabId,
498
+ pid: cmd.pid,
499
+ timestamp: cmd.timestamp,
500
+ ...cmd.usePty ? { usePty: true } : {}
501
+ });
502
+ }
503
+ }
504
+ return results;
505
+ }
506
+ function getRunningCommand(commandId) {
507
+ return getRegistry2().get(commandId);
508
+ }
509
+ function getRegistrySize() {
510
+ return getRegistry2().size;
511
+ }
512
+ function getAllProjectCwds() {
513
+ const cwds = /* @__PURE__ */ new Set();
514
+ for (const cmd of getRegistry2().values()) {
515
+ cwds.add(cmd.projectCwd);
516
+ }
517
+ return [...cwds];
518
+ }
519
+ async function writeHistoryPlaceholder(commandId, command, timestamp, cwd, projectCwd, tabId, usePty) {
520
+ const historyPath = getTerminalHistoryPath(projectCwd, tabId);
521
+ await ensureParentDir(historyPath);
522
+ const entry = {
523
+ id: commandId,
524
+ command,
525
+ output: "",
526
+ timestamp,
527
+ cwd,
528
+ ...usePty ? { usePty: true } : {},
529
+ running: true
530
+ };
531
+ let existingLines = [];
532
+ try {
533
+ const content = await fs.readFile(historyPath, "utf-8");
534
+ existingLines = content.trim().split("\n").filter(Boolean);
535
+ } catch {
536
+ }
537
+ if (existingLines.length >= 100) {
538
+ const removedLines = existingLines.slice(0, existingLines.length - 99);
539
+ for (const line of removedLines) {
540
+ try {
541
+ const old = JSON.parse(line);
542
+ if (old.outputFile) await fs.unlink(old.outputFile).catch(() => {
543
+ });
544
+ } catch {
545
+ }
546
+ }
547
+ existingLines = existingLines.slice(-99);
548
+ }
549
+ existingLines.push(JSON.stringify(entry));
550
+ await fs.writeFile(historyPath, existingLines.join("\n") + "\n", "utf-8");
551
+ }
552
+ async function finalizeCommand(commandId, exitCode, pid) {
553
+ const registry2 = getRegistry2();
554
+ const cmd = registry2.get(commandId);
555
+ if (!cmd) return;
556
+ if (pid !== void 0 && cmd.pid !== pid) return;
557
+ console.log(`[registry] finalize: id=${commandId}, exitCode=${exitCode}, cmd="${cmd.command}", server=${getServerId()}`);
558
+ notifyExitListeners(commandId, exitCode);
559
+ finalizeTerminal(commandId, exitCode);
560
+ const output = getBufferedOutput(cmd);
561
+ registry2.delete(commandId);
562
+ const entry = {
563
+ id: cmd.commandId,
564
+ command: cmd.command,
565
+ output: "",
566
+ exitCode,
567
+ timestamp: cmd.timestamp,
568
+ cwd: cmd.cwd,
569
+ ...cmd.usePty ? { usePty: true } : {}
570
+ };
571
+ const historyPath = getTerminalHistoryPath(cmd.projectCwd, cmd.tabId);
572
+ await ensureParentDir(historyPath);
573
+ if (output.length > OUTPUT_FILE_THRESHOLD) {
574
+ const outputPath = getTerminalOutputPath(cmd.projectCwd, cmd.commandId);
575
+ await fs.writeFile(outputPath, output, "utf-8");
576
+ entry.outputFile = outputPath;
577
+ } else {
578
+ entry.output = output;
579
+ }
580
+ let existingLines = [];
581
+ try {
582
+ const content = await fs.readFile(historyPath, "utf-8");
583
+ existingLines = content.trim().split("\n").filter(Boolean);
584
+ } catch {
585
+ }
586
+ let replaced = false;
587
+ for (let i = 0; i < existingLines.length; i++) {
588
+ try {
589
+ if (JSON.parse(existingLines[i]).id === commandId) {
590
+ existingLines[i] = JSON.stringify(entry);
591
+ replaced = true;
592
+ break;
593
+ }
594
+ } catch {
595
+ }
596
+ }
597
+ if (!replaced) {
598
+ existingLines.push(JSON.stringify(entry));
599
+ }
600
+ await fs.writeFile(historyPath, existingLines.join("\n") + "\n", "utf-8");
601
+ }
602
+
603
+ // src/lib/bubbles/browser/BrowserBridge.ts
604
+ import { WebSocket } from "ws";
605
+ var registry = /* @__PURE__ */ new Map();
606
+ var fullIdToShort = /* @__PURE__ */ new Map();
607
+ function registerBrowser(fullId, ws) {
608
+ const shortId = toShortId(fullId);
609
+ registry.set(shortId, { fullId, ws, lastSeen: Date.now() });
610
+ fullIdToShort.set(fullId, shortId);
611
+ return shortId;
612
+ }
613
+ function unregisterBrowser(fullId) {
614
+ const shortId = fullIdToShort.get(fullId);
615
+ if (shortId) {
616
+ registry.delete(shortId);
617
+ fullIdToShort.delete(fullId);
618
+ }
619
+ }
620
+ function getBrowserByShortId(shortId) {
621
+ return registry.get(shortId);
622
+ }
623
+ function listBrowsers() {
624
+ const result = [];
625
+ for (const [shortId, entry] of registry) {
626
+ result.push({
627
+ shortId,
628
+ fullId: entry.fullId,
629
+ connected: entry.ws !== null && entry.ws.readyState === WebSocket.OPEN
630
+ });
631
+ }
632
+ return result;
633
+ }
634
+ var pendingRequests = /* @__PURE__ */ new Map();
635
+ function createPendingRequest(reqId, timeout) {
636
+ return new Promise((resolve2, reject) => {
637
+ const timer = setTimeout(() => {
638
+ pendingRequests.delete(reqId);
639
+ reject(new Error(`Timeout after ${timeout}ms`));
640
+ }, timeout);
641
+ pendingRequests.set(reqId, { resolve: resolve2, reject, timer });
642
+ });
643
+ }
644
+ function resolvePendingRequest(reqId, ok, data, error) {
645
+ const pending = pendingRequests.get(reqId);
646
+ if (!pending) return;
647
+ clearTimeout(pending.timer);
648
+ pendingRequests.delete(reqId);
649
+ if (ok) {
650
+ pending.resolve(data);
651
+ } else {
652
+ pending.reject(new Error(error || "Browser command failed"));
653
+ }
654
+ }
655
+ function sendCommandToBrowser(shortId, reqId, action, params) {
656
+ const entry = registry.get(shortId);
657
+ if (!entry || !entry.ws || entry.ws.readyState !== WebSocket.OPEN) {
658
+ return false;
659
+ }
660
+ entry.ws.send(JSON.stringify({
661
+ type: "browser:cmd",
662
+ reqId,
663
+ action,
664
+ params
665
+ }));
666
+ return true;
667
+ }
668
+
669
+ // src/lib/wsServer.ts
670
+ import { randomUUID } from "crypto";
671
+
672
+ // src/lib/platform.ts
673
+ var isMac = process.platform === "darwin";
674
+ var isWindows = process.platform === "win32";
675
+ var isLinux = process.platform === "linux";
676
+ function getDefaultShell() {
677
+ if (isWindows) return process.env.COMSPEC || "powershell.exe";
678
+ return process.env.SHELL || "/bin/sh";
679
+ }
680
+ function getDefaultPath() {
681
+ if (isWindows) return process.env.PATH || "";
682
+ return process.env.PATH || "/usr/local/bin:/usr/bin:/bin";
683
+ }
684
+
685
+ // src/lib/wsServer.ts
686
+ var HEARTBEAT_INTERVAL = 3e4;
687
+ var globalStateClients = /* @__PURE__ */ new Set();
688
+ function broadcastToGlobalState(msg) {
689
+ const data = JSON.stringify(msg);
690
+ for (const ws of globalStateClients) {
691
+ if (ws.readyState === WebSocket2.OPEN) {
692
+ ws.send(data);
693
+ }
694
+ }
695
+ }
696
+ var wss = new WebSocketServer({ noServer: true });
697
+ wss.on("connection", (ws, req) => {
698
+ const { pathname, query } = parse(req.url || "", true);
699
+ if (pathname === "/ws/watch") {
700
+ handleFileWatch(ws, query.cwd);
701
+ } else if (pathname === "/ws/global-state") {
702
+ handleGlobalState(ws);
703
+ } else if (pathname === "/ws/terminal") {
704
+ handleTerminal(ws, query.projectCwd);
705
+ } else if (pathname === "/ws/browser") {
706
+ handleBrowser(ws, query.fullId);
707
+ } else if (pathname === "/ws/terminal-follow") {
708
+ handleTerminalFollow(ws, query.id);
709
+ } else if (pathname === "/ws/jupyter") {
710
+ handleJupyter(ws, query.bubbleId, query.cwd);
711
+ }
712
+ });
713
+ function handleUpgrade(req, socket, head) {
714
+ const { pathname } = parse(req.url || "", true);
715
+ if (pathname === "/ws/watch" || pathname === "/ws/global-state" || pathname === "/ws/terminal" || pathname === "/ws/browser" || pathname === "/ws/terminal-follow" || pathname === "/ws/jupyter") {
716
+ wss.handleUpgrade(req, socket, head, (ws) => {
717
+ wss.emit("connection", ws, req);
718
+ });
719
+ return true;
720
+ }
721
+ return false;
722
+ }
723
+ function handleFileWatch(ws, cwd) {
724
+ if (!cwd) {
725
+ ws.close(4400, "Missing cwd parameter");
726
+ return;
727
+ }
728
+ const send = (events) => {
729
+ if (ws.readyState === WebSocket2.OPEN) {
730
+ ws.send(JSON.stringify({ type: "watch", data: events }));
731
+ }
732
+ };
733
+ const unsubscribe = fileWatcher.subscribe(cwd, send);
734
+ const unsubReview = reviewWatcher.subscribe(() => {
735
+ if (ws.readyState === WebSocket2.OPEN) {
736
+ ws.send(JSON.stringify({ type: "watch", data: [{ type: "review" }] }));
737
+ }
738
+ });
739
+ const heartbeat = setInterval(() => {
740
+ if (ws.readyState === WebSocket2.OPEN) {
741
+ ws.send(JSON.stringify({ type: "ping" }));
742
+ }
743
+ }, HEARTBEAT_INTERVAL);
744
+ ws.on("close", () => {
745
+ unsubscribe();
746
+ unsubReview();
747
+ clearInterval(heartbeat);
748
+ });
749
+ }
750
+ function handleGlobalState(ws) {
751
+ globalStateClients.add(ws);
752
+ let closed = false;
753
+ const sendState = async () => {
754
+ if (closed || ws.readyState !== WebSocket2.OPEN) return;
755
+ try {
756
+ const state = await readJsonFile(GLOBAL_STATE_FILE, { sessions: [] });
757
+ for (const s of state.sessions) {
758
+ if (!s.status) {
759
+ const legacy = s;
760
+ s.status = legacy.isLoading ? "loading" : "normal";
761
+ }
762
+ }
763
+ state.sessions.sort((a, b) => b.lastActive - a.lastActive);
764
+ const recentSessions = state.sessions.slice(0, 15);
765
+ const sessionsWithLastMessage = await Promise.all(
766
+ recentSessions.map(async (session) => {
767
+ if (session.status === "loading" && session.lastUserMessage) {
768
+ return session;
769
+ }
770
+ const lastUserMessage = await getLastUserMessage(session.cwd, session.sessionId);
771
+ return { ...session, lastUserMessage };
772
+ })
773
+ );
774
+ if (closed || ws.readyState !== WebSocket2.OPEN) return;
775
+ ws.send(JSON.stringify({ type: "global-state", data: { sessions: sessionsWithLastMessage } }));
776
+ } catch (err) {
777
+ if (!closed) console.error("Global state watch error:", err);
778
+ }
779
+ };
780
+ let sending = false;
781
+ let pendingSend = false;
782
+ const scheduleSend = () => {
783
+ if (sending) {
784
+ pendingSend = true;
785
+ return;
786
+ }
787
+ sending = true;
788
+ sendState().finally(() => {
789
+ sending = false;
790
+ if (pendingSend) {
791
+ pendingSend = false;
792
+ scheduleSend();
793
+ }
794
+ });
795
+ };
796
+ scheduleSend();
797
+ const dir = dirname(GLOBAL_STATE_FILE);
798
+ if (!existsSync2(dir)) {
799
+ mkdirSync2(dir, { recursive: true });
800
+ }
801
+ let watcher = null;
802
+ try {
803
+ watcher = watch2(GLOBAL_STATE_FILE, () => {
804
+ scheduleSend();
805
+ });
806
+ watcher.on("error", (error) => {
807
+ console.error("Global state file watcher error:", error);
808
+ });
809
+ } catch {
810
+ try {
811
+ watcher = watch2(dir, (_, filename) => {
812
+ if (filename === "state.json") {
813
+ scheduleSend();
814
+ }
815
+ });
816
+ } catch (err) {
817
+ console.error("Global state dir watcher error:", err);
818
+ }
819
+ }
820
+ const heartbeat = setInterval(() => {
821
+ if (ws.readyState === WebSocket2.OPEN) {
822
+ ws.send(JSON.stringify({ type: "ping" }));
823
+ }
824
+ }, HEARTBEAT_INTERVAL);
825
+ ws.on("close", () => {
826
+ closed = true;
827
+ globalStateClients.delete(ws);
828
+ if (watcher) watcher.close();
829
+ clearInterval(heartbeat);
830
+ });
831
+ }
832
+ function getDescendantPids(pid) {
833
+ const descendants = [];
834
+ function collect(parentPid) {
835
+ try {
836
+ let result;
837
+ if (isWindows) {
838
+ result = execSync(`wmic process where (ParentProcessId=${parentPid}) get ProcessId /format:list`, { encoding: "utf-8", timeout: 3e3 }).trim();
839
+ const childPids = result.split("\n").map((l) => l.replace(/\r/, "").match(/ProcessId=(\d+)/)?.[1]).filter(Boolean).map(Number);
840
+ for (const childPid of childPids) {
841
+ collect(childPid);
842
+ descendants.push(childPid);
843
+ }
844
+ } else {
845
+ result = execSync(`pgrep -P ${parentPid}`, { encoding: "utf-8", timeout: 3e3 }).trim();
846
+ const childPids = result.split("\n").filter(Boolean).map(Number);
847
+ for (const childPid of childPids) {
848
+ collect(childPid);
849
+ descendants.push(childPid);
850
+ }
851
+ }
852
+ } catch {
853
+ }
854
+ }
855
+ collect(pid);
856
+ return descendants;
857
+ }
858
+ function handleTerminal(ws, projectCwd) {
859
+ if (!projectCwd) {
860
+ ws.close(4400, "Missing projectCwd parameter");
861
+ return;
862
+ }
863
+ let closed = false;
864
+ const cleanupMap = /* @__PURE__ */ new Map();
865
+ const send = (msg) => {
866
+ if (!closed && ws.readyState === WebSocket2.OPEN) {
867
+ ws.send(JSON.stringify(msg));
868
+ }
869
+ };
870
+ const heartbeat = setInterval(() => {
871
+ if (ws.readyState === WebSocket2.OPEN) {
872
+ ws.send(JSON.stringify({ type: "ping" }));
873
+ }
874
+ }, HEARTBEAT_INTERVAL);
875
+ function attachPipeListeners(commandId, child) {
876
+ const oldCleanup = cleanupMap.get(commandId);
877
+ if (oldCleanup) oldCleanup();
878
+ const onStdout = (data) => {
879
+ send({ type: "stdout", commandId, data: data.toString() });
880
+ };
881
+ const onStderr = (data) => {
882
+ send({ type: "stderr", commandId, data: data.toString() });
883
+ };
884
+ const pid = child.pid;
885
+ const onClose = async (code) => {
886
+ const exitCode = code ?? 0;
887
+ send({ type: "exit", commandId, code: exitCode });
888
+ try {
889
+ await finalizeCommand(commandId, exitCode, pid);
890
+ } catch (e) {
891
+ console.error("[ws/terminal] finalize error:", e);
892
+ }
893
+ cleanupMap.delete(commandId);
894
+ };
895
+ const onError = async (error) => {
896
+ send({ type: "error", commandId, error: error.message });
897
+ try {
898
+ await finalizeCommand(commandId, 1, pid);
899
+ } catch (e) {
900
+ console.error("[ws/terminal] finalize error:", e);
901
+ }
902
+ cleanupMap.delete(commandId);
903
+ };
904
+ child.stdout?.on("data", onStdout);
905
+ child.stderr?.on("data", onStderr);
906
+ child.on("close", onClose);
907
+ child.on("error", onError);
908
+ const cleanup = () => {
909
+ child.stdout?.off("data", onStdout);
910
+ child.stderr?.off("data", onStderr);
911
+ child.off("close", onClose);
912
+ child.off("error", onError);
913
+ };
914
+ cleanupMap.set(commandId, cleanup);
915
+ }
916
+ function attachPtyListeners(commandId, pty) {
917
+ const oldCleanup = cleanupMap.get(commandId);
918
+ if (oldCleanup) oldCleanup();
919
+ const dataDisposable = pty.onData((data) => {
920
+ send({ type: "stdout", commandId, data });
921
+ });
922
+ const ptyPid = pty.pid;
923
+ const exitDisposable = pty.onExit(async ({ exitCode }) => {
924
+ send({ type: "exit", commandId, code: exitCode });
925
+ try {
926
+ await finalizeCommand(commandId, exitCode, ptyPid);
927
+ } catch (e) {
928
+ console.error("[ws/terminal] finalize error:", e);
929
+ }
930
+ cleanupMap.delete(commandId);
931
+ });
932
+ const cleanup = () => {
933
+ dataDisposable.dispose();
934
+ exitDisposable.dispose();
935
+ };
936
+ cleanupMap.set(commandId, cleanup);
937
+ }
938
+ ws.on("message", (raw) => {
939
+ let msg;
940
+ try {
941
+ msg = JSON.parse(raw.toString());
942
+ } catch {
943
+ return;
944
+ }
945
+ const type = msg.type;
946
+ if (type === "exec") {
947
+ const { commandId, command, cwd, tabId, env, usePty, cols, rows } = msg;
948
+ if (!commandId || !command || !cwd || !tabId) {
949
+ send({ type: "error", commandId: commandId || "", error: "Missing required parameters" });
950
+ return;
951
+ }
952
+ const childEnv = {
953
+ HOME: process.env.HOME,
954
+ USER: process.env.USER,
955
+ SHELL: process.env.SHELL,
956
+ TERM: "xterm-256color",
957
+ FORCE_COLOR: "1",
958
+ CLICOLOR: "1",
959
+ CLICOLOR_FORCE: "1",
960
+ PYTHONUNBUFFERED: "1",
961
+ npm_config_color: "always",
962
+ ...env
963
+ };
964
+ try {
965
+ const userShell = getDefaultShell();
966
+ if (usePty) {
967
+ const ptyEnv = {
968
+ PATH: getDefaultPath()
969
+ };
970
+ for (const [k, v] of Object.entries(childEnv)) {
971
+ if (v !== void 0) ptyEnv[k] = v;
972
+ }
973
+ const ptyProcess = nodePty.spawn(userShell, ["--login", "-c", command], {
974
+ name: "xterm-256color",
975
+ cols: cols || 120,
976
+ rows: rows || 30,
977
+ cwd,
978
+ env: ptyEnv
979
+ });
980
+ const dummyChild = spawn("true", [], { stdio: "ignore" });
981
+ registerCommand({
982
+ commandId,
983
+ command,
984
+ cwd,
985
+ projectCwd,
986
+ tabId,
987
+ pid: ptyProcess.pid,
988
+ process: dummyChild,
989
+ ptyProcess,
990
+ usePty: true,
991
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
992
+ });
993
+ send({ type: "pid", commandId, pid: ptyProcess.pid });
994
+ attachPtyListeners(commandId, ptyProcess);
995
+ } else {
996
+ const child = spawn(userShell, ["--login", "-c", command], {
997
+ cwd,
998
+ env: childEnv,
999
+ stdio: ["pipe", "pipe", "pipe"],
1000
+ detached: true
1001
+ });
1002
+ if (child.pid) {
1003
+ registerCommand({
1004
+ commandId,
1005
+ command,
1006
+ cwd,
1007
+ projectCwd,
1008
+ tabId,
1009
+ pid: child.pid,
1010
+ process: child,
1011
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1012
+ });
1013
+ send({ type: "pid", commandId, pid: child.pid });
1014
+ attachPipeListeners(commandId, child);
1015
+ } else {
1016
+ send({ type: "error", commandId, error: "Failed to spawn process" });
1017
+ }
1018
+ }
1019
+ } catch (e) {
1020
+ send({ type: "error", commandId, error: e.message });
1021
+ }
1022
+ } else if (type === "stdin") {
1023
+ const { commandId, data } = msg;
1024
+ const cmd = getRunningCommand(commandId);
1025
+ if (!cmd) return;
1026
+ if (cmd.usePty && cmd.ptyProcess) {
1027
+ try {
1028
+ cmd.ptyProcess.write(data);
1029
+ } catch {
1030
+ }
1031
+ } else {
1032
+ if (data === "" && cmd.pid) {
1033
+ try {
1034
+ process.kill(-cmd.pid, "SIGINT");
1035
+ } catch {
1036
+ try {
1037
+ process.kill(cmd.pid, "SIGINT");
1038
+ } catch {
1039
+ }
1040
+ }
1041
+ } else if (data === "" && cmd.pid) {
1042
+ try {
1043
+ process.kill(cmd.pid, "SIGTSTP");
1044
+ } catch {
1045
+ }
1046
+ } else if (data === "") {
1047
+ try {
1048
+ cmd.process.stdin?.end();
1049
+ } catch {
1050
+ }
1051
+ } else if (cmd.process.stdin?.writable) {
1052
+ cmd.process.stdin.write(data);
1053
+ }
1054
+ }
1055
+ } else if (type === "attach") {
1056
+ const { commandId } = msg;
1057
+ const cmd = getRunningCommand(commandId);
1058
+ if (!cmd) {
1059
+ send({ type: "error", commandId, error: "Command not found or already finished" });
1060
+ return;
1061
+ }
1062
+ send({ type: "pid", commandId, pid: cmd.pid });
1063
+ const buffered = cmd.outputLines.join("\n") + (cmd.outputPartial ? "\n" + cmd.outputPartial : "");
1064
+ if (buffered) {
1065
+ send({ type: "stdout", commandId, data: buffered });
1066
+ }
1067
+ if (cmd.usePty && cmd.ptyProcess) {
1068
+ attachPtyListeners(commandId, cmd.ptyProcess);
1069
+ } else {
1070
+ attachPipeListeners(commandId, cmd.process);
1071
+ }
1072
+ } else if (type === "interrupt") {
1073
+ const { pid } = msg;
1074
+ if (!pid) return;
1075
+ const descendants = getDescendantPids(pid);
1076
+ const allPids = [...descendants, pid];
1077
+ for (const p of allPids) {
1078
+ try {
1079
+ process.kill(p, "SIGTERM");
1080
+ } catch {
1081
+ }
1082
+ }
1083
+ setTimeout(() => {
1084
+ for (const p of allPids) {
1085
+ try {
1086
+ process.kill(p, 0);
1087
+ process.kill(p, "SIGKILL");
1088
+ } catch {
1089
+ }
1090
+ }
1091
+ }, 1e3);
1092
+ } else if (type === "resize") {
1093
+ const { commandId, cols, rows } = msg;
1094
+ const cmd = getRunningCommand(commandId);
1095
+ if (cmd?.usePty && cmd.ptyProcess) {
1096
+ try {
1097
+ cmd.ptyProcess.resize(cols, rows);
1098
+ } catch {
1099
+ }
1100
+ }
1101
+ } else if (type === "running") {
1102
+ const commands = getRunningCommands(projectCwd);
1103
+ if (commands.length === 0) {
1104
+ const size = getRegistrySize();
1105
+ const cwds = getAllProjectCwds();
1106
+ console.warn(`[ws/terminal] running query: 0 commands for projectCwd="${projectCwd}", registry total=${size}, cwds=${JSON.stringify(cwds)}`);
1107
+ }
1108
+ send({ type: "running", commands });
1109
+ }
1110
+ });
1111
+ ws.on("close", () => {
1112
+ closed = true;
1113
+ clearInterval(heartbeat);
1114
+ for (const cleanup of cleanupMap.values()) {
1115
+ cleanup();
1116
+ }
1117
+ cleanupMap.clear();
1118
+ });
1119
+ }
1120
+ async function readFinishedOutput(projectCwd, tabId, commandId) {
1121
+ try {
1122
+ const historyPath = getTerminalHistoryPath(projectCwd, tabId);
1123
+ const content = await readFile(historyPath, "utf-8");
1124
+ for (const line of content.trim().split("\n").reverse()) {
1125
+ try {
1126
+ const entry = JSON.parse(line);
1127
+ if (entry.id === commandId) {
1128
+ let output = entry.output || "";
1129
+ if (entry.outputFile) {
1130
+ try {
1131
+ output = await readFile(entry.outputFile, "utf-8");
1132
+ } catch {
1133
+ }
1134
+ }
1135
+ return { output, exitCode: entry.exitCode ?? 0 };
1136
+ }
1137
+ } catch {
1138
+ }
1139
+ }
1140
+ } catch {
1141
+ }
1142
+ return void 0;
1143
+ }
1144
+ async function handleTerminalApi(req, res) {
1145
+ const { pathname } = parse(req.url || "", true);
1146
+ const match = pathname?.match(/^\/api\/terminal\/([a-z]+)$/);
1147
+ if (!match || req.method !== "POST") return false;
1148
+ const action = match[1];
1149
+ const chunks = [];
1150
+ for await (const chunk of req) chunks.push(chunk);
1151
+ let body;
1152
+ try {
1153
+ body = JSON.parse(Buffer.concat(chunks).toString());
1154
+ } catch {
1155
+ body = {};
1156
+ }
1157
+ const sendJson = (status, data) => {
1158
+ res.writeHead(status, { "Content-Type": "application/json" });
1159
+ res.end(JSON.stringify(data));
1160
+ };
1161
+ if (action === "list") {
1162
+ sendJson(200, { ok: true, data: listTerminals(getRunningCommand) });
1163
+ return true;
1164
+ }
1165
+ if (action === "register") {
1166
+ const { tabId, commandId, command, projectCwd } = body;
1167
+ if (!tabId || !commandId || !command) {
1168
+ sendJson(400, { ok: false, error: "Missing tabId/commandId/command" });
1169
+ return true;
1170
+ }
1171
+ const shortId = registerTerminal(tabId, commandId, command, projectCwd);
1172
+ sendJson(200, { ok: true, data: { shortId } });
1173
+ return true;
1174
+ }
1175
+ if (action === "unregister") {
1176
+ const { commandId } = body;
1177
+ if (!commandId) {
1178
+ sendJson(400, { ok: false, error: "Missing commandId" });
1179
+ return true;
1180
+ }
1181
+ unregisterTerminal(commandId);
1182
+ sendJson(200, { ok: true });
1183
+ return true;
1184
+ }
1185
+ const { id } = body;
1186
+ if (!id) {
1187
+ sendJson(400, { ok: false, error: "Missing terminal id" });
1188
+ return true;
1189
+ }
1190
+ const entry = getTerminalByShortId(id);
1191
+ if (!entry) {
1192
+ sendJson(404, { ok: false, error: `Terminal "${id}" not found` });
1193
+ return true;
1194
+ }
1195
+ const cmd = getRunningCommand(entry.commandId);
1196
+ if (action === "output") {
1197
+ if (cmd) {
1198
+ const output = cmd.outputLines.join("\n") + (cmd.outputPartial ? "\n" + cmd.outputPartial : "");
1199
+ sendJson(200, { ok: true, data: { output, command: entry.command, pid: cmd.pid, running: true } });
1200
+ } else {
1201
+ if (!entry.projectCwd) {
1202
+ sendJson(404, { ok: false, error: "Command projectCwd unknown" });
1203
+ return true;
1204
+ }
1205
+ const historyOutput = await readFinishedOutput(entry.projectCwd, entry.tabId, entry.commandId);
1206
+ if (historyOutput !== void 0) {
1207
+ sendJson(200, { ok: true, data: { output: historyOutput.output, command: entry.command, exitCode: historyOutput.exitCode, running: false } });
1208
+ } else {
1209
+ sendJson(404, { ok: false, error: "Command output not available" });
1210
+ }
1211
+ }
1212
+ return true;
1213
+ }
1214
+ if (action === "stdin") {
1215
+ if (!cmd) {
1216
+ sendJson(404, { ok: false, error: "Command no longer running" });
1217
+ return true;
1218
+ }
1219
+ const { data } = body;
1220
+ if (data === void 0) {
1221
+ sendJson(400, { ok: false, error: "Missing data" });
1222
+ return true;
1223
+ }
1224
+ if (cmd.usePty && cmd.ptyProcess) {
1225
+ try {
1226
+ cmd.ptyProcess.write(data);
1227
+ } catch {
1228
+ }
1229
+ } else if (cmd.process.stdin?.writable) {
1230
+ cmd.process.stdin.write(data);
1231
+ } else {
1232
+ sendJson(500, { ok: false, error: "stdin not writable" });
1233
+ return true;
1234
+ }
1235
+ sendJson(200, { ok: true });
1236
+ return true;
1237
+ }
1238
+ sendJson(400, { ok: false, error: `Unknown action: ${action}` });
1239
+ return true;
1240
+ }
1241
+ function handleTerminalFollow(ws, shortId) {
1242
+ if (!shortId) {
1243
+ ws.close(4400, "Missing id parameter");
1244
+ return;
1245
+ }
1246
+ const entry = getTerminalByShortId(shortId);
1247
+ if (!entry) {
1248
+ ws.close(4404, "Terminal not found");
1249
+ return;
1250
+ }
1251
+ const cmd = getRunningCommand(entry.commandId);
1252
+ if (cmd) {
1253
+ const buffered = cmd.outputLines.join("\n") + (cmd.outputPartial ? "\n" + cmd.outputPartial : "");
1254
+ if (buffered) {
1255
+ ws.send(JSON.stringify({ type: "output", data: buffered }));
1256
+ }
1257
+ }
1258
+ const unsubOutput = addOutputListener(entry.commandId, (data) => {
1259
+ if (ws.readyState === WebSocket2.OPEN) {
1260
+ ws.send(JSON.stringify({ type: "output", data }));
1261
+ }
1262
+ });
1263
+ const unsubExit = addExitListener(entry.commandId, (code) => {
1264
+ if (ws.readyState === WebSocket2.OPEN) {
1265
+ ws.send(JSON.stringify({ type: "exit", code }));
1266
+ ws.close();
1267
+ }
1268
+ });
1269
+ const heartbeat = setInterval(() => {
1270
+ if (ws.readyState === WebSocket2.OPEN) {
1271
+ ws.send(JSON.stringify({ type: "ping" }));
1272
+ }
1273
+ }, HEARTBEAT_INTERVAL);
1274
+ ws.on("close", () => {
1275
+ unsubOutput();
1276
+ unsubExit();
1277
+ clearInterval(heartbeat);
1278
+ });
1279
+ }
1280
+ async function handleBrowserApi(req, res) {
1281
+ const { pathname } = parse(req.url || "", true);
1282
+ const match = pathname?.match(/^\/api\/browser\/([a-z][a-z_]*)$/);
1283
+ if (!match || req.method !== "POST") return false;
1284
+ const action = match[1];
1285
+ const chunks = [];
1286
+ for await (const chunk of req) chunks.push(chunk);
1287
+ let body;
1288
+ try {
1289
+ body = JSON.parse(Buffer.concat(chunks).toString());
1290
+ } catch {
1291
+ body = {};
1292
+ }
1293
+ const { id, params: cmdParams = {}, timeout = 1e4 } = body;
1294
+ const sendJson = (status, data) => {
1295
+ res.writeHead(status, { "Content-Type": "application/json" });
1296
+ res.end(JSON.stringify(data));
1297
+ };
1298
+ if (action === "list") {
1299
+ sendJson(200, { ok: true, data: listBrowsers() });
1300
+ return true;
1301
+ }
1302
+ if (action === "unregister") {
1303
+ if (!id) {
1304
+ sendJson(400, { ok: false, error: "Missing browser id" });
1305
+ return true;
1306
+ }
1307
+ const browser2 = getBrowserByShortId(id);
1308
+ if (browser2) {
1309
+ if (browser2.ws && browser2.ws.readyState === WebSocket2.OPEN) {
1310
+ browser2.ws.close();
1311
+ }
1312
+ unregisterBrowser(browser2.fullId);
1313
+ }
1314
+ sendJson(200, { ok: true });
1315
+ return true;
1316
+ }
1317
+ if (!id) {
1318
+ sendJson(400, { ok: false, error: "Missing browser id" });
1319
+ return true;
1320
+ }
1321
+ const browser = getBrowserByShortId(id);
1322
+ if (!browser) {
1323
+ sendJson(404, { ok: false, error: `Browser "${id}" not found` });
1324
+ return true;
1325
+ }
1326
+ if (!browser.ws || browser.ws.readyState !== WebSocket2.OPEN) {
1327
+ sendJson(503, { ok: false, error: `Browser "${id}" is disconnected` });
1328
+ return true;
1329
+ }
1330
+ const reqId = `r-${randomUUID().slice(0, 8)}`;
1331
+ const sent = sendCommandToBrowser(id, reqId, action, cmdParams);
1332
+ if (!sent) {
1333
+ sendJson(503, { ok: false, error: "Failed to send command" });
1334
+ return true;
1335
+ }
1336
+ try {
1337
+ const data = await createPendingRequest(reqId, timeout);
1338
+ sendJson(200, { ok: true, data });
1339
+ } catch (err) {
1340
+ sendJson(504, { ok: false, error: err.message });
1341
+ }
1342
+ return true;
1343
+ }
1344
+ function handleBrowser(ws, fullId) {
1345
+ if (!fullId) {
1346
+ ws.close(4400, "Missing fullId parameter");
1347
+ return;
1348
+ }
1349
+ const shortId = registerBrowser(fullId, ws);
1350
+ ws.send(JSON.stringify({ type: "registered", shortId }));
1351
+ const heartbeat = setInterval(() => {
1352
+ if (ws.readyState === WebSocket2.OPEN) {
1353
+ ws.send(JSON.stringify({ type: "ping" }));
1354
+ }
1355
+ }, HEARTBEAT_INTERVAL);
1356
+ ws.on("message", (raw) => {
1357
+ let msg;
1358
+ try {
1359
+ msg = JSON.parse(raw.toString());
1360
+ } catch {
1361
+ return;
1362
+ }
1363
+ if (msg.type === "browser:cmd-result") {
1364
+ const { reqId, ok, data, error } = msg;
1365
+ resolvePendingRequest(reqId, ok, data, error);
1366
+ }
1367
+ });
1368
+ ws.on("close", () => {
1369
+ clearInterval(heartbeat);
1370
+ unregisterBrowser(fullId);
1371
+ });
1372
+ }
1373
+ async function handleJupyter(ws, bubbleId, cwd) {
1374
+ if (!bubbleId || !cwd) {
1375
+ ws.close(4400, "Missing bubbleId or cwd parameter");
1376
+ return;
1377
+ }
1378
+ let closed = false;
1379
+ const send = (msg) => {
1380
+ if (!closed && ws.readyState === WebSocket2.OPEN) {
1381
+ ws.send(JSON.stringify(msg));
1382
+ }
1383
+ };
1384
+ const heartbeat = setInterval(() => {
1385
+ if (ws.readyState === WebSocket2.OPEN) {
1386
+ ws.send(JSON.stringify({ type: "ping" }));
1387
+ }
1388
+ }, HEARTBEAT_INTERVAL);
1389
+ const { kernelManager } = await import("./JupyterKernelManager-475VNVA5.mjs");
1390
+ try {
1391
+ const instance = await kernelManager.getOrCreate(bubbleId, cwd);
1392
+ if (instance.errorMessage) {
1393
+ send({ type: "kernel_error", message: instance.errorMessage });
1394
+ } else {
1395
+ send({ type: "ready" });
1396
+ }
1397
+ } catch (err) {
1398
+ send({ type: "kernel_error", message: err.message });
1399
+ }
1400
+ const unsubscribe = kernelManager.addOutputListener(bubbleId, (msg) => {
1401
+ if (msg.msg_type === "kernel_error") {
1402
+ send({ type: "kernel_error", message: msg.content.message });
1403
+ } else if (msg.msg_type === "kernel_died") {
1404
+ send({ type: "kernel_died", exit_code: msg.content.exit_code });
1405
+ } else if (msg.msg_type === "status") {
1406
+ send({ type: "status", execution_state: msg.content.execution_state });
1407
+ } else {
1408
+ send({ type: "output", msg_id: msg.msg_id, msg_type: msg.msg_type, content: msg.content });
1409
+ }
1410
+ });
1411
+ ws.on("message", async (raw) => {
1412
+ let msg;
1413
+ try {
1414
+ msg = JSON.parse(raw.toString());
1415
+ } catch {
1416
+ return;
1417
+ }
1418
+ const type = msg.type;
1419
+ if (type === "execute") {
1420
+ const { msg_id, code } = msg;
1421
+ try {
1422
+ await kernelManager.execute(bubbleId, code, msg_id, cwd);
1423
+ } catch (err) {
1424
+ send({ type: "kernel_error", message: err.message });
1425
+ }
1426
+ } else if (type === "interrupt") {
1427
+ await kernelManager.interrupt(bubbleId);
1428
+ }
1429
+ });
1430
+ ws.on("close", () => {
1431
+ closed = true;
1432
+ clearInterval(heartbeat);
1433
+ unsubscribe();
1434
+ });
1435
+ }
1436
+ export {
1437
+ broadcastToGlobalState,
1438
+ handleBrowserApi,
1439
+ handleTerminalApi,
1440
+ handleUpgrade
1441
+ };