@surething/cockpit 1.0.213 → 1.0.215

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 (572) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +6 -2
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/prerender-manifest.json +3 -3
  5. package/.next-prod/routes-manifest.json +24 -0
  6. package/.next-prod/server/app/_global-error/page.js +3 -3
  7. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next-prod/server/app/_global-error.html +1 -1
  10. package/.next-prod/server/app/_global-error.rsc +1 -1
  11. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next-prod/server/app/_not-found/page.js +2 -2
  18. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next-prod/server/app/_not-found.html +1 -1
  21. package/.next-prod/server/app/_not-found.rsc +3 -3
  22. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  23. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  25. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next-prod/server/app/api/agent/test/route.js +1 -1
  29. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  30. package/.next-prod/server/app/api/bash/route.js +1 -1
  31. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  32. package/.next-prod/server/app/api/chat/codex/route.js +2 -2
  33. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  34. package/.next-prod/server/app/api/chat/deepseek/route.js +2 -2
  35. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/chat/kimi/route.js +2 -2
  37. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/chat/ollama/route.js +4 -4
  39. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/chat/route.js +2 -2
  41. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/claude-stats/route.js +1 -1
  43. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/commands/route.js +1 -1
  45. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/comments/route.js +1 -1
  47. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/db/columns/route.js +2 -2
  49. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/db/connect/route.js +1 -1
  51. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
  53. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/db/export/route.js +1 -1
  55. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/db/query/route.js +1 -1
  57. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/db/schemas/route.js +1 -1
  59. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/dev/spans/route.js +1 -1
  61. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/extension/version/route.js +1 -1
  63. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/file/route.js +1 -1
  65. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/files/blame/route.js +1 -1
  67. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
  69. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/files/copy/route.js +1 -1
  71. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/files/delete/route.js +1 -1
  73. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/files/expanded/route.js +1 -1
  75. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  76. package/.next-prod/server/app/api/files/index/route.js +1 -1
  77. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/files/init/route.js +1 -1
  79. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/files/paste/route.js +1 -1
  81. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/files/read/route.js +1 -1
  83. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/files/readdir/route.js +1 -1
  85. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/files/recent/route.js +1 -1
  87. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/files/save/route.js +1 -1
  89. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/files/search/route.js +1 -1
  91. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/files/stat/route.js +1 -1
  93. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/files/text/route.js +1 -1
  95. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
  97. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/git/branches/route.js +1 -1
  99. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
  101. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/git/commits/route.js +1 -1
  103. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/git/diff/route.js +1 -1
  105. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/git/discard/route.js +1 -1
  107. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/git/stage/route.js +1 -1
  109. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/git/status/route.js +1 -1
  111. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/git/unstage/route.js +1 -1
  113. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/git/worktree/route.js +1 -1
  115. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/global-state/route.js +1 -1
  117. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
  119. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
  121. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
  123. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  125. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  127. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  129. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  131. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  133. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  134. package/.next-prod/server/app/api/mysql/columns/route.js +1 -1
  135. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  136. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  137. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  139. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  141. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  143. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/mysql/schemas/route.js +1 -1
  145. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  146. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  147. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  149. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  151. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  153. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/api/note/route.js +1 -1
  155. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  156. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  157. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  158. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  159. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  160. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  161. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  162. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  163. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  164. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  165. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  166. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  167. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  168. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  169. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  170. package/.next-prod/server/app/api/project-state/route.js +1 -1
  171. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  172. package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -0
  173. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -0
  174. package/.next-prod/server/app/api/projectGraph/affected/route_client-reference-manifest.js +1 -0
  175. package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
  176. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  177. package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
  178. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  179. package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
  180. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  181. package/.next-prod/server/app/api/projectGraph/context/route.js +1 -0
  182. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -0
  183. package/.next-prod/server/app/api/projectGraph/context/route_client-reference-manifest.js +1 -0
  184. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  185. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  186. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  187. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  188. package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
  189. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  190. package/.next-prod/server/app/api/projectGraph/related/route.js +1 -0
  191. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -0
  192. package/.next-prod/server/app/api/projectGraph/related/route_client-reference-manifest.js +1 -0
  193. package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -0
  194. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -0
  195. package/.next-prod/server/app/api/projectGraph/risk/route_client-reference-manifest.js +1 -0
  196. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  197. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  198. package/.next-prod/server/app/api/projects/route.js +1 -1
  199. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  200. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  201. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  202. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  203. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  204. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  205. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  206. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  207. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  208. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  209. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  210. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  211. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  212. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  213. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  214. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  215. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  216. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  217. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  218. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  219. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  220. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  221. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  222. package/.next-prod/server/app/api/review/order/route.js +1 -1
  223. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  224. package/.next-prod/server/app/api/review/route.js +1 -1
  225. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  226. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  227. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  228. package/.next-prod/server/app/api/review/users/route.js +1 -1
  229. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  230. package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
  231. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  232. package/.next-prod/server/app/api/services/config/route.js +1 -1
  233. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  234. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  235. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  236. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  237. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  238. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  239. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  240. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  241. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  242. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  243. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  244. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  245. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  246. package/.next-prod/server/app/api/sessions/route.js +1 -1
  247. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  248. package/.next-prod/server/app/api/settings/route.js +1 -1
  249. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  250. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  251. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  252. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  253. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  254. package/.next-prod/server/app/api/skills/route.js +1 -1
  255. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  256. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  257. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  258. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  259. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  260. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  261. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  262. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  263. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  264. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  265. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  266. package/.next-prod/server/app/api/version/route.js +1 -1
  267. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  268. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  269. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  270. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  271. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  272. package/.next-prod/server/app/page.js +2 -2
  273. package/.next-prod/server/app/page.js.nft.json +1 -1
  274. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  275. package/.next-prod/server/app/project/page.js +2 -2
  276. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  277. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  278. package/.next-prod/server/app/review/[id]/page.js +2 -2
  279. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  280. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  281. package/.next-prod/server/app-paths-manifest.json +6 -2
  282. package/.next-prod/server/chunks/2540.js +1 -0
  283. package/.next-prod/server/chunks/2939.js +1 -1
  284. package/.next-prod/server/chunks/4008.js +1 -0
  285. package/.next-prod/server/chunks/8916.js +1 -1
  286. package/.next-prod/server/chunks/9658.js +4 -4
  287. package/.next-prod/server/chunks/{7828.js → 9877.js} +80 -3
  288. package/.next-prod/server/middleware-build-manifest.js +1 -1
  289. package/.next-prod/server/pages/404.html +1 -1
  290. package/.next-prod/server/pages/500.html +1 -1
  291. package/.next-prod/server/server-reference-manifest.json +1 -1
  292. package/.next-prod/static/chunks/2171-1d5aa2a301006dfb.js +1 -0
  293. package/.next-prod/static/chunks/{5188-3337a5d88efc5fc1.js → 5188-415582403ef0e29c.js} +2 -2
  294. package/.next-prod/static/chunks/6345-e5ceeb2aeb698eb6.js +14 -0
  295. package/.next-prod/static/chunks/{aaea2bcf-be8b39a8f32280f3.js → aaea2bcf-56770c8875ee56c9.js} +1 -1
  296. package/.next-prod/static/chunks/app/_global-error/page-8ae56b9359db0996.js +1 -0
  297. package/.next-prod/static/chunks/app/api/agent/test/route-8ae56b9359db0996.js +1 -0
  298. package/.next-prod/static/chunks/app/api/bash/route-8ae56b9359db0996.js +1 -0
  299. package/.next-prod/static/chunks/app/api/chat/codex/route-8ae56b9359db0996.js +1 -0
  300. package/.next-prod/static/chunks/app/api/chat/deepseek/route-8ae56b9359db0996.js +1 -0
  301. package/.next-prod/static/chunks/app/api/chat/kimi/route-8ae56b9359db0996.js +1 -0
  302. package/.next-prod/static/chunks/app/api/chat/ollama/route-8ae56b9359db0996.js +1 -0
  303. package/.next-prod/static/chunks/app/api/chat/route-8ae56b9359db0996.js +1 -0
  304. package/.next-prod/static/chunks/app/api/claude-stats/route-8ae56b9359db0996.js +1 -0
  305. package/.next-prod/static/chunks/app/api/commands/route-8ae56b9359db0996.js +1 -0
  306. package/.next-prod/static/chunks/app/api/comments/route-8ae56b9359db0996.js +1 -0
  307. package/.next-prod/static/chunks/app/api/db/columns/route-8ae56b9359db0996.js +1 -0
  308. package/.next-prod/static/chunks/app/api/db/connect/route-8ae56b9359db0996.js +1 -0
  309. package/.next-prod/static/chunks/app/api/db/disconnect/route-8ae56b9359db0996.js +1 -0
  310. package/.next-prod/static/chunks/app/api/db/export/route-8ae56b9359db0996.js +1 -0
  311. package/.next-prod/static/chunks/app/api/db/query/route-8ae56b9359db0996.js +1 -0
  312. package/.next-prod/static/chunks/app/api/db/schemas/route-8ae56b9359db0996.js +1 -0
  313. package/.next-prod/static/chunks/app/api/dev/spans/route-8ae56b9359db0996.js +1 -0
  314. package/.next-prod/static/chunks/app/api/extension/version/route-8ae56b9359db0996.js +1 -0
  315. package/.next-prod/static/chunks/app/api/file/route-8ae56b9359db0996.js +1 -0
  316. package/.next-prod/static/chunks/app/api/files/blame/route-8ae56b9359db0996.js +1 -0
  317. package/.next-prod/static/chunks/app/api/files/clipboard/route-8ae56b9359db0996.js +1 -0
  318. package/.next-prod/static/chunks/app/api/files/copy/route-8ae56b9359db0996.js +1 -0
  319. package/.next-prod/static/chunks/app/api/files/delete/route-8ae56b9359db0996.js +1 -0
  320. package/.next-prod/static/chunks/app/api/files/expanded/route-8ae56b9359db0996.js +1 -0
  321. package/.next-prod/static/chunks/app/api/files/index/route-8ae56b9359db0996.js +1 -0
  322. package/.next-prod/static/chunks/app/api/files/init/route-8ae56b9359db0996.js +1 -0
  323. package/.next-prod/static/chunks/app/api/files/paste/route-8ae56b9359db0996.js +1 -0
  324. package/.next-prod/static/chunks/app/api/files/read/route-8ae56b9359db0996.js +1 -0
  325. package/.next-prod/static/chunks/app/api/files/readdir/route-8ae56b9359db0996.js +1 -0
  326. package/.next-prod/static/chunks/app/api/files/recent/route-8ae56b9359db0996.js +1 -0
  327. package/.next-prod/static/chunks/app/api/files/save/route-8ae56b9359db0996.js +1 -0
  328. package/.next-prod/static/chunks/app/api/files/search/route-8ae56b9359db0996.js +1 -0
  329. package/.next-prod/static/chunks/app/api/files/stat/route-8ae56b9359db0996.js +1 -0
  330. package/.next-prod/static/chunks/app/api/files/text/route-8ae56b9359db0996.js +1 -0
  331. package/.next-prod/static/chunks/app/api/git/branch-diff/route-8ae56b9359db0996.js +1 -0
  332. package/.next-prod/static/chunks/app/api/git/branches/route-8ae56b9359db0996.js +1 -0
  333. package/.next-prod/static/chunks/app/api/git/commit-diff/route-8ae56b9359db0996.js +1 -0
  334. package/.next-prod/static/chunks/app/api/git/commits/route-8ae56b9359db0996.js +1 -0
  335. package/.next-prod/static/chunks/app/api/git/diff/route-8ae56b9359db0996.js +1 -0
  336. package/.next-prod/static/chunks/app/api/git/discard/route-8ae56b9359db0996.js +1 -0
  337. package/.next-prod/static/chunks/app/api/git/stage/route-8ae56b9359db0996.js +1 -0
  338. package/.next-prod/static/chunks/app/api/git/status/route-8ae56b9359db0996.js +1 -0
  339. package/.next-prod/static/chunks/app/api/git/unstage/route-8ae56b9359db0996.js +1 -0
  340. package/.next-prod/static/chunks/app/api/git/worktree/route-8ae56b9359db0996.js +1 -0
  341. package/.next-prod/static/chunks/app/api/global-state/route-8ae56b9359db0996.js +1 -0
  342. package/.next-prod/static/chunks/app/api/jupyter/load/route-8ae56b9359db0996.js +1 -0
  343. package/.next-prod/static/chunks/app/api/jupyter/save/route-8ae56b9359db0996.js +1 -0
  344. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-8ae56b9359db0996.js +1 -0
  345. package/.next-prod/static/chunks/app/api/lsp/definition/route-8ae56b9359db0996.js +1 -0
  346. package/.next-prod/static/chunks/app/api/lsp/hover/route-8ae56b9359db0996.js +1 -0
  347. package/.next-prod/static/chunks/app/api/lsp/references/route-8ae56b9359db0996.js +1 -0
  348. package/.next-prod/static/chunks/app/api/lsp/status/route-8ae56b9359db0996.js +1 -0
  349. package/.next-prod/static/chunks/app/api/lsp/warmup/route-8ae56b9359db0996.js +1 -0
  350. package/.next-prod/static/chunks/app/api/mysql/columns/route-8ae56b9359db0996.js +1 -0
  351. package/.next-prod/static/chunks/app/api/mysql/connect/route-8ae56b9359db0996.js +1 -0
  352. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-8ae56b9359db0996.js +1 -0
  353. package/.next-prod/static/chunks/app/api/mysql/export/route-8ae56b9359db0996.js +1 -0
  354. package/.next-prod/static/chunks/app/api/mysql/query/route-8ae56b9359db0996.js +1 -0
  355. package/.next-prod/static/chunks/app/api/mysql/schemas/route-8ae56b9359db0996.js +1 -0
  356. package/.next-prod/static/chunks/app/api/neo4j/connect/route-8ae56b9359db0996.js +1 -0
  357. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-8ae56b9359db0996.js +1 -0
  358. package/.next-prod/static/chunks/app/api/neo4j/query/route-8ae56b9359db0996.js +1 -0
  359. package/.next-prod/static/chunks/app/api/neo4j/schema/route-8ae56b9359db0996.js +1 -0
  360. package/.next-prod/static/chunks/app/api/note/route-8ae56b9359db0996.js +1 -0
  361. package/.next-prod/static/chunks/app/api/ollama/models/route-8ae56b9359db0996.js +1 -0
  362. package/.next-prod/static/chunks/app/api/ollama/start/route-8ae56b9359db0996.js +1 -0
  363. package/.next-prod/static/chunks/app/api/open-cursor/route-8ae56b9359db0996.js +1 -0
  364. package/.next-prod/static/chunks/app/api/open-vscode/route-8ae56b9359db0996.js +1 -0
  365. package/.next-prod/static/chunks/app/api/pick-folder/route-8ae56b9359db0996.js +1 -0
  366. package/.next-prod/static/chunks/app/api/pinned-sessions/route-8ae56b9359db0996.js +1 -0
  367. package/.next-prod/static/chunks/app/api/project-settings/route-8ae56b9359db0996.js +1 -0
  368. package/.next-prod/static/chunks/app/api/project-state/route-8ae56b9359db0996.js +1 -0
  369. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-8ae56b9359db0996.js +1 -0
  370. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-8ae56b9359db0996.js +1 -0
  371. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-8ae56b9359db0996.js +1 -0
  372. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-8ae56b9359db0996.js +1 -0
  373. package/.next-prod/static/chunks/app/api/projectGraph/context/route-8ae56b9359db0996.js +1 -0
  374. package/.next-prod/static/chunks/app/api/projectGraph/file/route-8ae56b9359db0996.js +1 -0
  375. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-8ae56b9359db0996.js +1 -0
  376. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-8ae56b9359db0996.js +1 -0
  377. package/.next-prod/static/chunks/app/api/projectGraph/related/route-8ae56b9359db0996.js +1 -0
  378. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-8ae56b9359db0996.js +1 -0
  379. package/.next-prod/static/chunks/app/api/projectGraph/search/route-8ae56b9359db0996.js +1 -0
  380. package/.next-prod/static/chunks/app/api/projects/route-8ae56b9359db0996.js +1 -0
  381. package/.next-prod/static/chunks/app/api/redis/command/route-8ae56b9359db0996.js +1 -0
  382. package/.next-prod/static/chunks/app/api/redis/connect/route-8ae56b9359db0996.js +1 -0
  383. package/.next-prod/static/chunks/app/api/redis/delete/route-8ae56b9359db0996.js +1 -0
  384. package/.next-prod/static/chunks/app/api/redis/disconnect/route-8ae56b9359db0996.js +1 -0
  385. package/.next-prod/static/chunks/app/api/redis/get/route-8ae56b9359db0996.js +1 -0
  386. package/.next-prod/static/chunks/app/api/redis/keys/route-8ae56b9359db0996.js +1 -0
  387. package/.next-prod/static/chunks/app/api/redis/set/route-8ae56b9359db0996.js +1 -0
  388. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-8ae56b9359db0996.js +1 -0
  389. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-8ae56b9359db0996.js +1 -0
  390. package/.next-prod/static/chunks/app/api/review/[id]/route-8ae56b9359db0996.js +1 -0
  391. package/.next-prod/static/chunks/app/api/review/identify/route-8ae56b9359db0996.js +1 -0
  392. package/.next-prod/static/chunks/app/api/review/order/route-8ae56b9359db0996.js +1 -0
  393. package/.next-prod/static/chunks/app/api/review/route-8ae56b9359db0996.js +1 -0
  394. package/.next-prod/static/chunks/app/api/review/share-info/route-8ae56b9359db0996.js +1 -0
  395. package/.next-prod/static/chunks/app/api/review/users/route-8ae56b9359db0996.js +1 -0
  396. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-8ae56b9359db0996.js +1 -0
  397. package/.next-prod/static/chunks/app/api/services/config/route-8ae56b9359db0996.js +1 -0
  398. package/.next-prod/static/chunks/app/api/services/scripts/route-8ae56b9359db0996.js +1 -0
  399. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-8ae56b9359db0996.js +1 -0
  400. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-8ae56b9359db0996.js +1 -0
  401. package/.next-prod/static/chunks/app/api/session-by-path/route-8ae56b9359db0996.js +1 -0
  402. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-8ae56b9359db0996.js +1 -0
  403. package/.next-prod/static/chunks/app/api/sessions/projects/route-8ae56b9359db0996.js +1 -0
  404. package/.next-prod/static/chunks/app/api/sessions/route-8ae56b9359db0996.js +1 -0
  405. package/.next-prod/static/chunks/app/api/settings/route-8ae56b9359db0996.js +1 -0
  406. package/.next-prod/static/chunks/app/api/skills/[id]/route-8ae56b9359db0996.js +1 -0
  407. package/.next-prod/static/chunks/app/api/skills/content/route-8ae56b9359db0996.js +1 -0
  408. package/.next-prod/static/chunks/app/api/skills/route-8ae56b9359db0996.js +1 -0
  409. package/.next-prod/static/chunks/app/api/terminal/aliases/route-8ae56b9359db0996.js +1 -0
  410. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-8ae56b9359db0996.js +1 -0
  411. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-8ae56b9359db0996.js +1 -0
  412. package/.next-prod/static/chunks/app/api/terminal/env/route-8ae56b9359db0996.js +1 -0
  413. package/.next-prod/static/chunks/app/api/terminal/history/route-8ae56b9359db0996.js +1 -0
  414. package/.next-prod/static/chunks/app/api/version/route-8ae56b9359db0996.js +1 -0
  415. package/.next-prod/static/chunks/app/manifest.webmanifest/route-8ae56b9359db0996.js +1 -0
  416. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-8ae56b9359db0996.js +1 -0
  417. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-8ae56b9359db0996.js +1 -0
  418. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-8ae56b9359db0996.js +1 -0
  419. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-8ae56b9359db0996.js +1 -0
  420. package/.next-prod/static/css/{f016b445331fc5a2.css → cc6d733cdf607b30.css} +1 -1
  421. package/.next-prod/static/dtH6UmANw3cgn-jbRuVu4/_buildManifest.js +1 -0
  422. package/.next-prod/trace +13 -12
  423. package/.next-prod/trace-build +1 -1
  424. package/.next-prod/types/app/api/projectGraph/affected/route.ts +351 -0
  425. package/.next-prod/types/app/api/projectGraph/context/route.ts +351 -0
  426. package/.next-prod/types/app/api/projectGraph/related/route.ts +351 -0
  427. package/.next-prod/types/app/api/projectGraph/risk/route.ts +351 -0
  428. package/.next-prod/types/routes.d.ts +5 -1
  429. package/.next-prod/types/validator.ts +36 -0
  430. package/README.md +8 -8
  431. package/README.zh.md +8 -8
  432. package/bin/cock-browser.mjs +93 -3
  433. package/bin/cock-codegraph.mjs +907 -0
  434. package/bin/cock-terminal.mjs +476 -159
  435. package/bin/cock.mjs +9 -1
  436. package/bin/cockpit-dev.mjs +9 -0
  437. package/bin/setup-dev.mjs +92 -0
  438. package/dist/cache-GIQJA4HL.mjs +502 -0
  439. package/dist/chunk-7P6ASYW6.mjs +9 -0
  440. package/dist/{chunk-OWUW2O3D.mjs → chunk-CZWJPTRO.mjs} +4 -2
  441. package/dist/{chunk-FBR4KJI5.mjs → chunk-KRTISG5I.mjs} +213 -2
  442. package/dist/{chunk-TXBVUZVH.mjs → chunk-ZJ6CC3MH.mjs} +0 -7
  443. package/dist/httpApi.mjs +203 -17
  444. package/dist/scheduledTasks.mjs +3 -2
  445. package/dist/{server-E7G55DY7.mjs → server-OSOMFNXR.mjs} +27 -4
  446. package/dist/wsServer.mjs +8 -34
  447. package/package.json +5 -2
  448. package/.next-prod/static/-BWPF5YtAsgnego1UPtt9/_buildManifest.js +0 -1
  449. package/.next-prod/static/chunks/2171-5163d946ec03ce80.js +0 -1
  450. package/.next-prod/static/chunks/6345-4299a3385983e28c.js +0 -14
  451. package/.next-prod/static/chunks/app/_global-error/page-994734ef0d317687.js +0 -1
  452. package/.next-prod/static/chunks/app/api/agent/test/route-994734ef0d317687.js +0 -1
  453. package/.next-prod/static/chunks/app/api/bash/route-994734ef0d317687.js +0 -1
  454. package/.next-prod/static/chunks/app/api/chat/codex/route-994734ef0d317687.js +0 -1
  455. package/.next-prod/static/chunks/app/api/chat/deepseek/route-994734ef0d317687.js +0 -1
  456. package/.next-prod/static/chunks/app/api/chat/kimi/route-994734ef0d317687.js +0 -1
  457. package/.next-prod/static/chunks/app/api/chat/ollama/route-994734ef0d317687.js +0 -1
  458. package/.next-prod/static/chunks/app/api/chat/route-994734ef0d317687.js +0 -1
  459. package/.next-prod/static/chunks/app/api/claude-stats/route-994734ef0d317687.js +0 -1
  460. package/.next-prod/static/chunks/app/api/commands/route-994734ef0d317687.js +0 -1
  461. package/.next-prod/static/chunks/app/api/comments/route-994734ef0d317687.js +0 -1
  462. package/.next-prod/static/chunks/app/api/db/columns/route-994734ef0d317687.js +0 -1
  463. package/.next-prod/static/chunks/app/api/db/connect/route-994734ef0d317687.js +0 -1
  464. package/.next-prod/static/chunks/app/api/db/disconnect/route-994734ef0d317687.js +0 -1
  465. package/.next-prod/static/chunks/app/api/db/export/route-994734ef0d317687.js +0 -1
  466. package/.next-prod/static/chunks/app/api/db/query/route-994734ef0d317687.js +0 -1
  467. package/.next-prod/static/chunks/app/api/db/schemas/route-994734ef0d317687.js +0 -1
  468. package/.next-prod/static/chunks/app/api/dev/spans/route-994734ef0d317687.js +0 -1
  469. package/.next-prod/static/chunks/app/api/extension/version/route-994734ef0d317687.js +0 -1
  470. package/.next-prod/static/chunks/app/api/file/route-994734ef0d317687.js +0 -1
  471. package/.next-prod/static/chunks/app/api/files/blame/route-994734ef0d317687.js +0 -1
  472. package/.next-prod/static/chunks/app/api/files/clipboard/route-994734ef0d317687.js +0 -1
  473. package/.next-prod/static/chunks/app/api/files/copy/route-994734ef0d317687.js +0 -1
  474. package/.next-prod/static/chunks/app/api/files/delete/route-994734ef0d317687.js +0 -1
  475. package/.next-prod/static/chunks/app/api/files/expanded/route-994734ef0d317687.js +0 -1
  476. package/.next-prod/static/chunks/app/api/files/index/route-994734ef0d317687.js +0 -1
  477. package/.next-prod/static/chunks/app/api/files/init/route-994734ef0d317687.js +0 -1
  478. package/.next-prod/static/chunks/app/api/files/paste/route-994734ef0d317687.js +0 -1
  479. package/.next-prod/static/chunks/app/api/files/read/route-994734ef0d317687.js +0 -1
  480. package/.next-prod/static/chunks/app/api/files/readdir/route-994734ef0d317687.js +0 -1
  481. package/.next-prod/static/chunks/app/api/files/recent/route-994734ef0d317687.js +0 -1
  482. package/.next-prod/static/chunks/app/api/files/save/route-994734ef0d317687.js +0 -1
  483. package/.next-prod/static/chunks/app/api/files/search/route-994734ef0d317687.js +0 -1
  484. package/.next-prod/static/chunks/app/api/files/stat/route-994734ef0d317687.js +0 -1
  485. package/.next-prod/static/chunks/app/api/files/text/route-994734ef0d317687.js +0 -1
  486. package/.next-prod/static/chunks/app/api/git/branch-diff/route-994734ef0d317687.js +0 -1
  487. package/.next-prod/static/chunks/app/api/git/branches/route-994734ef0d317687.js +0 -1
  488. package/.next-prod/static/chunks/app/api/git/commit-diff/route-994734ef0d317687.js +0 -1
  489. package/.next-prod/static/chunks/app/api/git/commits/route-994734ef0d317687.js +0 -1
  490. package/.next-prod/static/chunks/app/api/git/diff/route-994734ef0d317687.js +0 -1
  491. package/.next-prod/static/chunks/app/api/git/discard/route-994734ef0d317687.js +0 -1
  492. package/.next-prod/static/chunks/app/api/git/stage/route-994734ef0d317687.js +0 -1
  493. package/.next-prod/static/chunks/app/api/git/status/route-994734ef0d317687.js +0 -1
  494. package/.next-prod/static/chunks/app/api/git/unstage/route-994734ef0d317687.js +0 -1
  495. package/.next-prod/static/chunks/app/api/git/worktree/route-994734ef0d317687.js +0 -1
  496. package/.next-prod/static/chunks/app/api/global-state/route-994734ef0d317687.js +0 -1
  497. package/.next-prod/static/chunks/app/api/jupyter/load/route-994734ef0d317687.js +0 -1
  498. package/.next-prod/static/chunks/app/api/jupyter/save/route-994734ef0d317687.js +0 -1
  499. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-994734ef0d317687.js +0 -1
  500. package/.next-prod/static/chunks/app/api/lsp/definition/route-994734ef0d317687.js +0 -1
  501. package/.next-prod/static/chunks/app/api/lsp/hover/route-994734ef0d317687.js +0 -1
  502. package/.next-prod/static/chunks/app/api/lsp/references/route-994734ef0d317687.js +0 -1
  503. package/.next-prod/static/chunks/app/api/lsp/status/route-994734ef0d317687.js +0 -1
  504. package/.next-prod/static/chunks/app/api/lsp/warmup/route-994734ef0d317687.js +0 -1
  505. package/.next-prod/static/chunks/app/api/mysql/columns/route-994734ef0d317687.js +0 -1
  506. package/.next-prod/static/chunks/app/api/mysql/connect/route-994734ef0d317687.js +0 -1
  507. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-994734ef0d317687.js +0 -1
  508. package/.next-prod/static/chunks/app/api/mysql/export/route-994734ef0d317687.js +0 -1
  509. package/.next-prod/static/chunks/app/api/mysql/query/route-994734ef0d317687.js +0 -1
  510. package/.next-prod/static/chunks/app/api/mysql/schemas/route-994734ef0d317687.js +0 -1
  511. package/.next-prod/static/chunks/app/api/neo4j/connect/route-994734ef0d317687.js +0 -1
  512. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-994734ef0d317687.js +0 -1
  513. package/.next-prod/static/chunks/app/api/neo4j/query/route-994734ef0d317687.js +0 -1
  514. package/.next-prod/static/chunks/app/api/neo4j/schema/route-994734ef0d317687.js +0 -1
  515. package/.next-prod/static/chunks/app/api/note/route-994734ef0d317687.js +0 -1
  516. package/.next-prod/static/chunks/app/api/ollama/models/route-994734ef0d317687.js +0 -1
  517. package/.next-prod/static/chunks/app/api/ollama/start/route-994734ef0d317687.js +0 -1
  518. package/.next-prod/static/chunks/app/api/open-cursor/route-994734ef0d317687.js +0 -1
  519. package/.next-prod/static/chunks/app/api/open-vscode/route-994734ef0d317687.js +0 -1
  520. package/.next-prod/static/chunks/app/api/pick-folder/route-994734ef0d317687.js +0 -1
  521. package/.next-prod/static/chunks/app/api/pinned-sessions/route-994734ef0d317687.js +0 -1
  522. package/.next-prod/static/chunks/app/api/project-settings/route-994734ef0d317687.js +0 -1
  523. package/.next-prod/static/chunks/app/api/project-state/route-994734ef0d317687.js +0 -1
  524. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-994734ef0d317687.js +0 -1
  525. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-994734ef0d317687.js +0 -1
  526. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-994734ef0d317687.js +0 -1
  527. package/.next-prod/static/chunks/app/api/projectGraph/file/route-994734ef0d317687.js +0 -1
  528. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-994734ef0d317687.js +0 -1
  529. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-994734ef0d317687.js +0 -1
  530. package/.next-prod/static/chunks/app/api/projectGraph/search/route-994734ef0d317687.js +0 -1
  531. package/.next-prod/static/chunks/app/api/projects/route-994734ef0d317687.js +0 -1
  532. package/.next-prod/static/chunks/app/api/redis/command/route-994734ef0d317687.js +0 -1
  533. package/.next-prod/static/chunks/app/api/redis/connect/route-994734ef0d317687.js +0 -1
  534. package/.next-prod/static/chunks/app/api/redis/delete/route-994734ef0d317687.js +0 -1
  535. package/.next-prod/static/chunks/app/api/redis/disconnect/route-994734ef0d317687.js +0 -1
  536. package/.next-prod/static/chunks/app/api/redis/get/route-994734ef0d317687.js +0 -1
  537. package/.next-prod/static/chunks/app/api/redis/keys/route-994734ef0d317687.js +0 -1
  538. package/.next-prod/static/chunks/app/api/redis/set/route-994734ef0d317687.js +0 -1
  539. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-994734ef0d317687.js +0 -1
  540. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-994734ef0d317687.js +0 -1
  541. package/.next-prod/static/chunks/app/api/review/[id]/route-994734ef0d317687.js +0 -1
  542. package/.next-prod/static/chunks/app/api/review/identify/route-994734ef0d317687.js +0 -1
  543. package/.next-prod/static/chunks/app/api/review/order/route-994734ef0d317687.js +0 -1
  544. package/.next-prod/static/chunks/app/api/review/route-994734ef0d317687.js +0 -1
  545. package/.next-prod/static/chunks/app/api/review/share-info/route-994734ef0d317687.js +0 -1
  546. package/.next-prod/static/chunks/app/api/review/users/route-994734ef0d317687.js +0 -1
  547. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-994734ef0d317687.js +0 -1
  548. package/.next-prod/static/chunks/app/api/services/config/route-994734ef0d317687.js +0 -1
  549. package/.next-prod/static/chunks/app/api/services/scripts/route-994734ef0d317687.js +0 -1
  550. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-994734ef0d317687.js +0 -1
  551. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-994734ef0d317687.js +0 -1
  552. package/.next-prod/static/chunks/app/api/session-by-path/route-994734ef0d317687.js +0 -1
  553. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-994734ef0d317687.js +0 -1
  554. package/.next-prod/static/chunks/app/api/sessions/projects/route-994734ef0d317687.js +0 -1
  555. package/.next-prod/static/chunks/app/api/sessions/route-994734ef0d317687.js +0 -1
  556. package/.next-prod/static/chunks/app/api/settings/route-994734ef0d317687.js +0 -1
  557. package/.next-prod/static/chunks/app/api/skills/[id]/route-994734ef0d317687.js +0 -1
  558. package/.next-prod/static/chunks/app/api/skills/content/route-994734ef0d317687.js +0 -1
  559. package/.next-prod/static/chunks/app/api/skills/route-994734ef0d317687.js +0 -1
  560. package/.next-prod/static/chunks/app/api/terminal/aliases/route-994734ef0d317687.js +0 -1
  561. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-994734ef0d317687.js +0 -1
  562. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-994734ef0d317687.js +0 -1
  563. package/.next-prod/static/chunks/app/api/terminal/env/route-994734ef0d317687.js +0 -1
  564. package/.next-prod/static/chunks/app/api/terminal/history/route-994734ef0d317687.js +0 -1
  565. package/.next-prod/static/chunks/app/api/version/route-994734ef0d317687.js +0 -1
  566. package/.next-prod/static/chunks/app/manifest.webmanifest/route-994734ef0d317687.js +0 -1
  567. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-994734ef0d317687.js +0 -1
  568. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-994734ef0d317687.js +0 -1
  569. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-994734ef0d317687.js +0 -1
  570. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-994734ef0d317687.js +0 -1
  571. package/bin/cock-dev.mjs +0 -6
  572. /package/.next-prod/static/{-BWPF5YtAsgnego1UPtt9 → dtH6UmANw3cgn-jbRuVu4}/_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/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/callees" | "/api/projectGraph/callers" | "/api/projectGraph/coedit" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/impact" | "/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/affected" | "/api/projectGraph/callees" | "/api/projectGraph/callers" | "/api/projectGraph/coedit" | "/api/projectGraph/context" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/impact" | "/api/projectGraph/related" | "/api/projectGraph/risk" | "/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
