@surething/cockpit 1.0.208 → 1.0.210

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 (575) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +12 -10
  3. package/.next-prod/build-manifest.json +4 -4
  4. package/.next-prod/diagnostics/framework.json +1 -1
  5. package/.next-prod/next-server.js.nft.json +1 -1
  6. package/.next-prod/prerender-manifest.json +3 -3
  7. package/.next-prod/react-loadable-manifest.json +25 -1
  8. package/.next-prod/routes-manifest.json +12 -0
  9. package/.next-prod/server/app/_global-error/page.js +3 -3
  10. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  11. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/.next-prod/server/app/_global-error.html +1 -1
  13. package/.next-prod/server/app/_global-error.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/.next-prod/server/app/_not-found/page.js +2 -2
  21. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next-prod/server/app/_not-found.html +1 -1
  24. package/.next-prod/server/app/_not-found.rsc +16 -17
  25. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +16 -17
  26. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  27. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +5 -6
  28. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  29. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  30. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  31. package/.next-prod/server/app/api/agent/test/route.js +1 -0
  32. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -0
  33. package/.next-prod/server/app/api/agent/test/route_client-reference-manifest.js +1 -0
  34. package/.next-prod/server/app/api/bash/route.js +1 -1
  35. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/chat/codex/route.js +18 -18
  37. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/chat/deepseek/route.js +4 -4
  39. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/chat/kimi/route.js +18 -18
  41. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/chat/ollama/route.js +20 -109
  43. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/chat/route.js +4 -4
  45. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/claude-stats/route.js +1 -1
  47. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/commands/route.js +1 -1
  49. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/comments/route.js +1 -1
  51. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/db/columns/route.js +15 -15
  53. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/db/connect/route.js +3 -1
  55. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
  57. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/db/export/route.js +1 -1
  59. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/db/query/route.js +1 -1
  61. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/db/schemas/route.js +2 -2
  63. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/dev/spans/route.js +1 -0
  65. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -0
  66. package/.next-prod/server/app/api/dev/spans/route_client-reference-manifest.js +1 -0
  67. package/.next-prod/server/app/api/extension/version/route.js +1 -1
  68. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  69. package/.next-prod/server/app/api/file/route.js +1 -1
  70. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  71. package/.next-prod/server/app/api/files/blame/route.js +1 -1
  72. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  73. package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
  74. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  75. package/.next-prod/server/app/api/files/copy/route.js +1 -1
  76. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  77. package/.next-prod/server/app/api/files/delete/route.js +1 -1
  78. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  79. package/.next-prod/server/app/api/files/expanded/route.js +1 -1
  80. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  81. package/.next-prod/server/app/api/files/index/route.js +1 -1
  82. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  83. package/.next-prod/server/app/api/files/init/route.js +1 -1
  84. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  85. package/.next-prod/server/app/api/files/paste/route.js +1 -1
  86. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  87. package/.next-prod/server/app/api/files/read/route.js +1 -1
  88. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  89. package/.next-prod/server/app/api/files/readdir/route.js +1 -1
  90. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  91. package/.next-prod/server/app/api/files/recent/route.js +1 -1
  92. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  93. package/.next-prod/server/app/api/files/save/route.js +1 -1
  94. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  95. package/.next-prod/server/app/api/files/search/route.js +1 -1
  96. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  97. package/.next-prod/server/app/api/files/stat/route.js +1 -1
  98. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  99. package/.next-prod/server/app/api/files/text/route.js +1 -1
  100. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  101. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
  102. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  103. package/.next-prod/server/app/api/git/branches/route.js +1 -1
  104. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  105. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
  106. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  107. package/.next-prod/server/app/api/git/commits/route.js +1 -1
  108. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  109. package/.next-prod/server/app/api/git/diff/route.js +1 -1
  110. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  111. package/.next-prod/server/app/api/git/discard/route.js +1 -1
  112. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  113. package/.next-prod/server/app/api/git/stage/route.js +1 -1
  114. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  115. package/.next-prod/server/app/api/git/status/route.js +1 -1
  116. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  117. package/.next-prod/server/app/api/git/unstage/route.js +1 -1
  118. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  119. package/.next-prod/server/app/api/git/worktree/route.js +1 -1
  120. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  121. package/.next-prod/server/app/api/global-state/route.js +1 -1
  122. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  123. package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
  124. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  125. package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
  126. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  127. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
  128. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  129. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  130. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  132. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  133. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  134. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  135. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  136. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  138. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  139. package/.next-prod/server/app/api/mysql/columns/route.js +9 -9
  140. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  141. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  142. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  144. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  145. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  146. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  148. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  149. package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
  150. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  151. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  152. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  154. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  156. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  157. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  158. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  159. package/.next-prod/server/app/api/note/route.js +1 -1
  160. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  161. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  162. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  163. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  164. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  165. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  166. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  167. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  168. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  169. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  170. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  171. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  172. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  173. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  174. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  175. package/.next-prod/server/app/api/project-state/route.js +1 -1
  176. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  177. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  178. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  179. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  180. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  181. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  182. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  183. package/.next-prod/server/app/api/projects/route.js +1 -1
  184. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  185. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  186. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  187. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  188. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  189. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  190. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  191. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  192. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  193. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  194. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  195. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  196. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  197. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  198. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  199. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  200. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  201. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  202. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  203. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  204. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  205. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  206. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  207. package/.next-prod/server/app/api/review/order/route.js +1 -1
  208. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  209. package/.next-prod/server/app/api/review/route.js +1 -1
  210. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  211. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  212. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  213. package/.next-prod/server/app/api/review/users/route.js +1 -1
  214. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  215. package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
  216. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  217. package/.next-prod/server/app/api/services/config/route.js +1 -1
  218. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  219. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  220. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  221. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  222. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  223. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  224. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  225. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  226. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  227. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  228. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  229. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  230. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  231. package/.next-prod/server/app/api/sessions/route.js +1 -1
  232. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  233. package/.next-prod/server/app/api/settings/route.js +1 -1
  234. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  235. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  236. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  237. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  238. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  239. package/.next-prod/server/app/api/skills/route.js +1 -1
  240. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  241. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  242. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  243. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  244. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  245. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  246. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  247. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  248. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  249. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  250. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  251. package/.next-prod/server/app/api/version/route.js +1 -1
  252. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  253. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  254. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  255. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  256. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  257. package/.next-prod/server/app/manifest.webmanifest.body +1 -1
  258. package/.next-prod/server/app/page.js +2 -2
  259. package/.next-prod/server/app/page.js.nft.json +1 -1
  260. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  261. package/.next-prod/server/app/project/page.js +2 -2
  262. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  263. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  264. package/.next-prod/server/app/review/[id]/page.js +2 -2
  265. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  266. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  267. package/.next-prod/server/app-paths-manifest.json +12 -10
  268. package/.next-prod/server/chunks/2728.js +1 -0
  269. package/.next-prod/server/chunks/304.js +1 -0
  270. package/.next-prod/server/chunks/3718.js +1 -0
  271. package/.next-prod/server/chunks/3863.js +1 -0
  272. package/.next-prod/server/chunks/4034.js +114 -0
  273. package/.next-prod/server/chunks/4741.js +2 -2
  274. package/.next-prod/server/chunks/5159.js +1 -0
  275. package/.next-prod/server/chunks/{6007.js → 5292.js} +2 -2
  276. package/.next-prod/server/chunks/5616.js +1 -0
  277. package/.next-prod/server/chunks/6955.js +1 -0
  278. package/.next-prod/server/chunks/7184.js +244 -0
  279. package/.next-prod/server/chunks/7973.js +15 -0
  280. package/.next-prod/server/chunks/8916.js +1 -0
  281. package/.next-prod/server/chunks/9658.js +42 -0
  282. package/.next-prod/server/functions-config-manifest.json +2 -0
  283. package/.next-prod/server/middleware-build-manifest.js +1 -1
  284. package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
  285. package/.next-prod/server/pages/404.html +1 -1
  286. package/.next-prod/server/pages/500.html +1 -1
  287. package/.next-prod/server/server-reference-manifest.json +1 -1
  288. package/.next-prod/static/LJRtmjYCuVrSA_dcelxlR/_buildManifest.js +1 -0
  289. package/.next-prod/static/chunks/2580.69af80de5bcfcefe.js +1 -0
  290. package/.next-prod/static/chunks/2708.7263182a029113c8.js +1 -0
  291. package/.next-prod/static/chunks/327-9ffab8f0b2b0b4cd.js +13 -0
  292. package/.next-prod/static/chunks/{3794-3fb4e6ee851037bb.js → 3794-ba2500baa4c52d55.js} +3 -3
  293. package/.next-prod/static/chunks/5188-6ad3d686c5e9fb28.js +29 -0
  294. package/.next-prod/static/chunks/{5204-c8293184aa55cdd5.js → 5204-babf0d0290febbec.js} +1 -1
  295. package/.next-prod/static/chunks/6345-3c06cdc8c89677b8.js +14 -0
  296. package/.next-prod/static/chunks/7562.8fdc3abdd45c77ab.js +1 -0
  297. package/.next-prod/static/chunks/9012.6ed079104670001d.js +1 -0
  298. package/.next-prod/static/chunks/9617.d038e8ea9fc93e24.js +1 -0
  299. package/.next-prod/static/chunks/96c8525a-f1e0653013503d49.js +2 -0
  300. package/.next-prod/static/chunks/app/_global-error/page-826847d169541fa9.js +1 -0
  301. package/.next-prod/static/chunks/app/api/agent/test/route-826847d169541fa9.js +1 -0
  302. package/.next-prod/static/chunks/app/api/bash/route-826847d169541fa9.js +1 -0
  303. package/.next-prod/static/chunks/app/api/chat/codex/route-826847d169541fa9.js +1 -0
  304. package/.next-prod/static/chunks/app/api/chat/deepseek/route-826847d169541fa9.js +1 -0
  305. package/.next-prod/static/chunks/app/api/chat/kimi/route-826847d169541fa9.js +1 -0
  306. package/.next-prod/static/chunks/app/api/chat/ollama/route-826847d169541fa9.js +1 -0
  307. package/.next-prod/static/chunks/app/api/chat/route-826847d169541fa9.js +1 -0
  308. package/.next-prod/static/chunks/app/api/claude-stats/route-826847d169541fa9.js +1 -0
  309. package/.next-prod/static/chunks/app/api/commands/route-826847d169541fa9.js +1 -0
  310. package/.next-prod/static/chunks/app/api/comments/route-826847d169541fa9.js +1 -0
  311. package/.next-prod/static/chunks/app/api/db/columns/route-826847d169541fa9.js +1 -0
  312. package/.next-prod/static/chunks/app/api/db/connect/route-826847d169541fa9.js +1 -0
  313. package/.next-prod/static/chunks/app/api/db/disconnect/route-826847d169541fa9.js +1 -0
  314. package/.next-prod/static/chunks/app/api/db/export/route-826847d169541fa9.js +1 -0
  315. package/.next-prod/static/chunks/app/api/db/query/route-826847d169541fa9.js +1 -0
  316. package/.next-prod/static/chunks/app/api/db/schemas/route-826847d169541fa9.js +1 -0
  317. package/.next-prod/static/chunks/app/api/dev/spans/route-826847d169541fa9.js +1 -0
  318. package/.next-prod/static/chunks/app/api/extension/version/route-826847d169541fa9.js +1 -0
  319. package/.next-prod/static/chunks/app/api/file/route-826847d169541fa9.js +1 -0
  320. package/.next-prod/static/chunks/app/api/files/blame/route-826847d169541fa9.js +1 -0
  321. package/.next-prod/static/chunks/app/api/files/clipboard/route-826847d169541fa9.js +1 -0
  322. package/.next-prod/static/chunks/app/api/files/copy/route-826847d169541fa9.js +1 -0
  323. package/.next-prod/static/chunks/app/api/files/delete/route-826847d169541fa9.js +1 -0
  324. package/.next-prod/static/chunks/app/api/files/expanded/route-826847d169541fa9.js +1 -0
  325. package/.next-prod/static/chunks/app/api/files/index/route-826847d169541fa9.js +1 -0
  326. package/.next-prod/static/chunks/app/api/files/init/route-826847d169541fa9.js +1 -0
  327. package/.next-prod/static/chunks/app/api/files/paste/route-826847d169541fa9.js +1 -0
  328. package/.next-prod/static/chunks/app/api/files/read/route-826847d169541fa9.js +1 -0
  329. package/.next-prod/static/chunks/app/api/files/readdir/route-826847d169541fa9.js +1 -0
  330. package/.next-prod/static/chunks/app/api/files/recent/route-826847d169541fa9.js +1 -0
  331. package/.next-prod/static/chunks/app/api/files/save/route-826847d169541fa9.js +1 -0
  332. package/.next-prod/static/chunks/app/api/files/search/route-826847d169541fa9.js +1 -0
  333. package/.next-prod/static/chunks/app/api/files/stat/route-826847d169541fa9.js +1 -0
  334. package/.next-prod/static/chunks/app/api/files/text/route-826847d169541fa9.js +1 -0
  335. package/.next-prod/static/chunks/app/api/git/branch-diff/route-826847d169541fa9.js +1 -0
  336. package/.next-prod/static/chunks/app/api/git/branches/route-826847d169541fa9.js +1 -0
  337. package/.next-prod/static/chunks/app/api/git/commit-diff/route-826847d169541fa9.js +1 -0
  338. package/.next-prod/static/chunks/app/api/git/commits/route-826847d169541fa9.js +1 -0
  339. package/.next-prod/static/chunks/app/api/git/diff/route-826847d169541fa9.js +1 -0
  340. package/.next-prod/static/chunks/app/api/git/discard/route-826847d169541fa9.js +1 -0
  341. package/.next-prod/static/chunks/app/api/git/stage/route-826847d169541fa9.js +1 -0
  342. package/.next-prod/static/chunks/app/api/git/status/route-826847d169541fa9.js +1 -0
  343. package/.next-prod/static/chunks/app/api/git/unstage/route-826847d169541fa9.js +1 -0
  344. package/.next-prod/static/chunks/app/api/git/worktree/route-826847d169541fa9.js +1 -0
  345. package/.next-prod/static/chunks/app/api/global-state/route-826847d169541fa9.js +1 -0
  346. package/.next-prod/static/chunks/app/api/jupyter/load/route-826847d169541fa9.js +1 -0
  347. package/.next-prod/static/chunks/app/api/jupyter/save/route-826847d169541fa9.js +1 -0
  348. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-826847d169541fa9.js +1 -0
  349. package/.next-prod/static/chunks/app/api/lsp/definition/route-826847d169541fa9.js +1 -0
  350. package/.next-prod/static/chunks/app/api/lsp/hover/route-826847d169541fa9.js +1 -0
  351. package/.next-prod/static/chunks/app/api/lsp/references/route-826847d169541fa9.js +1 -0
  352. package/.next-prod/static/chunks/app/api/lsp/status/route-826847d169541fa9.js +1 -0
  353. package/.next-prod/static/chunks/app/api/lsp/warmup/route-826847d169541fa9.js +1 -0
  354. package/.next-prod/static/chunks/app/api/mysql/columns/route-826847d169541fa9.js +1 -0
  355. package/.next-prod/static/chunks/app/api/mysql/connect/route-826847d169541fa9.js +1 -0
  356. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-826847d169541fa9.js +1 -0
  357. package/.next-prod/static/chunks/app/api/mysql/export/route-826847d169541fa9.js +1 -0
  358. package/.next-prod/static/chunks/app/api/mysql/query/route-826847d169541fa9.js +1 -0
  359. package/.next-prod/static/chunks/app/api/mysql/schemas/route-826847d169541fa9.js +1 -0
  360. package/.next-prod/static/chunks/app/api/neo4j/connect/route-826847d169541fa9.js +1 -0
  361. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-826847d169541fa9.js +1 -0
  362. package/.next-prod/static/chunks/app/api/neo4j/query/route-826847d169541fa9.js +1 -0
  363. package/.next-prod/static/chunks/app/api/neo4j/schema/route-826847d169541fa9.js +1 -0
  364. package/.next-prod/static/chunks/app/api/note/route-826847d169541fa9.js +1 -0
  365. package/.next-prod/static/chunks/app/api/ollama/models/route-826847d169541fa9.js +1 -0
  366. package/.next-prod/static/chunks/app/api/ollama/start/route-826847d169541fa9.js +1 -0
  367. package/.next-prod/static/chunks/app/api/open-cursor/route-826847d169541fa9.js +1 -0
  368. package/.next-prod/static/chunks/app/api/open-vscode/route-826847d169541fa9.js +1 -0
  369. package/.next-prod/static/chunks/app/api/pick-folder/route-826847d169541fa9.js +1 -0
  370. package/.next-prod/static/chunks/app/api/pinned-sessions/route-826847d169541fa9.js +1 -0
  371. package/.next-prod/static/chunks/app/api/project-settings/route-826847d169541fa9.js +1 -0
  372. package/.next-prod/static/chunks/app/api/project-state/route-826847d169541fa9.js +1 -0
  373. package/.next-prod/static/chunks/app/api/projectGraph/file/route-826847d169541fa9.js +1 -0
  374. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-826847d169541fa9.js +1 -0
  375. package/.next-prod/static/chunks/app/api/projectGraph/search/route-826847d169541fa9.js +1 -0
  376. package/.next-prod/static/chunks/app/api/projects/route-826847d169541fa9.js +1 -0
  377. package/.next-prod/static/chunks/app/api/redis/command/route-826847d169541fa9.js +1 -0
  378. package/.next-prod/static/chunks/app/api/redis/connect/route-826847d169541fa9.js +1 -0
  379. package/.next-prod/static/chunks/app/api/redis/delete/route-826847d169541fa9.js +1 -0
  380. package/.next-prod/static/chunks/app/api/redis/disconnect/route-826847d169541fa9.js +1 -0
  381. package/.next-prod/static/chunks/app/api/redis/get/route-826847d169541fa9.js +1 -0
  382. package/.next-prod/static/chunks/app/api/redis/keys/route-826847d169541fa9.js +1 -0
  383. package/.next-prod/static/chunks/app/api/redis/set/route-826847d169541fa9.js +1 -0
  384. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-826847d169541fa9.js +1 -0
  385. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-826847d169541fa9.js +1 -0
  386. package/.next-prod/static/chunks/app/api/review/[id]/route-826847d169541fa9.js +1 -0
  387. package/.next-prod/static/chunks/app/api/review/identify/route-826847d169541fa9.js +1 -0
  388. package/.next-prod/static/chunks/app/api/review/order/route-826847d169541fa9.js +1 -0
  389. package/.next-prod/static/chunks/app/api/review/route-826847d169541fa9.js +1 -0
  390. package/.next-prod/static/chunks/app/api/review/share-info/route-826847d169541fa9.js +1 -0
  391. package/.next-prod/static/chunks/app/api/review/users/route-826847d169541fa9.js +1 -0
  392. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-826847d169541fa9.js +1 -0
  393. package/.next-prod/static/chunks/app/api/services/config/route-826847d169541fa9.js +1 -0
  394. package/.next-prod/static/chunks/app/api/services/scripts/route-826847d169541fa9.js +1 -0
  395. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-826847d169541fa9.js +1 -0
  396. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-826847d169541fa9.js +1 -0
  397. package/.next-prod/static/chunks/app/api/session-by-path/route-826847d169541fa9.js +1 -0
  398. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-826847d169541fa9.js +1 -0
  399. package/.next-prod/static/chunks/app/api/sessions/projects/route-826847d169541fa9.js +1 -0
  400. package/.next-prod/static/chunks/app/api/sessions/route-826847d169541fa9.js +1 -0
  401. package/.next-prod/static/chunks/app/api/settings/route-826847d169541fa9.js +1 -0
  402. package/.next-prod/static/chunks/app/api/skills/[id]/route-826847d169541fa9.js +1 -0
  403. package/.next-prod/static/chunks/app/api/skills/content/route-826847d169541fa9.js +1 -0
  404. package/.next-prod/static/chunks/app/api/skills/route-826847d169541fa9.js +1 -0
  405. package/.next-prod/static/chunks/app/api/terminal/aliases/route-826847d169541fa9.js +1 -0
  406. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-826847d169541fa9.js +1 -0
  407. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-826847d169541fa9.js +1 -0
  408. package/.next-prod/static/chunks/app/api/terminal/env/route-826847d169541fa9.js +1 -0
  409. package/.next-prod/static/chunks/app/api/terminal/history/route-826847d169541fa9.js +1 -0
  410. package/.next-prod/static/chunks/app/api/version/route-826847d169541fa9.js +1 -0
  411. package/.next-prod/static/chunks/app/layout-a0362651ba6e6e6f.js +1 -0
  412. package/.next-prod/static/chunks/app/manifest.webmanifest/route-826847d169541fa9.js +1 -0
  413. package/.next-prod/static/chunks/app/{page-db32ebfdf1ac9174.js → page-1b14cabf47df9ff7.js} +1 -1
  414. package/.next-prod/static/chunks/app/project/{page-db32ebfdf1ac9174.js → page-1b14cabf47df9ff7.js} +1 -1
  415. package/.next-prod/static/chunks/app/review/[id]/page-7db3a48a13f1840c.js +1 -0
  416. package/.next-prod/static/chunks/bc21e3dd-a78364524623b9b0.js +1 -0
  417. package/.next-prod/static/chunks/{main-5a46314a5491113b.js → main-79827b1543335b12.js} +3 -3
  418. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-826847d169541fa9.js +1 -0
  419. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-826847d169541fa9.js +1 -0
  420. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-826847d169541fa9.js +1 -0
  421. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-826847d169541fa9.js +1 -0
  422. package/.next-prod/static/chunks/webpack-b618ac52d349e5ca.js +1 -0
  423. package/.next-prod/static/css/dcde719317bea028.css +1 -0
  424. package/.next-prod/trace +12 -12
  425. package/.next-prod/trace-build +1 -1
  426. package/.next-prod/types/app/api/agent/test/route.ts +351 -0
  427. package/.next-prod/types/app/api/dev/spans/route.ts +351 -0
  428. package/.next-prod/types/routes.d.ts +3 -1
  429. package/.next-prod/types/validator.ts +18 -0
  430. package/README.md +29 -8
  431. package/README.zh.md +30 -9
  432. package/dist/{chunk-VCZEGP64.mjs → chunk-FBR4KJI5.mjs} +24 -250
  433. package/dist/chunk-OWUW2O3D.mjs +28475 -0
  434. package/dist/{chunk-RSHKDWJM.mjs → chunk-TXBVUZVH.mjs} +94 -0
  435. package/dist/httpApi.mjs +239 -0
  436. package/dist/scheduledTasks.mjs +1239 -66
  437. package/dist/{server-K6XWP7DX.mjs → server-E7G55DY7.mjs} +9 -10
  438. package/dist/wsServer.mjs +867 -704
  439. package/package.json +17 -4
  440. package/server.mjs +3 -1
  441. package/.next-prod/server/chunks/240.js +0 -1
  442. package/.next-prod/server/chunks/3204.js +0 -42
  443. package/.next-prod/server/chunks/5466.js +0 -1
  444. package/.next-prod/server/chunks/7264.js +0 -5
  445. package/.next-prod/server/chunks/8465.js +0 -15
  446. package/.next-prod/server/chunks/8750.js +0 -1
  447. package/.next-prod/server/chunks/900.js +0 -1
  448. package/.next-prod/server/chunks/9255.js +0 -1
  449. package/.next-prod/server/chunks/9755.js +0 -101
  450. package/.next-prod/server/chunks/987.js +0 -139
  451. package/.next-prod/static/WsSesL2O_jRoZztt2Y5r6/_buildManifest.js +0 -1
  452. package/.next-prod/static/chunks/327.8ecab0b86d52b597.js +0 -1
  453. package/.next-prod/static/chunks/5660-3d87dfb12f95e96d.js +0 -29
  454. package/.next-prod/static/chunks/6028-1d6ced1439a3f01f.js +0 -1
  455. package/.next-prod/static/chunks/6345-6b34b0528ff833a1.js +0 -14
  456. package/.next-prod/static/chunks/app/_global-error/page-7975a2b8c7d0b214.js +0 -1
  457. package/.next-prod/static/chunks/app/api/bash/route-7975a2b8c7d0b214.js +0 -1
  458. package/.next-prod/static/chunks/app/api/chat/codex/route-7975a2b8c7d0b214.js +0 -1
  459. package/.next-prod/static/chunks/app/api/chat/deepseek/route-7975a2b8c7d0b214.js +0 -1
  460. package/.next-prod/static/chunks/app/api/chat/kimi/route-7975a2b8c7d0b214.js +0 -1
  461. package/.next-prod/static/chunks/app/api/chat/ollama/route-7975a2b8c7d0b214.js +0 -1
  462. package/.next-prod/static/chunks/app/api/chat/route-7975a2b8c7d0b214.js +0 -1
  463. package/.next-prod/static/chunks/app/api/claude-stats/route-7975a2b8c7d0b214.js +0 -1
  464. package/.next-prod/static/chunks/app/api/commands/route-7975a2b8c7d0b214.js +0 -1
  465. package/.next-prod/static/chunks/app/api/comments/route-7975a2b8c7d0b214.js +0 -1
  466. package/.next-prod/static/chunks/app/api/db/columns/route-7975a2b8c7d0b214.js +0 -1
  467. package/.next-prod/static/chunks/app/api/db/connect/route-7975a2b8c7d0b214.js +0 -1
  468. package/.next-prod/static/chunks/app/api/db/disconnect/route-7975a2b8c7d0b214.js +0 -1
  469. package/.next-prod/static/chunks/app/api/db/export/route-7975a2b8c7d0b214.js +0 -1
  470. package/.next-prod/static/chunks/app/api/db/query/route-7975a2b8c7d0b214.js +0 -1
  471. package/.next-prod/static/chunks/app/api/db/schemas/route-7975a2b8c7d0b214.js +0 -1
  472. package/.next-prod/static/chunks/app/api/extension/version/route-7975a2b8c7d0b214.js +0 -1
  473. package/.next-prod/static/chunks/app/api/file/route-7975a2b8c7d0b214.js +0 -1
  474. package/.next-prod/static/chunks/app/api/files/blame/route-7975a2b8c7d0b214.js +0 -1
  475. package/.next-prod/static/chunks/app/api/files/clipboard/route-7975a2b8c7d0b214.js +0 -1
  476. package/.next-prod/static/chunks/app/api/files/copy/route-7975a2b8c7d0b214.js +0 -1
  477. package/.next-prod/static/chunks/app/api/files/delete/route-7975a2b8c7d0b214.js +0 -1
  478. package/.next-prod/static/chunks/app/api/files/expanded/route-7975a2b8c7d0b214.js +0 -1
  479. package/.next-prod/static/chunks/app/api/files/index/route-7975a2b8c7d0b214.js +0 -1
  480. package/.next-prod/static/chunks/app/api/files/init/route-7975a2b8c7d0b214.js +0 -1
  481. package/.next-prod/static/chunks/app/api/files/paste/route-7975a2b8c7d0b214.js +0 -1
  482. package/.next-prod/static/chunks/app/api/files/read/route-7975a2b8c7d0b214.js +0 -1
  483. package/.next-prod/static/chunks/app/api/files/readdir/route-7975a2b8c7d0b214.js +0 -1
  484. package/.next-prod/static/chunks/app/api/files/recent/route-7975a2b8c7d0b214.js +0 -1
  485. package/.next-prod/static/chunks/app/api/files/save/route-7975a2b8c7d0b214.js +0 -1
  486. package/.next-prod/static/chunks/app/api/files/search/route-7975a2b8c7d0b214.js +0 -1
  487. package/.next-prod/static/chunks/app/api/files/stat/route-7975a2b8c7d0b214.js +0 -1
  488. package/.next-prod/static/chunks/app/api/files/text/route-7975a2b8c7d0b214.js +0 -1
  489. package/.next-prod/static/chunks/app/api/git/branch-diff/route-7975a2b8c7d0b214.js +0 -1
  490. package/.next-prod/static/chunks/app/api/git/branches/route-7975a2b8c7d0b214.js +0 -1
  491. package/.next-prod/static/chunks/app/api/git/commit-diff/route-7975a2b8c7d0b214.js +0 -1
  492. package/.next-prod/static/chunks/app/api/git/commits/route-7975a2b8c7d0b214.js +0 -1
  493. package/.next-prod/static/chunks/app/api/git/diff/route-7975a2b8c7d0b214.js +0 -1
  494. package/.next-prod/static/chunks/app/api/git/discard/route-7975a2b8c7d0b214.js +0 -1
  495. package/.next-prod/static/chunks/app/api/git/stage/route-7975a2b8c7d0b214.js +0 -1
  496. package/.next-prod/static/chunks/app/api/git/status/route-7975a2b8c7d0b214.js +0 -1
  497. package/.next-prod/static/chunks/app/api/git/unstage/route-7975a2b8c7d0b214.js +0 -1
  498. package/.next-prod/static/chunks/app/api/git/worktree/route-7975a2b8c7d0b214.js +0 -1
  499. package/.next-prod/static/chunks/app/api/global-state/route-7975a2b8c7d0b214.js +0 -1
  500. package/.next-prod/static/chunks/app/api/jupyter/load/route-7975a2b8c7d0b214.js +0 -1
  501. package/.next-prod/static/chunks/app/api/jupyter/save/route-7975a2b8c7d0b214.js +0 -1
  502. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-7975a2b8c7d0b214.js +0 -1
  503. package/.next-prod/static/chunks/app/api/lsp/definition/route-7975a2b8c7d0b214.js +0 -1
  504. package/.next-prod/static/chunks/app/api/lsp/hover/route-7975a2b8c7d0b214.js +0 -1
  505. package/.next-prod/static/chunks/app/api/lsp/references/route-7975a2b8c7d0b214.js +0 -1
  506. package/.next-prod/static/chunks/app/api/lsp/status/route-7975a2b8c7d0b214.js +0 -1
  507. package/.next-prod/static/chunks/app/api/lsp/warmup/route-7975a2b8c7d0b214.js +0 -1
  508. package/.next-prod/static/chunks/app/api/mysql/columns/route-7975a2b8c7d0b214.js +0 -1
  509. package/.next-prod/static/chunks/app/api/mysql/connect/route-7975a2b8c7d0b214.js +0 -1
  510. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-7975a2b8c7d0b214.js +0 -1
  511. package/.next-prod/static/chunks/app/api/mysql/export/route-7975a2b8c7d0b214.js +0 -1
  512. package/.next-prod/static/chunks/app/api/mysql/query/route-7975a2b8c7d0b214.js +0 -1
  513. package/.next-prod/static/chunks/app/api/mysql/schemas/route-7975a2b8c7d0b214.js +0 -1
  514. package/.next-prod/static/chunks/app/api/neo4j/connect/route-7975a2b8c7d0b214.js +0 -1
  515. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-7975a2b8c7d0b214.js +0 -1
  516. package/.next-prod/static/chunks/app/api/neo4j/query/route-7975a2b8c7d0b214.js +0 -1
  517. package/.next-prod/static/chunks/app/api/neo4j/schema/route-7975a2b8c7d0b214.js +0 -1
  518. package/.next-prod/static/chunks/app/api/note/route-7975a2b8c7d0b214.js +0 -1
  519. package/.next-prod/static/chunks/app/api/ollama/models/route-7975a2b8c7d0b214.js +0 -1
  520. package/.next-prod/static/chunks/app/api/ollama/start/route-7975a2b8c7d0b214.js +0 -1
  521. package/.next-prod/static/chunks/app/api/open-cursor/route-7975a2b8c7d0b214.js +0 -1
  522. package/.next-prod/static/chunks/app/api/open-vscode/route-7975a2b8c7d0b214.js +0 -1
  523. package/.next-prod/static/chunks/app/api/pick-folder/route-7975a2b8c7d0b214.js +0 -1
  524. package/.next-prod/static/chunks/app/api/pinned-sessions/route-7975a2b8c7d0b214.js +0 -1
  525. package/.next-prod/static/chunks/app/api/project-settings/route-7975a2b8c7d0b214.js +0 -1
  526. package/.next-prod/static/chunks/app/api/project-state/route-7975a2b8c7d0b214.js +0 -1
  527. package/.next-prod/static/chunks/app/api/projectGraph/file/route-7975a2b8c7d0b214.js +0 -1
  528. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-7975a2b8c7d0b214.js +0 -1
  529. package/.next-prod/static/chunks/app/api/projectGraph/search/route-7975a2b8c7d0b214.js +0 -1
  530. package/.next-prod/static/chunks/app/api/projects/route-7975a2b8c7d0b214.js +0 -1
  531. package/.next-prod/static/chunks/app/api/redis/command/route-7975a2b8c7d0b214.js +0 -1
  532. package/.next-prod/static/chunks/app/api/redis/connect/route-7975a2b8c7d0b214.js +0 -1
  533. package/.next-prod/static/chunks/app/api/redis/delete/route-7975a2b8c7d0b214.js +0 -1
  534. package/.next-prod/static/chunks/app/api/redis/disconnect/route-7975a2b8c7d0b214.js +0 -1
  535. package/.next-prod/static/chunks/app/api/redis/get/route-7975a2b8c7d0b214.js +0 -1
  536. package/.next-prod/static/chunks/app/api/redis/keys/route-7975a2b8c7d0b214.js +0 -1
  537. package/.next-prod/static/chunks/app/api/redis/set/route-7975a2b8c7d0b214.js +0 -1
  538. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-7975a2b8c7d0b214.js +0 -1
  539. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-7975a2b8c7d0b214.js +0 -1
  540. package/.next-prod/static/chunks/app/api/review/[id]/route-7975a2b8c7d0b214.js +0 -1
  541. package/.next-prod/static/chunks/app/api/review/identify/route-7975a2b8c7d0b214.js +0 -1
  542. package/.next-prod/static/chunks/app/api/review/order/route-7975a2b8c7d0b214.js +0 -1
  543. package/.next-prod/static/chunks/app/api/review/route-7975a2b8c7d0b214.js +0 -1
  544. package/.next-prod/static/chunks/app/api/review/share-info/route-7975a2b8c7d0b214.js +0 -1
  545. package/.next-prod/static/chunks/app/api/review/users/route-7975a2b8c7d0b214.js +0 -1
  546. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-7975a2b8c7d0b214.js +0 -1
  547. package/.next-prod/static/chunks/app/api/services/config/route-7975a2b8c7d0b214.js +0 -1
  548. package/.next-prod/static/chunks/app/api/services/scripts/route-7975a2b8c7d0b214.js +0 -1
  549. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-7975a2b8c7d0b214.js +0 -1
  550. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-7975a2b8c7d0b214.js +0 -1
  551. package/.next-prod/static/chunks/app/api/session-by-path/route-7975a2b8c7d0b214.js +0 -1
  552. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-7975a2b8c7d0b214.js +0 -1
  553. package/.next-prod/static/chunks/app/api/sessions/projects/route-7975a2b8c7d0b214.js +0 -1
  554. package/.next-prod/static/chunks/app/api/sessions/route-7975a2b8c7d0b214.js +0 -1
  555. package/.next-prod/static/chunks/app/api/settings/route-7975a2b8c7d0b214.js +0 -1
  556. package/.next-prod/static/chunks/app/api/skills/[id]/route-7975a2b8c7d0b214.js +0 -1
  557. package/.next-prod/static/chunks/app/api/skills/content/route-7975a2b8c7d0b214.js +0 -1
  558. package/.next-prod/static/chunks/app/api/skills/route-7975a2b8c7d0b214.js +0 -1
  559. package/.next-prod/static/chunks/app/api/terminal/aliases/route-7975a2b8c7d0b214.js +0 -1
  560. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-7975a2b8c7d0b214.js +0 -1
  561. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-7975a2b8c7d0b214.js +0 -1
  562. package/.next-prod/static/chunks/app/api/terminal/env/route-7975a2b8c7d0b214.js +0 -1
  563. package/.next-prod/static/chunks/app/api/terminal/history/route-7975a2b8c7d0b214.js +0 -1
  564. package/.next-prod/static/chunks/app/api/version/route-7975a2b8c7d0b214.js +0 -1
  565. package/.next-prod/static/chunks/app/layout-92d5dcd25bad9196.js +0 -1
  566. package/.next-prod/static/chunks/app/manifest.webmanifest/route-7975a2b8c7d0b214.js +0 -1
  567. package/.next-prod/static/chunks/app/review/[id]/page-05cd4cb51babd64c.js +0 -1
  568. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-7975a2b8c7d0b214.js +0 -1
  569. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-7975a2b8c7d0b214.js +0 -1
  570. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-7975a2b8c7d0b214.js +0 -1
  571. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-7975a2b8c7d0b214.js +0 -1
  572. package/.next-prod/static/chunks/webpack-bb0c02e3a9602d78.js +0 -1
  573. package/.next-prod/static/css/a7974d62fe853925.css +0 -1
  574. package/dist/chunk-HIRLDMCH.mjs +0 -314
  575. /package/.next-prod/static/{WsSesL2O_jRoZztt2Y5r6 → LJRtmjYCuVrSA_dcelxlR}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/project" | "/review/[id]"