@@ -84,12 +84,16 @@ interface ParamMap {
84
84
  "/api/pinned-sessions": {}
85
85
  "/api/project-settings": {}
86
86
  "/api/project-state": {}
87
+ "/api/projectGraph/affected": {}
87
88
  "/api/projectGraph/callees": {}
88
89
  "/api/projectGraph/callers": {}
89
90
  "/api/projectGraph/coedit": {}
91
+ "/api/projectGraph/context": {}
90
92
  "/api/projectGraph/file": {}
91
93
  "/api/projectGraph/file-functions": {}
92
94
  "/api/projectGraph/impact": {}
95
+ "/api/projectGraph/related": {}
96
+ "/api/projectGraph/risk": {}
93
97
  "/api/projectGraph/search": {}
94
98
  "/api/projects": {}
95
99
  "/api/redis/command": {}
@@ -722,6 +722,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
722
722
  type __Unused = __Check
723
723
  }
724
724
 
725
+ // Validate ../../src/app/api/projectGraph/affected/route.ts
726
+ {
727
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/affected">> = Specific
728
+ const handler = {} as typeof import("../../src/app/api/projectGraph/affected/route.js")
729
+ type __Check = __IsExpected<typeof handler>
730
+ // @ts-ignore
731
+ type __Unused = __Check
732
+ }
733
+
725
734
  // Validate ../../src/app/api/projectGraph/callees/route.ts
726
735
  {
727
736
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/callees">> = Specific
@@ -749,6 +758,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
749
758
  type __Unused = __Check
750
759
  }
751
760
 
761
+ // Validate ../../src/app/api/projectGraph/context/route.ts
762
+ {
763
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/context">> = Specific
764
+ const handler = {} as typeof import("../../src/app/api/projectGraph/context/route.js")
765
+ type __Check = __IsExpected<typeof handler>
766
+ // @ts-ignore
767
+ type __Unused = __Check
768
+ }
769
+
752
770
  // Validate ../../src/app/api/projectGraph/file-functions/route.ts
753
771
  {
754
772
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/file-functions">> = Specific
@@ -776,6 +794,24 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
776
794
  type __Unused = __Check
777
795
  }
778
796
 
797
+ // Validate ../../src/app/api/projectGraph/related/route.ts
798
+ {
799
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/related">> = Specific
800
+ const handler = {} as typeof import("../../src/app/api/projectGraph/related/route.js")
801
+ type __Check = __IsExpected<typeof handler>
802
+ // @ts-ignore
803
+ type __Unused = __Check
804
+ }
805
+
806
+ // Validate ../../src/app/api/projectGraph/risk/route.ts
807
+ {
808
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/risk">> = Specific
809
+ const handler = {} as typeof import("../../src/app/api/projectGraph/risk/route.js")
810
+ type __Check = __IsExpected<typeof handler>
811
+ // @ts-ignore
812
+ type __Unused = __Check
813
+ }
814
+
779
815
  // Validate ../../src/app/api/projectGraph/search/route.ts