5
- type AppRouteHandlerRoutes = "/api/bash" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/claude-stats" | "/api/commands" | "/api/comments" | "/api/db/columns" | "/api/db/connect" | "/api/db/disconnect" | "/api/db/export" | "/api/db/query" | "/api/db/schemas" | "/api/extension/version" | "/api/file" | "/api/files/blame" | "/api/files/clipboard" | "/api/files/copy" | "/api/files/delete" | "/api/files/expanded" | "/api/files/index" | "/api/files/init" | "/api/files/paste" | "/api/files/read" | "/api/files/readdir" | "/api/files/recent" | "/api/files/save" | "/api/files/search" | "/api/files/stat" | "/api/files/text" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/global-state" | "/api/jupyter/load" | "/api/jupyter/save" | "/api/jupyter/shutdown" | "/api/lsp/definition" | "/api/lsp/hover" | "/api/lsp/references" | "/api/lsp/status" | "/api/lsp/warmup" | "/api/mysql/columns" | "/api/mysql/connect" | "/api/mysql/disconnect" | "/api/mysql/export" | "/api/mysql/query" | "/api/mysql/schemas" | "/api/neo4j/connect" | "/api/neo4j/disconnect" | "/api/neo4j/query" | "/api/neo4j/schema" | "/api/note" | "/api/ollama/models" | "/api/ollama/start" | "/api/open-cursor" | "/api/open-vscode" | "/api/pick-folder" | "/api/pinned-sessions" | "/api/project-settings" | "/api/project-state" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/search" | "/api/projects" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/review" | "/api/review/[id]" | "/api/review/[id]/comments" | "/api/review/[id]/replies" | "/api/review/identify" | "/api/review/order" | "/api/review/share-info" | "/api/review/users" | "/api/scheduled-tasks" | "/api/services/config" | "/api/services/scripts" | "/api/session-by-path" | "/api/session/[sessionId]/fork" | "/api/session/[sessionId]/history" | "/api/sessions" | "/api/sessions/projects" | "/api/sessions/projects/[encodedPath]" | "/api/settings" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/version"
5
+ type AppRouteHandlerRoutes = "/api/agent/test" | "/api/bash" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/claude-stats" | "/api/commands" | "/api/comments" | "/api/db/columns" | "/api/db/connect" | "/api/db/disconnect" | "/api/db/export" | "/api/db/query" | "/api/db/schemas" | "/api/dev/spans" | "/api/extension/version" | "/api/file" | "/api/files/blame" | "/api/files/clipboard" | "/api/files/copy" | "/api/files/delete" | "/api/files/expanded" | "/api/files/index" | "/api/files/init" | "/api/files/paste" | "/api/files/read" | "/api/files/readdir" | "/api/files/recent" | "/api/files/save" | "/api/files/search" | "/api/files/stat" | "/api/files/text" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/global-state" | "/api/jupyter/load" | "/api/jupyter/save" | "/api/jupyter/shutdown" | "/api/lsp/definition" | "/api/lsp/hover" | "/api/lsp/references" | "/api/lsp/status" | "/api/lsp/warmup" | "/api/mysql/columns" | "/api/mysql/connect" | "/api/mysql/disconnect" | "/api/mysql/export" | "/api/mysql/query" | "/api/mysql/schemas" | "/api/neo4j/connect" | "/api/neo4j/disconnect" | "/api/neo4j/query" | "/api/neo4j/schema" | "/api/note" | "/api/ollama/models" | "/api/ollama/start" | "/api/open-cursor" | "/api/open-vscode" | "/api/pick-folder" | "/api/pinned-sessions" | "/api/project-settings" | "/api/project-state" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/search" | "/api/projects" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/review" | "/api/review/[id]" | "/api/review/[id]/comments" | "/api/review/[id]/replies" | "/api/review/identify" | "/api/review/order" | "/api/review/share-info" | "/api/review/users" | "/api/scheduled-tasks" | "/api/services/config" | "/api/services/scripts" | "/api/session-by-path" | "/api/session/[sessionId]/fork" | "/api/session/[sessionId]/history" | "/api/sessions" | "/api/sessions/projects" | "/api/sessions/projects/[encodedPath]" | "/api/settings" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/version"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -12,6 +12,7 @@ type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRo
12
12
 