780
816
  {
781
817
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/projectGraph/search">> = Specific
package/README.md CHANGED
@@ -49,7 +49,7 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
49
49
  | Agent can't reach your browser / DB | **Smart Bubbles**: Chrome, PostgreSQL, MySQL, Redis — drivable by the agent |
50
50
  | Reading an unfamiliar repo means a 90-min file-tree scavenger hunt | **Code Map** chip view — caller / callee pins, click to walk the call graph |
51
51
  | Reviewing AI output is friction | **LAN-shared review pages**, line-level comments, send any comment back as AI context |
52
- | Same "do X but don't change code" prompt every day | **Slash modes** `/qa /fx /review /commit` + custom `~/.claude/commands/*.md` |
52
+ | Same "do X but don't change code" prompt every day | **Slash modes** `/qa /fx /ex /go /cg /cc` + custom `SKILL.md` via the Skills sidebar |
53
53
  | No automation hooks | One-time / interval / cron-based **scheduled tasks** |
54
54
  | "Cloud relay" trust concerns | **Fully local**. No telemetry. Keys (Codex / DeepSeek / Kimi) stay in `~/.cockpit/settings.json` on your laptop. |
55
55
 
@@ -80,7 +80,7 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
80
80
  - Git **blame**, diff view, branch switching, **worktree** management
81
81
  - **LSP integration** — go to definition, find references, hover info
82
82
  - **Code Map** — every function as a chip with caller / callee pins; click to walk the call graph. Multi-language: TS/JS, Python, Go, Rust. No LSP, no project setup, works offline.
83
- - **CodeGraph** — a **code graph** for the agent: same tree-sitter index exposed as 6 HTTP endpoints (`search` / `callers` / `callees` / `impact` / `file` / `coedit`) so the agent queries coordinates instead of grepping text; trigger with `/cg` from chat. Coordinates only, never source — precise, cheap, and catches the conventional coupling no regex can.
83
+ - **CodeGraph** — a **code graph** for the agent: same tree-sitter index exposed as 10 HTTP endpoints — 6 base (`search` / `callers` / `callees` / `impact` / `file` / `coedit`) + 4 analytics (`context` / `related` / `risk` / `affected`, powered by PageRank · PPR · TF-IDF · Louvain, zero training) — so the agent queries coordinates instead of grepping text; trigger with `/cg` from chat. Coordinates only, never source — precise, cheap, and catches the conventional coupling no regex can.
84
84
  - Fuzzy file search (Cmd+F), JSON viewer, Markdown preview
85
85
 
86
86
  ### Console — Terminal & smart Bubbles
@@ -103,10 +103,11 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
103
103
 
104
104
  - `/qa` — **Clarify-only**: restate, ask back, never code
105
105
  - `/fx` — **Diagnose-only**: bug evidence chain, never edit
106
- - `/review` — read the diff, write notes, no rewrites
107
- - `/commit` — stage + draft a message in your repo's style + commit
108
- - `/cg` — **CodeGraph** project exploration: 6 HTTP endpoints for symbol / callers / impact / co-edit queries (precise where grep is fuzzy)
109
- - **Custom**: drop any `*.md` into `~/.claude/commands/` or `./.claude/commands/` instant slash command
106
+ - `/ex` — **Explore**: 6-step structured discussion skeleton (study → diverge → converge → re-diverge → iterate-verify → summarize)
107
+ - `/go` — **Land**: take a converged plan, slice into MVP stages, write + self-verify per stage, recap at end
108
+ - `/cg` — **CodeGraph** project exploration: 10 HTTP endpoints for symbol / callers / impact / co-edit / risk / affected queries (precise where grep is fuzzy)
109
+ - `/cc` — **Cockpit CLI**: drive the cockpit CLI surface codegraph subcommands, terminal observation, browser automation
110
+ - **Custom**: drop any `SKILL.md` and add it via the Skills sidebar — it auto-appears in the slash autocomplete menu (see [Skills](#skills--extensibility))
110
111
 
111
112
  ### Scheduled tasks — Cron for AI
112
113
 
@@ -125,7 +126,7 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
125
126
  - **Day one in an unfamiliar repo:** Open it in Code Map, click through caller/callee pins, walk the auth flow in five clicks instead of a 90-minute file-tree scavenger hunt.
126
127
  - **Two-person team:** Senior reviews via LAN-shared review page, no GitHub PR round-trip needed for in-progress work.
127
128
  - **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.
128
- - **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.
129
+ - **Full-stack chore mode:** `/fx` in one tab on a backend bug, `/ex` in another to plan the frontend refactor, `/go` to land it — three slash modes, three different agent postures.
129
130
  - **Cheap second opinion:** Same prompt in two tabs — Claude in one, **DeepSeek v4-pro** in the other — compare answers before you trust either.
130
131
  - **AI-driven QA:** Browser Bubble + scheduled task = "every night at 2 AM, run this UI smoke flow and post a summary".
131
132
  - **Privacy-sensitive code:** runs on your laptop. Pair with an **Ollama** tab for fully air-gapped sessions. No telemetry, no relay.
@@ -187,7 +188,6 @@ cockpit terminal <id> output # get terminal output
187
188
  - 📖 [What is a Code Graph (and why your AI needs one)](https://opencockpit.dev/en/blog/code-graph-for-ai-agents/)
188
189
  - 📖 [Read code as a map, not a tree](https://opencockpit.dev/en/blog/read-code-as-a-map/)
189
190
  - 📖 [How to run 5 Claude Code sessions in parallel](https://opencockpit.dev/en/blog/parallel-claude-code-sessions/)
190
- - 📖 [Slash modes in Claude Code: /qa /fx /review /commit](https://opencockpit.dev/en/blog/slash-modes-claude-code/)
191
191
  - 📖 [Full blog](https://opencockpit.dev/en/blog/)
192
192
  - 📋 [Changelog](https://opencockpit.dev/en/changelog/)
193
193
 
package/README.zh.md CHANGED
@@ -49,7 +49,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
49
49
  | Agent 够不到浏览器 / 数据库 | **智能气泡**:Chrome、PostgreSQL、MySQL、Redis —— Agent 可驱动 |
50
50
  | 读陌生仓库就是 90 分钟"找地鼠" | **代码地图(Code Map)** chip 视图 —— caller / callee pin 一点即跳 |
51
51
  | AI 输出审阅低效 | **局域网共享评审页**、行级评论、任意评论可回喂给 AI |
52
- | 每天写一遍"做 X 但不要动代码" | **斜杠模式** `/qa /fx /review /commit` + 自定义 `~/.claude/commands/*.md` |
52
+ | 每天写一遍"做 X 但不要动代码" | **斜杠模式** `/qa /fx /ex /go /cg /cc` + 通过 Skills 侧边栏自定义 `SKILL.md` |
53
53
  | 没有自动化触发器 | 一次性 / 间隔 / **Cron** **定时任务** |
54
54
  | 担心"云端中转" | **完全本地**。无遥测,Codex / DeepSeek / Kimi 的 Key 仅存在本机 `~/.cockpit/settings.json` |
55
55
 
@@ -80,7 +80,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
80
80
  - Git **blame**、Diff 视图、分支切换、**Worktree** 管理
81
81
  - **LSP 集成** —— 跳转定义、查找引用、悬浮类型信息
82
82
  - **代码地图(Code Map)** —— 每个函数渲染为 chip,左右两侧分别列出 caller / callee,点击 pin 即可顺着调用图走。多语言支持:TS/JS、Python、Go、Rust。无需 LSP、无需项目预热,离线可用。
83
- - **CodeGraph(项目图谱)** —— 给 Agent 的**代码图谱(code graph)**:同一份 tree-sitter 索引开放为 6 个 HTTP 接口(`search` / `callers` / `callees` / `impact` / `file` / `coedit`),Agent 直接按坐标精确查询,无须 grep 字面。在 chat 输入 `/cg` 触发。只返坐标不返源码——比 grep 精确、比 Read 省 token,还能抓住 regex 看不见的「约定耦合」。
83
+ - **CodeGraph(项目图谱)** —— 给 Agent 的**代码图谱(code graph)**:同一份 tree-sitter 索引开放为 10 个 HTTP 接口 —— 基础 6 个(`search` / `callers` / `callees` / `impact` / `file` / `coedit`)+ 分析 4 个(`context` / `related` / `risk` / `affected`,由 PageRank · PPR · TF-IDF · Louvain 驱动,零训练),Agent 直接按坐标精确查询,无须 grep 字面。在 chat 输入 `/cg` 触发。只返坐标不返源码——比 grep 精确、比 Read 省 token,还能抓住 regex 看不见的「约定耦合」。
84
84
  - 模糊搜索 (Cmd+F)、JSON 查看器、Markdown 预览
85
85
 
86
86
  ### Console —— 终端与智能气泡
@@ -103,10 +103,11 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
103
103
 
104
104
  - `/qa` —— **只澄清**:复述、反问、绝不写代码
105
105
  - `/fx` —— **只诊断**:Bug 证据链分析,绝不改文件
106
- - `/review` —— diff、写评审,不动手重写
107
- - `/commit` —— 暂存改动、按你仓库的风格起草 message、提交
108
- - `/cg` —— **CodeGraph 项目探索**:6 个 HTTP 接口按符号 / 调用关系 / 影响范围 / 协同编辑精确查询(比 grep 精准)
109
- - **自定义**:`~/.claude/commands/` `./.claude/commands/` 下任意 `*.md` 即斜杠指令
106
+ - `/ex` —— **探讨**:6 步结构化讨论骨架(研究 → 发散 → 收敛 → 再发散 → 迭代验证 → 总结)
107
+ - `/go` —— **落地**:把收敛后的方案切成 MVP 阶段,每阶段自运行验证,最后端到端回看
108
+ - `/cg` —— **CodeGraph 项目探索**:10 个 HTTP 接口按符号 / 调用关系 / 影响范围 / 协同编辑 / 风险 / 受影响测试精确查询(比 grep 精准)
109
+ - `/cc` —— **Cockpit CLI**:驾驭 cockpit 命令行 —— codegraph 子命令、terminal 观察、browser 自动化
110
+ - **自定义**:任意 `SKILL.md` 通过 Skills 侧边栏添加 —— 自动出现在斜杠补全菜单(见 [Skills](#skills--可扩展性))
110
111
 
111
112
  ### 定时任务 —— 给 AI 的 Cron
112
113
 
@@ -125,7 +126,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
125
126
  - **新仓库的第一天:** 用 Code Map 打开它,沿着 caller / callee pin 一路点过去 —— 鉴权流程 5 次点击就走完,不再是 90 分钟的"文件树找地鼠"。
126
127
  - **二人小团队:** Senior 用局域网共享评审页 review,半成品代码不用绕 GitHub PR。
127
128
  - **评审 AI 写的 PR:** 把改动文件切到 Code Map,**改动过的函数被高亮**,周围还画着它们的 caller / callee —— 一眼看清这次改动的爆炸半径。
128
- - **全栈杂活模式:** 后端 bug 一个 tab 跑 `/fx`,前端 diff 另一个 tab 跑 `/review`,最后 `/commit` 收尾 —— 三种姿态、三种 Agent 模式。
129
+ - **全栈杂活模式:** 后端 bug 一个 tab 跑 `/fx`,另一个 tab 跑 `/ex` 规划前端重构,最后 `/go` 落地 —— 三种姿态、三种 Agent 模式。
129
130
  - **便宜的二次意见:** 同一个 prompt 在两个 tab 跑 —— 一个 Claude、一个 **DeepSeek v4-pro**,对比答案后再决定相信谁。
130
131
  - **AI 自动化 QA:** 浏览器气泡 + 定时任务 = "每晚 2 点跑一遍 UI 冒烟流程并发摘要"。
131
132
  - **隐私敏感代码:** 在你的笔记本上跑。配合 **Ollama** tab 即可完全断网工作。无遥测、无中转。
@@ -187,7 +188,6 @@ cockpit terminal <id> output # 获取终端输出
187
188
  - 📖 [Code Graph:给 AI 一张项目图谱](https://opencockpit.dev/zh/blog/code-graph-for-ai-agents/)
188
189
  - 📖 [把代码读成地图,而不是树](https://opencockpit.dev/zh/blog/read-code-as-a-map/)
189
190
  - 📖 [如何同时跑 5 个 Claude Code 会话不疯掉](https://opencockpit.dev/zh/blog/parallel-claude-code-sessions/)
190
- - 📖 [Claude Code 斜杠模式实战:/qa、/fx、/review、/commit](https://opencockpit.dev/zh/blog/slash-modes-claude-code/)
191
191
  - 📖 [完整博客](https://opencockpit.dev/zh/blog/)
192
192
  - 📋 [更新日志](https://opencockpit.dev/zh/changelog/)
193
193
 
@@ -40,6 +40,32 @@ Usage: cockpit browser ${prefix} <action>`);
40
40
  }
41
41
 
42
42
  console.log(`
43
+ ── React / SPA gotchas ────────────────────────────────
44
+ On modern SPAs (React, Vue, tiptap, ProseMirror, Lexical, Slate, …)
45
+ \`type\` / \`click\` via CDP often silently no-op because the framework
46
+ ignores raw key/mouse events and reacts only to its own synthetic
47
+ event flow. When typing into a contenteditable / controlled input,
48
+ or clicking a button rendered by a portal, **prefer \`evaluate\`**.
49
+
50
+ Three templates that always work:
51
+
52
+ # 1) Fill a contenteditable (tiptap / ProseMirror / Lexical):
53
+ evaluate "(() => { const el = document.querySelector('[contenteditable=\\"true\\"]'); el.focus(); document.execCommand('insertText', false, 'hello'); return el.innerText; })()"
54
+
55
+ # 2) Set a React-controlled <input> via the native setter + input event:
56
+ evaluate "(() => { const el = document.querySelector('input[name=foo]'); const set = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set; set.call(el, 'hello'); el.dispatchEvent(new Event('input', { bubbles: true })); return el.value; })()"
57
+
58
+ # 3) Click a button by aria-label / text (refs go stale after re-render):
59
+ evaluate "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => b.getAttribute('aria-label') === 'Send message' || b.textContent.trim() === 'Send'); if (!btn) return 'not-found'; btn.click(); return 'clicked'; })()"
60
+
61
+ Refs (e5, e23, …) returned by \`snapshot\` are valid only for the
62
+ DOM at snapshot time. Any re-render / route change / focus shift
63
+ invalidates them — \`Element ref "eN" not found or disconnected\`
64
+ means you need a fresh \`snapshot\` (or just use \`evaluate\` with
65
+ CSS selectors).
66
+
67
+ ──────────────────────────────────────────────────────
68
+
43
69
  Navigation:
44
70
  navigate <url> Navigate to URL
45
71
  reload [--noCache] Reload page
@@ -52,9 +78,9 @@ Inspection:
52
78
  screenshot Take a screenshot
53
79
 
54
80
  Interaction (use ref from snapshot):
55
- click <ref> Click element
56
- type <ref> <text> Type text into element
57
- fill <ref> <value> Fill input value
81
+ click <ref> Click element ⚠ React/SPA: may silently miss; use evaluate
82
+ type <ref> <text> Type text React/SPA: may silently miss; use evaluate (template 1/2)
83
+ fill <ref> <value> Fill input value ⚠ Same — prefer template 2
58
84
  hover <ref> Hover element
59
85
  focus <ref> Focus element
60
86
  scroll --direction D Scroll page (up/down/left/right)
@@ -337,6 +363,70 @@ async function run() {
337
363
  // 这里透明地把完整内容拉回来,调用方看不到 chunking 细节。
338
364
  const resolved = await autoResolveChunked(baseUrl, id, data.data, timeout);
339
365
 
366
+ // Post-`type` verification — `type` via CDP dispatchKeyEvent silently no-ops
367
+ // on React-controlled / contenteditable inputs (tiptap, ProseMirror, Lexical,
368
+ // Slate, etc.) because those frameworks update state from synthetic
369
+ // InputEvents rather than physical key events. The CLI used to return
370
+ // `{typed, ref}` regardless, lying about the result. Now we read back the
371
+ // currently-focused element's value/textContent and compare; mismatches
372
+ // exit 1 with a pointer to the evaluate workaround. Session 0a975cff
373
+ // burned 4 extra bash calls discovering this silently.
374
+ //
375
+ // We use document.activeElement because `type` focuses the target as its
376
+ // first step — so right after a successful type, activeElement IS the
377
+ // target. The Playwright "ref" (e555 etc.) has no DOM-side equivalent, so
378
+ // we can't query for it directly.
379
+ if (action === 'type' && params.ref && typeof params.text === 'string') {
380
+ const expected = String(params.text);
381
+ let actual = '';
382
+ let kind = 'unknown';
383
+ try {
384
+ const verifyJs =
385
+ '(() => { const el = document.activeElement; ' +
386
+ 'if (!el || el === document.body) return { kind: "no-active", text: "" }; ' +
387
+ 'const tag = el.tagName ? el.tagName.toLowerCase() : ""; ' +
388
+ 'if (tag === "input" || tag === "textarea") return { kind: tag, text: el.value || "" }; ' +
389
+ 'if (el.isContentEditable) return { kind: "contenteditable", text: el.innerText || el.textContent || "" }; ' +
390
+ 'return { kind: tag || "unknown", text: (el.textContent || "").slice(0, 500) }; })()';
391
+ const v = await fetch(`${baseUrl}/api/browser/evaluate`, {
392
+ method: 'POST',
393
+ headers: { 'Content-Type': 'application/json' },
394
+ body: JSON.stringify({ id, params: { js: verifyJs }, timeout: 3000 }),
395
+ signal: AbortSignal.timeout(5000),
396
+ });
397
+ const vj = await v.json();
398
+ const out = vj.ok && vj.data;
399
+ if (out && typeof out === 'object') {
400
+ kind = out.kind;
401
+ actual = String(out.text || '');
402
+ }
403
+ } catch {
404
+ // verification optional — fall through to printing the original result
405
+ }
406
+
407
+ // Only warn on KNOWN editable types whose value/text doesn't contain what
408
+ // we typed. "no-active" / "unknown" we can't reliably verify, so we skip
409
+ // (no false positives).
410
+ const verifiable = kind === 'input' || kind === 'textarea' || kind === 'contenteditable';
411
+ if (verifiable && !actual.includes(expected)) {
412
+ // Type "succeeded" per CDP but the target didn't pick up the text.
413
+ // Almost always a React-controlled / contenteditable input.
414
+ process.stderr.write(
415
+ `\n⚠️ type succeeded per CDP but the target's value/textContent does NOT contain "${expected}".\n` +
416
+ ` target kind: ${kind}, current text: ${JSON.stringify(actual).slice(0, 200)}\n` +
417
+ ` This is usually a React-controlled or contenteditable input (tiptap / ProseMirror / Lexical / Slate)\n` +
418
+ ` where CDP key events don't trigger framework state updates.\n` +
419
+ `\n` +
420
+ ` Fix: use \`evaluate\` to drive the framework's own event flow, e.g.\n` +
421
+ ` cockpit browser ${id} evaluate "(() => { const el = document.querySelector('[contenteditable=\\\"true\\\"]'); el.focus(); document.execCommand('insertText', false, ${JSON.stringify(expected)}); return el.innerText; })()"\n` +
422
+ `\n For a plain <input>, set value via property setter + dispatch an 'input' event:\n` +
423
+ ` evaluate "(() => { const el = document.querySelector('input[name=foo]'); const set = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set; set.call(el, ${JSON.stringify(expected)}); el.dispatchEvent(new Event('input', { bubbles: true })); return el.value; })()"\n`
424
+ );
425
+ await formatOutput(action, resolved);
426
+ process.exit(1);
427
+ }
428
+ }
429
+
340
430
  // Format output
341
431
  await formatOutput(action, resolved);
342
432
  } catch (err) {