13
13
  interface ParamMap {
14
14
  "/": {}
15
+ "/api/agent/test": {}
15
16
  "/api/bash": {}
16
17
  "/api/chat": {}
17
18
  "/api/chat/codex": {}
@@ -27,6 +28,7 @@ interface ParamMap {
27
28
  "/api/db/export": {}
28
29
  "/api/db/query": {}
29
30
  "/api/db/schemas": {}
31
+ "/api/dev/spans": {}
30
32
  "/api/extension/version": {}
31
33
  "/api/file": {}
32
34
  "/api/files/blame": {}
@@ -74,6 +74,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
74
74
  type __Unused = __Check
75
75
  }
76
76
 
77
+ // Validate ../../src/app/api/agent/test/route.ts
78
+ {
79
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/test">> = Specific
80
+ const handler = {} as typeof import("../../src/app/api/agent/test/route.js")
81
+ type __Check = __IsExpected<typeof handler>
82
+ // @ts-ignore
83
+ type __Unused = __Check
84
+ }
85
+
77
86
  // Validate ../../src/app/api/bash/route.ts
78
87
  {
79
88
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/bash">> = Specific
@@ -209,6 +218,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
209
218
  type __Unused = __Check
210
219
  }
211
220
 
221
+ // Validate ../../src/app/api/dev/spans/route.ts
222
+ {
223
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/dev/spans">> = Specific
224
+ const handler = {} as typeof import("../../src/app/api/dev/spans/route.js")
225
+ type __Check = __IsExpected<typeof handler>
226
+ // @ts-ignore
227
+ type __Unused = __Check
228
+ }
229
+
212
230
  // Validate ../../src/app/api/extension/version/route.ts
213
231
  {
214
232
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/extension/version">> = Specific
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  <h1 align="center">Cockpit — A Claude Code GUI for parallel AI coding</h1>
8
8
 
9
9
  <p align="center">
10
- <strong>One seat. One AI. Everything under control.</strong><br/>
10
+ <strong>One seat. Any AI. Everything under control.</strong><br/>
11
11
  <sub><code>/ˈkɒkpɪt/</code> — like an aircraft cockpit</sub>
12
12
  </p>
13
13
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  ---
28
28
 
29
- > **Cockpit is an open-source Claude Code GUI.** Run multiple Claude Code Agent SDK sessions in parallel across projects, with a built-in terminal, Chrome control, PostgreSQL / MySQL / Redis bubbles, code review, and slash modes — all local, zero config.
29
+ > **Cockpit is the open-source Claude Code GUI** — and a single canvas for whatever agent you bring next. Run multi-project Claude sessions out of the box; pop open a tab for **OpenAI Codex, DeepSeek, Kimi, or local Ollama** whenever you need. Built-in terminal, Chrome control, PostgreSQL / MySQL / Redis bubbles, code review, and slash modes — all local.
30
30
 
31
31
  https://github.com/user-attachments/assets/18f1a5dc-64f3-4ff6-b9fc-9cd08181fbb8
32
32
 
@@ -42,6 +42,7 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
42
42
 
43
43
  | Pain with raw Claude Code | What Cockpit adds |
44
44
  |---|---|
45
+ | Stuck on one model | **5 engines side by side** in tabs: Claude (default), OpenAI Codex, DeepSeek, Kimi, local Ollama — each its own session |
45
46
  | One session at a time, terminal chaos at 3+ projects | **Multi-project tabs**, parallel agent sessions, red-dot inbox, desktop notifications |
46
47
  | Image attachments are awkward | Drop / paste images straight into chat |
47
48
  | "What was I debugging yesterday?" | Cmd+K cross-project session browser, pinning, forking |
@@ -50,13 +51,23 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
50
51
  | Reviewing AI output is friction | **LAN-shared review pages**, line-level comments, send any comment back as AI context |
51
52
  | Same "do X but don't change code" prompt every day | **Slash modes** `/qa /fx /review /commit` + custom `~/.claude/commands/*.md` |
52
53
  | No automation hooks | One-time / interval / cron-based **scheduled tasks** |
53
- | "Cloud relay" trust concerns | **Fully local**. No telemetry. No API key beyond what `claude` already has. |
54
+ | "Cloud relay" trust concerns | **Fully local**. No telemetry. Keys (Codex / DeepSeek / Kimi) stay in `~/.cockpit/settings.json` on your laptop. |
54
55
 
55
56
  ## Features
56
57
 
58
+ ### Engines — Claude by default, bring any agent you want
59
+
60
+ - **Claude** *(default)* — full official Agent SDK; zero setup if `claude` CLI is already configured
61
+ - **OpenAI Codex** — reuses your `~/.codex` config; same chat, same shell + bubbles
62
+ - **DeepSeek** — Anthropic-compatible endpoint via the Claude SDK; paste a key, pick `v4-pro` or `v4-flash`
63
+ - **Kimi** *(Moonshot)* — tool calls render in chat just like Claude's
64
+ - **Ollama** — auto-starts the daemon; pick any pulled model from the chat header; fully offline
65
+ - Each engine lives in its own **tab with its own session history**; switch from the new-tab dropdown
66
+ - Keys stored locally in `~/.cockpit/settings.json`; **no cloud relay**
67
+
57
68
  ### Agent — AI chat that scales
58
69
 
59
- - Powered by the **official Claude Agent SDK** — zero extra API key setup
70
+ - Default engine powered by the **official Claude Agent SDK** — zero extra setup
60
71
  - **Multi-project concurrent sessions** with desktop notifications and red-dot badges
61
72
  - Session **pinning, forking**, cross-project session browser (Cmd+K)
62
73
  - `!command` prefix to run shell from chat — output piped back as context
@@ -113,8 +124,9 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
113
124
  - **Two-person team:** Senior reviews via LAN-shared review page, no GitHub PR round-trip needed for in-progress work.
114
125
  - **Reviewing AI-generated PRs:** Switch the changed files into Code Map — changed functions are highlighted with their callers / callees still drawn around them, so blast-radius is one click away.
115
126
  - **Full-stack chore mode:** `/fx` in one tab on a backend bug, `/review` in another on the frontend diff, `/commit` to wrap up — three slash modes, three different agent postures.
127
+ - **Cheap second opinion:** Same prompt in two tabs — Claude in one, **DeepSeek v4-pro** in the other — compare answers before you trust either.
116
128
  - **AI-driven QA:** Browser Bubble + scheduled task = "every night at 2 AM, run this UI smoke flow and post a summary".
117
- - **Privacy-sensitive code:** runs on your laptop, talks only to the Claude API your `claude` CLI is already configured with. No telemetry, no relay.
129
+ - **Privacy-sensitive code:** runs on your laptop. Pair with an **Ollama** tab for fully air-gapped sessions. No telemetry, no relay.
118
130
 
119
131
  ## Try online
120
132
 
@@ -125,10 +137,19 @@ No install, no AI chat (read-only sandbox, 5 min):
125
137
  ## Prerequisites
126
138
 
127
139
  - **Node.js ≥ 20** — [nodejs.org](https://nodejs.org/)
128
- - **Claude Code** — [docs.anthropic.com/en/docs/claude-code](https://docs.anthropic.com/en/docs/claude-code)
140
+ - **Claude Code** — [docs.anthropic.com/en/docs/claude-code](https://docs.anthropic.com/en/docs/claude-code) (default engine)
129
141
  - **Git** — for git features (blame, diff, worktree, etc.)
130
142
  - **Chrome** *(optional)* — for Browser Bubble; install the bundled extension from `~/.cockpit/chrome-extension`
131
143
 
144
+ ### Optional, per non-Claude engine
145
+
146
+ - **OpenAI Codex** — log in once with `codex login` to populate `~/.codex`
147
+ - **DeepSeek** — get an API key at [api-docs.deepseek.com](https://api-docs.deepseek.com/); paste it into the engine picker
148
+ - **Kimi (Moonshot)** — get an API key at [platform.moonshot.cn](https://platform.moonshot.cn/); paste it into the engine picker
149
+ - **Ollama** — install [ollama.com](https://ollama.com/) and `ollama pull <model>`; Cockpit auto-starts the daemon
150
+
151
+ > All API keys are stored locally in `~/.cockpit/settings.json`. No cloud relay.
152
+
132
153
  ## Install
133
154
 
134
155
  ```bash
@@ -163,13 +184,13 @@ cockpit terminal <id> output # get terminal output
163
184
 
164
185
  | | Raw Claude Code CLI | IDE plugin (Cursor, Continue) | Aider TUI | **Cockpit** |
165
186
  |---|---|---|---|---|
187
+ | Multi-engine in app | Claude only | varies | yes, config-driven | **5 in-app: Claude, Codex, DeepSeek, Kimi, Ollama** |
166
188
  | Multi-project parallel | tmux required | multi-window | one at a time | **first-class** |
167
189
  | Cross-project search | grep | per-window | local | **Cmd+K** |
168
190
  | Browser / DB control | ❌ | usually ❌ | ❌ | **✅ Bubbles** |
169
191
  | Code review surface | git tools | PR provider | git | **LAN-shared** |
170
192
  | Slash modes | manual | per-plugin | yes | **`/qa /fx /review /commit` + custom** |
171
193
  | Local-only / no cloud relay | ✅ | varies | ✅ | **✅** |
172
- | Day-1 SDK features | ✅ | wait | varies | **✅ official SDK** |
173
194
  | Open source | ✅ | mostly ❌ | ✅ | **✅ MIT** |
174
195
 
175
196
  Read the long version: [Claude Code GUI: CLI vs Cockpit vs IDE plugins](https://cocking.cc/en/blog/claude-code-gui-comparison/)
@@ -193,7 +214,7 @@ npm run lint # ESLint
193
214
 
194
215
  ## Tech stack
195
216
 
196
- Next.js 16 · React 19 · TypeScript · TailwindCSS · xterm.js · Shiki · i18next · Claude Agent SDK
217
+ Next.js 16 · React 19 · TypeScript · TailwindCSS · xterm.js · node-pty · Shiki · tree-sitter (WASM) · i18next · Claude Agent SDK · Vercel AI SDK
197
218
 
198
219
  ## Contributing
199
220
 
package/README.zh.md CHANGED
@@ -4,10 +4,10 @@
4
4
  </a>
5
5
  </p>
6
6
 
7
- <h1 align="center">Cockpit —— 为并行 AI 编程而生的 Claude Code GUI</h1>
7
+ <h1 align="center">Cockpit —— Claude Code GUI,也接得住你想要的任何 Agent</h1>
8
8
 
9
9
  <p align="center">
10
- <strong>One seat. One AI. Everything under control.</strong><br/>
10
+ <strong>One seat. Any AI. Everything under control.</strong><br/>
11
11
  <sub><code>/ˈkɒkpɪt/</code> —— 像飞机驾驶舱</sub>
12
12
  </p>
13
13
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  ---
28
28
 
29
- > **Cockpit 是开源的 Claude Code GUI。** 基于官方 Claude Agent SDK,支持多项目并发会话、内置终端、Chrome 自动化、PostgreSQL / MySQL / Redis 数据库气泡、代码评审与斜杠模式 —— 全部本地化,零配置。
29
+ > **Cockpit 是开源的 Claude Code GUI** —— 也是你想接入的任何 Agent 的统一画布。多项目 Claude 会话开箱即用;想用 **OpenAI Codex、DeepSeek、Kimi 或本地 Ollama**?直接新开一个 tab。内置终端、Chrome 自动化、PostgreSQL / MySQL / Redis 气泡、代码评审与斜杠模式 —— 全部本地。
30
30
 
31
31
  https://github.com/user-attachments/assets/18f1a5dc-64f3-4ff6-b9fc-9cd08181fbb8
32
32
 
@@ -42,6 +42,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
42
42
 
43
43
  | 裸用 Claude Code 的痛 | Cockpit 的解法 |
44
44
  |---|---|
45
+ | 只能用一个模型 | **5 个引擎按 tab 并排**:Claude(默认)、OpenAI Codex、DeepSeek、Kimi、本地 Ollama —— 每个 tab 独立会话 |
45
46
  | 一次只能开一个会话,3+ 项目就乱 | **多项目标签页**、并发 Agent 会话、红点收件箱、桌面通知 |
46
47
  | 图片附件麻烦 | 拖拽 / 粘贴图片直接进对话 |
47
48
  | "我昨天调的那个 bug 在哪?" | Cmd+K 跨项目会话浏览,会话固定 / 分叉 |
@@ -50,13 +51,23 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
50
51
  | AI 输出审阅低效 | **局域网共享评审页**、行级评论、任意评论可回喂给 AI |
51
52
  | 每天写一遍"做 X 但不要动代码" | **斜杠模式** `/qa /fx /review /commit` + 自定义 `~/.claude/commands/*.md` |
52
53
  | 没有自动化触发器 | 一次性 / 间隔 / **Cron** **定时任务** |
53
- | 担心"云端中转" | **完全本地**。无遥测、无中转,复用你 `claude` CLI 已有的 API Key |
54
+ | 担心"云端中转" | **完全本地**。无遥测,Codex / DeepSeek / Kimi Key 仅存在本机 `~/.cockpit/settings.json` |
54
55
 
55
56
  ## 功能特性
56
57
 
58
+ ### 引擎 —— 默认 Claude,也接得住你想要的任何 Agent
59
+
60
+ - **Claude** *(默认)* —— 完整官方 Agent SDK;`claude` CLI 已配置即零额外设置
61
+ - **OpenAI Codex** —— 直接读 `~/.codex` 配置,聊天 / Shell / 气泡都一样
62
+ - **DeepSeek** —— 通过 Claude SDK 走 Anthropic 兼容端点;粘 Key,选 `v4-pro` 或 `v4-flash`
63
+ - **Kimi** *(Moonshot)* —— 函数调用在聊天里完整渲染,跟 Claude 一样
64
+ - **Ollama** —— 自动拉起守护进程;从聊天头部下拉任意已 pull 的模型;完全离线
65
+ - 每个引擎跑在**独立 tab,独立会话历史**;新建 tab 时下拉切换
66
+ - API Key 仅保存在本机 `~/.cockpit/settings.json`,**无云端中转**
67
+
57
68
  ### Agent —— 可扩展的 AI 对话
58
69
 
59
- - 基于**官方 Claude Agent SDK** —— 零额外 API Key 配置
70
+ - 默认引擎走**官方 Claude Agent SDK** —— 零额外设置
60
71
  - **多项目并发会话**,桌面通知 + 红点徽标
61
72
  - 会话**固定 / 分叉**,跨项目会话浏览(Cmd+K)
62
73
  - `!command` 前缀直接执行 shell —— 输出回流为对话上下文
@@ -113,8 +124,9 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
113
124
  - **二人小团队:** Senior 用局域网共享评审页 review,半成品代码不用绕 GitHub PR。
114
125
  - **评审 AI 写的 PR:** 把改动文件切到 Code Map,**改动过的函数被高亮**,周围还画着它们的 caller / callee —— 一眼看清这次改动的爆炸半径。
115
126
  - **全栈杂活模式:** 后端 bug 一个 tab 跑 `/fx`,前端 diff 另一个 tab 跑 `/review`,最后 `/commit` 收尾 —— 三种姿态、三种 Agent 模式。
127
+ - **便宜的二次意见:** 同一个 prompt 在两个 tab 跑 —— 一个 Claude、一个 **DeepSeek v4-pro**,对比答案后再决定相信谁。
116
128
  - **AI 自动化 QA:** 浏览器气泡 + 定时任务 = "每晚 2 点跑一遍 UI 冒烟流程并发摘要"。
117
- - **隐私敏感代码:** 在你的笔记本上跑,仅与你 `claude` CLI 已配置的 Claude API 通信。无遥测、无中转。
129
+ - **隐私敏感代码:** 在你的笔记本上跑。配合 **Ollama** tab 即可完全断网工作。无遥测、无中转。
118
130
 
119
131
  ## 在线体验
120
132
 
@@ -125,10 +137,19 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
125
137
  ## 前置依赖
126
138
 
127
139
  - **Node.js ≥ 20** —— [nodejs.org](https://nodejs.org/)
128
- - **Claude Code** —— [docs.anthropic.com/en/docs/claude-code](https://docs.anthropic.com/en/docs/claude-code)
140
+ - **Claude Code** —— [docs.anthropic.com/en/docs/claude-code](https://docs.anthropic.com/en/docs/claude-code)(默认引擎)
129
141
  - **Git** —— 用于 Git 相关功能(blame、diff、worktree 等)
130
142
  - **Chrome** *(可选)* —— 浏览器气泡需安装 `~/.cockpit/chrome-extension` 中的扩展
131
143
 
144
+ ### 可选,按引擎
145
+
146
+ - **OpenAI Codex** —— 执行一次 `codex login` 即可生成 `~/.codex` 配置
147
+ - **DeepSeek** —— 到 [api-docs.deepseek.com](https://api-docs.deepseek.com/) 申请 API Key,在引擎选择器里粘贴
148
+ - **Kimi (Moonshot)** —— 到 [platform.moonshot.cn](https://platform.moonshot.cn/) 申请 API Key,在引擎选择器里粘贴
149
+ - **Ollama** —— 安装 [ollama.com](https://ollama.com/) 并 `ollama pull <model>`;Cockpit 会自动拉起守护进程
150
+
151
+ > 所有 API Key 仅保存在本机 `~/.cockpit/settings.json`。无云端中转。
152
+
132
153
  ## 安装
133
154
 
134
155
  ```bash
@@ -163,13 +184,13 @@ cockpit terminal <id> output # 获取终端输出
163
184
 
164
185
  | | 裸 Claude Code CLI | IDE 插件(Cursor、Continue)| Aider TUI | **Cockpit** |
165
186
  |---|---|---|---|---|
187
+ | 多引擎内置 | 仅 Claude | 不一定 | 配置驱动 | **内置 5 个:Claude、Codex、DeepSeek、Kimi、Ollama** |
166
188
  | 多项目并行 | 需 tmux | 多窗口 | 一次一个 | **一等公民** |
167
189
  | 跨项目搜索 | grep | 各窗口独立 | 本地 | **Cmd+K** |
168
190
  | 浏览器 / DB 控制 | ❌ | 通常 ❌ | ❌ | **✅ Bubbles** |
169
191
  | 代码评审面 | git 工具 | PR 平台 | git | **局域网共享** |
170
192
  | 斜杠模式 | 手动 | 各插件 | 有 | **`/qa /fx /review /commit` + 自定义** |
171
193
  | 纯本地 / 不上云 | ✅ | 不一定 | ✅ | **✅** |
172
- | 新 SDK 能力第一天可用 | ✅ | 等 | 不一定 | **✅ 官方 SDK** |
173
194
  | 开源 | ✅ | 多数 ❌ | ✅ | **✅ MIT** |
174
195
 
175
196
  详细对比:[Claude Code GUI 全景对比:CLI、Cursor、Aider 还是 Cockpit?](https://cocking.cc/zh/blog/claude-code-gui-comparison/)
@@ -193,7 +214,7 @@ npm run lint # ESLint
193
214
 
194
215
  ## 技术栈
195
216
 
196
- Next.js 16 · React 19 · TypeScript · TailwindCSS · xterm.js · Shiki · i18next · Claude Agent SDK
217
+ Next.js 16 · React 19 · TypeScript · TailwindCSS · xterm.js · node-pty · Shiki · tree-sitter (WASM) · i18next · Claude Agent SDK · Vercel AI SDK
197
218
 
198
219
  ## 贡献
199
220
 
@@ -2,7 +2,7 @@ import {
2
2
  ensureParentDir,
3
3
  getTerminalHistoryPath,
4
4
  getTerminalOutputPath
5
- } from "./chunk-RSHKDWJM.mjs";
5
+ } from "./chunk-TXBVUZVH.mjs";
6
6
 
7
7
  // packages/feature/console/src/server/plugins/browser/BrowserBridge.ts
8
8
  import { WebSocket } from "ws";
@@ -105,45 +105,6 @@ function sendCommandToBrowser(shortId, reqId, action, params) {
105
105
  return true;
106
106
  }
107
107
 
108
- // packages/feature/console/src/server/plugins/database/PgPoolManager.ts
109
- import pg from "pg";
110
- var { Pool } = pg;
111
- var PgPoolManager = class {
112
- constructor() {
113
- this.pools = /* @__PURE__ */ new Map();
114
- }
115
- /** Get or create a pool for a given bubble id + connection string */
116
- async getPool(id, connectionString) {
117
- const managed = this.pools.get(id);
118
- if (managed && managed.connectionString === connectionString) {
119
- return managed.pool;
120
- }
121
- if (managed) {
122
- await managed.pool.end().catch(() => {
123
- });
124
- }
125
- const pool = new Pool({
126
- connectionString,
127
- max: 5,
128
- idleTimeoutMillis: 6e4,
129
- connectionTimeoutMillis: 1e4
130
- });
131
- this.pools.set(id, { pool, connectionString, createdAt: Date.now() });
132
- return pool;
133
- }
134
- /** Disconnect and remove a pool */
135
- async disconnect(id) {
136
- const managed = this.pools.get(id);
137
- if (managed) {
138
- await managed.pool.end().catch(() => {
139
- });
140
- this.pools.delete(id);
141
- }
142
- }
143
- };
144
- var g = globalThis;
145
- var pgPoolManager = g.__pgPoolManager ?? (g.__pgPoolManager = new PgPoolManager());
146
-
147
108
  // packages/feature/console/src/server/plugins/jupyter/JupyterKernelManager.ts
148
109
  import { spawn } from "child_process";
149
110
  import { join } from "path";
@@ -408,191 +369,8 @@ var JupyterKernelManager = class {
408
369
  }
409
370
  }
410
371
  };
411
- var g2 = globalThis;
412
- var kernelManager = g2[GLOBAL_KEY] ?? (g2[GLOBAL_KEY] = new JupyterKernelManager());
413
-
414
- // packages/feature/console/src/server/plugins/mysql/MySQLPoolManager.ts
415
- import mysql from "mysql2/promise";
416
- var MySQLPoolManager = class {
417
- constructor() {
418
- this.pools = /* @__PURE__ */ new Map();
419
- }
420
- /** Get or create a pool for a given bubble id + connection string */
421
- async getPool(id, connectionString) {
422
- const managed = this.pools.get(id);
423
- if (managed && managed.connectionString === connectionString) {
424
- return managed.pool;
425
- }
426
- if (managed) {
427
- await managed.pool.end().catch(() => {
428
- });
429
- }
430
- const pool = mysql.createPool({
431
- uri: connectionString,
432
- connectionLimit: 5,
433
- idleTimeout: 6e4,
434
- connectTimeout: 1e4
435
- });
436
- this.pools.set(id, { pool, connectionString, createdAt: Date.now() });
437
- return pool;
438
- }
439
- /** Disconnect and remove a pool */
440
- async disconnect(id) {
441
- const managed = this.pools.get(id);
442
- if (managed) {
443
- await managed.pool.end().catch(() => {
444
- });
445
- this.pools.delete(id);
446
- }
447
- }
448
- };
449
- var g3 = globalThis;
450
- var mysqlPoolManager = g3.__mysqlPoolManager ?? (g3.__mysqlPoolManager = new MySQLPoolManager());
451
-
452
- // packages/feature/console/src/server/plugins/neo4j/Neo4jManager.ts
453
- import neo4j from "neo4j-driver";
454
- var Neo4jManager = class {
455
- constructor() {
456
- this.drivers = /* @__PURE__ */ new Map();
457
- }
458
- async getDriver(id, connectionString) {
459
- const existing = this.drivers.get(id);
460
- if (existing) {
461
- if (existing.connectionString === connectionString) return existing.driver;
462
- await this.disconnect(id);
463
- }
464
- const url = new URL(connectionString);
465
- const scheme = url.protocol.replace(":", "");
466
- const host = url.hostname;
467
- const port = url.port || "7687";
468
- const user = decodeURIComponent(url.username || "neo4j");
469
- const password = decodeURIComponent(url.password || "");
470
- const uri = `${scheme}://${host}:${port}`;
471
- const driver = neo4j.driver(uri, neo4j.auth.basic(user, password));
472
- await driver.verifyConnectivity();
473
- this.drivers.set(id, { driver, connectionString, createdAt: Date.now() });
474
- return driver;
475
- }
476
- async disconnect(id) {
477
- const managed = this.drivers.get(id);
478
- if (managed) {
479
- await managed.driver.close().catch(() => {
480
- });
481
- this.drivers.delete(id);
482
- }
483
- }
484
- async runCypher(id, connectionString, cypher, params) {
485
- const driver = await this.getDriver(id, connectionString);
486
- const session = driver.session();
487
- try {
488
- const start = Date.now();
489
- const result = await session.run(cypher, params || {});
490
- const duration = Date.now() - start;
491
- const records = result.records.map((record) => {
492
- const obj = {};
493
- for (const key of record.keys) {
494
- obj[key] = this.serializeValue(record.get(key));
495
- }
496
- return obj;
497
- });
498
- return {
499
- records,
500
- keys: result.records.length > 0 ? result.records[0].keys : [],
501
- duration,
502
- counters: result.summary.counters.updates()
503
- };
504
- } finally {
505
- await session.close();
506
- }
507
- }
508
- serializeValue(val) {
509
- if (val === null || val === void 0) return null;
510
- if (neo4j.isInt(val)) return val.toNumber();
511
- if (val && typeof val === "object" && "labels" in val && "properties" in val) {
512
- const node = val;
513
- return {
514
- _type: "node",
515
- _id: this.serializeValue(node.identity),
516
- _labels: node.labels,
517
- ...Object.fromEntries(
518
- Object.entries(node.properties).map(([k, v]) => [k, this.serializeValue(v)])
519
- )
520
- };
521
- }
522
- if (val && typeof val === "object" && "type" in val && "start" in val && "end" in val && "properties" in val) {
523
- const rel = val;
524
- return {
525
- _type: "relationship",
526
- _id: this.serializeValue(rel.identity),
527
- _relType: rel.type,
528
- _start: this.serializeValue(rel.start),
529
- _end: this.serializeValue(rel.end),
530
- ...Object.fromEntries(
531
- Object.entries(rel.properties).map(([k, v]) => [k, this.serializeValue(v)])
532
- )
533
- };
534
- }
535
- if (val && typeof val === "object" && "segments" in val) {
536
- const path = val;
537
- return {
538
- _type: "path",
539
- segments: path.segments.map((s) => ({
540
- start: this.serializeValue(s.start),
541
- relationship: this.serializeValue(s.relationship),
542
- end: this.serializeValue(s.end)
543
- }))
544
- };
545
- }
546
- if (Array.isArray(val)) return val.map((v) => this.serializeValue(v));
547
- if (val && typeof val === "object" && val.constructor === Object) {
548
- return Object.fromEntries(
549
- Object.entries(val).map(([k, v]) => [k, this.serializeValue(v)])
550
- );
551
- }
552
- return val;
553
- }
554
- };
555
- var g4 = globalThis;
556
- var neo4jManager = g4.__neo4jManager ?? (g4.__neo4jManager = new Neo4jManager());
557
-
558
- // packages/feature/console/src/server/plugins/redis/RedisManager.ts
559
- import Redis from "ioredis";
560
- var RedisManager = class {
561
- constructor() {
562
- this.clients = /* @__PURE__ */ new Map();
563
- }
564
- /** Get or create a Redis client for a given bubble id + connection string */
565
- async getClient(id, connectionString) {
566
- const managed = this.clients.get(id);
567
- if (managed && managed.connectionString === connectionString) {
568
- if (managed.client.status === "ready") return managed.client;
569
- await managed.client.quit().catch(() => {
570
- });
571
- } else if (managed) {
572
- await managed.client.quit().catch(() => {
573
- });
574
- }
575
- const client = new Redis(connectionString, {
576
- lazyConnect: true,
577
- connectTimeout: 1e4,
578
- maxRetriesPerRequest: 1
579
- });
580
- await client.connect();
581
- this.clients.set(id, { client, connectionString, createdAt: Date.now() });
582
- return client;
583
- }
584
- /** Disconnect and remove a client */
585
- async disconnect(id) {
586
- const managed = this.clients.get(id);
587
- if (managed) {
588
- await managed.client.quit().catch(() => {
589
- });
590
- this.clients.delete(id);
591
- }
592
- }
593
- };
594
- var g5 = globalThis;
595
- var redisManager = g5.__redisManager ?? (g5.__redisManager = new RedisManager());
372
+ var g = globalThis;
373
+ var kernelManager = g[GLOBAL_KEY] ?? (g[GLOBAL_KEY] = new JupyterKernelManager());
596
374
 
597
375
  // packages/feature/console/src/server/terminal/TerminalBridge.ts
598
376
  var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_registry");
@@ -600,24 +378,24 @@ var REVERSE_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_reverse");
600
378
  var OUTPUT_LISTENERS_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_output_listeners");
601
379
  var EXIT_LISTENERS_KEY = /* @__PURE__ */ Symbol.for("terminal_bridge_exit_listeners");
602
380
  function getRegistry() {
603
- const g6 = globalThis;
604
- if (!g6[REGISTRY_KEY]) g6[REGISTRY_KEY] = /* @__PURE__ */ new Map();
605
- return g6[REGISTRY_KEY];
381
+ const g2 = globalThis;
382
+ if (!g2[REGISTRY_KEY]) g2[REGISTRY_KEY] = /* @__PURE__ */ new Map();
383
+ return g2[REGISTRY_KEY];
606
384
  }
607
385
  function getReverseIndex() {
608
- const g6 = globalThis;
609
- if (!g6[REVERSE_KEY]) g6[REVERSE_KEY] = /* @__PURE__ */ new Map();
610
- return g6[REVERSE_KEY];
386
+ const g2 = globalThis;
387
+ if (!g2[REVERSE_KEY]) g2[REVERSE_KEY] = /* @__PURE__ */ new Map();
388
+ return g2[REVERSE_KEY];
611
389
  }
612
390
  function getOutputListeners() {
613
- const g6 = globalThis;
614
- if (!g6[OUTPUT_LISTENERS_KEY]) g6[OUTPUT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
615
- return g6[OUTPUT_LISTENERS_KEY];
391
+ const g2 = globalThis;
392
+ if (!g2[OUTPUT_LISTENERS_KEY]) g2[OUTPUT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
393
+ return g2[OUTPUT_LISTENERS_KEY];
616
394
  }
617
395
  function getExitListeners() {
618
- const g6 = globalThis;
619
- if (!g6[EXIT_LISTENERS_KEY]) g6[EXIT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
620
- return g6[EXIT_LISTENERS_KEY];
396
+ const g2 = globalThis;
397
+ if (!g2[EXIT_LISTENERS_KEY]) g2[EXIT_LISTENERS_KEY] = /* @__PURE__ */ new Map();
398
+ return g2[EXIT_LISTENERS_KEY];
621
399
  }
622
400
  function registerTerminal(tabId, commandId, command, projectCwd) {
623
401
  const fullId = tabId + commandId;
@@ -742,20 +520,20 @@ function findSafeStart(s) {
742
520
  var GLOBAL_KEY2 = /* @__PURE__ */ Symbol.for("terminal_running_commands");
743
521
  var SERVER_ID_KEY = /* @__PURE__ */ Symbol.for("terminal_server_id");
744
522
  function getServerId() {
745
- const g6 = globalThis;
746
- if (!g6[SERVER_ID_KEY]) {
747
- g6[SERVER_ID_KEY] = `srv_${Date.now()}_${process.pid}`;
748
- console.log(`[registry] server started, id=${g6[SERVER_ID_KEY]}, pid=${process.pid}`);
523
+ const g2 = globalThis;
524
+ if (!g2[SERVER_ID_KEY]) {
525
+ g2[SERVER_ID_KEY] = `srv_${Date.now()}_${process.pid}`;
526
+ console.log(`[registry] server started, id=${g2[SERVER_ID_KEY]}, pid=${process.pid}`);
749
527
  }
750
- return g6[SERVER_ID_KEY];
528
+ return g2[SERVER_ID_KEY];
751
529
  }
752
530
  getServerId();
753
531
  function getRegistry2() {
754
- const g6 = globalThis;
755
- if (!g6[GLOBAL_KEY2]) {
756
- g6[GLOBAL_KEY2] = /* @__PURE__ */ new Map();
532
+ const g2 = globalThis;
533
+ if (!g2[GLOBAL_KEY2]) {
534
+ g2[GLOBAL_KEY2] = /* @__PURE__ */ new Map();
757
535
  }
758
- return g6[GLOBAL_KEY2];
536
+ return g2[GLOBAL_KEY2];
759
537
  }
760
538
  function registerCommand(cmd) {
761
539
  console.log(`[registry] register: id=${cmd.commandId}, cmd="${cmd.command}", pid=${cmd.pid}, pty=${!!cmd.ptyProcess}, server=${getServerId()}`);
@@ -957,11 +735,7 @@ export {
957
735
  createPendingRequest,
958
736
  resolvePendingRequest,
959
737
  sendCommandToBrowser,
960
- pgPoolManager,
961
738
  kernelManager,
962
- mysqlPoolManager,
963
- neo4jManager,
964
- redisManager,
965
739
  registerTerminal,
966
740
  finalizeTerminal,
967
741
  unregisterTerminal,